Απαντήσεις θέματος 2 Απηά πνπ έπξεπε λα γξάςεηε (δελ ρξεηαδόηαλ δηθαηνιόγεζε εθηόο από ην Γ) Α return a*b; Β 0:acegf2, 1: acegf23, 2: acegf234, 3:acegf2345, 4:acegf23456, 5:acegf234567, 6:acegf2345678, 7:acegf23456789, 8:acegf234567890, 9:acegf2345678901 Γ Μεηά ηελ εθηέιεζε ηεο ζπλάξηεζεο func επηζηξέθεηαη ε ηηκή ηνπ δείθηε ζηελ νπνία όκσο ζέζε κλήκεο δελ ππάξρεη ε ηηκή «string». Γ 1x3 όπνπ x ε ηηκή ηνπ ΑΔΜ Δ abcxb234 Παξαθάησ αθνινπζεί αλαιπηηθή επίιπζε ησλ εξσηεκάησλ.
Λύσεις Θέμα Α 1 int func(int a,int b) 2 { 3 if (b = = 1) 4 return (a); 5 else 6 return a+func(a,b-1); 7 } func(a,1) Αο ππνζέζνπκε όηη θαινύκε ηε ζπλάξηεζε θαη όηη ην b έρεη ηελ ηηκή 1. Τόηε, ζην if θαιείηαη ε γξακκή 4 θαη ε ζπλάξηεζε επηζηξέθεη ην a. Άξα func(a,1)-> a func(a,2) Αο ππνζέζνπκε όηη θαινύκε ηε ζπλάξηεζε θαη όηη ην b έρεη ηελ ηηκή 2. Τόηε, ζην if θαιείηαη ε γξακκή 6 θαη ε ζπλάξηεζε επηζηξέθεη ην a ζπλ απηό πνπ επηζηξέθεη ε func(a,b-1)δειαδή ε func(a,1) δειαδή ην a. Άξα, ε ζπλάξηεζή καο επηζηξέθεη ην a+a=2a Άξα func(a,2)-> 2a func(a,3) Αο ππνζέζνπκε όηη θαινύκε ηε ζπλάξηεζε θαη όηη ην b έρεη ηελ ηηκή 3. Τόηε, ζην if θαιείηαη ε γξακκή 6 θαη ε ζπλάξηεζε επηζηξέθεη ην a ζπλ απηό πνπ επηζηξέθεη ε func(a,b-1)δειαδή ε func(a,2) δειαδή ην 2a. Άξα, ε ζπλάξηεζή καο επηζηξέθεη ην a+2a=3a Άξα func(a,3)-> 3a κοκ Σπλεπώο, ε func(a,b)-> ab θαη ε δεηνύκελε εληνιή είλαη ε return a*b;
Θέμα B 1 int main() 2 { 3 char str[20] = "acegik"; 4 func(*(str+2)+1,&str[4]); 5 printf("%s\n",str); 6 getch(); 7 } 8 void func(char ch, char* ptr) 9 { 10 strncpy(ptr,"12345678901", ΑΕΜ+2); 11 *ptr = ch; 12 } Καηαζθεπάδνπκε έλαλ πίλαθα κλήκεο Γραμμή 3 char str[20] = "acegik"; Έζησ όηη κεηά ηε θιήζε ηεο γξακκήο 3 ε κλήκε είλαη σο εμήο: 900 a str[0] 904 c str[1] 908 e str[2] 912 g str[3] 916 i str[4] 920 k str[5] 924 \0 Γραμμή 4 func(*(str+2)+1,&str[4]); Μεηαβιεηή Τηκή Σρόιηα str 900 Θέζε κλήκεο ηνπ (πξώηνπ ζηνηρείνπ ηνπ) string str str+2 908 2 ζέζεηο κλήκεο (κεγέζνπο char) κεηά (πξνζνρή ην 902 είλαη πξνθαλώο ιάζνο) *(str+2) e Η ηηκή ζηε ζέζε κλήκεο 908 *(str+2)+1 f Σηνλ ραξαθηήξα e πξνζζέησ 1 άξα παίξλσ ζαλ απνηέιεζκα ηνλ επόκελν ραξαθηήξα ηνπ πίλαθα ascii δειαδή ην f str[4] i To 5o ζηνηρείν ηνπ πίλαθα πνπ βξίζθεηαη ζηε ζέζε 4 δειαδή ην i &str[4] 916 H δηεύζπλζε ηoπ ζηνηρείνπ ηνπ πίλαθα πνπ βξίζθεηαη ζηε 5ε ζέζε
Καιείηαη ε ζπλάξηεζε func νπόηε νη ηνπηθέο κεηαβιεηέο ηεο func έρνπλ ηηο εμήο ηηκέο: Μεηαβιεηή Τηκή ch f ptr 916 Γραμμή 10 strncpy(ptr,"12345678901", ΑΕΜ+2); Αληηγξάθνληαη νη πξώηνη ΑΔΜ+2 ραξαθηήξεο ηνπ string "12345678901" ζηε ζέζε 916 θαη θάησ. Έηζη αλ ΑΔΜ=0, ηόηε αληηγξάθνληαη νη πξώηνη 2 ραξαθηήξεο ηνπ string δειαδή νη «12» ζηηο ζέζεηο 916 θαη 920 αιιά θαη κεηά ν ραξαθηήξαο ηέινπο ( \0 ) νπόηε ν πίλαθαο κλήκεο είλαη ν 900 a str[0] 904 c str[1] 908 e str[2] 912 g str[3] 916 1 str[4] 920 2 str[5] 924 \0 ΑΔΜ=1, ηόηε αληηγξάθνληαη νη πξώηνη 3 ραξαθηήξεο ηνπ string δειαδή νη «123» ζηηο ζέζεηο 916, 920 θαη 924 αιιά θαη κεηά ν ραξαθηήξαο ηέινπο ( \0 ) νπόηε ν πίλαθαο κλήκεο είλαη ν 900 a str[0] 904 c str[1] 908 e str[2] 912 g str[3] 916 1 str[4] 920 2 str[5] 924 3 str[6] 928 \0
ΑΔΜ=2, ηόηε αληηγξάθνληαη νη πξώηνη 4 ραξαθηήξεο ηνπ string δειαδή νη «1234» ζηηο ζέζεηο 916, 920, 924 θαη 928 αιιά θαη κεηά ν ραξαθηήξαο ηέινπο ( \0 ) νπόηε ν πίλαθαο κλήκεο είλαη ν θνθ 900 a str[0] 904 c str[1] 908 e str[2] 912 g str[3] 916 1 str[4] 920 2 str[5] 924 3 str[6] 928 4 str[7] 932 \0 Γραμμή 11 *ptr = ch; Η δηεύζπλζε ptr (916), παίξλεη ηελ ηηκή f Έηζη αλ ΑΔΜ=2 ν ηειηθόο πίλαθαο κλήκεο ζα είλαη 900 a str[0] 904 c str[1] 908 e str[2] 912 g str[3] 916 f str[4] 920 2 str[5] 924 3 str[6] 928 4 str[7] 932 \0 Γραμμή 5 Δθηππώλεηαη ην string. Έηζη ην απνηέιεζκα είλαη ΑΔΜ printf 0 output: acegf2 1 output: acegf23 2 output: acegf234 3 output: acegf2345 4 output: acegf23456 5 output: acegf234567 6 output: acegf2345678 7 output: acegf23456789 8 output: acegf234567890 output: acegf2345678901
Θέμα Γ Μεηά ηελ εθηέιεζε ηεο ζπλάξηεζεο func επηζηξέθεηαη ε ηηκή ηνπ δείθηε ζηελ νπνία όκσο ζέζε κλήκεο δελ ππάξρεη ε ηηκή «string». Η ιύζε ζην πξόβιεκα απηό ζα ήηαλ ε ρξήζε static ηνπηθήο κεηαβιεηήο δειαδή αληί ηεο char b[]= string ; λα ηελ δειώλακε έηζη static char b[]= string ;
Θέμα Δ 1 void func(int* ptr1, int* ptr2); 2 int main() 3 { 4 int a[] = {1,2,3}; 5 func(a,a+2); 6 printf( %d %d %d\n,a[0],a[1],a[2]); 7 } 8 void func(int* ptr1, int* ptr2) 9 { 10 *(ptr1+1) = AEM +3; 11 *(ptr2-1) = AEM; 12 } Καηαζθεπάδνπκε έλαλ πίλαθα κλήκεο Γραμμή 4 int a[] = {1,2,3}; Έζησ όηη κεηά ηε θιήζε ηεο γξακκήο 4 ε κλήκε είλαη σο εμήο: 900 1 a[0] 904 2 a[1] 908 3 a[2] Γραμμή 5 func(a,a+2); H ηηκή ηνπ a είλαη 900 θαη ηνπ a+2 είλαη 908 Γραμμή 8 void func(int* ptr1, int* ptr2) Οη ηηκέο ησλ ηνπηθώλ κεηαβιεηώλ ηεο ζπλάξηεζεο είλαη ptr1 900 θαη ptr2 908
Γραμμή 10 *(ptr1+1) = AEM +3; Μεηαβιεηή Τηκή Σρόιηα ptr1 900 ptr1+1 904 1 ζέζε κλήκεο (κεγέζνπο int) κεηά (πξνζνρή ην 901 είλαη πξνθαλώο ιάζνο) *(ptr+1) 2 Η ηηκή ζηε ζέζε κλήκεο 904 Άξα ε ηηκή ζηε ζέζε κλήκε 904 ζα γίλεη ΑΔΜ+3 Σπλεπώο, κεηά ηε θιήζε ηεο γξακκήο 10 ε κλήκε είλαη σο εμήο: 900 1 a[0] 904 ΑΔΜ+3 a[1] 908 3 a[2] Γραμμή 11 *(ptr2-1) = AEM; Μεηαβιεηή Τηκή Σρόιηα ptr2 908 ptr2-1 904 1 ζέζε κλήκεο (κεγέζνπο int) πξηλ (πξνζνρή ην 903 είλαη πξνθαλώο ιάζνο) *(ptr2-1) ΑΔΜ+3 Η ηηκή ζηε ζέζε κλήκεο 904 Άξα ε ηηκή ζηε ζέζε κλήκε 904 ζα γίλεη ΑΔΜ Σπλεπώο, κεηά ηε θιήζε ηεο γξακκήο 11 ε κλήκε είλαη σο εμήο: 900 1 a[0] 904 ΑΔΜ a[1] 908 3 a[2]
string a Θέμα E 1 int main() 2 { 3 char a[20] = "abcde"; 4 char* b; 5 b=a; 6 func(*(b+1),a+3,&a[1]); 7 printf("%s\n",a); 8 getch(); 9 } 10 void func(char c, char d[],char* e) 11 { 12 strcpy(d,"01234"); 13 d[1] = c; 14 e[2] = *d + AEM; 15 } Καηαζθεπάδνπκε έλαλ πίλαθα κλήκεο Γραμμή 3 & 4 char a[20] = "abcde"; char* b; Έζησ όηη κεηά ηε θιήζε ηεο γξακκήο 3 θαη 4 ε κλήκε είλαη σο εμήο: 900 a a[0] 904 b a[1] 908 c a[2] 912 d a[3] 916 e a[4] 920 \0 junk 976 junk string b 980 junk Γραμμή 5 b=a; string b 980 900
string a Γραμμή 6 func(*(b+1),a+3,&a[1]); Μεηαβιεηή Τηκή Σρόιηα b 900 b+1 904 1 ζέζε κλήκεο (κεγέζνπο char) κεηά (πξνζνρή ην 901 είλαη πξνθαλώο ιάζνο) *(b+1) b Η ηηκή ζηε ζέζε κλήκεο 904 a 900 a+3 912 a[1] b To 2o ζηνηρείν ηνπ πίλαθα πνπ βξίζθεηαη ζηε ζέζε 1 δειαδή ην b &a[1] 904 H δηεύζπλζε ηoπ ζηνηρείνπ ηνπ πίλαθα πνπ βξίζθεηαη ζηε 1ε ζέζε Γραμμή 10 void func(char c, char d[],char* e) Καιείηαη ε ζπλάξηεζε func νπόηε νη ηνπηθέο κεηαβιεηέο ηεο func έρνπλ ηηο εμήο ηηκέο: Μεηαβιεηή Τηκή c b d 912 e 904 Γραμμή 12 strcpy(d,"01234"); Αληηγξάθεηαη ην string 01234 από ηε ζέζε 912 θαη θάησ. Έηζη ε κλήκε είλαη ε εμήο: 900 a a[0] 904 b a[1] 908 c a[2] 912 0 a[3] 916 1 a[4] 920 2 924 3 928 4 932 \0 936 junk 976 junk string b 980 junk
string a Γραμμές 13-14 d[1] = c; e[2] = *d + AEM; Τν d[1] είλαη ε δηεύζπλζε 916 πνπ ζα έρεη ηελ ηηκή ηεο κεηαβιεηήο c δειαδή ηελ ηηκή b Τν e[2] είλαη ε δηεύζπλζε 912 πνπ ζα έρεη ηελ ηηκή πνπ βξίζθεηαη ζηε δηεύζπλζε ηνπ d (ζηελ δηεύζπλζε 912 δειαδή 0) ζπλ ην ΑΔΜ. 0+ΑΔΜ=ΑΔΜ Πξνζνρή, δελ έρνπκε πξόζζεζε αθεξαίσλ αιιά ζην ραξαθηήξα 0 πξνζζέησ ΑΔΜ δειαδή ζηνλ πίλαθα ASCII πξνρσξάσ ΑΔΜ ζέζεηο. Σηνλ πίλαθα ASCII θαη ηα ςεθία είλαη κε ηε ζεηξά 0, 1,, 9 νπόηε ζηελ πξάμε είλαη ζαλ λα θάλσ πξόζζεζε αθεξαίσλ. Έηζη ε κλήκε είλαη ε εμήο: 900 a a[0] 904 b a[1] 908 c a[2] 912 AEM a[3] 916 b a[4] 920 2 924 3 928 4 932 \0 936 junk 976 junk string b 980 junk Γραμμή 7 printf("%s\n",a); Θα εθηππσζεί ην abcxb234, όπνπ x ην ΑΔΜ