Παραδείγματα & Ασκήσεις στην C

...ασύγχρονα μαθήματα γλώσσας C

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό migf1 » 16 Ιούλ 2011, 01:02

Τώρα το είδα αυτό το ποστ σου :lol:

Star_Light έγραψε:MIGF1 τα διαβασα τα λινκς που μου εδωσες για το memory layout αλλα εχω καποιες αποριουλες....

1. Καταρχην το static βοηθα μια συνάρτηση να μην διαγράφει την τοπικη της μεταβλητή όταν τερματίζει η κλήση της???? Οι καθολικες και οι static μεταβλητες ειναι το ιδιο????

Ναι στην 1η ερώτηση, όχι στη 2η. Οι static είναι προσβάσιμες μόνο μέσα στις συναρτήσεις τους, ενώ οι καθολικές παντού.

2. Αυτα που δίνει ο χρηστης σε ενα προγραμμα σαν εισόδους και διαβάζονται μεσω της scanf ουσιαστικα αποθηκεύονται στο BSS SEGMENT???

Αποθηκεύονται μέσα στις μεταβλητές που έχεις ορίσει. Αν τις μεταβλητές τις είχες αρχικοποιήσει στον ορισμό τους (initialization) πάνε στο Data Segment, αλλιώς στο BSS.

3. Μεσα στο STACK υπαρχουν και οι δεικτες στοιβας που λεγαμε ε???

Όχι, άλλο το ένα άλλο το άλλο... δεν έχουν καμία σχέση μεταξύ τους (πλην ίσως πως και η STACK στη μνήμη υλοποιείται ως στοίβα, στην οποία τοποθετούνται & καταστρέφονται συναρτήσεις, μεταβλητές, κλπ).

4. Η εξοδος της size program δεν καταλαβα ακριβως τι εδειχνε γιατι ειχε και καποια πεδια σε δεκαεξαδικο...

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

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό Star_Light » 16 Ιούλ 2011, 06:19

Ενταξει για πρωτη φορα που τα ειδα στην ζωη μου δεν τα πηγα και ασχημα!!!!! Δεν δωσανε πολυ βαση σε αυτα στην σχολη οι καθηγητες οι δικοι μας
(καλα το ξερω βεβαια πως αυτο δεν ειναι δικαιολογια βεβαια ) ή αληθεια ειναι πως τοτε διαβαζα μονο οτι βαζανε και δεν μου ειχε μπει το μικροβιο να το ψαξω παραπανω τοσο πολυ αλλα τωρα ειμαι μαχιμος... θα ξαναδιαβασω και αυτα που μου επισημαινεις και βλεπουμε. Thanx ;)
Γνώσεις ⇛ 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 Ιούλ 2011, 18:11

migf1 έγραψε:Τώρα το είδα αυτό το ποστ σου :lol:

Αποθηκεύονται μέσα στις μεταβλητές που έχεις ορίσει. Αν τις μεταβλητές τις είχες αρχικοποιήσει στον ορισμό τους (initialization) πάνε στο Data Segment, αλλιώς στο BSS.

.


Για το Data segment έδινε παράδειγμα οτι και καλα
Κώδικας: Επιλογή όλων
int maxcount=99;


αυτο εχει αρχικοποιηθει και απο τα δεξιά δηλαδη εχει 2 τιμες μια αριστερη (διευθυνση) και μια δεξια (τιμή)

στο BSS δινει το παράδειγμα :

Κώδικας: Επιλογή όλων
long sum[1000];


δηλαδη εδω εχει μονο μια αριστερη τιμη και η αχρικοποιηση γινεται απο το λειτουργικο συστημα.

Τωρα σε περιπτωση που εγω ας πουμε εχω ορισει την

Κώδικας: Επιλογή όλων
int a;
printf("Dwse to a ");
scanf("%d",&a):


συμφωνα με τα παραπανω κανονικα το a θα επρεπε να αποθηκευτει στο ΒSS ΕΠΕΙΔΗ δεν ειναι αρχικοποιημενο και ως προς τα δεξια
αλλα μετα δινεται η τιμη του απο τον χρηστη.... οποτε???? :/
Γνώσεις ⇛ 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 » 16 Ιούλ 2011, 22:00

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

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό Star_Light » 18 Ιούλ 2011, 00:57

