Jump to content



C & arrays


---Zapotek--

Recommended Posts

Παιδες εχουμε ενα 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...

Ευχαριστω για τον χρονο σας.:)

Link to comment
Share on other sites

Εστω λοιπον οτι δινεις το γραμμα Α και θες να εκτυπωθει το 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 το Α , Β να ζητας την αναλογη εκτυπωση αλλα εαν αλλαξει η σειρα των στοιχειων του πινανα την πατησες.

Link to comment
Share on other sites

Αρχική απάντηση από DarkSaga

γίνεται με if μέσα σε loop αλλά σκέφτεσαι εντελλώς ανάποδα

Αυτό είχα στο μυαλό....

Θέλω να κάνω ένα απλό Shift Cipher.....

Απλά γράφω και ένα δοκίμιο ταυτόχρονα και είμαι και από διαγώνισμα και νυστάζω και λίγο, είμαι και λίγο ζαλισμένος.

Κατά τα άλλα μια χαρά.

@Vag

Ευχαριστω, μαλλον αυτο θα κανω. :)

Link to comment
Share on other sites

shift cipher?:confused:

γραμματιζούμενος μου κάνεις εσύ.....

αν θες να΄προσθέτεις σε κάθε γρ΄΄αμμα και μετα να αφαιρείς

πάρε τα Ascii και παίξε είναι ταχύτερο

προσθέτεις αφαιρείς και μεταφράζεις

itoa

atoi

τσέκαρε τες

είναι πολύ ακριβό να διατρέχεις τον πίνακα..... με loopes

Link to comment
Share on other sites

Λεπον αυτο εχω τωρα:


#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 ακόμα αλλά θα τα λύσω.

Σας ευχαριστώ όλους για την βοήθεια παιδιά!

Link to comment
Share on other sites

Πάντως για εγκυκλοπαιδικές γνώσεις ψάξε για ROT13 αλγόριθμο. Απλά ο ROT13 κάνει shift 13 θέσεις. Θες να δεις την μικρότερη υλοποίηση του ROT13;

main(a){while(a=~getchar())putchar(~a-1/(~(a|32)/13*2-11)*13);}

Link to comment
Share on other sites

Οποτε αλλαζει ριζικα το προγραμμα σε αυτο:

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

Πολυ καλος ο τυπος, που το πετυχες?

Link to comment
Share on other sites

Αρχική απάντηση από ---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:

Link to comment
Share on other sites

Με το atoi που είπε και κάποιος φίλος παραπάνω μου φαίνεται αρκετά εύκολο, δεδομένου ότι ουσιαστικά έχεις το αλφάβητο στον πίνακα. Αν είχες άλλου είδους στοιχεία δε θα γινόταν. Η μεταβλητή alphabet είναι ουσιαστικά ένας pointer στην αρχή του array.

Οπότε εσύ παίρνοντας το alphabet[atoi("A")-65] ουσιαστικά παίρνεις το πρώτο στοιχείο του πίνακα. Το 65 είναι ο ASCII κωδικός του "Α". Πιθανότατα μπορείς να το αντικαταστήσεις και με "Α" (ΜΕ εισαγωγικά). Η παράμετρος της atoi (τσέκαρε τη σύνατξή της γιατί το γράφω στον άερα) είναι το Α,Β κλπ που θες.

Για πιο γενικά, θα έπαιρνες το alphabet[x-"Α"], όπου x μια μεταβλητή τύπου char που αντιστοιχεί στο "Α","Β", κλπ δηλ. ό,τι δίνει ο χρήστης. Οπότε η αφαίρεση χ-"Α" δίνει το κατάλληλο offset στον pointer (η index στον πίνακα, όπως θέλεις πες το).

Ελπίζω να κατάλαβα τι ακριβώς θες γιατί το διάβασα λίγο στα πεταχτά...

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

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

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.