Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Λοιπον οποιος έχει το βιβλιο του King στην Σελ. 361-366 έχει ενα τετοιο προγραμμα βασικά εχω καταλαβει πως δουλευει ο κώδικας αλλα έχω κάποιες ερωτησουλες (αν καποιος το έχει το βιβλιο και έχει διαβασει το προγραμμα) η συνάρτηση write_line()

 
    void write_line(void)
    {
        int extra_spaces , spaces_to_insert , i , j ;

        extra_spaces = MAX_LINE_LEN - line_len; 
        for(i=0; i<line_len; i++) {
            if (line[i] !=' ')
                putchar(line[i]);
            else {
                spaces_to_insert = extra_spaces / (num_words - 1) ;
                for(j=1; j <= spaces_insert + 1; j++)
                    putchar(' ');
                extra_spaces -= spaces_to_insert;
                num_words--;
            }
        }
                putchar('\n');
    }
 

Στην Σελ.366 λέει

 

Ιf extra_spaces is 10 initially and num_words is 5 , then the first word will be followed by 2 extra spaces , the second by 2 , the third by 3 , and the fourth by 3.

 

Εγω ξεκινησα απο την 5η λέξη και υπολογιζα και μου εβγαινε για την 5η 2 κενά για την 4η 2 extra κενα παλι για την 3η 3 και την 2 επισης 3 (εκτος απο το ενα το κανονικο που θα εκτυπωσει μιας και έχει το <=  δηλαδη 2+1 ) καθε φορα μειωνα τις λεξεις οπως κανει και ο κωδικας και μου εβγαιναν αυτα τα αποτελεσματα... τωρα δεν καταλαβαινω τι εννοει οταν λεει η πρωτη και η δευτερη και η τρίτη εχει σημασια?

 

Επισης το spaces_to_insert σαν σχέση δεν μπορω να την φανταστω οτι θα την σκεφτομουν μονος μου αμα επρεπε να γραψω κατι τετοιο στην αρχη δηλαδη δεν μου λεει και πολλα σαν τύπος λεει σε κανεναν αλλο? ας πουμε επισης το προγραμμα λεει οτι θέλει τα προσθετα κενά σε καθε γραμμή να ειναι ίσα ή περιπου ίσα για αυτο χρησιμοποιει την extra_spaces -= spaces_to_insert; ? Με ολα τα αλλα ειμαι κομπλέ

 

Ευχαριστω

Επεξ/σία από parsifal
Δημόσιος σχολιασμός περιστατικού moderation
Δημοσ.

Αν εχουμε n extra_spaces και w words.

n/(w-1) = k (spaces μεταξύ των words)

n%(w-1) =s (τα s τελευταία words θα έχουν ένα space παραπάνω)

 

 

10 / 4  = 2  (απο 2 spaces όλα)

10 %4= 2  (τα s=2 τελευταία από ένα space παραπάνω δλδ κ+1=3)

Δημοσ.

Αν εχουμε n extra_spaces και w words.

n/(w-1) = k (spaces μεταξύ των words)

n%(w-1) =s (τα s τελευταία words θα έχουν ένα space παραπάνω)

 

 

10 / 4  = 2  (απο 2 spaces όλα)

10 %4= 2  (τα s=2 τελευταία από ένα space παραπάνω δλδ κ+1=3)

 

Μηπως εννοεις τα s=2 τελευταια απο 2 spaces παραπανω? Το ενα space θα μπει οτι και αν γινει (ακομη και αν η spaces_to_insert δωσει 0 ) αλλιως δεν εχεις καν στοιχιση το κ ειναι τα προσθετα κενά αρα θες 2+1 = 3. Εννοεις οτι θα έχουν ενα παραπάνω σε συγκριση με τα προηγουμενα? Αυτα 3 (2+1) ενω τα προηγουμενα 2 ( 1 + 1 ) ο ασσος δεξιά ειναι ο σίγουρος

 

 

for(j=1; j <= spaces_insert + 1; j++) 

 

Για την στοιχιση οπως εγραψα και πιο πάνω λεει οτι θέλει οσο το δυνατον ισα για καθε λεξη τα κενά. Οκ με τον πρωτο τυπο και εμενα ετσι μου βγηκε σε ενα tracing που εκανα δινοντας εισοδο ενα αλλο αρχειο πολυ μικροτερου ογκου δεδομένων για να το καταλαβω πως δουλευει το προγραμμα στο χαρτι αλλιως ετσι οπως το πετάει... αυτος ο τυπος ομως προερχεται απο καπου? θελω να πω απλα ετσι ηθελε και τον χρησιμοποιησε ο King? ή γενικοτερα οταν παιζουμε με στοιχισεις ειναι βασικος τυπος και θα επρεπε καποιος προγραμματιστης να τον σκεφτει? δεν ξερω αμα κανω κατανοητη την απορια μου κιολας. :S

Δημοσ.

