Τα πάντα για την C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 11 Φεβ 2012, 05:14

Κώδικας: Επιλογή όλων


int (*pfunction)(int x);


Έτσι δηλώνεις έναν δείκτη pfunction που προκειται να δείχνει σε μια συνάρτηση διοτι ακομη δεν έχει αρχικοποιηθεί ο δείκτης ωστε να δείχνει σε αυτην. Αυτη παλι επιστρέφει int ενω έχει int σαν όρισμα.

Κώδικας: Επιλογή όλων
int *function(int x);


Εδω έχεις μια συνάρτηση που επιστρέφει εναν δείκτη σε int ομως.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό stamatiou » 11 Φεβ 2012, 12:33

Star_Light έγραψε:
Κώδικας: Επιλογή όλων


int (*pfunction)(int x);


Έτσι δηλώνεις έναν δείκτη pfunction που προκειται να δείχνει σε μια συνάρτηση διοτι ακομη δεν έχει αρχικοποιηθεί ο δείκτης ωστε να δείχνει σε αυτην. Αυτη παλι επιστρέφει int ενω έχει int σαν όρισμα.

Κώδικας: Επιλογή όλων
int *function(int x);


Εδω έχεις μια συνάρτηση που επιστρέφει εναν δείκτη σε int ομως.

Να σαι καλά Star_Light!
@migf1 Η άσκηση που έβαλες προηγουμένως στον Star_Light είναι δλδ κάτι σαν τη 31;
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 11 Φεβ 2012, 14:20

Για κρυπτογράφηση έχει δοθεί τωρα . Mε τον αλγόριθμο Vigenere. Ξεκινα τον και εσυ σταματιου
ειναι καλη άσκηση !
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 11 Φεβ 2012, 15:07

stamatiou έγραψε:
@migf1 Η άσκηση που έβαλες προηγουμένως στον Star_Light είναι δλδ κάτι σαν τη 31;

Σε ποια άσκηση αναφέρεσαι; (επίσης τι είναι η 31; )

ΥΓ. Παρεμπιπτόντως, πιστεύω δεν χρειάζεται να ασχοληθείτε με δείκτες σε συναρτήσεις ακόμα.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 11 Φεβ 2012, 16:19

Αντε και καλη αρχή :D

http://ideone.com/PaJUZ

+1 αλλη μια συναρτηση που θα εκτυπώνει .

εδιτ : migf1 την δομή σου στην σελ. 181 θα την δανειστώ για να κάνω ευανάγνωστο το πρόγραμμα αφου καταφερω και το φτιαξω πρωτα !
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 11 Φεβ 2012, 16:45

Star_Light έγραψε:Αντε και καλη αρχή :D

http://ideone.com/PaJUZ

+1 αλλη μια συναρτηση που θα εκτυπώνει .

Κι εγώ νόμιζα πως το είχες ήδη έτοιμο :)

Btw, γιατί δεν ξεκινάς με Ceasar cipher που είναι πιο βατός στην υλοποίηση, συν ότι πάνω σε αυτόν πατάει κατόπιν ο Vigenère; Θα μπορούσες με αυτόν τον τρόπο να δεις ιδίας όμασι πως φτιάχνοντας έναν βασικό αλγόριθμο (πιθανότατα σε ξεχωριστή, re-usable συνάρτηση) μπορείς να τον χρησιμοποιήσεις ως μέρος άλλου αλγόριθμου, που να περιλαμβάνει τον πρώτο.

Επίσης θα μπορείς να ρωτάς τον χρήστη να διαλέξει έναν από τους 2 αλγόριθμους για την κρυπτογράφηση/αποκρυπτογράφηση ;)

Παραθέτω και τον κώδικά σου ψιλο-διορθωμένο σύμφωνα με τα conventions της C...

Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <stdlib.h>

#define SIZE (1024+1) /* 26 x 26 */

void Alphabet_table( char table[SIZE] );
void Vigenere_table( char table[SIZE] );
void Vigenere_Encryption( char plaintext[SIZE], char key[SIZE] );

/*****************************************************//**
*
*********************************************************
*/
int main( void )
{
char table[SIZE] = {'\0'};
char plaintext[SIZE] = {'\0'};
char key[SIZE] = {'\0'};

printf("Δώστε μια συμβολοσειρά : ");
fgets(plaintext, SIZE, stdin);

printf("Δώστε το κλειδί : ");
fgets(key, SIZE, stdin);

printf("H συμβολοσειρά που δόθηκε ειναι : %s " , plaintext);
printf("Το κλειδί που δόθηκε ειναι : %s " , key);

Alphabet_table( table );
Vigenere_table( table );
Vigenere_Encryption(plaintext, key);

return 0;
}

/*****************************************************//**
*
*********************************************************
*/
void Alphabet_table( char table[SIZE] )
{
/* ... Αρχικοποίηση του αρχικου πλαισίου ... */

return;
}

