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

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

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

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

Δημοσίευσηαπό Star_Light » 28 Αύγ 2011, 02:03

οκ τοτε θα κανω το αλλο... αυριο. Θα το περασω σε μια συναρτηση με δεικτες κτλπ. Παντως ειχες δικιο που την αποκαλεσες χαζη κρυπτογραφηση... χαχαχα μια απλη αντιμεταθεση ειναι... για αρχη παντως ειναι ενα πολυ καλο παραδειγμα εισαγωγης. ;)
Γνώσεις ⇛ 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 » 28 Αύγ 2011, 02:08

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

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

Δημοσίευσηαπό Star_Light » 28 Αύγ 2011, 02:37

migf1 έγραψε:Και οι 3 αυτοί τρόποι είναι χαζοί (xor, rot13, swap), με την έννοια πως σπάνε για πλάκα.


Εχεις σπάσει τιποτα? :P

Πιο παλια ειχα διαβασει λιγο την υλοποιηση του AES αλλα δεν καταλαβα και πολλα.
Παίζουν και γύροι εκει μεσα με τα ΧΟR χαμος γινεται. Η επομενη εισοδος ειναι η προηγουμενη κτλπ.
Γνώσεις ⇛ 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 » 28 Αύγ 2011, 13:57

Eχω μια αλλη απορια στο μεταξυ... ο ιδιος αλγοριθμος για αντιμεταθεση γιατι δεν δουλεύει με (+) ?
Ενω δειχνει να επεξεργαζεται με τον ιδιο τροπο τα δεδομενα με το αν βαζαμε (-) και ξεκινουσαμε απο i=1

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

for (i=0; str[i] && str[i+1]; i+=2) {
c = str[i+1];
str[i+1] = str[i];
str[i] = c;
printf("%c%c",str[i+1],str[i]);
}


αυτο πχ δεν μου κανει καμια αντιμεταθεση :/
Γνώσεις ⇛ 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 » 28 Αύγ 2011, 14:25

migf1 έγραψε:

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

Νομίζω πως αυτός ο αλγόριθμος έχει πρόβλημα :problem: Ό,τι κείμενο βάλω με κλειδί 2011 μου βγάζει αυτά τα ερωτηματικά �
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 28 Αύγ 2011, 14:36

Star_Light έγραψε:Eχω μια αλλη απορια στο μεταξυ... ο ιδιος αλγοριθμος για αντιμεταθεση γιατι δεν δουλεύει με (+) ?
Ενω δειχνει να επεξεργαζεται με τον ιδιο τροπο τα δεδομενα με το αν βαζαμε (-) και ξεκινουσαμε απο i=1

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

for (i=0; str[i] && str[i+1]; i+=2) {
c = str[i+1];
str[i+1] = str[i];
str[i] = c;
printf("%c%c",str[i+1],str[i]);
}


αυτο πχ δεν μου κανει καμια αντιμεταθεση :/

Βγάλε την printf μέσα από αυτό το loop. Μόλις τελειώσει το loop τη δουλειά του, τύπωσε το str με puts( str ) για να δεις να στα έχει κάνει αντιμετάθεση (με το μάτι πρόχειρα, δεν βλέπω να έχει κάποιο αλγοριθμικό πρόβλημα το loop).

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

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

Δημοσίευσηαπό stamatiou » 28 Αύγ 2011, 14:43

migf1 έγραψε:
Star_Light έγραψε:Eχω μια αλλη απορια στο μεταξυ... ο ιδιος αλγοριθμος για αντιμεταθεση γιατι δεν δουλεύει με (+) ?
Ενω δειχνει να επεξεργαζεται με τον ιδιο τροπο τα δεδομενα με το αν βαζαμε (-) και ξεκινουσαμε απο i=1

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

for (i=0; str[i] && str[i+1]; i+=2) {
c = str[i+1];
str[i+1] = str[i];
str[i] = c;
printf("%c%c",str[i+1],str[i]);
}


αυτο πχ δεν μου κανει καμια αντιμεταθεση :/

Βγάλε την printf μέσα από αυτό το loop. Μόλις τελειώσει το loop τη δουλειά του, τύπωσε το str με puts( str ) για να δεις να στα έχει κάνει αντιμετάθεση (με το μάτι πρόχειρα, δεν βλέπω να έχει κάποιο αλγοριθμικό πρόβλημα το loop).

@stamtiou: ποιος αλγόριθμος από όλους;

Ο πρώτος, στο διορθωμένο κώδικα όταν βάλω κλειδί 2011 μου βγάζει τα ερωτηματικά...
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 28 Αύγ 2011, 14:57

Για τον φίλο Star_Light που από ότι κατάλαβα θέλει να μάθει πως διαχειρίζονται οι δυαδικοί αριθμοί με τη C, παραθέτω έναν απλό κώδικα που αρχικοποιεί ένα (unsigned) byte με την τιμή 2 ( = 00000010), το τυπώνει, ανάβει το 8ο bit και ξανατυπώνει τον αριθμό και τέλος σβήνει το 8ο bit ανάβει το 6ο και ξανατυπώνει τον αριθμό.