Βασικά δεν έχω το βιβλίο, απλα σκέφτηκα ένα μοιρασμα των spaces

 

Θες να μοιράσεις όσο ποιο "δίκαια" γίνεται  30 μηλα σε 7 ατομα.

Aφου το 30 δεν διαιρείται από 7 κάποιοι (30%7=2) θα έχουν ενα παραπάνω

5 θα παρουν απο 4 μήλα

2 θα πάρουν απο 5 μήλα

 

Τώρα αν έχεις λιγότερα spaces apo words-1 τότε θα βάλεις μεταξυ όλων απο ενα space (χωρίς μαθηματικούς τύπους)

Δημοσ.

Βασικά δεν έχω το βιβλίο, απλα σκέφτηκα ένα μοιρασμα των spaces

 

Θες να μοιράσεις όσο ποιο "δίκαια" γίνεται 30 μηλα σε 7 ατομα.

Aφου το 30 δεν διαιρείται από 7 κάποιοι (30%7=2) θα έχουν ενα παραπάνω

5 θα παρουν απο 4 μήλα

2 θα πάρουν απο 5 μήλα

 

Τώρα αν έχεις λιγότερα spaces apo words-1 τότε θα βάλεις μεταξυ όλων απο ενα space (χωρίς μαθηματικούς τύπους)

Α ωραια τωρα νομιζω το καταλαβα. Απο την στιγμη που θα μοιρασεις τα μηλα τοτε η extra_spaces -= spaces_to_insert; ειναι ισοδυναμη για το παράδειγμα σου με : μηλα -= τα μηλα που δοθηκαν => μηλα = μηλα - μηλα που δοθηκαν.Ετσι δεν ειναι? Ο πρωτος τυπος ειναι τα εξτρα κενα / αριθμο των λεξεων - 1.

 

Γιατι αφαιρει το 1 ομως απο τον συνολικο αριθμο των λεξεων στην γραμμή? Θα το ψαξω και εγω αλλα πες και εσυ την αποψη σου.

Δημοσ.

Γιατι αφαιρει το 1 ομως απο τον συνολικο αριθμο των λεξεων στην γραμμή? Θα το ψαξω και εγω αλλα πες και εσυ την αποψη σου.

 

Το παραδειγμα με 30 extra_spaces και 8  words.

Μειωνει τα words κατα 1 και διαιρεί. 

 

30/7 =4  30-4=26

26/6 =4  26-4=22

22/5= 4  22-4=18

18/4= 4  18-4=14

14/3= 4  14-4=10

10/2= 5  10-5=5

 5/1 = 5    5-5=0

 

Αυτο εγγυάται ότι τα τελευταία θα έχουν το πολύ 1 space παραπάνω απο τ αλλα.

 

Αν εννοεις γιατι θεωρουμε words-1  , ειναι επειδή μετα την τελευταια λέξη δεν εχει spaces.

  • Like 1
Δημοσ.

Το παραδειγμα με 30 extra_spaces και 8  words.

Μειωνει τα words κατα 1 και διαιρεί. 

 

30/7 =4  30-4=26

26/6 =4  26-4=22

22/5= 4  22-4=18

18/4= 4  18-4=14

14/3= 4  14-4=10

10/2= 5  10-5=5

 5/1 = 5    5-5=0

 

Αυτο εγγυάται ότι τα τελευταία θα έχουν το πολύ 1 space παραπάνω απο τ αλλα.

 

Αν εννοεις γιατι θεωρουμε words-1  , ειναι επειδή μετα την τελευταια λέξη δεν εχει spaces.

 

Ναι μωρε ετσι το εκανα και εγω στο χαρτι απλα ειχα μπερδευτει γιατι δεν σκεφτηκα απλα με το παραδειγμα και τα μηλα....σωστα δεν τα καταλαβα στο προηγουμενο μου ποστ?

 

ευχαριστω πολυ ρε φιλε ηταν καλη βοηθεια ειχε κολλησει το μυαλο μου. :(

 

υγ Τελικα ΟΛΟ το ζουμι της άσκησης ειναι αυτα τα 2 τυπάκια. Περα απο την γενικοτερη φιλοσοφια του κεφαλαιου να σπάει το μεγάλο προγραμμα σε headers και επιμέρους πηγαια αρχεια. Καλα το μυριστηκα οτι επρεπε να τα καταλαβω αυτα τα 2.

Δημοσ.

+1 για το βιβλίο, πολύ header file όμως έτσι πρέπει! η μ..ια είναι ότι χρειάζεσαι μεγάλη οθόνη να τα βλέπεις όλα! 

  • Like 1
Δημοσ.

+1 για το βιβλίο, πολύ header file όμως έτσι πρέπει! η μ..ια είναι ότι χρειάζεσαι μεγάλη οθόνη να τα βλέπεις όλα! 

 

155 γραμμες κωδικας και 5 αρχεια... πολυ ωραιο προγραμματακι.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...