230 likes | 402 Views
תכנות תרגול 8. שבוע: 12.4.05. שבוע שעבר. רקורסיות. תרגיל : כתוב תוכנית הקולטת רצף כלשהו של תווים עד ללחיצה על אנטר ומדפיסה אותו. שבוע שעבר. רקורסיות. void wrt_it(); int main() { printf("Input a line<br>"); wrt_it(); printf("<br>"); return 0; } void wrt_it() { char ch;
E N D
תכנות תרגול8 שבוע: 12.4.05
שבוע שעבר רקורסיות תרגיל : כתוב תוכנית הקולטת רצף כלשהו של תווים עד ללחיצה על אנטר ומדפיסה אותו
שבוע שעבר רקורסיות void wrt_it(); int main() { printf("Input a line\n"); wrt_it(); printf("\n"); return 0; } void wrt_it() { char ch; scanf("%c", &ch); printf("%c", ch); if (ch != '\n') wrt_it(); } פתרון
שבוע שעבר רקורסיות תרגיל המשך: הפעם הדפס את הקלט מהסוף להתחלה
שבוע שעבר רקורסיות void wrt_it(); int main() { printf("Input a line\n"); wrt_it(); printf("\n"); return 0; } void wrt_it() { char ch; scanf("%c", &ch); if (ch != '\n') wrt_it(); printf(“%c”,ch); } פתרון
מערכים • עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. • אתגר: כתוב תוכנית שקולטת 100 מספרים שלמים ומדפיסה אותם מהאחרון שנקלט לראשון. קלט: 1 2 3 4 5 , ... , 99 100 פלט: 100 99 , ... , 5 4 3 2 1
פתרון (בלי מערכים) void main() { int a1,a2,a3,…,a100; scanf(“%d %d %d ,…”,a1,a2,a3,…); printf(“%d %d %d ,…”,a100,a99,a98,…); } אל תנסו בבית !!!
מערכים int a; a=5; int a[10]; a[2] = 5; 5 a משתנה בודד a[0] מערך a[1] גישה למשתנה השלישי במערך 5 a[2] a[9]
void main() { int i=0; int a[100]; for (i=0;i<100;i++) scanf (“%d”,&a[i]); for (i=99;i>=0;i--) printf (“%d”,a[i]); } קלט פלט
תרגיל כתוב תוכנית הקולטת 10 איברים לתוך מערך ומדפיסה תחילה את כל האיברים הזוגיים ואחר כך את כל האיברים האי זוגיים Enter numbers 1 2 3 4 5 6 7 8 9 10 Even: 2 4 6 8 10 Odd: 1 3 5 7 9
#include <stdio.h> #define SIZE 10 void main() { int i,arr[SIZE]; printf("Enter numbers\n"); for (i=0;i<SIZE;i++) scanf("%d",&arr[i]); printf("Even:\n"); for (i=0;i<SIZE;i++) if (arr[i] % 2 == 0) printf("%d ",arr[i]); printf("\nOdd:\n"); for (i=0;i<SIZE;i++) if (arr[i] % 2 != 0) printf("%d ",arr[i]); printf("\n"); } קלט פלט
מערכים - אתחול a[0] 1 2 a[1] 3 a[2] int a[10] = {1,2,3}; int a[10] = {0}; 0 a[9] a[0] 0 0 a[1] 0 a[2] 0 a[9]
מערכים נכתוב תוכנית שזורקת קובייה 6000 פעמיים ונספור כמה פעמיים יצא כל מספר.
#include <stdio.h> #include <stdlib.h> #define SIZE 7 int main() { int num, face, roll, frequency[ SIZE ] = { 0 }; scanf("%d",&num); srand( num ); for ( roll = 1; roll <= 6000; roll++ ) { face = rand() % 6 + 1; ++frequency[ face ]; } printf( "%s%17s\n", "Face", "Frequency" ); for ( face = 1; face <= SIZE - 1; face++ ) printf( "%4d%17d\n", face, frequency[ face ] ); return 0; }
הבית הצהוב הבית האדום שמעון רמי כתובת : רחוב קוקוריקו 1 כתובת : רחוב קוקוריקו 2 הבית הורוד הבית הירוק יוסי אבנר כתובת : רחוב קוקוריקו 3 כתובת : רחוב קוקוריקו 4 מה הכתובת של “הבית האדום?” 2 רמי מי גר בבית מספר 2? רמי מי גר ב“בית האדום?”
b a 5 3 כתובת : 2000 כתובת : 1000 c d 80 7 כתובת : 3000 כתובת : 4000 2000 מה הכתובת של?a 5 מה נמצא בתא 2000? 5 מה נמצא ב a?
מצביעים • לכל משתנה שמוגדר בתוכנית יש כתובת • הכתובת שלו היא מיקומו בזכרון למשל כאשר משכנים מספר מסוג int אזי צורכים 4 bytes. int a; a 5000
מצביעים a 5 5000 int a; int b; a = 5; b = 7; b 7 5004
מצביעים a 5 5000 int a, b; int *p1; int *p2; a = 5; b = 7; p1 = &a; p2 = &b; b 7 5004 p1 5000 7026 p2 5004 7030
מצביעים a 5 5000 int a, b; int *p1; int *p2; a = 5; b = 7; p1 = &a; p2 = &b; b 7 5004 p1 5000 7026 p2 5004 7030 *p1 = 2; *p2 = *p1;
מצביעים a 2 5000 int a, b; int *p1; int *p2; a = 5; b = 7; p1 = &a; p2 = &b; b 2 5004 p1 5000 7026 p2 5004 7030 *p1 = 2; *p2 = *p1;
תרגיל הגדר שני משתנים a ו b אתחל אותם לערכים כלשהם. לאחר מכן הגדר שני משתנים להחזקת הכתובות שלהם הדפס את הכתובות שלהם ואת הערכים שנמצאים בכתובות האלו. להדפסת מצביע נשתמש בפורמט %p.
#include <stdio.h> int main() { int a=10,b=2; int *p1,*p2; p1 = &a; p2 = &b; printf(“%p %p \n”,p1,p2); printf(“%d %d \n”,*p1,*p2); return 0; }