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

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

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

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

Δημοσίευσηαπό Qdata » 07 Σεπ 2011, 18:45

Καλησπέρα παιδιά!Βλέπω γέμισαν 122 σελίδες! :thumbup:
Θυμήθηκα σήμερα το πρωί μια άσκηση(του migf1) η οποία παλιά με παίδεψε πάρα πολύ.Η άσκηση είναι στα σχόλια και η λύση παρακάτω:

Κώδικας: Επιλογή όλων
/*** Άσκηση:
* Γράψτε ένα πρόγραμμα που θα ζητάει έναν ακέραιο n και θα τυπώνει ένα δέντρο
* από αστερίσκους με ύψος n και πλάτος 2n-1. Για παράδειγμα, για n=6 θα τυπώνει
* το παρακάτω:
*
* *
* ***
* *****
* *******
* *********
* ***********
* Από: Qdata
*/

#include <stdio.h>
#include <stdlib.h> //Για exit()

main()
{
int height,width,i,s,a,calc;
printf("Δώστε το ύψος: ");
scanf("%d", &height);
printf("------------------------");
for(i=height;i>=1;i=i-1)
{
printf("\n");
for(s=1;s<=(i-1);++s)
printf(" ");
calc = (2*height)-((i-1)+(i-1));
for(a=2;a<=calc;++a) //Γιατί άραγε a=2;
printf("*");
}
printf("\n------------------------\n");
exit(0);
}
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 07 Σεπ 2011, 19:38

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

#include<stdio.h>
int main(void)
{
int x1[10]={0};
int x2[3]={0,1,2};
int j=0;
int i=0;

while(i!=10)
{
printf("%d",x1[i]);
i++;
}


while(j!=4) //second case
{
printf("\n%d",x2[j]);
j++;
}

return 0;
}


ακομη διαβαζω λιγο τα χθεσινα και παρατηρησα το εξης... συμβαινει κατι περιεργο εδω... ετσι οπως ειναι ο κωδικας δινει 0000000000 την 1η φορα
και μετα 0120

ενω αμα βγαλω τελειως το 1ο while μαζι με τις αρχικοποιησεις του πρωτου πινακα αλλα και του i βγαζει μετα 0 1 2 3 το 2ο while.... σαν ανω υπερχειλιση δηλαδη εμφανιζει τον αριθμο 3. Κανονικα αυτο γινεται επειδη αυτοματα το λειτουργικο το θεωρει σαν επομενη θεση και απλα αυξανει κατα 1? ή λογω του j++? Με σκαλωσε λιγο η τιμη στην υπερχειλιση μεταξυ ολοκληρου του κωδικα και οταν έχουμε μονο το 2ο loop σε while πχ.
Γνώσεις ⇛ 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 » 07 Σεπ 2011, 20:06

Ωραίος φίλε Qata !!!! :) Εδώ μπορείς να δεις τη δική μου λύση: http://ideone.com/lJIaq

@Star_LIght: είναι τελείως άστοχο να προσπαθείς να βγάλεις σωστά συμπεράσματα από undefined τιμές! Το x2[3] είναι undefined !!!
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 07 Σεπ 2011, 20:28

migf1 έγραψε:Ωραίος φίλε Qata !!!! :) Εδώ μπορείς να δεις τη δική μου λύση: http://ideone.com/lJIaq

@Star_LIght: είναι τελείως άστοχο να προσπαθείς να βγάλεις σωστά συμπεράσματα από undefined τιμές! Το x2[3] είναι undefined !!!


Οκ boss. Θα το σημειωσω.. :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++

Δημοσίευσηαπό migf1 » 07 Σεπ 2011, 20:48

Ναι :)

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

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

Δημοσίευσηαπό stamatiou » 07 Σεπ 2011, 21:07

