תכנות בשפת סי תרגול 4.

Slides:



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

תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
מבוא למדעי המחשב לתעשייה וניהול
מבוא למדעי המחשב לתעשייה וניהול דוגמאות ותרגול נוסף במערך חד ממדי הרצאה 12.
Pointers הרצאה קריטית. השאלות הפתוחות מה זה ה- & שמופיע ב scanf מדוע כשמעבירים מחרוזת ל scanf אין צורך ב & האם ניתן להכריז על מערך שגדלו אינו ידוע בתחילת.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
תכנות תרגול 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 דוא " ל :
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
מבוא כללי למדעי המחשב תרגול. הבית האדום כתובת : רחוב קוקוריקו 2 הבית הירוק כתובת : רחוב קוקוריקו 4 הבית הצהוב כתובת : רחוב קוקוריקו 1 הבית הורוד כתובת.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תרגול חזרה. מבנה האובייקט תאר את מבנה האובייקט כולל מבנה טבלאות הפונקציות הוירטואליות עבור התכנית הבאה struct A { int x; virtual void a() {}; }; struct.
עיבוד תמונות ואותות במחשב אלכסנדר ברנגולץ דואר אלקטרוני : שיטות קידוד שיטות קידוד אורך מלת קוד ואנטרופיה אורך מלת קוד ואנטרופיה קידוד.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
11 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 תרגול
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site : T.A. :Emilia Katz.
תכנות תרגול 6 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 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 תרגול
מערכים מבוא לתכנות למנע"ס - שבוע מספר 8 - מאיר קומר - סמסטר ב' - תשס"ו והנה בעיה כתוב תוכנית אשר תקלוט 36 מספרים ותדפיס כמה מתוכם גדולים יותר מהממוצע.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
קורס תכנות – סימסטר ב ' תשס " ח שיעור שישי: מערכים
מבוא למדעי המחשב תרגול מספר.
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
משטר דינמי – © Dima Elenbogen :14. הגדרת cd ו -pd cd - הזמן שעובר בין הרגע שראשון אותות הכניסה יוצא מתחום לוגי עד אשר אות המוצא יוצא מתחום.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
עקרון ההכלה וההדחה.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
תכנות בשפת C תרגול 15 תרגול חזרה 2 תרגילים ממבחנים
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
1 מבוא למדעי המחשב backtracking. 2 מוטיבציה בעיית n המלכות: נתון: לוח שחמט בגודל. המטרה: לסדר על הלוח n מלכות כך שאף אחת לא תאיים על השנייה. דוגמא: עבור.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
11 Introduction to Programming in C תרגול
הגדרת משתנים יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
1 מבוא למחשב שפת C תרגילי חזרה. 2 תרגיל 1 : מחשבון קלט : תרגיל חשבוני המורכב ממספרים שלמים עם פעולות חשבוניות ביניהם. התרגיל מסתיים ב =. אפשריים רווחים.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
קורס תכנות שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 12. ספריות.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 6. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
1 נתבונן בפונקציה הבאה public static int min(int[] a,int n) { int min = a[0]; for (int i = 1; (i < n ) && (i < a.length) ; i++) if (min > a[i]) min = a[i];
מחרוזות – הטיפוס String
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Programming Arrays.
מבוא למדעי המחשב לתעשייה וניהול
מבוא למדעי המחשב סיבוכיות.
מחרוזות קרן כליף.
מצביעים קרן כליף.
מערכים קרן כליף.
תכנות בשפת סי תרגול 5.
תכנות בשפת סי תרגול 5 מערכים + מחרוזות.
שיעור שישי: מחרוזות, מצביעים
מבוא כללי למדעי המחשב תרגול 4
מבוא כללי למדעי המחשב תרגול 6
מחרוזות קרן כליף.
תוכנה 1 תרגול 13 – סיכום.
Engineering Programming A
Presentation transcript:

תכנות בשפת סי תרגול 4

מערכים חד-מימדיים - חזרה מערך: קבוצה של משתנים אשר הגישה לכל אחד מהם מתבצע ע"י שם משותף (שם המערך) ואינדקס. מוטיבציה: יכול לשמש כאשר יש פעולות חוזרות שמתבצעות על משתנים דומים. דוגמאות להגדרת מערך: int ids[7]; char name[12]; int arr[] = {1,2,45,6};

מערכים חד-מימדיים - חזרה הכנסת ערך למערך (כתיבה): name[3] = 'm'; קריאת ערך ממערך: x = arr[3] + arr[5]; printf("%c %d",name[2],ids[0]); בהינתן מערך X[20], ניתן להתייחס לכל איבר בתחום X[0],…,X[19] כאל משתנה רגיל מטיפוס המערך.

מערכים חד-מימדיים - חזרה דוגמא לשימוש בלולאה כדי לגשת לאיברי מערך: int i, x[10]; for (i=0; i<10; i++) x[i] = i * i; מה עושה הלולאה?

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

פתרון תרגיל 1 #include <stdio.h> #define NUMBER_OF_ELEMENTS 5 void main() { int arr[NUMBER_OF_ELEMENTS]; int i,min,max,sum; /* Read the input numbers */ printf("Insert %d numbers\n",NUMBER_OF_ELEMENTS); for(i=0; i<NUMBER_OF_ELEMENTS; i++) printf("%d : ", i+1); scanf("%d",&arr[i]); }

פתרון תרגיל 1, המשך /* Calculate the min, max and sum of the numbers: */ for(i=sum=0,min=max=arr[0];i<NUMBER_OF_ELEMENTS;i++) { if(min > arr[i]) min=arr[i]; if(max < arr[i]) max=arr[i]; sum+=arr[i]; } printf("Minimum= %d , Maximum= %d , Sum= %d\n",min,max,sum);

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

פתרון תרגיל 2 void main() { int arr1[]={12,15,5,567}, arr2[]={66,4,5,88,33,55}; int i,j,len1,len2; len1 = sizeof(arr1)/sizeof(int); len2 = sizeof(arr2)/sizeof(int); for(i=0;i<len1;i++) for(j=0;j<len2;j++) if(arr1[i]==arr2[j]) printf("Common ID Found: %d\n",arr1[i]); }

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

פתרון תרגיל 3 #include <stdio.h> #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;

פתרון תרגיל 3 - שורות // 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. { for(k=j, l=0; l<WORDSIZE && matr[i][k]==word[l]; k++, l++);//Scan the word if it is there. if(l==WORDSIZE) //Check if the whole word was encountered. printf("The word was found horizontally!!! Its coordinates are: x1=%d, y1=%d, x2=%d, y2=%d\n", i, k-WORDSIZE,i,k-1); }

פתרון תרגיל 3 - עמודות //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); }

פתרון תרגיל 3 - פלט R V O Q W A H S X L N K D M J U C a 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

מחרוזות מחרוזת היא מערך של char-ים המסתיימת בתו ‘\0’. לא בהכרח ממלאת את כל המערך. מטרת תו הסיום ‘\0’ היא מניעת הצורך בציון מפורש של אורך המחרוזת בכל שימוש. char word[10]; Word[0] = ‘D’; Word[1] = ‘o’; Word[2] = ‘g’; Word בינתיים הוא רק מערך של תווים Word[3] = ‘\0’; כעת Word מכיל בתוכו מחרוזת (כמובן שהוא עדיין מערך של תווים). char Word[] = “dog”; ניתן להגדיר את Word גם כך – המהדר מסיק שזוהי מחרוזת ומוסיף ‘\0’ בסיומה.

int strcmp(const char *s1, const char *s2); The function compares successive elements from two strings, s1 and s2, until it finds elements that are not equal. If all elements are equal, the function returns zero. If the differing element from s1 is greater than the element from s2 (both taken as unsigned char), the function returns a positive number. Otherwise, the function returns a negative number.

strlen() and strcpy() size_t strlen(const char *s); The function returns the number of characters in the string s, not including its terminating null character. char *strcpy(char *s1, const char *s2); The function copies the string s2, including its terminating null character, to successive elements of the array of char whose first element has the address s1. It returns s1.

תרגיל 4 להלן אלג' פסודו-קוד עבור מחרוזת W: מה עושה האלג'? עבור על כל אינדקס iמ-0 עד אורך מחרוזת נתונה W עבור על כל אינדקס j מ-0 עד אורך מחרוזת נתונה W אם W[i] = W[j] הדפס את W[i]. מה עושה האלג'? מוצא אותיות שמופיעות במילה יותר מפעם אחת. (אמור להיות לכם כבר מוכר) מה יודפס בהינתן המלה “abc” ? תשובה “abc” כיצד נתקן את האלג' ? מה יודפס בהינתן המילה “koshka” ? תשובה "kk”

ASCII codes הייצוג של תווים כ- 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)

