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

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

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

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

Δημοσίευσηαπό Star_Light » 27 Αύγ 2011, 20:45

Εδω =>
Κώδικας: Επιλογή όλων
for (i=1; s[i] & s[i-1]; i+=2)


και που τελειωνει ας πουμε ολο αυτο? ΚΟιτα οι κωδικες σου ειναι αψογοι και μου κανει πραγματικα
εντυπωση το οτι ακομη και αν σου δωσουν κατι που ισως να μην εχεις ξανακανει το ξεπετας ευκολα
το ειχες απο μικρος αυτο το ταλεντο? Εγω να κοιταξω δικους σου κωδικες αλλα ετσι δουλεια δεν γινεται :P
δεν ξερω τι επαθα σημερα την αλλη φορα οι συμβολοσειρες μου εβγαιναν καλα... Και για να πω και ενα μυστικο
στις διακοπες ειχα παρει ενα βιβλιο της C μαζι μου για ασκησεις... πιο πολυ για διορθωσεις κωδικα κτλπ
φυσικα αυτο το ανοιξα μονο 2 φορες. Οταν ημουν στο καραβι και πηγαινα και βαριομουν και δεν ειχα τι αλλο να κανω
και αλλη μια φορα ενα βραδυ στις διακοπες που επισης δεν ειχα κατι αλλο να κανω. Επειδη ειπες πως παρα-αποτοξινοθηκα...
αμ δε!! αμ δεεε :lol: απλα μεχρι να συνηθισει το μυαλο να δουλευει προγραμματιστικα θα μας βγει λιγο η παναγια :P
Γνώσεις ⇛ 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 » 27 Αύγ 2011, 20:57

αααα οκ κανεις μια απλη αντιμεταθεση και σωζεις την τιμη καπου για να μην την χασεις ... τον τελεστη AND βεβαια δεν καταλαβαινω γιατι τον θες μεσα στην for δηλαδη αν καποιο απο τα 2 δωσει 0 τερματίζει η συνθήκη?
Γνώσεις ⇛ 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 » 27 Αύγ 2011, 21:22

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

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

Δημοσίευσηαπό Star_Light » 27 Αύγ 2011, 21:23

stamatiou έγραψε:Συγνώμη που διακόπτω τη συζήτηση αλλά στο πρόγραμμά μου γιατί δεν παίρνει μερικές φορές input;


Μπα οχι πηγε βολτα ο migf ας πιει καμια γουλια φραπε και για εμας . Τι εννοεις δεν παιρνει input?
Γνώσεις ⇛ 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 » 27 Αύγ 2011, 21:46

Κώδικας: Επιλογή όλων
#include <stdio.h>
// ----------------------------------------------------------------------------------------
char *cipher( char *s,int key )
{
while( *s ) *s++ ^= key;
return 0;
}
// ----------------------------------------------------------------------------------------

int len(char *c) {
int i = 0;
while(*c++) {
i++;
}
return i;
}

// ----------------------------------------------------------------------------------------

int *decipher(char *s,int key) {
while(*s) *s++ ^= key;
return 0;
}

int main( void )
{
int key,tool;
char inbuf[1001];
printf("Τι εργαλείο θέλετε να χρησιμοποιήσετε;\n1.Κρυπτογράφησης\t2.Αποκρυπτογράφησης;");
scanf("%d",&tool);
if(tool == 1) {
do {
printf("Εισάγετε το κείμενο για κρυπτογράφηση: (το οποίο θα πρέπει να είναι μέχρι 1000 χαρακτήρες!:");
fgets(inbuf,1001,stdin);
printf("Εισάγετε κλειδί: ");
scanf("%d",&key);
}while(((len(inbuf)) <= 1000) && ((*inbuf) != NULL) && (key != 0));
cipher(inbuf,key);
puts(inbuf);
}else if(tool == 2) {
do {
printf("Εισάγετε το κρυπτογραφημένο κείμενο: ");
fgets(inbuf,1001,stdin);
printf("Εισάγετε το κλειδί κρυπτογράφησης: ");
scanf("%d",&key);
}while(((len(inbuf)) <= 1000) && ((*inbuf) != NULL) && (key != 0));
decipher(inbuf,key);
puts(inbuf);
}
return 0;
}
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 27 Αύγ 2011, 22:05

οοοπ νατος ο σταματιου.. πηρε φορα και βγηκε μπροστα :D
Γνώσεις ⇛ 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 » 27 Αύγ 2011, 22:23

Δεν μ αρεσει ομως η εξοδος που δινει ο
Κώδικας: Επιλογή όλων
for (i=1; str[i]!=0; i+=2) {
c = str[i-1];
str[i-1] = str[i];
str[i] = c;
printf("%c",str[i]);
}


ΑΝ του δωσω HELLOMAN δινει HLOA ενω εγω ηθελα να δινει ΕΗLLMONA αλλιως ποιο το νοημα της αυξησης κατα 2 του i .

Πχ εστω η διαταξη

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

========================
0 1 2 3
========================


εφοσον έχουμε και αρτιο πληθος στην συμβολοσειρα δεν μενει στην απεξω κανενα
αρα
πριν την αντιμεταθεση 0 1 2 3
μετα την αντιμεταθεση 1 0 3 2

τελοςπαντων... μολις το εφτιαξα απλα ηθελε μεσα στην printf και ενα str[i-1] (ΧΑΖΟΣ)

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

for (i=1; str[i]!=0; 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++

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

Star_Light έγραψε:[center]... τον τελεστη AND βεβαια δεν καταλαβαινω γιατι τον θες μεσα στην for δηλαδη αν καποιο απο τα 2 δωσει 0 τερματίζει η συνθήκη?

Ήταν λάθος... && ήθελα να γράψω κι είχα γράψει & :(
(το διόρθωσα και στο αρχικό ποστ, thx!)

Όσο για τη χρησιμότητά του, ελέγχει να μην είναι '\0' κανένα από τα 2 μέλη του ζεύγους των χαρακτήρων πριν προχωρήσει στην αντιμετάθεση.
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, 01:44

migf1 έγραψε:
Star_Light έγραψε:[center]... τον τελεστη AND βεβαια δεν καταλαβαινω γιατι τον θες μεσα στην for δηλαδη αν καποιο απο τα 2 δωσει 0 τερματίζει η συνθήκη?

Ήταν λάθος... && ήθελα να γράψω κι είχα γράψει & :(
(το διόρθωσα και στο αρχικό ποστ, thx!)

Όσο για τη χρησιμότητά του, ελέγχει να μην είναι '\0' κανένα από τα 2 μέλη του ζεύγους των χαρακτήρων πριν προχωρήσει στην αντιμετάθεση.


Ε ναι λογω κεκτημένης ταχύτητας μα ειπα και εγω τι κανει εκει.... Κατι αλλο που παρατηρησα ειναι οτι οταν η συμβολοσειρά έχει άρτιο το πληθος των συμβόλων της τοτε οι αντιμεταθέσεις δουλεύουν ολες σαν ζευγάρια... οταν έχει ομως περιττο το πλήθος των συμβόλων ο τελευταίος χαρακτήρας μένει ως εχει. Κατι πρεπει να κανω να τον κοβω... γιατι δεν μ αρεσει αυτο αλλα επειδη προς το παρον ειμαι πτωμα παω να την πεσω σε λιγο και θα το δω και αυριο.
Γνώσεις ⇛ 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, 01:58

Θέλει ξεχωριστό έλεγχο για το αν είναι μονός ο αριθμός των χαρακτήρων... δεν αξίζει τον κόπο. Μια χαρά είναι κι έτσι ;)

@stamatiou: Αφενός είχες πρόβλημα στις συνθήκες των do-while κι αφετέρου είχες πρόβλημα και με το line-buffering λόγω των scanf που χρησιμοποιούσες. Άλλαξα τον κώδικά σου ώς εξής (ως συνήθως, έκανα κι άλλες αλλαγές :lol: )

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

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

#define MAXINBUF 1000+1

// ------------------------------------------------------------------------------------
/*** UNUSED
int len( char *s )
{
int i = 0;
while ( *s++ )
i++;
return i;
}
***/
// ------------------------------------------------------------------------------------
char *s_get(char *s, size_t len)
{
char *cp;
for (cp=s; (*cp=getc(stdin)) != '\n' && (cp-s) < len-1; cp++ )
;
*cp = '\0';

return s;
}
// ------------------------------------------------------------------------------------
void cipher( char *s, int key )
{
while( *s )
*s++ ^= key;
return;
}
// ------------------------------------------------------------------------------------
void decipher( char *s, int key )
{
while(*s)
*s++ ^= key;
return;
}
// ------------------------------------------------------------------------------------
int main( void )
{
int tool, key;
char s[ MAXINBUF ] = "", inbuf[ MAXINBUF ] = "";

printf("Επιλέξτε Εργαλείο\n-------------------\n1. Κρυπτογράφηση\n2. Αποκρυπτογράφηση\n-------------------\n> ");
s_get(inbuf, MAXINBUF);
tool = atoi( inbuf );

// Cipher
if (tool == 1)
{
do { // read s
printf("\nΚείμενο προς κρυπτογράφηση (έως 1000 χαρακτήρες): ");
s_get(s, MAXINBUF);
} while (*s == '\0');

do { // read key
printf("Εισάγετε κλειδί: ");
s_get(inbuf, MAXINBUF);
key = atoi( inbuf );

} while ( *inbuf == '\0' || key == 0);

cipher(s, key);
puts( s );
}

// Decipher
else if (tool == 2)
{
do { // read s
printf("\nΕισάγετε το κρυπτογραφημένο κείμενο: ");
s_get(s, MAXINBUF);
} while (*s == '\0');

do { // read key
printf("Εισάγετε το κλειδί κρυπτογράφησης: ");
s_get(inbuf, MAXINBUF);
key = atoi( inbuf );

} while ( *inbuf == '\0' || key == 0 );

decipher(s, key);
puts( s );
}

// Error
else
puts("Invalid option");

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

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

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