Η συνάρτηση void print_byte( const Byte byte ) τυπώνει το byte σε δυαδική, δεκαδική, δεκαεξαδική και οκταδική μορφή.
Η συνάρτηση char *s_byte2binary( char *s, const Byte byte ) μετατρέπει το byte σε δυαδικά ψηφία και τα αποθηκεύει στο s

Ως Byte έχω ορίσει ένα unsigned char, με το σχετικό typedef στην αρχή. Τα bitmasks BIT1, BIT2, ..., ΒΙΤ8 είναι οι δυνάμεις του 2 που αντιστοιχούν στο κάθε bit ενός byte: 2^0, 2^1, ... 2^7

Κάνοντας ένα byte | (OR) με ένα bitmask ανάβουμε το αντίστοιχο bit στο byte. Κάνοντας ένα byte & (AND) με το ~ (NOT) ενός bitmask, σβήνουμε το αντίστοιχο bit στο byte.

Οι τελεστές << και >> μετακινούν όλα τα bits του byte κατά μια θέση προς τα αριστερά και δεξιά, αντίστοιχα (π.χ. αν byte = 2, δλδ 00000010 τότε το: byte <<= 1; μετακινεί όλα τα bits μια θέση προς τα αριστερά, οπότε το byte θα γίνει ίσο με 4, δλδ 00000100)

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

#include <stdio.h>

// Bitmasks

#define BIT1 1 // (1 << 0)
#define BIT2 2 // (1 << 1)
#define BIT3 4 // (1 << 2)
#define BIT4 8 // (1 << 3)
#define BIT5 16 // (1 << 4)
#define BIT6 32 // (1 << 5)
#define BIT7 64 // (1 << 6)
#define BIT8 128 // (1 << 7)

// Custom Types

typedef unsigned char Byte;

// ----------------------------------------------------------------------------------
char *s_byte2binary( char *s, const Byte byte )
{
if ( !s )
return NULL;

int z;
char *cp;
for (z=BIT8, cp=s; z > 0; z >>= 1, cp++)
*cp = (byte & z) == z ? '1' : '0';
*cp = '\0';

return s;
}
// ----------------------------------------------------------------------------------
void print_byte( const Byte byte )
{
char bin[8+1] = {0};

printf( "Bin: %s\t\tDec: %-3d\tHex: %-3x\tOct: %-3o\n",
s_byte2binary(bin, byte), byte, byte, byte );

return;
}
// ----------------------------------------------------------------------------------
int main( void )
{
Byte byte = 2; // αρχικοποίηση

print_byte( byte ); // τύπωμα αριθμού

byte |= BIT8; // άναμμα 8ου bit
print_byte( byte ); // τύπωμα αριθμού

byte &= ~BIT8; // σβήσιμο 8ου bit
byte |= BIT6; // άναμμα 6ου bit
print_byte( byte ); // τύπωμα αριθμού
return 0;
}
Τελευταία επεξεργασία από migf1 και 28 Αύγ 2011, 15:07, έχει επεξεργασθεί 4 φορά/ες συνολικά
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 28 Αύγ 2011, 14:58

stamatiou έγραψε:Ο πρώτος, στο διορθωμένο κώδικα όταν βάλω κλειδί 2011 μου βγάζει τα ερωτηματικά...

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

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

Δημοσίευσηαπό Star_Light » 28 Αύγ 2011, 15:03

migf1 έγραψε:
Star_Light έγραψε:Eχω μια αλλη απορια στο μεταξυ... ο ιδιος αλγοριθμος για αντιμεταθεση γιατι δεν δουλεύει με (+) ?
Ενω δειχνει να επεξεργαζεται με τον ιδιο τροπο τα δεδομενα με το αν βαζαμε (-) και ξεκινουσαμε απο i=1

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

for (i=0; str[i] && str[i+1]; i+=2) {
c = str[i+1];
str[i+1] = str[i];
str[i] = c;
printf("%c%c",str[i+1],str[i]);
}


αυτο πχ δεν μου κανει καμια αντιμεταθεση :/

Βγάλε την printf μέσα από αυτό το loop. Μόλις τελειώσει το loop τη δουλειά του, τύπωσε το str με puts( str ) για να δεις να στα έχει κάνει αντιμετάθεση (με το μάτι πρόχειρα, δεν βλέπω να έχει κάποιο αλγοριθμικό πρόβλημα το loop).

@stamtiou: ποιος αλγόριθμος από όλους;


ααα οκ. Δηλαδη πρωτα κανουμε την δουλεια με την for και μετα τα εκτυπωνουμε ολα μαζι.
Αν εχει σημασια απαντησε κιολας στο τι προβλημα ακριβως δημιουργουσε η printf μεσα στον βρογχο.
Γνώσεις ⇛ 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
Εκτύπωση

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

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