AXA! Eγινε. Ευχαριστω!!!!
Γνώσεις ⇛ 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 » 21 Ιούλ 2011, 00:48

Απλή υλοποίηση Κρεμάλας: viewtopic.php?f=6&t=19504
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό migf1 » 21 Ιούλ 2011, 21:44

migf1 έγραψε:Απλή υλοποίηση Κρεμάλας: viewtopic.php?f=6&t=19504

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

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό Star_Light » 23 Ιούλ 2011, 04:11

Διαβαζω και το τουτοριαλ με τα strings του migf1 και εφτιαξα εναν απλο κωδικα μονο που εχει 3 warnings

Κώδικας: Επιλογή όλων
/*================================================
Aplos xeirismos strings | sugriseis / upologismos
mikous

23/7/11
================================================== */

#include<stdio.h>
#define MAX_STR1_LEN 11
#define MAX_STR2_LEN 10

int main()
{

char str1[MAX_STR1_LEN]="Hello mann";
char str2[MAX_STR2_LEN]="Hello man";

printf("To 1o string einai: %s \n\n ", str1);
printf("To 2o string einai: %s \n\n", str2);


printf("To apotelesma tis sugrisis einai: %d \n\n",strcmp(str1,str2)); /* H strcmp sugrinei ta 2 strings kai an einai isa
epistrefei 0 an str1 < str2 epistrefei arnitiko ari8mo < 0 an str1 > str2 epistrefei megalitero arithmo > 0 */

printf("To trexon mikos tis str1 einai : %ld \n\n", strlen(str1)); /* Dinei to trexon mikos i strlen kai oxi to megisto mikos tou */
printf("To trexon mikos tis str2 einai : %ld \n\n", strlen(str2));

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

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό migf1 » 23 Ιούλ 2011, 10:30

Καλημέρα,

βάλε: #include <string.h> για να μη βγάζει warnings ;)

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

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό Star_Light » 23 Ιούλ 2011, 22:57

ΑΧΑ οκ.

Κατι αλλο τωρα... στους οδηγους για τα strings σε καποιο σημειο λες ->

"Επειδή όμως η fgets() διατηρεί και το ENTER μέσα στο s, είναι κι αυτή ολίγον... σπαστική, αφού συχνά χρειάζεται να πάμε μετά το διάβασμα να το σβήσουμε χειροκίνητα, αντικαθιστώντας το με τον μηδενικό χαρακτήρα '\0'."

Δηλαδη τι ακριβως εννοεις ????

EDIT: OK. Καταλαβα ουσιαστικα διατηρει μεσα και τον χαρακτηρα για το enter (που σταματαει) αλλα και τον χαρακτηρα '/0' οποτε κατι τετοιο σε απλη μεταφραση σημαινει πλεονασμος... οποτε παμε να φτιαξουμε μια συναρτηση που ειτε θα σταματαει με το ENTER ειτε με το τελος του string (n-1) απλα μπαινει και το n-1 επειδη εδω υπολογιζεται και ο κενος ετσι??? ΟΠοτε οι ωφελιμοι χαρακτηρες ειναι n-1 αν δηλαδη εχουμε s[10] τοτε το n ειναι 10 ωραια???? ΑΠο 0....9 επομενως οι ωφελιμοι ειναι n-1 δηλαδη απο 0....8 επειδη στο 9 θα μπει το '/0'. Οκ?????

και κατι ακομη.... ο χαρακτηρας ENTER ας πουμε απο τι συμβολιζεται???? => Οκ και αυτο... συμβολιζεται με "\n" γιατι ειναι ο χαρακτηρας αλλαγής γραμμής.
Γνώσεις ⇛ 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
Εκτύπωση

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

  • ΣΧΕΤΙΚΑ ΘΕΜΑΤΑ
    ΑΠΑΝΤΗΣΕΙΣ
    ΠΡΟΒΟΛΕΣ
    ΣΥΓΓΡΑΦΕΑΣ

Επιστροφή στο Μαθήματα C

cron