תרגיל 4 – פתרון #include <stdio.h> #define MAX_WORD_LEN 256 void main() { char inWord[MAX_WORD_LEN]; int alphabet[26]={0}; int i,found=0; printf("Insert your word in lowercase letters(%d chars max):" ,MAX_WORD_LEN); gets(inWord) ; for(i=0;inWord[i]!='\0';i++) //Fill array with alphabet occurances alphabet[inWord[i]-'a']++;

תרגיל 4 – פתרון, המשך for(i=0;i<26;i++)//Run over all the elements in alphabet[]: if (alphabet[i] > 1) { printf("%c",i+'a'); found++; } if(! found) printf("Didn't find any double letters!\n");

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

תרגיל 5 - פתרון #include <stdio.h> #include <string.h> void main() { int i,len; char w1[256]; printf("Please enter a word no longer than 256 characters:\n"); gets(w1); len=strlen(w1); //Get the length of the input string. 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"); }

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

תרגיל 6 – פתרון #include <stdio.h> #define MAX_WORD_LEN 256 void main() { int i; char w1[MAX_WORD_LEN], w2[MAX_WORD_LEN]; printf("Please enter first word:"); gets(w1); printf("Please enter second word:"); gets(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"); else printf("last bigger\n"); }

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

תרגיל 7 - פתרון #include <stdio.h> void main() { int i,len; תרגיל 7 - פתרון #include <stdio.h> void main() { int i,len; char w1[256]; printf("Please enter a sentence:\n"); gets(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); }

