תכנות תרגול 14 שבוע: 25.1.04.

Slides:



Advertisements
Similar presentations
מבוא למדעי המחשב לתעשייה וניהול דוגמאות ותרגול נוסף במערך חד ממדי הרצאה 12.
Advertisements

Pointers הרצאה קריטית. השאלות הפתוחות מה זה ה- & שמופיע ב scanf מדוע כשמעבירים מחרוזת ל scanf אין צורך ב & האם ניתן להכריז על מערך שגדלו אינו ידוע בתחילת.
1 מבוא למדעי המחשב הקצאה דינאמית. 2 הקצאת זיכרון דינאמית  כאשר אנו משתמשים במערכים, אנו מקצים אוטומטית את הזיכרון המקסימלי שנצטרך.  בפועל, אנו משתמשים.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
תכנות תרגול 11 שבוע : מבנים מטרת המבנים היא לאפשר למתכנת להגדיר טיפוסי משתנים חדשים אשר מתאימים ספציפית לבעיה שאותה התוכנית פותרת. מטרת המבנים.
תכנות תרגול 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 הבית הורוד כתובת.
תכנות תרגול 9 שבוע : מערכים int a; a=5; int a[10]; a[2] = 5; 5 a a[0] a[1] a[2] a[9]  5 משתנה בודד מערך גישה למשתנה השלישי במערך.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
מבוא למדעי המחשב © אריק פרידמן 1 מצביעים כמערכים דוגמה.
תכנות תרגול 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, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
מבוא כללי למדעי המחשב שיעור 5
תכנות – שיעור 7. חזרה -מערכים נגדיר בעזרתו קבוצת משתנים כאשר יהיה לנו מספר רב של משתנים זהים נגדיר בעזרתו קבוצת משתנים כאשר יהיה לנו מספר רב של משתנים.
תכנות תרגול 10 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
מערכים מבוא לתכנות למנע"ס - שבוע מספר 8 - מאיר קומר - סמסטר ב' - תשס"ו והנה בעיה כתוב תוכנית אשר תקלוט 36 מספרים ותדפיס כמה מתוכם גדולים יותר מהממוצע.
תכנות תרגול 14 שבוע : רשימות מקושרות ישנו מבנה נתונים אשר מאפשר ישנו מבנה נתונים אשר מאפשר לנו לבצע את הוספת האיברים בצורה נוחה יותר. מבנה זה.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
תכנות תרגול 12 שבוע : הקצאת זיכרון דינאמית הזיכרון המקסימאלי ששימש את התוכנית שלנו עד היום היה קבוע מראש. לפני הרצת התוכנית, לאחר שהתוכנית עברה.
מבוא כללי למדעי המחשב רשימות מקושרות
מבוא למדעי המחשב תרגול 6 - מערכים שעת קבלה : יום שני 11:00-12:00 דוא " ל :
תכנות תרגול 7 שבוע : מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא ידעו.
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
עקרון ההכלה וההדחה.
מערכים דו ממדי ו 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)
מבוא כללי למדעי המחשב תרגול 7. מבנים מטרת המבנים היא לאפשר למתכנת להגדיר טיפוסי משתנים חדשים אשר מתאימים ספציפית לבעיה שאותה התוכנית פותרת. מטרת המבנים.
תכנות תרגול 12 שבוע : מבנים מטרת המבנים היא לאפשר למתכנת להגדיר טיפוסי משתנים חדשים אשר מתאימים ספציפית לבעיה שאותה התוכנית פותרת. מטרת המבנים.
1 מבוא למדעי המחשב backtracking. 2 מוטיבציה בעיית n המלכות: נתון: לוח שחמט בגודל. המטרה: לסדר על הלוח n מלכות כך שאף אחת לא תאיים על השנייה. דוגמא: עבור.
תכנות תרגול 8 שבוע : מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא.
Structure. מה לומדים היום ? דרך לבנות מבנה נתונים בסיסי – Structure מייצר " טיפוס " חדש מתאים כאשר רוצים לאגד כמה משתנים יחד דוגמאות : עובד : שם, טלפון,
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
מבוא למדעי המחשב הרצאה 9: תכנות רקורסיבי 2 1. חישוב עצרת: רקורסיית זנב public static int fact (int n){ return factacc(n,1); } public static int factacc.
מבנים קרן כליף. ביחידה זו נלמד :  מהו מבנה (struct)  איתחול מבנה  השמת מבנים  השוואת מבנים  העברת מבנה לפונקציה  מבנה בתוך מבנה  מערך של מבנים.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
1 מבוא למדעי המחשב הרצאה 5: פונקציות. 2 מבוא לפונקציות חלוקה של אלגוריתם לתת משימות: משימה - פונקציה: דוגמאות מציאת המקסימלי מבין שני איברים האינדקס של.
1 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
מבני נתונים רשימה מקושרת, מחסנית ותור
הרצאה 10 פונקציות עם מספר משתנה של פרמטרים
מבוא למדעי המחשב סיבוכיות.
הקצאות דינאמיות בשילוב מבנים
מערכים ומצביעים הקצאה דינאמית של מערכים דו-מימדיים
מיונים וחיפושים קרן כליף.
שיעור חמישי: מערכים ומחרוזות
מערכים קרן כליף.
תירגול 14: מבני נתונים דינאמיים
הרצאה 06 רשימות מקושרות קרן כליף.
קורס תכנות שיעור 11: הסוף.
מערכים ומטריצות קרן כליף.
Engineering Programming A
שאלה 1.
מבוא כללי למדעי המחשב תרגול 4
מבוא כללי למדעי המחשב תרגול 6
מערכים של מצביעים הקצאה דינאמית
תירגול 8:מצביעים והקצאה דינאמית
שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
מבוא לתכנות ב- Java תרגול 10 - רשימות מקושרות.
Presentation transcript:

