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

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

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

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

Δημοσίευσηαπό Ilias95 » 15 Μαρ 2012, 16:38

Star_Light έγραψε:
migf1 έγραψε:
Αφού και να σου πως, σε 2 μέρες θα με ξαναρωτήσεις το ίδιο, και μετά από 5 μέρες θα με ξαναρωτήσεις και μετά από 15 θα με ματα-ξανα-ρωτήσεις.

Στο λέει και ο King, στο λέω κι εγώ πως είναι κοινή πρακτική... δεν σου αρκεί; :P


Ναι και ο King παντα την χρησιμοποιει αλλα δεν εχει κανει καπου λογο
γιατι την βαζει μετα το default ας πουμε εκτος και αν δεν το θυμαμαι εγω τωρα επειδη ειμαι και λιγο κουρασμενος. ΕΝιγουει δεν θα το ψιρίσω αλλο
προς μεγαλη σου εκπληξη!

Γιατί πιθανόν κάποια στιγμή να θες να συμπληρώσεις extra cases και να ξεχάσεις ότι η παραπάνω δεν έχει break.
Ο χρόνος που θα φας μετά για να βρεις το σφάλμα στο πρόγραμμα σου θα είναι περισσότερος απ' το να γράψεις απλά break.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 15 Μαρ 2012, 17:38

migf1 έγραψε:
Star_Light έγραψε:
Eλα Χάρη ! Κάπου στο insomnia σε πήρε το μάτι μου να τεχνολογείς ! Tι εγινε ο hex editor... έβγαλες άκρη τελικα? :D

Τον δουλεύω. Όσο προχωράει τόσο πιο σύνθετος γίνεται ο κώδικας. Το search το έβαλα προσωρινά στην άκρη και ασχολούμαι με σελιδοδείκτες τώρα...
...
Γίνεται σταδιακά δυσκολότερο να διατηρηθεί μονάχα ένα πηγαίο αρχείο, οπότε σίγουρα θα το σπάσω σε μικρότερα...

Έτσι όπως πάει θα ξεπεράσει σε όγκο τον κώδικα του linux kernel :lol:

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

> ll lang/ *.c *.h mak*.mak

-rw-r--r-- 1 Dell Administrators 7.6K Mar 15 15:14 con_color.h
-rw-r--r-- 1 Dell Administrators 30K Mar 15 15:41 do.c
-rw-r--r-- 1 Dell Administrators 33K Mar 15 15:11 hv.c
-rw-r--r-- 1 Dell Administrators 1.1K Mar 15 12:23 hv.h
-rw-r--r-- 1 Dell Administrators 4.1K Mar 15 15:14 hvcolor.h
-rw-r--r-- 1 Dell Administrators 5.1K Mar 15 15:25 hvdefs.h
-rw-r--r-- 1 Dell Administrators 1.3K Mar 14 14:19 hvlang.h
-rw-r--r-- 1 Dell Administrators 4.0K Mar 15 11:29 hvproto.h
-rw-r--r-- 1 Dell Administrators 1.1K Mar 15 13:00 hvtypes.h
-rw-r--r-- 1 Dell Administrators 249 Mar 15 10:45 makefile.mak
-rw-r--r-- 1 Dell Administrators 14K Mar 15 11:46 skin.c
-rw-r--r-- 1 Dell Administrators 8.1K Mar 15 12:00 util.c
-rw-r--r-- 1 Dell Administrators 3.5K Mar 14 14:20 w32con_cpout.h

lang/:
total 14K
-rw-r--r-- 1 Dell Administrators 6.4K Mar 15 15:43 hvlang_el.h
-rw-r--r-- 1 Dell Administrators 6.1K Mar 15 15:37 hvlang_en.h

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