תרגיל 8 צריך לממש את התוכנית הבאה: קלט: מחרוזת שמייצגת משפט המכיל 5 מילים. פלט: המילה הארוכה ביותר במשפט. הגבלות: אסור להשתמש ב- strcmp(), strcpy(), strlen(). זכרו: גם מחרוזת היא מערך. כמו שיכולנו לעבוד על מערך באמצעות לולאות מקוננות, ניתן לבצע פעולה כזו גם על מחרוזות.

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

תרגיל 8 – פתרון, המשך while (maxWordLoc && w1[maxWordLoc-1] !=' ') maxWordLoc--; while (w1[maxWordLoc] && w1[maxWordLoc]!=' ') putchar(w1[maxWordLoc++]); } איך היינו יכולים לפתור את הבעיה ללא ההגבלות שהצבנו? תחת ההנחה שהמשפט עודנו לא יותר ארוך מ- 256 תווים.

תרגיל 8 – פתרון ללא הגבלות תרגיל 8 – פתרון ללא הגבלות #include <stdio.h> void main() { int i=0,len,maxWordLoc; int maxWordLen=0; int curWordLen=0; char longest[256]="",w1[256]; printf("Please enter a sentence consisting of 5 words:\n"); for (i=0 ; i<5 ; i++) { scanf("%s",w1); if (strlen(w1) > strlen(longest)) strcpy(longest,w1); } printf("%s\n",longest);