Presentation is loading. Please wait.

Presentation is loading. Please wait.

תכנות בשפת סי תרגול 5 מערכים + מחרוזות.

Similar presentations


Presentation on theme: "תכנות בשפת סי תרגול 5 מערכים + מחרוזות."— Presentation transcript:

1 תכנות בשפת סי תרגול 5 מערכים + מחרוזות

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

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

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

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

6 פתרון תרגיל 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]); }

7 פתרון תרגיל 1, המשך /* Calculate the min, max and sum of the numbers: */ for(i=0,sum=0,min=arr[0],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);

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

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

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

11 פתרון תרגיל 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]= {'r','a','n‘}; int i,j,k,l;

12 פתרון תרגיל 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); }

13 פתרון תרגיל 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); }

14 פתרון תרגיל 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=3, y1=0, x2=3, y2=2“ The word was found vertically!!! Its coordinates are: x1=0, y1=0, x2=2, y2=0

15 מחרוזות מחרוזת היא מערך של 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’ בסיומה.

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

17 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)

18 תרגיל 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); scanf(“%s“,inWord) ; for(i=0;inWord[i]!='\0';i++) //Fill array with alphabet occurances alphabet[inWord[i]-'a']++;

19 תרגיל 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");

20 size_t strlen(const char *s);
The function returns the number of characters in the string s, not including its terminating null character.

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

22 תרגיל 5 - פתרון #include <stdio.h> #include <string.h>
void main() { int i,len; char w1[256]; //be aware that last cell kept for ‘\0’ printf("Please enter a word no longer than 255 characters:\n"); scanf(“%s“,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"); }


Download ppt "תכנות בשפת סי תרגול 5 מערכים + מחרוזות."

Similar presentations


Ads by Google