Εγώ δεν ξέρω αν έγινε σωστά, είμαι από windows :(
Spoiler: show
Κώδικας: Επιλογή όλων
char *s_copy( char *dst, const char *src )
{
if(!(dst) || !(src) || !*dst || !*src) return -1;
char *save = dst;
while ( (*dst++=*src++) )
;
return save;
}
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 08 Σεπ 2011, 07:46

Καλημέρα παιδια... migf1 να ρωτησω... Το οτι ένας δείκτης ειναι άκυρος σημαινει πως δείχνει σε περιοχή που ειναι απροσδιόριστη... δεν ξερω αν ειναι το ιδιο με αυτο που ειπα προχθες μονος μου οτι μπορει να δειχνει και σε περιοχη που υπάρχουν εγγραφες του λειτουργικου συστηματος κτλπ... για αυτο ειναι άκυρος λοιπον? ή ειναι αξίωμα? Οτι δηλαδη παντα ενας δεικτης ο οποιος δεν γνωριζεις που δειχνει θα θεωρειται μη εγκυρος!
Γνώσεις ⇛ 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 » 08 Σεπ 2011, 09:47

Καλημέρα,
stamatiou έγραψε:Εγώ δεν ξέρω αν έγινε σωστά, είμαι από windows :(

Pelles C (δωρεάν, πληρέστατη, ενημερωμένη, ταχύτατη )
mingw32 - gcc/g++ port για Windows (δεν υποστηρίζει Posix programming, υποστηρίζει όμως Windows programming... ο standard c/c++ compiler στα πιο δημοφιλή open-source IDE για windows)
mingw64 - αρκετά πρόσφατο, δεν το έχω δοκιμάσει
cygwin - Posix περιβάλλον για Windows (υποστηρίζει κανονικά και Posix programming) ... δεν το έχω δοκιμάσει

Εγώ στα Windows χρησιμοποιώ mingw32 και Pelles C (έχει φοβερό debugger και πανεύκολο setup )

έγραψε:
Spoiler: show
Κώδικας: Επιλογή όλων
char *s_copy( char *dst, const char *src )
{
if(!(dst) || !(src) || !*dst || !*src) return -1;
char *save = dst;
while ( (*dst++=*src++) )
;
return save;
}

Θα περιμένω να το δοκιμάσεις, καθώς και τη λύση που θα δώσουν κι ο Κώστας ενδεχομένως κι άλλα παιδιά, για να απαντήσω συνολικά αν είναι (για αρχή πάντως εκείνο το return -1 που κολλάει; η συνάρτηση επιστρέφει τιμές τύπου char *)

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

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

Δημοσίευσηαπό Star_Light » 08 Σεπ 2011, 11:00

aha οκ αρα ειναι αυτο που σκεφτηκα και εγω χθες οτι δηλαδη ειναι αξιωμα της ιδιας της γλωσσας και αρχη της επομενως και δικια σου. :D

επανερχομαι σε λιγο με μερικες αποριες απο το ποστ σου στην Σελ. 118 ... ως τωρα εχω διαβασει ολα οσα εχεις βαλει περι strings... αρχισαμε να μπαινουμε στα πιο βαθεια βεβαια...

θελω να πω αυτο σιγουρα δεν ειναι υλη που διδασκεται σε αρχαριους εσυ τι λες?
Γνώσεις ⇛ 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 » 08 Σεπ 2011, 11:29

Μια εξασκηση στα γρηγορα.....λιγο πριν παραθεσω αποριες

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

#include<stdio.h>
#define INVALID -1
#define N 10

int main(void)
{
int x[N]={1,2,3,4,5,6,7,8,9,-1};
int *i;
i=x;

while(*i!=-1)
{
if(i==NULL)
printf("End");
else if(*i%2==0)
{
printf("\n ... ");
printf("\n%d",*i);
}
else if(*i%2==1)
{
printf("\n ... ");
printf("\n %d", *i);
}
i++;
}


return 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
Εκτύπωση

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

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