> wc --lines lang/* *.c *.h mak*.mak

136 lang/hvlang_el.h
132 lang/hvlang_en.h
1206 do.c
1264 hv.c
333 skin.c
357 util.c
268 con_color.h
39 hv.h
117 hvcolor.h
162 hvdefs.h
40 hvlang.h
88 hvproto.h
35 hvtypes.h
130 w32con_cpout.h
11 makefile.mak
4318 total
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 15 Μαρ 2012, 18:31

4.318 γραμμές.

Not bad , not bad !
Γνώσεις ⇛ 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

Δημοσίευσηαπό Star_Light » 15 Μαρ 2012, 19:33

Στην σελ. 92 στο 4o Q απο περιεργεια τι εννοει οταν λεει

For example , a switch statement can contain labels that aren't preceded by the word case which leads to an amusing trap ....

Σε μια if δεν βάζουμε μεσα τελεστη εκχωρησης επειδη δεν ειναι σχεσιακός? Και κανονικα το if (x = 1) δεν μπορει να αποτιμηθει με λογική τιμη? ή επειδη θα μπερδεψει τον αναγνωστη?

Επισης if((x=1)) αυτο γιατι το δεχεται???
Γνώσεις ⇛ 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

Δημοσίευσηαπό migf1 » 15 Μαρ 2012, 20:32

Star_Light έγραψε:Στην σελ. 92 στο 4o Q απο περιεργεια τι εννοει οταν λεει

For example , a switch statement can contain labels that aren't preceded by the word case which leads to an amusing trap ....

Λέει πως η switch δέχεται και σκέτες ετικέτες (labels) χωρίς να προηγείται η λέξη "case", περίπτωση κατά την οποία δημιουργείται μια διασκεδαστική παγίδα. Δεν ξέρω τι εννοεί μιας και δεν ήξερα καν πως μπορούμε να έχουμε σκέτες ετικέτες, χωρίς "case" μπροστά (και δεν έχω και καμία όρεξη να το ψάξω... δεν πρόκειται να γράψω ποτέ σκέτη ετικέτα χωρίς "case" μπροστά).

έγραψε:
Σε μια if δεν βάζουμε μεσα τελεστη εκχωρησης επειδη δεν ειναι σχεσιακός? Και κανονικα το if (x = 1) δεν μπορει να αποτιμηθει με λογική τιμη? ή επειδη θα μπερδεψει τον αναγνωστη?

Δεν καταλαβαίνω την ελληνική ορολογία που χρησιμοποιείς (π.χ. "σχεσιακός") αλλά μια χαρά εκχωρήσεις μπορούμε να κάνουμε μέσα στις if (και σε οποιαδήποτε άλλη συνθήκη)... αρκεί να το έχουμε κάνει συνειδητά.

έγραψε:Επισης if((x=1)) αυτο γιατι το δεχεται???

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

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

Δημοσίευσηαπό Star_Light » 15 Μαρ 2012, 21:32

migf1 έγραψε:
Λέει πως η switch δέχεται και σκέτες ετικέτες (labels) χωρίς να προηγείται η λέξη "case", περίπτωση κατά την οποία δημιουργείται μια διασκεδαστική παγίδα. Δεν ξέρω τι εννοεί μιας και δεν ήξερα καν πως μπορούμε να έχουμε σκέτες ετικέτες, χωρίς "case" μπροστά (και δεν έχω και καμία όρεξη να το ψάξω... δεν πρόκειται να γράψω ποτέ σκέτη ετικέτα χωρίς "case" μπροστά).


XAXXAX. Ok ουτε εγω θα το ψιρισω αλλο γιατι με αυτα και αυτα θα φτασω να παλευω με ενα βιβλιο 1 χρονο
και να μην εχω καταφερει να γραψω ενα προγραμμα της προκοπης χαχαχα ορατος ο κινδυνος ετσι? :P

migf1 έγραψε:
Δεν καταλαβαίνω την ελληνική ορολογία που χρησιμοποιείς (π.χ. "σχεσιακός") αλλά μια χαρά εκχωρήσεις μπορούμε να κάνουμε μέσα στις if (και σε οποιαδήποτε άλλη συνθήκη)... αρκεί να το έχουμε κάνει συνειδητά.


relational ειναι ο σχεσιακος...

migf1 έγραψε:
Γιατί να ΜΗΝ το δεχτεί???


Απλα επειδη στο

Κώδικας: Επιλογή όλων
if ( x=5)

μου βγαζει warn... εν παση περιπτωση για να γινω πιο συγκεκριμενος... γιατι βγαζει warn ?
Γνώσεις ⇛ 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

Δημοσίευσηαπό migf1 » 15 Μαρ 2012, 21:49

Star_Light έγραψε:
Απλα επειδη στο

Κώδικας: Επιλογή όλων
if ( x=5)

μου βγαζει warn... εν παση περιπτωση για να γινω πιο συγκεκριμενος... γιατι βγαζει warn ?

Σου βγάζει warning (προειδοποίηση δηλαδή) για να σου επιστήσει την προσοχή στο συγκεκριμένο σημειο, ώστε να σιγουρευτείς πως όντως θέλεις να κάνεις εκχώρηση εκεί και όχι σύγκριση. Οι προειδοποιήσεις είναι δεν είναι κατ' ανάγκη νοηματικά σφάλματα (σίγουρα δεν είναι συντακτικά σφάλματα), είναι σημεία με ενδεχόμενη δυναμική δημιουργίας bugs.

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

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

Δημοσίευσηαπό Star_Light » 15 Μαρ 2012, 22:20

migf1 έγραψε:
Σου βγάζει warning (προειδοποίηση δηλαδή) για να σου επιστήσει την προσοχή στο συγκεκριμένο σημειο, ώστε να σιγουρευτείς πως όντως θέλεις να κάνεις εκχώρηση εκεί και όχι σύγκριση. Οι προειδοποιήσεις είναι δεν είναι κατ' ανάγκη νοηματικά σφάλματα (σίγουρα δεν είναι συντακτικά σφάλματα), είναι σημεία με ενδεχόμενη δυναμική δημιουργίας bugs.

Για το συγκεκριμένο μιλήσαμε και 3-4 σελίδες πριν, εκεί που με ρώτησες γιατί βάζω πρώτα την σταθερά και μετά την μεταβλητή στις συγκρίσεις ισότητες, και σου είπα για να παράξει σφάλμα αν κατά λάθος κάνω εκχώρηση αντί για σύγκριση. Άρα είναι ακριβώς το ίδιο πράγμα που με ρωτάς και τώρα (συνηθισμένα τα βουνά στα χιόνια :lol: )


Οκ! Απλα μπερδευτηκα προς στιγμην οτι μεσα στην if θα πρέπει να δεχόμαστε και καλα μονο λογικες προτασεις...(αυτες που μπορουν να αποτιμηθουν με 0 ή 1 τελοςπαντων)

οταν λες νοηματικα σφαλματα εννοεις τα λογικα ετσι?
Γνώσεις ⇛ 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

Δημοσίευσηαπό Star_Light » 16 Μαρ 2012, 03:24

Λοιπον δοκιμασα την άσκηση 1 στην σελ. 95

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

πχ αν δινεις -999 να σου λεει πως έδωσες τριψηφιο.... λοιπον στους θετικους ο παρακατω κωδικας δουλευει μια χαρα
αν και εχει το προβλημα οτι αμα δωσεις πχ 022 το λαμβανει υποψιν σαν 22 και λεει οτι εχει 2 ψηφια.... ενω θα ηθελα και αυτο
να το διορθωσω.... Παρολαυτα στους αρνητικους εχει μεγαλο προβλημα... ας πουμε δινεις οποιονδηποτε αρνητικο και σου λεει οτι
εχει 2 ψηφια....

Μορφοποιημένος Κώδικας: Επιλογή όλων
#include<stdio.h>
int main(void)
{
int number;

printf(" Give the number: ");
scanf("%d" , &number);

if(number>=0 && number<10)
printf("The number %d has one digit " , number);

else if(number<100)
printf("The number %d has two digits " , number);

else if(number<1000)
printf(" The number %d has three digits " , number);

else if(number<0 && number>-9)
printf(" The number %d has one digit " , number);

else if(number<=-10 && number>= -99)
printf(" The number %d has two digits " , number);

else if(number<= - 100 && number >= -999 )
printf(" The number %d has three digits " , number);

else
printf(" Over than three digits ");

return 0;
}


Δεν νομιζω να εχω κανει καποιο λαθος στην διάταξη των πραγματικων αριθμών :/

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


σημαινει -8 , -7 , -6...... - 1.

Κώδικας: Επιλογή όλων
number<=-10 && number>= -99


σημαινει -11 , -12 ...... -97... -98

(η σειρα που τα βάζω ειναι λαθος γιατι οι μεγαλυτεροι συνηθως πανε απο αριστερα στα δεξια και το -97 δεν ειναι μεγαλυτερος του -11 πχ)

edit: Η scanf δημιουργει το προβλημα γιατι διαβάζει και το πρόσημο.
Γνώσεις ⇛ 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

Δημοσίευσηαπό Star_Light » 16 Μαρ 2012, 06:58

Μορφοποιημένος Κώδικας: Επιλογή όλων
#include<stdio.h>
int main(void)
{
int number;

ΑΠΟΜΟΝΩΣΗ ->
//=====================================================================
/*printf(" Give a possitive number: ");
scanf("%d" , &number);
printf(" Give a negative number: ");
scanf("%d", &number);


if(number>=0 && number<10)
printf("The number %d has one digit " , number);

else if(number<100)
printf("The number %d has two digits " , number);

else if(number<1000)
printf(" The number %d has three digits " , number);*/

//==============================================================

ΑΠΟ ΕΔΩ και κατω ισχυει....

printf(" Give a negative number: ");
scanf("%d", &number);

if(number>-9 && number<0)
printf(" The number %d has one digit " , number);

else if(number>= -99 && number<=-10)
printf(" The number %d has two digits " , number);

else if(number >= -999 && number<= - 100)
printf(" The number %d has three digits " , number);

else
printf(" Over than three digits ");

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

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

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