/*****************************************************//**
*
*********************************************************
*/
void Vigenere_table( char table[SIZE] )
{
/* ... Αρχικοποίηση του πλαισίου του Vigenere ... */
return;
}

/*****************************************************//**
*
*********************************************************
*/
void Vigenere_Encryption( char plaintext[SIZE] , char key[SIZE] )
{
/* ... Κρυπτογράφηση ... */
return;
}


Βασικά, στα #define χρησιμοποιούμε κεφαλαία γράμματα, για να είναι αμέσως αντιληπτό πως πρόκειται για preprocessor constant/macro. Επίσης, αρχικοποιώ και τα 3 strings με '\0' παντού, για να μειώσω τις πιθανότητας ενδεχόμενου boundary overflow στον κώδικα που θα τα διαχειριστεί, και άλλαξα τα σχόλια από // σε /* */ ώστε να μπορεί ο κώδικας να γίνεται compile ΚΑΙ σύμφωνα με τα πρότυπα C89/C90 της γλώσσας ;) Τέλος, έκανα ευδιάκριτες τις αρχές και τα τέλη των συναρτήσεων.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 11 Φεβ 2012, 16:49

Α, λείπει και συνάρτηση αποκρυπτογράφησης ;) Πάνε ζευγάρι κρυπτογράφηση με αποκρυπτογράφηση, δεν γίνεται να παραδοθεί πρόγραμμα που κάνει μόνο το ένα ή μόνο το άλλο.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 11 Φεβ 2012, 18:43

Kατσε πρωτα να κανουμε την κρυπτογραφηση και βλεπουμε. Προς το παρον "πασχιζω" να γεμίσω έναν 27χ27 με χαρακτήρες
αλλα δεν μου βγαίνει η δήλωση μου δινει συντακτικό μεσα στο loop θελει μονο μεμονομενους χαρακτηρες... πχ

Κώδικας: Επιλογή όλων
for(i = 0; i < 27; i ++) {
printf("\n");
for(j = 0; j < 27; j ++)
{
array [i] [j] = 'A';
printf("%2c", array[i][j]);

}
}


Για να καταλαβεις τι θελω... ας πουμε σε ακεραιους μου βγηκε

http://ideone.com/nSjms

τέτοιο σχηματισμό θελω αλλα με ΑΒC......Z

edit : Επειδη τα γράμματα του αγγλικου αλφάβητου ειναι 26 έχω κανει ενα μικρο λαθος.... θελει απο 0....25 αρα <26 αλλα νταξει αυτα τα μικρολαθακια λογω κεκτημενης διορθωνονται και μετα κατσε να φτιαξουμε το σκελετο
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 11 Φεβ 2012, 19:25

Λοιπον αυτο εδω το loop ειναι ένας καλός τροπος για να γεμίσουμε τον πίνακα με χαρακτήρες
δεδομένου οτι κάθε χαρακτήρας δεν αποθηκεύεται στην μνήμη του υπολογιστή σαν χαρακτήρας αλλα έχει μια αριθμητική τιμή ( ANSI κωδικοποίηση )
επομένως το 'Α' ειναι το 65 ...... αρα 'Α' + j => 65 + 1 = 66 που θα ειναι το 'Β' κ.ο.κ

Κώδικας: Επιλογή όλων
for(i = 0; i < 26; i ++) {
printf("\n");
for(j = 0; j < 26; j ++)
{
array [i] [j] = 'A' + j ;
printf("%2c", array[i][j]);

}
}


edit: migf1 η fgets μπορει να πάρει σαν ορισμα 2D πίνακα? αν δεν μπορει τοτε δώρον άδωρον :lol: :lol: :lol: στις συναρτήσεις μπορω να περάσω και δείκτες σε πίνακες σαν ορισματα αλλα μετα ολα αυτα.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 11 Φεβ 2012, 20:23

Ρε συ ο αλγόριθμος του Καίσαρα δεν ειναι καθόλου δυσκολος ! Απλά έχω ένα θέμα με την ολίσθηση...
καλα ντάξει ο ROT13 παίζει απλα με στατικό κλειδί. Τελοςπαντων δοκιμασα ετσι και μια πολυ γρηγορη υλοποιηση για τον Καισαρα
αλλα δεν ξερω δεν μου βγαινει η ολίσθηση ... εχω δει πως εφαρμόζεται σε δυαδικά και αν δεν κανω λαθος η C δεν έχει τυπο δεδομένων για
αυτα.

http://ideone.com/XLUaR

στο μεταξυ πήγα να κανω άλλη κουτοπονηριά για να αποφύγω την ολίσθηση σε στύλ

Κώδικας: Επιλογή όλων
array[i] = array[i] + key ;


αλλα φυσικά αν το κλειδί ειναι μεγάλο και ξεπεραστεί η τιμή 90 που ανήκει στον Ζ
τελειώνει εκει.... μετα εκτυπώνει αλλους χαρακτηρες αρα δεν ειναι αυτο που θέλουμε .
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι