11 Introduction to Programming in C תרגול 4 14.08.2011.

Slides:



Advertisements
Similar presentations
ממיבחניםC שאלות ++.
Advertisements

מבוא למדעי המחשב לתעשייה וניהול
תכנות בשפת C תרגול 14 תרגול חזרה תרגילים ממבחנים
מבוא למדעי המחשב לתעשייה וניהול דוגמאות ותרגול נוסף במערך חד ממדי הרצאה 12.
Pointers הרצאה קריטית. השאלות הפתוחות מה זה ה- & שמופיע ב scanf מדוע כשמעבירים מחרוזת ל scanf אין צורך ב & האם ניתן להכריז על מערך שגדלו אינו ידוע בתחילת.
מבוא למדעי המחשב תרגול 2 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
תכנות תרגול 7 שבוע : מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא.
תכנות תרגול 9 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
תכנות תרגול 6 שבוע : חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה n n.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
תכנות תרגול 2 שבוע : שבוע שעבר כתבו תוכנית המגדירה שלושה משתנים מאתחלת אותם ל 1 2 ו 3 ומדפיסה את המכפלה שלהם את ההפרש שלהם ואת הסכום שלהם.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
11 Introduction to Programming in C תרגול
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא כללי למדעי המחשב תרגול. הבית האדום כתובת : רחוב קוקוריקו 2 הבית הירוק כתובת : רחוב קוקוריקו 4 הבית הצהוב כתובת : רחוב קוקוריקו 1 הבית הורוד כתובת.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
11 Introduction to Programming in C תרגול
1 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תכנות תרגול 6 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
#include void main() { int i; char c; char st1[]="abcd"; for (i=-128;i
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
תכנות תרגול 10 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
תכנות תרגול 3 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
1 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תכנות תרגול 5 שבוע : לולאות for לולאות for for (counter=1 ;counter
תכנות בשפת סי תרגול 4.
מערכים מבוא לתכנות למנע"ס - שבוע מספר 8 - מאיר קומר - סמסטר ב' - תשס"ו והנה בעיה כתוב תוכנית אשר תקלוט 36 מספרים ותדפיס כמה מתוכם גדולים יותר מהממוצע.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
קורס תכנות – סימסטר ב ' תשס " ח שיעור שישי: מערכים
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
תכנות תרגול 4 שבוע : לולאות for לולאות for for (counter=1 ;counter
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
לולאות 02 יולי יולי יולי 1502 יולי יולי יולי 1502 יולי יולי יולי 15 1 Department of Computer Science-BGU.
מערכים דו ממדי ו STRUCTS פונקציות בוליאנית Module Module1 Function Flip(ByVal word1 As String) As Boolean Dim i As Integer For i = 0 To word1.Length()
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
מבוא למדעי המחשב תרגול 9 – מערכים ומחרוזות, תרגילי חזרה שעת קבלה : יום שני 11:00-12:00 דוא " ל :
1 מבוא למדעי המחשב backtracking. 2 מוטיבציה בעיית n המלכות: נתון: לוח שחמט בגודל. המטרה: לסדר על הלוח n מלכות כך שאף אחת לא תאיים על השנייה. דוגמא: עבור.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תכנות תרגול 8 שבוע : מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא.
1 מבוא למחשב שפת C תרגילי חזרה. 2 תרגיל 1 : מחשבון קלט : תרגיל חשבוני המורכב ממספרים שלמים עם פעולות חשבוניות ביניהם. התרגיל מסתיים ב =. אפשריים רווחים.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
Strings program. C Program to Check if a given String is Palindrome #include void main() { char string[25], reverse_string[25] = {'\0'}; int i, length.
Strings program. C Program to Check if a given String is Palindrome #include void main() { char string[25], reverse_string[25] = {'\0'}; int i, length.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 12. ספריות.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 6. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
Dr. Sajib Datta Feb 21,  In the last class we discussed: ◦ Bubble sort  How it works  performance.
Array Sort. Sort Pass 1 Sort Pass 2 Sort Pass 3.
Programming Pointers. נדגים היום בעזרת מצביעים העברת משתנים לפונקציה שמשנה אותם  פונקציה שמקבלת מצביעים לסמן תא בזיכרון  פונקציה שמחזירה מצביע מערך.
Introduction to Programming Lecture 12. Today’s Lecture Includes Strings ( character arrays ) Strings ( character arrays ) Algorithms using arrays Algorithms.
1 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Programming Arrays.
מבוא למדעי המחשב לתעשייה וניהול
CSE 1320 Search, Sort and Strings
מבוא למדעי המחשב סיבוכיות.
מיונים וחיפושים קרן כליף.
מחרוזות קרן כליף.
מערכים קרן כליף.
תכנות בשפת סי תרגול 5.
תכנות בשפת סי תרגול 5 מערכים + מחרוזות.
שיעור שישי: מחרוזות, מצביעים
מבוא כללי למדעי המחשב תרגול 4
מבוא כללי למדעי המחשב שיעור 2
מבוא כללי למדעי המחשב תרגול 6
מחרוזות קרן כליף.
Presentation transcript:

11 Introduction to Programming in C תרגול

מטרת התרגול מערכים מחרוזות 2 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel

מערכים הגדרת מערך עם שלושה תאים: int nums[3]; פנייה לתא במערך ע " י האינדקס של התא : nums[0]=1; nums[1]=3; nums[2]=nums[1]+nums[0]; C Programming Intoduction - Fall Erez Sharvit, Amir Menczel 3

דוגמא: מערך של מספרים התוכנית הבאה ( עמוד הבא ) קולטת סדרה של 20 מספרים שלמים לתוך מערך ומחשבת את הממוצע שלהם 4 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel

C Programming Intoduction - Fall Erez Sharvit, Amir Menczel 5 #define MAX_LEN 20 void main() { int i, sum =0; int nums[MAX_LEN]; // Get numbers printf(“Enter %d numbers: “, MAX_LEN); for (i = 0; i < MAX_LEN; i++) scanf(“%d”, &nums[i]); // Calc average for (i = 0; i < MAX_LEN; i++) sum += nums[i]; printf(“Sum = %.2f”, (float)sum / MAX_LEN); }

דוגמא 2: אורך מחרוזת התוכנית הבאה קולטת מחרוזת ומדפיסה את אורכה 6 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel #define BUFF_SIZE 256 void main() { int len = -1; char s[BUFF_SIZE]; printf(“Enter String: ”); scanf(“%s”, s); // Calc length while (s[++len] != ‘\0’); printf(“Length = %d”, len); }

תרגיל 1: השוואת מחרוזות כתבו תוכנית אשר קולטת שתי מחרוזות ובודקת אם הן שוות 7 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel

C Programming Intoduction - Fall Erez Sharvit, Amir Menczel 8 #define BUFF_SIZE 256 void main() { int i; char s1[BUFF_SIZE], s2[BUFF_SIZE]; printf/scanf // Run as long strings match or (at least) one string ends for (i = 0; s1[i] == s2[i] && s1[i] != ‘\0’; i++); // Current value indicate whether strings equal if (s1[i] != s2[i]) printf(“Not equal”); else printf(“Equal”); }

תרגיל 2: הפיכת מחרוזת כתבו תוכנית אשר קולטת מחרוזת והופכת אותה 9 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel

C Programming Intoduction - Fall Erez Sharvit, Amir Menczel 10 int left, right; char s[BUFF_SIZE]; printf/scanf // Get initial left & right positions left = 0; right = -1; while (s[++right] != ‘\0’) ; // Reverse string for (right--; left < right; left++, right--) { char temp; // Swap current left & right elements temp = s[left]; s[left] = s[right]; s[right] = temp; }

מיון בועות כתבו תוכנית אשר קולטת מערך של עד LEN מספרים וממיינת אותו בעזרת מיון בועות. באופן הבא : 1)Nums  קלוט LEN מספרים 2)i  LEN - 1 3) כל עוד i > 1, בצע : 1)j  0 2) כל עוד j < i, בצע : 1) אם Nums[J] > Nums[J+1] אז : החלף Num[j]  Num[j+1] 2)j  j + 1 3)i  i

12 int i, j, len = 0, a[LEN], isLastValue = 0; // Get number until -1 is entered printf(“Enter numbers (-1 to finish): “); while ( (len < LEN) && (!isLastValue) ) { scanf(“%d”, &a[len]); if (a[len] == -1) isLastValue = 1; len++; } // Sort array using bubble sort for (i = len - 1; i > 1; i--) for (j = 0; j < i; j++) if (a[j] > a[j + 1]) { int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } // Print sorted array for (i = 0; i < len; i++) printf(“%d, “, a[i]);

צריך לממש את התוכנית הבאה: –קלט: מערך דו-ממדי המכיל תווים (chars), ומילה המורכבת מתווים אשר אורכה קצר משני ממדי המערך. הקלט נתון (Hardcoded), אין צורך לקלוט אותו ממשתמש. –פלט: הדפסת כל המופעים של המילה במערך הדו-ממדי, כאשר המילה יכולה להופיע בשורה (horizontally) או בעמודה (vertically) חלוקת עבודה לשלבים: –נבין כיצד למצוא את כל המופעים בשורות. –נבין כיצד למצוא את כל המופעים בעמודות. האם יש דמיון למציאה עבור שורות. תרגיל 1- מערכים דו - ממדיים

#include #define ROW 5 #define COL 5 #define WORDSIZE 3 void main() { char matr[ROW][COL]= {{'r','v','o','q','w'}, { 'a','h','s','x','l'}, {'n','k','s','d','m'}, { 'r','a','n','j','r'}, { 'd','k','u','c','a'}}; char word[WORDSIZE+1]="ran";//Leave room for the ‘\0’ character. int i,j,k,l; פתרון תרגיל 1

// Search for horizontal words (along the rows): for (i=0; i<ROW; i++) //Scan the rows. for(j=0; j<=COL-WORDSIZE; j++) //Scan the columns. { //Scan the word if it is there. for(k=j, l=0; l<WORDSIZE && matr[i][k]==word[l]; k++, l++); if (l==WORDSIZE) printf("The word was found horizontally!!! Its coordinates are: x1=%d, y1=%d, x2=%d, y2=%d\n", i, k- WORDSIZE,i,k-1); } פתרון תרגיל 1 - שורות

//Search for vertical words (along the columns): for(i=0; i<COL; i++) //Scan the columns: for(j=0; j<=ROW-WORDSIZE; j++) //Scan the rows: { for(k=j, l=0;l<WORDSIZE && matr[k][i]==word[l]; k++, l++); if(l==WORDSIZE) printf("The word was found vertically!!! Its coordinates are: x1=%d, y1=%d, x2=%d, y2=%d\n", k-WORDSIZE,i,k-1,i); } פתרון תרגיל 1 - עמודות

פתרון תרגיל 1 - פלט RVOQW AHSXL NKSDM RANJR DKUCa The word was found horizontally!!! Its coordinates are: x1=0, y1=0, x2=0, y2=2“ The word was found vertically!!! Its coordinates are: x1=3, y1=0, x2=3, y2=2

תרגיל 2 הדפסת ערכי מטריצה (מערך דו-מימדי) בצורה מעגלית כתבו תוכנית שנתונה לה מטריצה בגודל מסוים (4 על 3), ועליה להדפיס אותה בצורה מעגלית. לדוגמה, אם נתון המערך הבא: char matrix[4][3]= { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'a','b','c'}}; היא תדפיס: c b a ‘a’‘b’‘c’

פתרון תרגיל 2 #include #define UP 0 #define RIGHT 1 #define DOWN 2 #define LEFT 3 int main() { int dir; //direction int x,y; //posiotion int u,r,d,l; //limits: up, right, down, left int count; //just counts the cells that printed char arr[4][3]= { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'a','b','c'}}; //at first, direction set to be right dir=RIGHT; //we start at this corner x=0; y=0; //at first, limits are edges of array u=1; r=3-1; d=4-1; l=0; 19

פתרון תרגיל 2 for(count=0;count<3*4;count++) { printf("%c ", arr[x][y]); switch(dir){ case UP: //move to direction x--; //if we are on the limit: move limit one step to center & change direction if(x==u) { u++; dir=(dir+1)%4; } break;

פתרון תרגיל 2 case RIGHT: //move to direction y++; //if we are on the limit: move limit one step to center & change direction if(y==r) { r--; dir=(dir+1)%4; } break; case DOWN: //move to direction x++; //if we are on the limit: move limit one step to center & change direction if(x==d) { d--; dir=(dir+1)%4; } break; 21

פתרון תרגיל 2 case LEFT: //move to direction y--; //if we are on the limit: move limit one step to center & change direction if(y==l) { l++; dir=(dir+1)%4; } break; } return 0; } 22

הייצוג של תווים כ- char-ים הוא ע"י תווי ascii. –לדוגמא, ייצוג ascii של ‘a’ הוא 97, ועל כן (int) ‘a’ == 97. כל האותיות באנגלית מופיעות באופן עוקב ב- ascii. –ערך ‘b’ הוא 98, ערך ‘c’ הוא 99 וכן הלאה. נוכל לנצל תכונה זו על מנת לבצע השוואות ואריתמטיקה של תווים. דוגמא: if (c >= ‘a’ && c <= ‘z’) printf(“%c is an alphabetic character\n”, c); דוגמא שקולה: If (c – ‘a’ >= 0 && c – ‘z’ <= 0) printf(“%c is an alphabetic character\n”, c); ASCII codes

ASCII Table

פלינדרום הוא מילה שנקראת באופן זהה כאשר קוראים אותה מן הסוף להתחלה. דוגמאות לפלינדרומים: –“a” –“aba” –“a man, a plan, a canal – panama” (בהתעלם מסימני פיסוק ורווחים) צריך לממש את התוכנית הבאה: –קלט: מחרוזת מן המשתמש. –פלט: הודעה האם המחרוזת היא פלינדרום או לא. תרגיל 4 - פולינדרום

#include void main() { int i,len=-1; char w1[256]; printf(“Enter String: ”); scanf(“%s”, w1); // Calc length while (w1[++len] != ‘\0’); for (i=0 ; i < len/2 && w1[i] == w1[len-i-1] ; i ++); if (i==len/2) printf("The word is a palindrome! \n"); else printf("The word isn't a palindrome! \n"); } פתרון תרגיל 4

השוואה לקסיקוגרפית (מילונית) היא כזו שמשווה מילים לפי סדר הופעתם במילון. צריך לממש את התוכנית הבאה: –קלטים: 2 מחרוזות מהמשתמש. –פלט: הודעה שמבהירה איזו משתי המחרוזות גדולה יותר לקסיקוגרפית. תרגיל 5 – השוואה לקסיקוגרפית

#include #define MAX_WORD_LEN 256 void main() { int i; char w1[MAX_WORD_LEN], w2[MAX_WORD_LEN]; printf("Please enter first word:"); scanf(“%s”, w1); printf("Please enter second word:"); scanf(“%s”, w2); for (i=0 ; w2[i] && w1[i] == w2[i] ; i++); if (!w1[i] && !w2[i]) printf("equal\n"); else if (w1[i] > w2[i]) printf("first bigger\n"); elseprintf("last bigger\n"); } פתרון תרגיל 5

צריך לממש את התוכנית הבאה: –קלט: מחרוזת שמייצגת משפט. –פלט: אותה מחרוזת, כאשר כל מילה מתחילה באות גדולה. זכרו- ניתן לנצל את התכונות האריתמטיות של התווים. ההפרש בין כל אות גדולה ואות קטנה בקוד ascii הוא קבוע. תרגיל 6

#include void main() { int i,len; char w1[256]; printf("Please enter a sentence:\n"); scanf(“%s”, w1); for (i=0; w1[i] ; i++) if (! i || w1[i-1]==' ') if (w1[i] >='a' && w1[i]<='z') w1[i] += 'A' - 'a';//This is actually subtracting 32 from w1[i]. printf("%s\n",w1); } פתרון תרגיל 6

צריך לממש את התוכנית הבאה: –קלט: מחרוזת שמייצגת משפט המכיל 5 מילים. –פלט: המילה הארוכה ביותר במשפט. זכרו: גם מחרוזת היא מערך. כמו שיכולנו לעבוד על מערך באמצעות לולאות מקוננות, ניתן לבצע פעולה כזו גם על מחרוזות. תרגיל 7

#include void main() { int i=0,len,maxWordLoc, maxWordLen=0, curWordLen=0; char w1[256]; printf("Please enter a sentence consisting of 5 words:\n"); scanf(“%s”, w1); do{ if (w1[i] == ' ' || w1[i] =='\0') { if (curWordLen>maxWordLen) { maxWordLen = curWordLen; maxWordLoc = i; } curWordLen = 0; } else curWordLen++; } while(w1[i++]); פתרון תרגיל 7

while (maxWordLoc && w1[maxWordLoc-1] !=' ') maxWordLoc--; while (w1[maxWordLoc] && w1[maxWordLoc]!=' ') putchar(w1[maxWordLoc++]); } פתרון תרגיל 7

תרגיל 8: מעקב #define BUFF_SIZE 256 void main() { int i = -1, x = 0; char s[BUFF_SIZE]; printf(“Enter a string: ”); gets(s); while (s[++i] != '\0') if (s[i] >= '0' && s[i] <= '9') { x *= 10; x += s[i] - '0'; } i = -1; while (s[++i] != '\0') if (s[i] >= '0' && s[i] <= '9') { s[i] = x % 10 + '0'; x /= 10; } puts(s); }