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

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

Δημοσ.

Το θέμα του αναγραμματισμού το είχαμε συζητήσει πριν μερικά χρόνια ξανά στο forum (με αρκετό κώδικα)..

 

(καθώς η αρχική μορφή του τότε ανηρτημένου κώδικα μου έχει "σπάσει" λόγο αναβαθμίσεων του forum, εδώ έχω αναρτήσει τους προσωπικούς μου κώδικες από την συζήτηση σε πιο ευανάγνωστη μορφή).

  • Απαντ. 1,6k
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοσ.

@migf1 γενικα εχει πολλα προβληματα σε πρωτη φαση ηθελα να το κανω να δουλεψει απλα υλοποιωντας αυτο που προτεινει στο βιβλιο . Εχω ξεχασει την tolower

αλλα υπαρχει και η περιπτωση ο χρηστης να δωσει 2 κενες λεξεις (παταει μονο το εντερ)

που το προγραμμα θεωρει πως οι 2 ανυπαρκτες λεξεις ειναι αναγραμματισμος

είχες δωσει κατι παρομοιο και στο αλλο φορουμ αν θυμαμαι καλα.

 

Το προβλημα με το οverflow στους 99 χαρακτηρες δεν διορθωνεται ειτε

αμα δεσμευεις δυναμικά μνήμη ή ακομη ρωτώντας το χρηστη πριν δωσει λεξη ποσα γραμματα θελει?

και για ακομη περισσοτερη ασφαλεια μπορεις να του λες να δινει και μερικους extra απο αυτους που θελει (2-3)

και μετα να χειριζεσαι τους πινακες σαν VLA's

 

@DirectX φχαριστώ :D

Δημοσ.

@migf1 γενικα εχει πολλα προβληματα σε πρωτη φαση ηθελα να το κανω να δουλεψει απλα υλοποιωντας αυτο που προτεινει στο βιβλιο . Εχω ξεχασει την tolower

αλλα υπαρχει και η περιπτωση ο χρηστης να δωσει 2 κενες λεξεις (παταει μονο το εντερ)

που το προγραμμα θεωρει πως οι 2 ανυπαρκτες λεξεις ειναι αναγραμματισμος

είχες δωσει κατι παρομοιο και στο αλλο φορουμ αν θυμαμαι καλα.

Δεν θυμάμαι καθόλου.

 

Το προβλημα με το οverflow στους 99 χαρακτηρες δεν διορθωνεται ειτε

αμα δεσμευεις δυναμικά μνήμη ή ακομη ρωτώντας το χρηστη πριν δωσει λεξη ποσα γραμματα θελει?

και για ακομη περισσοτερη ασφαλεια μπορεις να του λες να δινει και μερικους extra απο αυτους που θελει (2-3)

και μετα να χειριζεσαι τους πινακες σαν VLA's

Προς τι όλα αυτά; Η χρήση ενός απλού μετρητή που σου είπα παραπάνω αρκεί (όσο για το να ρωτάς τον χρήστη, έχουμε ξαναπεί πως -πλην ορισμένων εξαιρέσεων- αποτελεί δείγμα βαρεμάρας, άγνοιας ή ανικανότητας του προγραμματιστή).

Δημοσ.

Μια διαφορετικη προσεγγιση που βαδιζει στην δικημου λογικη "φτιαξτο με αυτα που εχεις ηδη ετοιμα"

 

>#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;
}

 

Δημοσ.

Δεν θυμάμαι καθόλου.

 

 

Έλα που δε θυμάσαι...

 

http://ideone.com/TBbVi

 

:D

 

Την σκέψη της goto την έκανα και εγω χθες μαζι με τους μετρητες και την if που λες οταν υπαρχουν empty words !!!! Θα διαβασω μετα τον κωδικα σου

κανει καλο error - checking.

 

@παπι Ευχαριστω ! Απλα έδινε hint μαζι με την εκφωνηση και ειπα να το κανω ετσι. ;)

Δημοσ.

@Starlight:

 

Ούτε που το θυμόμουν. Παρεμπιπτόντως, εγώ δεν έχω μετρητή στα λουπ των λέξεων γιατί δεν αποθηκεύω τους χαρακτήρες τους (δλδ δεν χρησιμοποιώ μεταβλητές/πίνακες για τις λέξεις)

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

@Starlight:

 

Ούτε που το θυμόμουν. Παρεμπιπτόντως, εγώ δεν έχω μετρητή στα λουπ των λέξεων γιατί δεν αποθηκεύω τους χαρακτήρες τους (δλδ δεν χρησιμοποιώ μεταβλητές/πίνακες για τις λέξεις)

 

