Directx Δημοσ. 22 Απριλίου 2012 Δημοσ. 22 Απριλίου 2012 Το θέμα του αναγραμματισμού το είχαμε συζητήσει πριν μερικά χρόνια ξανά στο forum (με αρκετό κώδικα).. (καθώς η αρχική μορφή του τότε ανηρτημένου κώδικα μου έχει "σπάσει" λόγο αναβαθμίσεων του forum, εδώ έχω αναρτήσει τους προσωπικούς μου κώδικες από την συζήτηση σε πιο ευανάγνωστη μορφή).
Star_Light Δημοσ. 22 Απριλίου 2012 Δημοσ. 22 Απριλίου 2012 @migf1 γενικα εχει πολλα προβληματα σε πρωτη φαση ηθελα να το κανω να δουλεψει απλα υλοποιωντας αυτο που προτεινει στο βιβλιο . Εχω ξεχασει την tolower αλλα υπαρχει και η περιπτωση ο χρηστης να δωσει 2 κενες λεξεις (παταει μονο το εντερ) που το προγραμμα θεωρει πως οι 2 ανυπαρκτες λεξεις ειναι αναγραμματισμος είχες δωσει κατι παρομοιο και στο αλλο φορουμ αν θυμαμαι καλα. Το προβλημα με το οverflow στους 99 χαρακτηρες δεν διορθωνεται ειτε αμα δεσμευεις δυναμικά μνήμη ή ακομη ρωτώντας το χρηστη πριν δωσει λεξη ποσα γραμματα θελει? και για ακομη περισσοτερη ασφαλεια μπορεις να του λες να δινει και μερικους extra απο αυτους που θελει (2-3) και μετα να χειριζεσαι τους πινακες σαν VLA's @DirectX φχαριστώ
migf1 Δημοσ. 22 Απριλίου 2012 Δημοσ. 22 Απριλίου 2012 @migf1 γενικα εχει πολλα προβληματα σε πρωτη φαση ηθελα να το κανω να δουλεψει απλα υλοποιωντας αυτο που προτεινει στο βιβλιο . Εχω ξεχασει την tolower αλλα υπαρχει και η περιπτωση ο χρηστης να δωσει 2 κενες λεξεις (παταει μονο το εντερ) που το προγραμμα θεωρει πως οι 2 ανυπαρκτες λεξεις ειναι αναγραμματισμος είχες δωσει κατι παρομοιο και στο αλλο φορουμ αν θυμαμαι καλα. Δεν θυμάμαι καθόλου. Το προβλημα με το οverflow στους 99 χαρακτηρες δεν διορθωνεται ειτεαμα δεσμευεις δυναμικά μνήμη ή ακομη ρωτώντας το χρηστη πριν δωσει λεξη ποσα γραμματα θελει? και για ακομη περισσοτερη ασφαλεια μπορεις να του λες να δινει και μερικους extra απο αυτους που θελει (2-3) και μετα να χειριζεσαι τους πινακες σαν VLA's Προς τι όλα αυτά; Η χρήση ενός απλού μετρητή που σου είπα παραπάνω αρκεί (όσο για το να ρωτάς τον χρήστη, έχουμε ξαναπεί πως -πλην ορισμένων εξαιρέσεων- αποτελεί δείγμα βαρεμάρας, άγνοιας ή ανικανότητας του προγραμματιστή).
παπι Δημοσ. 22 Απριλίου 2012 Δημοσ. 22 Απριλίου 2012 Μια διαφορετικη προσεγγιση που βαδιζει στην δικημου λογικη "φτιαξτο με αυτα που εχεις ηδη ετοιμα" >#include <stdio.h> #include <alg.h> int comp(const void* a,const void* { return *(char*)a - *(char*)b; } int main(int argc, char *argv[]) { char buf1[254]; char buf2[254]; printf("Dwse prwth:"); scanf("%s",buf1); printf("Dwse deyterh:"); scanf("%s",buf2); printf("Oi lekseis\n%s\n%s\n",buf1,buf2); qsort(buf1,strlen(buf1),sizeof(char),comp); qsort(buf2,strlen(buf2),sizeof(char),comp); if( !strcmp(buf1,buf2) ) printf("Einai anagrammatismenes"); else printf("Den einai anagrammatismenes"); return 0; }
Star_Light Δημοσ. 22 Απριλίου 2012 Δημοσ. 22 Απριλίου 2012 Δεν θυμάμαι καθόλου. Έλα που δε θυμάσαι... http://ideone.com/TBbVi Την σκέψη της goto την έκανα και εγω χθες μαζι με τους μετρητες και την if που λες οταν υπαρχουν empty words !!!! Θα διαβασω μετα τον κωδικα σου κανει καλο error - checking. @παπι Ευχαριστω ! Απλα έδινε hint μαζι με την εκφωνηση και ειπα να το κανω ετσι.
migf1 Δημοσ. 22 Απριλίου 2012 Δημοσ. 22 Απριλίου 2012 @Starlight: Ούτε που το θυμόμουν. Παρεμπιπτόντως, εγώ δεν έχω μετρητή στα λουπ των λέξεων γιατί δεν αποθηκεύω τους χαρακτήρες τους (δλδ δεν χρησιμοποιώ μεταβλητές/πίνακες για τις λέξεις)
Star_Light Δημοσ. 22 Απριλίου 2012 Δημοσ. 22 Απριλίου 2012 (επεξεργασμένο) @Starlight: Ούτε που το θυμόμουν. Παρεμπιπτόντως, εγώ δεν έχω μετρητή στα λουπ των λέξεων γιατί δεν αποθηκεύω τους χαρακτήρες τους (δλδ δεν χρησιμοποιώ μεταβλητές/πίνακες για τις λέξεις) Το ξερω ρε συ. Σε πειράζω. Εχεις ποσταρει πολυ πραμα. Ακομη δεν εχω δει καλα το προγραμμα σου , ειχα παει βολτα. Θα το δω αποψε προσεκτικα. Να παρω ιδεες , ωραια η macros στην αρχη με την tolower κανει το προγραμμα πιο ευαναγνωστο. Λοιπον η δικη μου υλοποιηση που την έφτιαξα με τα χεράκια μου!!!! Αλλά ΧΩΡΙΣ ελεγχους. http://ideone.com/2ijq1 Ειναι η λύση της Άσκησης 16 Σελ. 181 King p.s Δεν εχω χρησιμοποιησει την isalpha() . p.s2 Δεν ξερω αποψε που ειμαι free αμα κοιτάξω και την άσκηση 9 σελ.179 με τον τυχαιο περιπατο -καλη ασκηση αν θες να καταλαβεις πως δουλευει η rand / srand? - :S κατι διαβασα για ψευδοτυχαιους αριθμους πριν κατι μερες και μου αρεσε βασικα... το σκεφτομαι εχω δει 5-6 ασκησεις απο αυτο το κεφαλαιο μπορει και να προχωρησω. Να μπω συναρτησεις Επεξ/σία 23 Απριλίου 2012 από Star_Light
Anubis13 Δημοσ. 22 Απριλίου 2012 Δημοσ. 22 Απριλίου 2012 Μπες συναρτησεις. Βασικα κανε το προηγουμενο προγραμμα συναρτηση. Ειναι καλη ασκηση!
Star_Light Δημοσ. 23 Απριλίου 2012 Δημοσ. 23 Απριλίου 2012 @migf1 στον κωδικα σου δεν ειμαι σιγουρος αν δουλεύει αυτο εδω > if ( noalpha != 0 ) // 1 or both words had non-letters printf( "(%d non-letter chars ignored from both words)\n", noalpha ); Δεδομένου οτι δίνω για 1η λέξη +++ και 2η τα ιδια και μου τυπώνει άλλο μηνυμα απο αυτο που θα επρεπε δηλαδη αυτο -> > puts("*** one or both empty words, no result!"); Βασικα ειχα 2 βασικά λάθη στον δικο μου κώδικα καταρχην χρησιμοποιούσα 3 πίνακες ενω δεν χρειαζόταν και επίσης έκχωρουσα καθε φορα τον χαρακτήρα του χρήστη σε έναν απο αυτους που και πάλι δεν εξυπηρετεί καμια σκοπιμότητα :/ p.s Καταλαβαινεις τωρα γιατι το ήθελα το λυσάρι? Ενιγουει.
migf1 Δημοσ. 23 Απριλίου 2012 Δημοσ. 23 Απριλίου 2012 Δεν έχω καταλάβει τι εννοείς. Τι περιμένεις να σου βγάλει και τι σου βγάζει; ΥΓ. Ναι, καταλαβαίνω γιατί ήθελες το λυσάρι, επειδή βαριέσαι να ασχοληθείς (βάλε printf ή use gdb)
Star_Light Δημοσ. 23 Απριλίου 2012 Δημοσ. 23 Απριλίου 2012 Δεν έχω καταλάβει τι εννοείς. Τι περιμένεις να σου βγάλει και τι σου βγάζει; Δεν θα έπρεπε να εκτυπώνει το noalpha?
migf1 Δημοσ. 23 Απριλίου 2012 Δημοσ. 23 Απριλίου 2012 Δεν θα έπρεπε να εκτυπώνει το noalpha? Πρέπει να δω τον κώδικα για να σου απαντήσω. Επειδή όμως μιλάμε για 10 γραμμές κώδικα, το αυτονόητο είναι να το κάνεις trace μόνος σου (είτε με printf, είτε με gdb, είτε όπως αλλιώς νομίζεις) αντί να θέλεις να το κάνω εγώ για σένα (με άλλα λόγια, αν βαριέσαι εσύ 1, βαριέμαι εγώ 10... αν ήταν για δικιά μου δουλειά θα το είχα κάνει ήδη trace μόνος μου )
Star_Light Δημοσ. 23 Απριλίου 2012 Δημοσ. 23 Απριλίου 2012 Πρέπει να δω τον κώδικα για να σου απαντήσω. Επειδή όμως μιλάμε για 10 γραμμές κώδικα, το αυτονόητο είναι να το κάνεις trace μόνος σου (είτε με printf, είτε με gdb, είτε όπως αλλιώς νομίζεις) αντί να θέλεις να το κάνω εγώ για σένα (με άλλα λόγια, αν βαριέσαι εσύ 1, βαριέμαι εγώ 10... αν ήταν για δικιά μου δουλειά θα το είχα κάνει ήδη trace μόνος μου ) Μα δεν ζητησα πουθενα να κανεις trace. Αν ο χαρακτηρας δεν ειναι αλφαβητικο γραμμα τοτε δεν μπαινει στο if και αυξάνει το noalpha στο τελος που το noalpha δεν ειναι 0 θα έπρεπε να εκτυπώνει τον αριθμο των χαρακτηρων που δεν ειναι αλφαβητικοι. Αν δεν κανω λαθος. Σου λεω πως δινοντας + και + στις 2 λέξεις δεν εκτυπώνει το noalpha αλλα ενα μηνυμα το οποιο λεει πως μια εκ των 2 λεξεων ειναι κενες. Δεν ξερω αν παιζει ρολο που το μονο που δεν εχω καταλαβει απο τον κωδικα σου ειναι αυτο -> > printf("The words are %sanagrams\n", arenot ? "not " : "\0"); νομιζω δεν εχει σχεση με αυτο που ρωταω
migf1 Δημοσ. 23 Απριλίου 2012 Δημοσ. 23 Απριλίου 2012 Μα δεν ζητησα πουθενα να κανεις trace. Αν ο χαρακτηρας δεν ειναι αλφαβητικο γραμμα τοτε δεν μπαινει κανει στο if και αυξάνει το noalpha στο τελος που το noalpha δεν ειναι 0 θα έπρεπε να εκτυπώνει τον αριθμο των χαρακτηρων που δεν ειναι αλφαβητικοι. Αν δεν κανω λαθος. Το έχεις επιβεβαιώσει με tracing δηλαδή πως δεν λειτουργεί as-expected;
Star_Light Δημοσ. 23 Απριλίου 2012 Δημοσ. 23 Απριλίου 2012 Το έχεις επιβεβαιώσει με tracing δηλαδή πως δεν λειτουργεί as-expected;
Προτεινόμενες αναρτήσεις