מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.

Slides:



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

מבוא למדעי המחשב לתעשייה וניהול
מבוא למדעי המחשב לתעשייה וניהול דוגמאות ותרגול נוסף במערך חד ממדי הרצאה 12.
מבוא למדעי המחשב מערכים.
מחרוזות נכתב ע " י כרמי גרושקו. כל הזכויות שמורות © 2010 הטכניון, מכון טכנולוגי לישראל 1.
שאלות ממבחנים. 14 תרגולמבוא למדעי המחשב. כל הזכויות שמורות ©2 תרגיל 1: מטריצות כתבו פונקציהvoid Rotation(int in [N][N], int out [N][N]) אשר מקבלת שני.
תכנות תרגול 9 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
תכנות תרגול 6 שבוע : חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה n n.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
11 Introduction to Programming in C תרגול
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא כללי למדעי המחשב תרגול. הבית האדום כתובת : רחוב קוקוריקו 2 הבית הירוק כתובת : רחוב קוקוריקו 4 הבית הצהוב כתובת : רחוב קוקוריקו 1 הבית הורוד כתובת.
תוכנה 1 - חזרה שולי לב יהודי 2 Arrays and Strings מערך - אוסף משתנים בעלי שם משותף. הפנייה לכל איבר נעשית ע ” י אינדקס. ב -C מערך מוגדר.
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 של הסדרה הוא קירוב.
מבוא למדעי המחשב מחרוזות, מצביעים וכתובות
מבוא לשפת C תרגול 12: עוד רקורסיה
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, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
תכנות תרגול 10 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
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 } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
קורס תכנות – סימסטר ב ' תשס " ח שיעור שישי: מערכים
מבוא למדעי המחשב תרגול 6 - מערכים שעת קבלה : יום שני 11:00-12:00 דוא " ל :
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
עקרון ההכלה וההדחה.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
Last time on Clang משתנה: "פתק" המשמש את המחשב לשמירת מידע. לכל משתנה יש שם וטיפוס כללים לשמות משתנים –חייבים להכיל רק אותיות, מספרים ו '_' –חייבים להתחיל.
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
מבוא לשפת C תרגול 4: ביטויים לוגיים ומשפטי תנאי מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור וסאהר אסמיר עבור הקורס "מבוא למדעי המחשב"
תוכנה 1 - תרגול שיעור 10 Pointers (2) שולי לב יהודי
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 מלכות כך שאף אחת לא תאיים על השנייה. דוגמא: עבור.
1 תרגול 3 - מערכים מבוא למדעי המחשב – סמסטר א' תשע"א.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
Sscanf example #include int main () { char sentence []="Rudolph is 12 years old"; char str [20]; int i; sscanf (sentence,"%s %*s %d",str,&i); printf ("%s.
1 מבוא למדעי המחשב רקורסיה. 2 רקורסיה היא שיטה לפתרון בעיות המבוססת על העיקרון העומד ביסוד אינדוקציה מתמטית: אם ידועה הדרך לפתור בעיה עבור המקרים הבסיסיים.
1 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים עוברים לג ' אווה.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 12. ספריות.
מבנים קרן כליף. ביחידה זו נלמד :  מהו מבנה (struct)  איתחול מבנה  השמת מבנים  השוואת מבנים  העברת מבנה לפונקציה  מבנה בתוך מבנה  מערך של מבנים.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
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.
מבוא למדעי המחשב לתעשייה וניהול
Formal Specifications for Complex Systems (236368) Tutorial #1
מבוא למדעי המחשב סיבוכיות.
מחרוזות קרן כליף.
שיעור חמישי: מערכים ומחרוזות
מצביעים קרן כליף.
תירגול 14: מבני נתונים דינאמיים
הקצאות דינאמיות קרן כליף.
מבוא כללי למדעי המחשב פונקציות
מבוא כללי למדעי המחשב תרגול 4
תרגול 8 תחומי הכרה פונקציות
מבוא כללי למדעי המחשב תרגול 6
תיכון אהל שם, רמת גן קורס PHP – הרצאה מס' 10
מחרוזות קרן כליף.
תוכנה 1 תרגול 13 – סיכום.
תירגול 8:מצביעים והקצאה דינאמית
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Presentation transcript:

מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל

Tip & Puzzlesמבוא למדעי המחשב. כל הזכויות שמורות ©2 מתי לא שמים ; בשורות המתחילות ב- # #include #define N 5 לפני ואחרי { } int main() { return 0; } אחרי משפטי if, else, while, for, do, switch if (i == 0) return 0; אחרי case/default שמים ':'

Tip & Puzzlesמבוא למדעי המחשב. כל הזכויות שמורות ©3 מה תדפיס התוכנית? int main() { int i=0; while (i<10); i++; printf(“%d”, i); return 0; } תשובה: כלום כי היא תתקע בלולאה אינסופית.

Tip & Puzzlesמבוא למדעי המחשב. כל הזכויות שמורות ©4 תמיד שימו סוגריים מסולסלים – זה לא מזיק if (1 < 2) if (1 < 0) printf(“1 < 0”); else printf(“1 >= 2”); לא ידפיס כלום !!! (כי else תמיד מתיחס ל-if האחרון) int i, a1[10], a2[10]; for (i=0; i<10; i++) a1[i] = 0; a2[i] = 0; במקום לאתחל a2 באפסים, שם אפס ב-a2[10] (דריסת זיכרון)