Το ξερω ρε συ. Σε πειράζω. Εχεις ποσταρει πολυ πραμα.

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

Θα το δω αποψε προσεκτικα. Να παρω ιδεες , ωραια η macros στην αρχη

με την tolower κανει το προγραμμα πιο ευαναγνωστο.

 

Λοιπον η δικη μου υλοποιηση που την έφτιαξα με τα χεράκια μου!!!! Αλλά ΧΩΡΙΣ ελεγχους.

 

http://ideone.com/2ijq1

 

Ειναι η λύση της Άσκησης 16 Σελ. 181 King

 

p.s Δεν εχω χρησιμοποιησει την isalpha() .

 

p.s2 Δεν ξερω αποψε που ειμαι free αμα κοιτάξω και την άσκηση 9 σελ.179 με τον τυχαιο περιπατο -καλη ασκηση αν θες να καταλαβεις πως δουλευει η rand / srand? - :S κατι διαβασα για ψευδοτυχαιους αριθμους πριν κατι μερες και μου αρεσε βασικα... το σκεφτομαι :D εχω δει 5-6 ασκησεις απο αυτο το κεφαλαιο μπορει και να προχωρησω. Να μπω συναρτησεις

Επεξ/σία από Star_Light
Δημοσ.

@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 Καταλαβαινεις τωρα γιατι το ήθελα το λυσάρι? Ενιγουει.

Δημοσ.

Δεν έχω καταλάβει τι εννοείς. Τι περιμένεις να σου βγάλει και τι σου βγάζει;

 

ΥΓ. Ναι, καταλαβαίνω γιατί ήθελες το λυσάρι, επειδή βαριέσαι να ασχοληθείς :P (βάλε printf ή use gdb)

Δημοσ.

Δεν θα έπρεπε να εκτυπώνει το noalpha?

Πρέπει να δω τον κώδικα για να σου απαντήσω. Επειδή όμως μιλάμε για 10 γραμμές κώδικα, το αυτονόητο είναι να το κάνεις trace μόνος σου (είτε με printf, είτε με gdb, είτε όπως αλλιώς νομίζεις) αντί να θέλεις να το κάνω εγώ για σένα (με άλλα λόγια, αν βαριέσαι εσύ 1, βαριέμαι εγώ 10... αν ήταν για δικιά μου δουλειά θα το είχα κάνει ήδη trace μόνος μου :P )

Δημοσ.

Πρέπει να δω τον κώδικα για να σου απαντήσω. Επειδή όμως μιλάμε για 10 γραμμές κώδικα, το αυτονόητο είναι να το κάνεις trace μόνος σου (είτε με printf, είτε με gdb, είτε όπως αλλιώς νομίζεις) αντί να θέλεις να το κάνω εγώ για σένα (με άλλα λόγια, αν βαριέσαι εσύ 1, βαριέμαι εγώ 10... αν ήταν για δικιά μου δουλειά θα το είχα κάνει ήδη trace μόνος μου :P )

 

Μα δεν ζητησα πουθενα να κανεις trace.

 

Αν ο χαρακτηρας δεν ειναι αλφαβητικο γραμμα

τοτε δεν μπαινει στο if και αυξάνει το noalpha

 

στο τελος που το noalpha δεν ειναι 0 θα έπρεπε να εκτυπώνει

τον αριθμο των χαρακτηρων που δεν ειναι αλφαβητικοι. Αν δεν κανω λαθος.

 

Σου λεω πως δινοντας + και + στις 2 λέξεις δεν εκτυπώνει το noalpha

αλλα ενα μηνυμα το οποιο λεει πως μια εκ των 2 λεξεων ειναι κενες.

 

Δεν ξερω αν παιζει ρολο που το μονο που δεν εχω καταλαβει απο τον κωδικα σου

ειναι αυτο ->

 

> printf("The words are %sanagrams\n", arenot ? "not " : "\0"); 

 

νομιζω δεν εχει σχεση με αυτο που ρωταω

Δημοσ.

Μα δεν ζητησα πουθενα να κανεις trace.

 

Αν ο χαρακτηρας δεν ειναι αλφαβητικο γραμμα

τοτε δεν μπαινει κανει στο if και αυξάνει το noalpha

 

στο τελος που το noalpha δεν ειναι 0 θα έπρεπε να εκτυπώνει

τον αριθμο των χαρακτηρων που δεν ειναι αλφαβητικοι. Αν δεν κανω λαθος.

 

Το έχεις επιβεβαιώσει με tracing δηλαδή πως δεν λειτουργεί as-expected;

Επισκέπτης
Αυτό το θέμα είναι πλέον κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...