תכנות תרגול 14 שבוע: 25.1.04

רשימות מקושרות לפני שבוע ישנו מבנה נתונים אשר מאפשר לנו לבצע את הוספת האיברים בצורה נוחה יותר. מבנה זה נקרא רשימה מקושרת. איבר מידע מצביע לאיבר מצביע לראש הרשימה איבר איבר איבר איבר מידע מידע מידע מידע 5 7 1 8 מצביע לאיבר מצביע לאיבר מצביע לאיבר מצביע לאיבר

לפני שבוע struct list { int data; struct list *next; }; מידע struct list { int data; struct list *next; }; typedef strcut list Item; מצביע לאיבר פעולות על הרשימה: יצירה והריסה של רשימה ספירת מספר האיברים ברשימה חיבור שתי רשימות מחיקה/הוספה של איבר לרשימה הדפסת רשימה

רשימות מקושרות ב-C לפני שבוע נחזיק מצביע אשר יהיה מצביע לראש הרשימה וישב בmain. תהיה לנו פונקצית הוספה אשר תוסיף איברים לרשימה בסוף הרשימה. הפונקציה תדע לקבל מצביע לראש הרשימה וערך להוספה ותוסיף את האיבר בסוף הרשימה.

לפני שבוע כתוב פונקציה המקבלת מצביע לרשימה וסופרת כמה איברים יש ברשימה

לפני שבוע int Count(Item * L) { int counter=0; while (L) counter++; L=L->next; } return counter; int CountR(Item * L) if (L == NULL) return 0; return 1 + CountR(L->next);

לפני שבוע כתוב פונקציה המקבלת מצביעים לשתי רשימות מקושרות ומחברת אותן. איבר מידע מצביע לאיבר 5 איבר מידע מצביע לאיבר 3 איבר מידע מצביע לאיבר 7 איבר מידע מצביע לאיבר 5 איבר מידע מצביע לאיבר 3 רשימה 1 רשימה 2 איבר מידע מצביע לאיבר 5 איבר מידע מצביע לאיבר 3 איבר מידע מצביע לאיבר 7 איבר מידע מצביע לאיבר 5 איבר מידע מצביע לאיבר 3

לפני שבוע Item* Meld(Item* L1,Item* L2) { Item* L1_head = L1; if (L1 == NULL) return L2; if (L2 == NULL) return L1; while (L1->next != NULL) L1=L1->next; L1->next = L2; return L1_head; }

מערכים דו מימדים ניתן להכליל את המערך הרגיל של C ( החד מימדי) למספר רב של מימדים. אנחנו נראה כיצד להכליל את המערכים שלמדנו לשני מימדים. נחשוב על מערכים דו מימדים כל טבלה שלה עמודות ושורות.

מערכים דו מימדים a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] עמודה 1 עמודה 2 עמודה 3 עמודה 4 a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3] שורה 0 שורה 1 שורה 2 שם המערך אינדקס שורה אינדקס עמודה

מערכים דו מימדים הגדרת מערך דו מימדי תתבצע כך: int main() { int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; } אתחול שורה 0 אתחול שורה 1 אתחול שורה 2 שם המערך מספר שורות מספר עמודות 1 2 3 4 5 6 7 8 9 10 11 12

#include <stdio.h> #define ROW 3 #define COLUMN 4 int main() { int array1[ROW][COLUMN]= {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int i, j; for ( i = 0; i < ROW; i++ ) for ( j = 0; j < COLUMN; j++ ) printf( "%4d", a[ i ][ j ] ); printf( "\n" ); } מעבר על השורות הדפסת כל שורה

מערכים דו מימדים ופונקציות כיצד נעביר מערך דו מימדי לפונקציה כך שהפונקציה תדע שמדובר במערך דו-מימדי? כשדיברנו על מערכים רגילים אמרנו שצרך להעביר מצביע לראש המערך ואת גודל המערך. מה נעביר לפונקציה בבואנו להעביר מערך דו מימדי ?

void printArray(int a[][ COLUMN ] , int size ) { int i, j; for ( i = 0; i < size; i++ ) for ( j = 0; j < COLUMN; j++ ) printf( "%4d", a[ i ][ j ] ); printf( "\n" ); } מעבר על השורות הדפסת כל שורה

מערכים דו מימדים ופונקציות אנחנו מתייחסים למערך דו מימדי כאליו זו טבלה אבל בזיכרון הוא מופיע כמערך רגיל כדי שבתוך הפונקציה נוכל לפנות לאיברו של המערך באמצעות [][] חייבים לציין את גודל כל שורה כלומר את מספר העמודות 1 2 3 4 5 6 אשליה מציאות 1 2 3 5 6 7

מערכים דו מימדים ופונקציות כדי לגשת לתא a[1][1] צריך לדעת שהשורה ה 0 מכילה 3 תאים למעשה מה שמתבצע בפועל זה a[row][col] a[row*COLUMN+col] a[1][1] a[1*COLUMN+1] 0 1 2 3 4 5 1 2 3 4 5 6 אשליה מציאות 0 1 2 0 1 1 2 3 4 5 6

#include <stdio.h> #define ROW 3 #define COLUMN 4 void printArray(int [][ COLUMN ] , int ); int main() { int array1[ ROW ][ COLUMN ] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; printf( "Values in array1 by row are:\n" ); printArray( array1 , ROW ); return 0; } void printArray(int a[][ COLUMN ] , int size ) int i, j; for ( i = 0; i < size; i++ ) { for ( j = 0; j < COLUMN; j++ ) printf( "%4d", a[ i ][ j ] ); printf( "\n" );

תרגיל כתוב פונקציה המקבלת מערך דו מימדי בגודל 10X10 וממלאת אותו בלוח הכפל. התוכנית תדפיס את לוח הכפל המתקבל

פתרון void fillArray( int a[][ COLUMN ] , int size ) { int i, j; for ( i = 0; i < size; i++ ) { for ( j = 0; j < COLUMN; j++ ) a[ i ][ j ] = (i+1)*(j+1); }

מערכים דו מימדים ומחרוזות נגדיר מערך דו מימדי שיכיל שמות. לצורך זה כל שורה במערך תהיה מחרוזת: char names[N][STR_SIZE]; G a d i \0 R m I D n #define N 3 #define STR_NAME 5 מה הערכים של N וSTR_NAME

מערכים דו מימדים ומחרוזות נכתוב פונקציה שמקבלת שם ומערך. אם השם נמצא במערך הפונקציה תסמן את השם ב *. כיצד נגדיר את הפונקציה? void markName (char [][STR_SIZE],int size,char *name)

מערכים דו מימדים ומחרוזות void markName(char Names[][STR_SIZE],int size,char *name) { int i; for ( i = 0; i < size; i++ ) if (strcmp(Names[i],name) == 0) strcat(Names[i],"*"); return; }

תרגיל חזרה – חיפוש במערכים נתון מערך ממוין נרצה לחפש בו איבר כלשהו. חיפוש ליניארי חיפוש בינארי 5 8 9 12 15 17 20 21 24 27 29 31 נחפש את 24 חיפוש ליניארי

תרגיל חזרה – חיפוש במערכים 5 8 9 12 15 17 20 21 23 24 29 31 נחפש את 24 חיפוש בינארי

#include <stdio.h> #define SIZE 12 int binarySearch( int [], int ,int); int main() { int a[ SIZE ] = {12,14,16,18,20,23,24,45,67,89,100,110}; int i; for (i=0;i<SIZE;i++) if (binarySearch( a, SIZE , a[i] )) printf("Found %d \n",i); return 0; }

int binarySearch( int arr[], int size, int item ) { int lsize,rsize,middle; lsize = 0; rsize = size-1; while ( lsize <= rsize ) middle = (rsize + lsize ) /2; if ( item == arr[ middle ] ) return 1; if ( item < arr[ middle ] ) rsize = middle-1; else lsize = middle+1; } return 0; 5 8 9 12 15 17 20 21 24 27 29 31

הערות לבחינה קראו היטב את השאלות לפני שתתחילו לפתור את המבחן. שימו לב מה מבקשים תוכנית או רק פונקציה. השתדלו לכתוב בכתב ברור במקום שמיועד לתשובה.

דברים חשובים לולאות (תחביר, שימוש נכון, תנאי סיום) ריקורסיות מערכים מצביעים (העברה לפונקציה כתובות כדי לשנות ערכי משתנים) שילוב של מערכים ומצביעים מחרוזות מבנים הקצאת זיכרון דינאמית רשימות מקושרות

דברים חשובים בהצלחה !