Tip & Puzzlesמבוא למדעי המחשב. כל הזכויות שמורות ©5 תמיד שימו סוגריים מסולסלים – זה לא מזיק זה לא היה קורה אם היינו שמים סוגריים מסולסלים: if (1 < 2) { int i, a1[10], a2[10]; if (1 < 0) { for (i=0; i<10; i++) { printf(“1 < 0”); a1[i] = 0; } a2[i] = 0; } else { printf(“1 >= 2”); }

Tip & Puzzlesמבוא למדעי המחשב. כל הזכויות שמורות ©6 מערכים – טעויות נפוצות גודל של מערך חייב להיות קבוע! void f1(int n, int array[n]) /* שגיאת קומפילציה */ { int array2[n]; /* שגיאת קומפילציה */ } אינדקס של האיבר האחרון במערכך הינו size-1: int a[100]; a[99] = 5; /* גישה לאיבר האחרון */ a[100] = 13; /* גלישה מתחום המערך – דריסת זכרון */ אסור להגדיר משתנה/פונקציה בשם בו השתמשתם ב-define: #define n 100 void f2(int *array, int n); /* שגיאת קומפילציה */

Tip & Puzzlesמבוא למדעי המחשב. כל הזכויות שמורות ©7 טעות נפוצה: השמה במקום השוואה int main() { int i=0; if (i = 13) printf(“i equal 13”); else printf(“i not equal 13”); return 0; } הערך של הביטוי בתוך if שווה תמיד ל-13 לכן תמיד יודפס “i equal 13” (למרות ש-i שווה ל-0(

Tip & Puzzlesמבוא למדעי המחשב. כל הזכויות שמורות ©8 לא לשכוח break בתוך switch int main() { int x=2; switch (x) { case 2: printf(“Two\n”); case 3: printf(“Three\n”); } return 0; } ידפיס על המסך : Two Three

Tip & Puzzlesמבוא למדעי המחשב. כל הזכויות שמורות ©9 לא לשכוח '&' ב-scanf char c; int i; float f; double d; scanf(“%c %d %f %lf”, &c, &i, &f, &d); שימו לב: לכל טיפוס חייבים לשים % מתאים! אך לא לשים & כאשר קולטים מחרוזת עם %s: void scan_and_print(char* str) { scanf(“%s”, str); printf(“%s”, str); }

Tip & Puzzlesמבוא למדעי המחשב. כל הזכויות שמורות ©10 חלוקה של שלמים נותנת מספר שלם double d1 = 1/2; d1 יהיה שווה ל-0 ולא לחצי. תיקון אפשרי: double d1 = 1.0/2; אותה בעיה בחלוקה של integers: int a = 1, b = 2; double d2 = a/b; גם כאן d1 יהיה שווה ל-0 ולא לחצי. תיקון אפשרי: double d1 = ((double)a)/b;

Tip & Puzzlesמבוא למדעי המחשב. כל הזכויות שמורות ©11 תו vs מחרוזת של תו אחד לא נכון: char c = “A”; char *str = ‘B’; str[0] = “C”; נכון: char c = ‘A’; char *str = “B”; str[0] = ‘C’;

Tip & Puzzlesמבוא למדעי המחשב. כל הזכויות שמורות ©12 לא משווים מחרוזות עם == char *str1 = “abc”; char *str2 = “abc”; if (str1 == str2) printf(“abc is equal to abc\n”); else printf(“abc is NOT equal to abc\n”); לא נכון! ידפיס “abc is NOT equal to abc”, כי מתבצעת השוואה המצבעים. גם זה לא נכון (כי מתבצעת השוואה של תו הראשון בלבד): if (*str1 == *str2) השוואה נכונה: if (strcmp(str1, str2) == 0)

Tip & Puzzlesמבוא למדעי המחשב. כל הזכויות שמורות ©13 אורך המחרוזת vs גודל מערך המכיל אותה char name1[] = “Yuri”; מקצה מערך של 5 תווים, אורך מחרוזת הינו 4. char name2[1024] = “Yuri”; מקצה מערך של 1024 תווים, אורך מחרוזת עדיין 4. כל התווים חוץ מארבעה הראשונים מאותחלים ל-‘\0’. char name3[4]=“Yuri”; שם 5 תווים במערך של 4 תווים – דריסת זכרון! פונקציה strlen() מחזירה את אורך המחרוזת. לא כולל ‘\0’! כלומר strlen(name1) תחזיר 4 וגם strlen(name2) תחזיר 4

Tip & Puzzlesמבוא למדעי המחשב. כל הזכויות שמורות ©14 מהי סיבוכית של הפונקציה? int find_first_c(char* str, char c) { int i; for (i=0; i<strlen(str); i++) if (str[i] == c) return i; return -1; } תשובה: O(n 2 ). כי מחשבים את strlen(str) n פעמים. איך ניתן לתקן את הפונקציה בשביל שהסיבוכיות תהיה O(n)?

Tip & Puzzlesמבוא למדעי המחשב. כל הזכויות שמורות ©15 תיקון – אפשרות 1 int find_first_c(char* str, char c) { int i; int len=strlen(str); for (i=0; i<len; i++) if (str[i] == c) return i; return -1; }

Tip & Puzzlesמבוא למדעי המחשב. כל הזכויות שמורות ©16 תיקון – אפשרות 2 int find_first_c(char* str, char c) { int i; for (i=0; str[i] != ‘\0’; i++) if (str[i] == c) return i; return -1; }