---Zapotek-- Δημοσιεύτηκε Οκτώβριος 23, 2005 #1 Δημοσιεύτηκε Οκτώβριος 23, 2005 Παιδες εχουμε ενα array στην C οπως το παρακατω: char alphabet[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; Οκ, κλασσικα το alphabet[1]=B, alphabet[0]=A κτλ ΠΩΣ ομως θα πουμε οτι B=alphabet[1], A=alphabet[0], κτλ? Εξηγουμαι: printf("%c",alphabet[0]); Θα δωσει "Α" Πως ομως το: Α θα δωσει alphabet[0]? Ειδικοτερα, αυτο που θελω να κανω ειναι: αν ξερω το γραμμα να βρω την θεση του στο alphabet array... Ευχαριστω για τον χρονο σας.
trendy Οκτώβριος 23, 2005 #2 Οκτώβριος 23, 2005 Έτσι όπως το έχεις δεν πρέπει να γίνεται γιατί το Α είναι χαρακτήρας, όχι κάποια μεταβλητή.
---Zapotek-- Οκτώβριος 23, 2005 Author #3 Οκτώβριος 23, 2005 Ναι το ξερω απλα ψαχνω τροπο, μαλλον με καποιο λοοπ θα γινει, τωρα εχω στο μυαλο μου ολο το project και δυσκολευομαι να βρω λυση σε αυτο. Πρεπει να χαλαρωσω....
DarkSaga Οκτώβριος 23, 2005 #4 Οκτώβριος 23, 2005 γίνεται με if μέσα σε loop αλλά σκέφτεσαι εντελλώς ανάποδαξέχνα το όλο αυτό...τι θες να κάνεις?γενικότερα
Vagouridis Οκτώβριος 23, 2005 #5 Οκτώβριος 23, 2005 Εστω λοιπον οτι δινεις το γραμμα Α και θες να εκτυπωθει το alpha[0] .Κανε μια αναζητηση για το γραμμα Α μεσα στα στοιχεια του πινακα σου και βαλε να σου γυρναει το j που ειναι η θεση του πινακα.Δλδfor ( j=0;j<25;j++){if (A==alpha[j])return j;}Ουσιαστικα μετα το περασμα του πινακα θα εχεις την θεση j που βρισκετε το καθε γραμμα.Κανε και μια case οπου θα εχει σαν παραμετρο την j και οταν ειναι j=0 θα εκτυπωνει alpha[0] και αντιστοιχα για καθε jΠαντως γενικοτερα μπορεις να κανεις και την απλη αντιστοιχια και παλι με case και μεταβλητη char το Α , Β να ζητας την αναλογη εκτυπωση αλλα εαν αλλαξει η σειρα των στοιχειων του πινανα την πατησες.
---Zapotek-- Οκτώβριος 23, 2005 Author #6 Οκτώβριος 23, 2005 Αρχική απάντηση από DarkSaga γίνεται με if μέσα σε loop αλλά σκέφτεσαι εντελλώς ανάποδα Αυτό είχα στο μυαλό.... Θέλω να κάνω ένα απλό Shift Cipher..... Απλά γράφω και ένα δοκίμιο ταυτόχρονα και είμαι και από διαγώνισμα και νυστάζω και λίγο, είμαι και λίγο ζαλισμένος. Κατά τα άλλα μια χαρά. @Vag Ευχαριστω, μαλλον αυτο θα κανω.
Vagouridis Οκτώβριος 23, 2005 #7 Οκτώβριος 23, 2005 Εαν θες εαν τυπικο δωρεαν tutorial με απλα παραδειγματακια ειναι το παρακατω λινκhttp://www.cplusplus.com/doc/tutorial/
DarkSaga Οκτώβριος 23, 2005 #9 Οκτώβριος 23, 2005 shift cipher? γραμματιζούμενος μου κάνεις εσύ..... αν θες να΄προσθέτεις σε κάθε γρ΄΄αμμα και μετα να αφαιρείς πάρε τα Ascii και παίξε είναι ταχύτερο προσθέτεις αφαιρείς και μεταφράζεις itoa atoi τσέκαρε τες είναι πολύ ακριβό να διατρέχεις τον πίνακα..... με loopes
---Zapotek-- Οκτώβριος 23, 2005 Author #10 Οκτώβριος 23, 2005 Αρχική απάντηση από DarkSaga shift cipher? γραμματιζούμενος μου κάνεις εσύ..... Χεχεχε, οπως το παρει κανεις...
---Zapotek-- Οκτώβριος 23, 2005 Author #11 Οκτώβριος 23, 2005 Λεπον αυτο εχω τωρα:#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>main(){char str;int len,i,j,x,enc,key;char alphabet[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};printf("Enter string to encrypt: ");scanf("%s",&str);printf("Enter encryption key: [1-25]");scanf("%d",&key);key=key*key;key=sqrt(key);if(key>25){printf("Key must be less than 25\n");exit(0);}len=strlen(&str);printf("The encrypted string is: \n");for(i=0,x=0; i<26,x<len; i++,x++){if(str[x]=alphabet[i]){j=i;}enc = (j + key)%26; printf("%c",alphabet[enc]);} printf("\n");}Το παραπάνω ενδεικτικά το δείχνω.Βγάζει κάτι errors ακόμα αλλά θα τα λύσω.Σας ευχαριστώ όλους για την βοήθεια παιδιά!
n1ck0s Οκτώβριος 23, 2005 #12 Οκτώβριος 23, 2005 Πάντως για εγκυκλοπαιδικές γνώσεις ψάξε για ROT13 αλγόριθμο. Απλά ο ROT13 κάνει shift 13 θέσεις. Θες να δεις την μικρότερη υλοποίηση του ROT13;main(a){while(a=~getchar())putchar(~a-1/(~(a|32)/13*2-11)*13);}
---Zapotek-- Οκτώβριος 23, 2005 Author #13 Οκτώβριος 23, 2005 DAMN! Ωρες σαν και αυτες αισθανομαι τουλβο...
---Zapotek-- Οκτώβριος 23, 2005 Author #14 Οκτώβριος 23, 2005 Οποτε αλλαζει ριζικα το προγραμμα σε αυτο:#include <stdio.h>#include <stdlib.h>main(str){int key;printf("Enter encryption key: [1-25]");scanf("%d",&key);if(key>25){printf("Key must be less than 25\n");exit(0);}printf("Enter string to encrypt:");while(str=~getchar())putchar(~str-1/(~(str|32)/13*2-11)*key);}Πολυ καλος ο τυπος, που το πετυχες?
Wolfenstein Οκτώβριος 23, 2005 #15 Οκτώβριος 23, 2005 Αρχική απάντηση από ---Zapotek-- [Σήμερα, στις 13:56] Οποτε αλλαζει ριζικα το προγραμμα σε αυτο:#include <stdio.h>#include <stdlib.h>main([B][COLOR=red]str[/COLOR] [/B]){[B][COLOR=red]int[/COLOR] [/B] key;printf("Enter encryption key: [1-25]");scanf("%d",&key);if(key>25){printf("Key must be less than 25\n");exit(0);}printf("Enter string to encrypt:");while(str=~getchar())putchar(~str-1/(~(str|32)/13*2-11)*key);}Πολυ καλος ο τυπος, που το πετυχες? Μήπως το str ήθελες να το γράψεις στο int?Η λέω βλακίες? :X:
Rayden Οκτώβριος 23, 2005 #16 Οκτώβριος 23, 2005 Με το atoi που είπε και κάποιος φίλος παραπάνω μου φαίνεται αρκετά εύκολο, δεδομένου ότι ουσιαστικά έχεις το αλφάβητο στον πίνακα. Αν είχες άλλου είδους στοιχεία δε θα γινόταν. Η μεταβλητή alphabet είναι ουσιαστικά ένας pointer στην αρχή του array.Οπότε εσύ παίρνοντας το alphabet[atoi("A")-65] ουσιαστικά παίρνεις το πρώτο στοιχείο του πίνακα. Το 65 είναι ο ASCII κωδικός του "Α". Πιθανότατα μπορείς να το αντικαταστήσεις και με "Α" (ΜΕ εισαγωγικά). Η παράμετρος της atoi (τσέκαρε τη σύνατξή της γιατί το γράφω στον άερα) είναι το Α,Β κλπ που θες.Για πιο γενικά, θα έπαιρνες το alphabet[x-"Α"], όπου x μια μεταβλητή τύπου char που αντιστοιχεί στο "Α","Β", κλπ δηλ. ό,τι δίνει ο χρήστης. Οπότε η αφαίρεση χ-"Α" δίνει το κατάλληλο offset στον pointer (η index στον πίνακα, όπως θέλεις πες το).Ελπίζω να κατάλαβα τι ακριβώς θες γιατί το διάβασα λίγο στα πεταχτά...
---Zapotek-- Οκτώβριος 23, 2005 Author #17 Οκτώβριος 23, 2005 @Wolfenstein To str είναι μεταβλητή, μια χαρά είναι εκεί που βρίσκετε . @Rayden Ευχαριστω πολυ, θα το δοκιμασω οταν βρω χρονο. Ευχαριστω ξανα.
Vagouridis Οκτώβριος 23, 2005 #18 Οκτώβριος 23, 2005 καντε μου μια χαρη και δοκιμαστε την atoi με μεταβλητη και οχι με απευθειας εισαγωγη χαρακτηρα να δουμε εαν κανει compile......
---Zapotek-- Οκτώβριος 23, 2005 Author #20 Οκτώβριος 23, 2005 #include <stdlib.h>int main() {char x='a';int j;j=atoi(&x);}Κανει compile...[ http://www.cppreference.com/stdstring/atoi.html ]
Recommended Posts
Archived
This topic is now archived and is closed to further replies.