maverick98 Δημοσ. 23 Δεκεμβρίου 2016 Δημοσ. 23 Δεκεμβρίου 2016 Καλησπέρα , έχω ενα πρόβλημα προγραμματισμού το οποίο παιδεύω εδω και μια βδομάδα χωρίς καποια πρόοδο (προγραμματίζω σε C ) . Αν κάποιος έχει εμπείρια σε προγραμματισμό , ας δώσει κάποια ιδέα ή αν του είναι εύκολο και έχει χρόνο ας ανεβασει τη λύση . Θα επισυνάψω ότι εχω κάνει μεχρι στιγμής μαζι με την εκφώνηση Για την άσκηση αυτή, ονομάζουμε λέξη μια ακολουθία χαρακτήρων που δεν περιέχει το κενό. Θεωρήστε ότι κάθε λέξη δεν υπερβαίνει τους 20 χαρακτήρες και ότι δεν μπορεί να κόβεται σε δύο γραμμές. Γράψτε ένα πρόγραμμα το οποίο θα μορφοποιεί κείμενα. Το αρχικό κείμενο θα διαβάζεται από το πληκτρολόγιο και το τελικό (μορφοποιημένο) κείμενο θα τυπώνεται στην οθόνη. Η μορφοποίηση πρέπει να γίνεται προσθέτοντας ή αφαιρώντας κενά διαστήματα μεταξύ των λέξεων, με κατάλληλο τρόπο. Συγκεκριμένα, στο τελικό κείμενο: Το μήκος κάθε γραμμής (εκτός ίσως της τελευταίας) πρέπει να είναι 60 χαρακτήρες. Κάθε γραμμή (εκτός ίσως της τελευταίας) πρέπει να στοιχίζεται και στο αριστερό και στο δεξιό περιθώριο. Τα κενά μεταξύ των λέξεων πρέπει να ισοκατανέμονται (κατά το δυνατόν). Αν ονομάσουμε διάκενο το πλήθος των κενών διαστημάτων μεταξύ δύο διαδοχικών λέξεων, τότε πρέπει σε κάθε γραμμή: το μεγαλύτερο διάκενο να διαφέρει από το μικρότερο το πολύ κατά ένα κενό διάστημα, και αν ένα διάκενο είναι μεγαλύτερο από κάποιο άλλο, τότε πρέπει να βρίσκεται δεξιότερα.
kaliakman Δημοσ. 23 Δεκεμβρίου 2016 Δημοσ. 23 Δεκεμβρίου 2016 Αυτό που γράφεις θυμίζει c αλλά δεν είναι. Έχετε έτοιμα macro ή κατι τέτοιο; 1
maverick98 Δημοσ. 23 Δεκεμβρίου 2016 Μέλος Δημοσ. 23 Δεκεμβρίου 2016 @kaliakman είναι μια μορφοποιημένη εκδοση της C , αν ξερεις C σιγουρα καταλαβαινεις τι κανω
defacer Δημοσ. 23 Δεκεμβρίου 2016 Δημοσ. 23 Δεκεμβρίου 2016 Ξεκίνα μετατρέποντας το πρόβλημα που σου δίνεται στην πιο απλή του μορφή από την οποία μπορείς να παράγεις τη λύση. Πρώτα απ' όλα πρέπει να αποφανθείς ποιό μέρος από την είσοδο (δηλαδή οι πόσες πρώτες λέξεις) θα μπουν στην πρώτη γραμμή. Πώς θα το κάνεις αυτό; Αν είσαι σχολαστικός στην περιγραφή σου θα δεις ότι είναι στη συνέχεια πολύ εύκολο να μετατρέψεις αυτό που είπες σε πρόγραμμα, and we're here to help. Αφού λύσουμε το παραπάνω ερώτημα, το επόμενο βήμα είναι: έστω ότι ξέρουμε ποιές λέξεις θα μπουν στην πρώτη γραμμή. Πόσα κενά θα χρειαστεί να προσθέσεις και σε ποιά σημεία; Δεν έδωσα πολλή σημασία στο πρόγραμμα γιατί υποψιάζομαι πως θα είναι μάλλον παραπλανητικό αυτό που θα δω. Εφόσον η άσκηση αυτή είναι όντως πρόκληση για σένα, ξεκίνα από τα ελληνικά και μετά γράψε κώδικα. Όχι το αντίθετο. 2
k33theod Δημοσ. 24 Δεκεμβρίου 2016 Δημοσ. 24 Δεκεμβρίου 2016 (επεξεργασμένο) Καλό είναι πρώτα να πάρεις σε μια δομή (πίνακα) τις λέξεις εάν δεν έχει έτοιμη μέθοδο η c (πιστέυω θα έχει) μπορείς να κάνεις μία συνάρτηση (διαβάζεις χαρακτήρες μέχρι να βρεις κενό και όταν βρεις κενό αποθηκευεις) Στη συνέχεια σε μια κενή γραμμή προσθέτεις λέξεις από τον πίνακα εάν το μήκος της γραμμής και της λέξης που πρόκειτε να προσθέσεις δεν υπερβαίνει το 60 εάν το υπερβαίνει τότε προσθέτεις τη γραμμή σε ένα text την μηδενίζεις και συνεχίζεις Προσθέτεις τέλος το υπόλοιπο κομμάτι που τελειώνει το αρχείο Ο κώδικάς σε python αν βοηθάει είναι def justify_text(a): words=a.split() line='' text='' for word in words: if (len (line)+len(word)+1)<=60: if len(line)==0: line=line+word else: line=line+' '+word else: text+=justified(line)+'\n' line=word text+=line return text To justify των γραμμών για να έχεις μήκος 60 μπορείς να το κάνεις ως εξής ελέγχεις το μήκος της γραμμής και έστω είναι 50 ελέγχεις μετά τις λέξεις και έστω είναι 4 έχεις 10 space να κατανείμεις σε 3 κενά βάζεις 10//3 σε κάθε κενό και το 10%3 στα τελευταία Επεξ/σία 29 Δεκεμβρίου 2016 από k33theod 1
maverick98 Δημοσ. 24 Δεκεμβρίου 2016 Μέλος Δημοσ. 24 Δεκεμβρίου 2016 ευχαριστώ πολυ ολους για τις ιδεες , θα προσπαθησω να το υλοποιησω μεσα στις γιορτες και θα ενημερωσω αν εχω καποιια προοδο
maverick98 Δημοσ. 31 Δεκεμβρίου 2016 Μέλος Δημοσ. 31 Δεκεμβρίου 2016 Καλησπέρα χρόνια πολλα και για οσους το δειτε αργότερα καλη χρονια . Μετα απο αρκετή προσπάθεια καταφερα να φτιαξω το προγραμμα ωστε να κοβει τις γραμμες στους 60 χαρακτηρες χωρις να κοβει καποια λεξη στη μεση στο τελος. Αυτο που μένει ειναι να προσθέτει καταλλήλως τα κενά ανάμεσα στις λέξεις της κάθε γραμμής ώστε να επιτυγχάνεται η στοίχιση. Έχει κανείς καμία καλή ιδέα; Ο κωδικάς μου: }PROGRAM ask151(){ int place=-1; int i=0,storel=0; char lexi[21]; // char store[21]; char grammi[61]; int length=0; int flag='a'; while (flag != EOF){ i=0; flag=scanf("%s",lexi); length=strlen(lexi); if (place+length+(storel+1)>60 OR flag==EOF) { FOR (i,0 TO place-1){ WRITE(grammi); } WRITELN(); if (flag != EOF) { WRITE(lexi); WRITE(" "); } FOR (i,0 TO length) { lexi=' '; } FOR (i, 0 TO place) { grammi=' '; } place=-1; storel=length; } else { FOR (i,place+1 TO place+length) grammi=lexi[i-(place+1)]; grammi[place+length+1]=' '; place=place+length+1; } } }
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα