הרצאה 3: משפטים, תנאים ולולאות

Slides:



Advertisements
Similar presentations
מבוא למדעי המחשב לתעשייה וניהול
Advertisements

Number Theory and Algebra Advisor …………… Dr. Shpilka Amir Presented by …… Cohen Gil..………
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
תכנות תרגול 6 שבוע : חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה n n.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
תכנות תרגול 2 שבוע : שבוע שעבר כתבו תוכנית המגדירה שלושה משתנים מאתחלת אותם ל 1 2 ו 3 ומדפיסה את המכפלה שלהם את ההפרש שלהם ואת הסכום שלהם.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
11 Introduction to Programming in C תרגול
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב תרגול 4 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב © אריק פרידמן 1 מצביעים כמערכים דוגמה.
מסדי נתונים תשס " ג 1 תכנון סכמות – אלגוריתם פירוק לתבניות בצורת BCNF מסדי נתונים.
1 מבוא למדעי המחשב ביטויים. 2 ביטויים expressions ביטויים (expressions) הינם יצורים תחביריים בעלי טיפוס וערך. הגדרה אינדוקטיבית של ביטויים : קבועים הם.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
1 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תורת הקבוצות חלק ב'. קבוצה בת מניה הגדרה: קבוצה אינסופית X היא ניתנת למניה אם יש התאמה חד-חד ערכית בין X לבין .
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
תכנות תרגול 6 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
תחשיב הפסוקים חלק ג'. צורות נורמליות א. DF – Disjunctive Form – סכום של מכפלות. דוגמא: (P  ~Q  R)  (R  P)  (R  ~Q  ~P) הגדרה: נוסחה השקולה לנוסחה.
תכנות תרגול 2 שבוע : צור קשר מתרגל – שי גוטנר, ביה " ס למדעי המחשב. מתרגל – שי גוטנר, ביה " ס למדעי המחשב. דואר אלקטרוני : דואר.
תכנות תרגול 3 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
תכנות תרגול 5 שבוע : לולאות for לולאות for for (counter=1 ;counter
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
ערכים עצמיים בשיטות נומריות. משוואה אופינית X מציין וקטור עצמי מציינת ערך עצמי תואם לוקטור.
מבוא כללי למדעי המחשב שיעור רביעי: לולאות
מבוא למדעי המחשב תרגול מספר.
Ray 7 דוגמא אלגוריתם 1.קבל דוגמאות 2. פלט f a עבור הדוגמה a המינימלית החיובית ?
תכנות תרגול 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 דוא " ל :
Last time on Clang משתנה: "פתק" המשמש את המחשב לשמירת מידע. לכל משתנה יש שם וטיפוס כללים לשמות משתנים –חייבים להכיל רק אותיות, מספרים ו '_' –חייבים להתחיל.
תחשיב היחסים (הפרדיקטים)
תרגול 5: ביטויים לוגיים ומשפטי תנאי (חזרה והרחבה)
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
מתמטיקה בדידה תרגול 2.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
מבוא למדעי המחשב תרגול מספר 4. בפעם הקודמת... מזהים טיפוסים טווח ייצוג קבועים.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
1 מבוא למדעי המחשב רקורסיה. 2 רקורסיה היא שיטה לפתרון בעיות המבוססת על העיקרון העומד ביסוד אינדוקציה מתמטית: אם ידועה הדרך לפתור בעיה עבור המקרים הבסיסיים.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
1 מבוא למחשב שפת C תרגילי חזרה. 2 תרגיל 1 : מחשבון קלט : תרגיל חשבוני המורכב ממספרים שלמים עם פעולות חשבוניות ביניהם. התרגיל מסתיים ב =. אפשריים רווחים.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 6. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site:
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Programming Arrays.
Object Oriented Programming
Object Oriented Programming
IF-ELSE כתוב תוכנית הקולטת שלושה מספרים ומדפיסה אותם בסדר עולה(ממיינת אותם)  קלט:7,2,4 ,פלט:2,4,7 .
Formal Specifications for Complex Systems (236368) Tutorial #1
הרצאה 3: משפטים, תנאים ולולאות
מבוא למדעי המחשב סיבוכיות.
ניתוח זמן ריצה (על קצה המזלג)
שפת Visual Basic מבוסס על Visual Basic. NET 2008 מרצה : קנדוב פנחס
SQL בסיסי – הגדרה אינדוקטיבית
תירגול 14: מבני נתונים דינאמיים
מבוא למדעי המחשב הרצאה 5: תחומי הכרה של משתנים
מבוא למדעי המחשב הרצאה 1: מבוא כללי מי אני, שעות הקבלה:
ניתוח זמן ריצה (על קצה המזלג)
היכרות עם שפת התכנות JAVA
ניתוח זמן ריצה (על קצה המזלג)
מבוא כללי למדעי המחשב תרגול 4
מבוא כללי למדעי המחשב שיעור 2
Shell Scripts בסביבת UNIX
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
מבוא לתכנות ב- Java תרגול 10 - רשימות מקושרות.
Presentation transcript:

הרצאה 3: משפטים, תנאים ולולאות מבוא למדעי המחשב הרצאה 3: משפטים, תנאים ולולאות מבוסס על שקפים שנערכו ע"י שי ארצי, גיתית רוקנשטיין ז"ל, איתן אביאור, סאהר אסמיר,מיכאל אלעד, רון קימל, דן רביב, יחיאל קמחי. עדכון אחרון: אפריל 2018

מבוא למדעי המחשב. כל הזכויות שמורות © תוכנייה משפטים בשפת C - (Statements) משפטי תנאי לולאות for while דוגמאות: מציאת GCD (אלגוריתם אוקלידס) בדיקה אם מספר הוא ראשוני מבוא למדעי המחשב. כל הזכויות שמורות ©

משפטים (פקודות) בשפת C - Statements משפט ביטוי (expression statement): ביטוי שאחריו ';' נחשב כמשפט. לעיתים קיימות תוצאות לוואי למשפט כזה ולעיתים לא. משפט ריק (empty statement): מורכב מ-';' בלבד. אין למשפט תוצאות לוואי. משפט מורכב (compound statement): רצף משפטים המוקפים בסוגריים מסולסלים {} נחשב כמשפט אחד. רצף כזה נקרא גם בלוק. x = y++; a + b; ; { t = x; x = y; y = t; } מבוא למדעי המחשב. כל הזכויות שמורות ©

מבוא למדעי המחשב. כל הזכויות שמורות © תוכנייה משפטים בשפת C - (Statements) משפטי תנאי לולאות for while דוגמאות: מציאת GCD (אלגוריתם אוקלידס) בדיקה אם מספר הוא ראשוני מבוא למדעי המחשב. כל הזכויות שמורות ©

מבוא למדעי המחשב. כל הזכויות שמורות © משפט if if (expression) statement זהו משפט מהצורה: אם ערך האמת של expression הינו True, מבצעים את statement. אם ערך האמת של expression הינו False, מדלגים על ביצוע statement (ועוברים למשפט הבא אחריו). לרוב, statement יהיה משפט מורכב. לדוגמה: expression ≠0 Statement if(b*b < 4*a*c) } printf(“no real solution to the quadratic equation.\n”); return 1; } מבוא למדעי המחשב. כל הזכויות שמורות ©

מבוא למדעי המחשב. כל הזכויות שמורות © משפט if-else if (expression) statement1 else statement2 זהו משפט מהצורה: אם ערך האמת של expression הינו True, מבצעים את statement1 מדלגים על statement2 ועוברים למשפט הבא. אם ערך האמת של expression הינו False, מדלגים על statement1, מבצעים את statement2 ואז ממשיכים לבא. לדוגמה: expression ≠0 st1 st2 if(tomorrow_is_rainy == ‘y’) printf(“Take your umbrella.\n"); else printf(“Leave the umbrella at home.\n"); מבוא למדעי המחשב. כל הזכויות שמורות ©

מבוא למדעי המחשב. כל הזכויות שמורות © קינון if-else מה מבצע המשפט הבא? ה-else מקושר תמיד ל-if האחרון. 1 =1 a b =2 2 if(a==1) if(b==2) printf("***"); else printf("###"); *** ### ### ### מבוא למדעי המחשב. כל הזכויות שמורות ©

מבוא למדעי המחשב. כל הזכויות שמורות © קינון if-else מה מבצע המשפט הבא? ה-else מקושר תמיד ל-if האחרון. ניתן להפריד ביניהם באמצעות {...}. 1 =1 a b =2 2 if(a==1) if(b==2) printf("***"); else printf("###"); *** *** ### ### ### ### מבוא למדעי המחשב. כל הזכויות שמורות © 8 8

מבוא למדעי המחשב. כל הזכויות שמורות © קינון if-else מה מבצע המשפט הבא? ה-else מקושר תמיד ל-if האחרון. ניתן להפריד ביניהם באמצעות {...}. 1 =1 a b =2 2 *** ### ### ### if(a==1) { if(b==2) printf("***"); } else printf("###"); מבוא למדעי המחשב. כל הזכויות שמורות © 9 9

מבוא למדעי המחשב. כל הזכויות שמורות © תוכנייה משפטים בשפת C - (Statements) משפטי תנאי לולאות for while דוגמאות: מציאת GCD (אלגוריתם אוקלידס) בדיקה אם מספר הוא ראשוני מבוא למדעי המחשב. כל הזכויות שמורות ©

מבוא למדעי המחשב. כל הזכויות שמורות © לולאות קטע קוד המתבצע מספר פעמים נקרא לולאה (loop). מספר הפעמים תלוי בערכו של ביטוי המחושב במהלך ריצת התכנית. כל אחד מביצועי הלולאה נקרא איטרציה (iteration). ב- C קיימים שלושה משפטים המאפשרים ביצוע לולאות: while statement for statement do-while statement מבוא למדעי המחשב. כל הזכויות שמורות ©

מבוא למדעי המחשב. כל הזכויות שמורות © לולאת while while (expression) statement זהו משפט מהצורה: כל עוד ערך האמת של expression הינו True, מבצעים את statement. לדוגמה, חישוב עצרת: expression ≠0 statement n! = 1*2*3 … *(n-1)*n מבוא למדעי המחשב. כל הזכויות שמורות ©

מבוא למדעי המחשב. כל הזכויות שמורות © לולאת while while (expression) statement זהו משפט מהצורה: כל עוד ערך האמת של expression הינו True, מבצעים את statement. לדוגמה, חישוב עצרת: expression ≠0 statement unsigned factorial = 1; int n, i = 2; scanf(“%d”, &n); // Test for success while(i <= n) { factorial *= i++; } printf("n!= %u", factorial); מבוא למדעי המחשב. כל הזכויות שמורות © 13 13

מבוא למדעי המחשב. כל הזכויות שמורות © לולאת while while (expression) statement זהו משפט מהצורה: כל עוד ערך האמת של expression הינו True, מבצעים את statement. לדוגמה, חישוב עצרת: expression ≠0 statement unsigned factorial = 1; int n, i = 1; scanf(“%d”, &n); while (i++ < n) { // Not recommended factorial *= i; } printf("n!= %u", factorial); מבוא למדעי המחשב. כל הזכויות שמורות © 14 14

מבוא למדעי המחשב. כל הזכויות שמורות © לולאת do-while do statement while(expression); זהו משפט מהצורה: מבצעים את statement כל עוד ערך האמת של expression הינו True (פעם אחת לפחות). לדוגמה, קליטת מספר חיובי: statement expression ≠0 int x; do { printf("Please enter a positive number: "); scanf("%d", &x); } while (x <= 0); מבוא למדעי המחשב. כל הזכויות שמורות ©

מבוא למדעי המחשב. כל הזכויות שמורות © לולאת for זהו משפט מהצורה: מבצעים את expression1 (אתחול) ואז כל עוד ערך האמת של expression2 (תנאי) הינו True, מבצעים את statement ואז expression3 (קידום). כ"א משלושת הביטויים יכול להיות ריק. שקול ל: expression1 for(expression1;expression2;expression3) statement expression2 ≠0 statement expression3 expression1 while (expression2) { statement expression3 } כמעט! מבוא למדעי המחשב. כל הזכויות שמורות ©

מבוא למדעי המחשב. כל הזכויות שמורות © לולאת for - המשך sum = 0; for(i = 1; i <= n; i++) sum += i * i; חישוב הביטוי : חישוב עצרת: השווה מול השימוש ב-while: for(i = 2 ; i <= n; i++) factorial *= i; printf("n!= %d", factorial); i = 2; while(i <= n) { factorial *= i; i++; } printf("n!= %d", factorial); מבוא למדעי המחשב. כל הזכויות שמורות ©

דוגמה: מציאת המספר הקטן ביותר בקלט נכתוב תוכנית המקבלת כקלט סדרה של n מספרים (שלמים) ומוצאת עבורם את הערך המינימאלי. אלגנטי? קריאת הערכים נעשית פעם מחוץ ללולאה, ובהמשך בתוכה. ואם נרצה את כל הקריאות בלולאה? נאתחל את min ל- INT_MAX קבוע המוגדר ב-limits.h וערכו הוא הערך השלם הגדול ביותר שיכול משתנה מטיפוס int לקבל. זה אינו הפתרון היחיד האפשרי! scanf("%d", &min); for(i = 1; i < n; i++) { scanf("%d", &num); if(num < min) min = num; } #include<limits.h> ... min = INT_MAX; for(i = 0; i < n; i++) { scanf("%d", &num); if(num < min) min = num; } מבוא למדעי המחשב. כל הזכויות שמורות ©

מבוא למדעי המחשב. כל הזכויות שמורות © לולאת for - המשך שימוש באופרטור פסיק ,: חישוב ביטוי מהצורה exp1, exp2 מתבצע ע"י חישוב exp1 ולאחריו חישוב exp2. ערכו (טיפוסו) של ביטוי זה הינו ערכו (טיפוסו) של exp2. קודם ראינו את התוכנית דרך נוספת לביצוע הסכום הנ"ל: ככלל, בסוגריים הצמודים ל-for יופיעו ביטויים הקשורים בבקרת הלולאה (אך לא בתכנה), ולכן נעדיף את הפתרון הראשון שראינו. sum = 0; for(i = 1; i <= n; i++) sum += i * i; for(sum = 0, i = 1; i <= n; sum += i * i, i++); מבוא למדעי המחשב. כל הזכויות שמורות ©

משפטי break ו- continue משפטים מיוחדים לצורך שבירת רצף הביצוע בקוד. break כאשר מופיע בתוך switch גורם לסיום ה-switch ומעבר למשפט הבא. כאשר מופיע בתוך לולאה, גורם לסיום הלולאה ומעבר למשפט הבא. continue ניתן לשימוש בלולאות בלבד. גורם למעבר לסוף האיטרציה הנוכחית בלולאה. מבוא למדעי המחשב. כל הזכויות שמורות ©

מבוא למדעי המחשב. כל הזכויות שמורות © דוגמה לשימוש ב- break קטע קוד זה מסכם את המספרים בקלט עד (לא כולל) המספר השלילי הראשון. sum = 0; while(1) { scanf("%d",&num); if(num < 0) break; sum += num; } מבוא למדעי המחשב. כל הזכויות שמורות ©

דוגמה לשימוש ב- continue קטע קוד זה מבצע קריאה של 100 מספרים שלמים וסוכם את אי-השליליים שביניהם. מה ההבדל בין הקוד העליון לקוד הבא? האם הם שקולים? בקוד זה נידרש לספק 100 מספרים אי-שליליים על מנת לסיים התוכנית. מה נדרש לשנות על מנת לקבל שקילות לתוכנית העליונה? for(i = 0; i < 100; i++) { scanf("%d",&num); if(num < 0) continue; sum += num; } i = 0; while(i < 100) { scanf("%d",&num); if(num < 0) continue; sum += num; i++; } מבוא למדעי המחשב. כל הזכויות שמורות ©

לתרגם לולאת for ללולאת while – קל? for(expression1;expression2;expression3) statement בהנתן האם התרגום הבא שקול? רק אם ב- statement אין continue ! expression1 while (expression2) { statement expression3 } מבוא למדעי המחשב. כל הזכויות שמורות © 23 23

מבוא למדעי המחשב. כל הזכויות שמורות © לולאות אינסופיות לולאות בהן ערך הביטוי הנבדק שונה מ-0 תמיד. לולאות אינסופיות נגרמות לעיתים בשל שגיאה ובמקרים אלו ניתן לצאת מהן על ידי עצירת התכנית באמצעות מערכת ההפעלה (או כיבוי המחשב). ניתן לייצר לולאות אינסופיות במכוון. לדוגמה: היציאה מלולאות אינסופיות מכוונות נעשית באמצעות פקודות כגון .return, break הסיבה הנפוצה למבנה זה: תנאי היציאה מורכב מכדי להתאים לכותרת הלולאה. while(1) { … } for( ;1; ) { … } for( ; ; ) { … } מבוא למדעי המחשב. כל הזכויות שמורות ©

דיוק בבדיקת תנאי הלולאה האם שתי הלולאות הבאות מבצעות את אותה הפעולה ? ככלל, נעדיף אופרטורים של סדר (>=, <=, <, >) על פני אופרטורים של השוואה (==, !=) בתנאי הביצוע של לולאות. for(x = 0.0; x < 3.0; x += 0.2) for(x = 0.0; x != 3.0; x += 0.2) for (i = 0, x = 0.0; i < 15; i++, x += 1.0/5.0) for (i = 0, x = 0.0; i < 15; i++, x = i/5.0) בשימוש בערכי "נקודה צפה" האחרון עדיף ממש: אין שגיאות ניהול לולאה ואין הצטברות שגיאות עיגול מבוא למדעי המחשב. כל הזכויות שמורות ©

מבוא למדעי המחשב. כל הזכויות שמורות © תוכנייה משפטים בשפת C - (Statements) משפטי תנאי לולאות for while דוגמאות: מציאת GCD (אלגוריתם אוקלידס) בדיקה אם מספר הוא ראשוני 4 הרצאה מבוא למדעי המחשב. כל הזכויות שמורות ©

מציאת המכנה המשותף הגדול ביותר (GCD) GCD: מחלק משותף גדול ביותר (Greatest Common Divider). בהינתן שני שלמים חיוביים m ו-n gcd(m,n) הוא השלם הגדול ביותר שמחלק את שניהם. פתרון ביה"ס יסודי: פרק את שני המספרים לגורמים ראשוניים. מכפלת הגורמים הראשוניים המשותפים היא ה-GCD. לדוגמא: n=270 m=700 n = 2 * 33 * 5 m = 22 * 52 * 7 gcd(700, 270) = 2 * 5 = 10 4 הרצאה מבוא למדעי המחשב. כל הזכויות שמורות ©

פירוק מספר לגורמים ראשוניים המשפט היסודי של האריתמטיקה (שהוכח ע"י אוקלידס) קובע כי כל מספר שלם יכול להיכתב בצורה ייחודית כמכפלת מספרים ראשוניים. פירוק מספר n לגורמים: אם n ראשוני, הוסף את n לקבוצת המחלקים ועצור. אחרת, עבור סדרתית על המספרים הראשוניים עד שורש n. הוסף את p, המספר הראשוני הראשון המחלק את n, לקבוצת המחלקים וחזור על התהליך עם n/p. לדוגמה, עבור n=30: 30 = 2 * 15 15 = 3 * 5 5 = 5 קושי: האלגוריתם אינו מעשי עבור n גדול. למשל עבור מספר בן 18 ספרות יש צורך לעבור על כל הראשוניים עד 1,000,000,000 (השורש שלו!). מסיבה זו, פירוק לגורמים ראשוניים משמש בסיס לקריפטוגרפיה מודרנית. 4 הרצאה מבוא למדעי המחשב. כל הזכויות שמורות ©

אלגוריתם אוקלידס לחישוב GCD אלגוריתם אוקלידס מתבסס על הטענות המתמטיות הבאות: q מחלק את m ואת n אם ורק אם q מחלק את n ואת r = m % n. ← נובע מהשוויון m = r + k * n. עבור n השונה מ-0 gcd(n,m%n) gcd(m,n) =. gcd(m, 0) = m עבור m שאינו 0. מה קורה אם n > m? Euclid Aristotle Eudoxus of Cnidus 4 הרצאה מבוא למדעי המחשב. כל הזכויות שמורות ©

אלגוריתם אוקלידס לחישוב GCD n n m % n m % n m n gcd(m,n) 4 הרצאה מבוא למדעי המחשב. כל הזכויות שמורות ©

מבוא למדעי המחשב. כל הזכויות שמורות © ההיגיון הבסיסי נניח כי qהוא מחלק כלשהו המחלק באופן שלם הן את m והן את n. נניח כי m>n. ברור כי gcd(m,n)=gcd(m-n,n). באופן דומה, gcd(m,n)=gcd(m-2n,n), וכו'. אם נמשיך בהפחתה נגיע לקשר: gcd(m,n)=gcd(n,m%n). היפוך הסדר נובע מכך שבהכרח: m%n<n. m-n m-2n m q n 4 הרצאה מבוא למדעי המחשב. כל הזכויות שמורות ©

אלגוריתם אויקלידס, דוגמאות דוגמא 1 דוגמא 2 m = k*n + r n m n m 700 = 2*270 + 160 700 270 100 17 270 = 1*160 + 110 270 160 17 15 160 = 1*110 + 50 160 110 15 2 110 50 2 1 110 = 2*50 + 10 50 10 1 0 50 = 5*10 + 0 10 0 4 הרצאה מבוא למדעי המחשב. כל הזכויות שמורות ©

אלגוריתם אויקלידס, הוכחת נכונות נסמן ב-mi ו-ni את ערכי המשתנים m ו-n בתום האיטרציה ה-i. שמורה (תכונה שנשמרת במהלך האלגוריתם): gcd(m0,n0) = gcd(mi,ni) הוכחת השמורה נעשית באינדוקציה על i: בסיס: מיידי. הנחה: gcd(m0,n0) = gcd(mi,ni) צעד האינדוקציה: gcd(mi+1,ni+1) = gcd(ni,mi%ni) = gcd(mi,ni) = gcd(m0,n0) בתום האיטרציה האחרונה: gcd(m0,n0) = gcd(mN,nN) = gcd(mN,0) = mN אלגוריתם טענה מתמטית הנחת האינדוקציה 4 הרצאה מבוא למדעי המחשב. כל הזכויות שמורות ©

אלגוריתם אויקלידס, קידוד #include <stdio.h> int main() { int m, n; scanf("%d%d", &n, &m); if (n < 0) n = -n; if (m < 0) m = -m; while(n != 0) { int temp = n; n = m % n; m = temp; } if(m != 0) printf("The gcd is %d\n", m); return 0; RUN 4 הרצאה מבוא למדעי המחשב. כל הזכויות שמורות ©

אלגוריתם לבדיקת ראשוניות בהינתן שלם חיובי n, יש לקבוע האם הוא ראשוני. n איננו ראשוני אם ורק אם יש ל-n מחלק בתחום 2,3,…,n-1. int is_prime = 1, n, i; ... if (n < 0) n = -n; if (n < 2) is_prime = 0; else { for(i = 2; i < n; i++) if(n % i == 0) } if(is_prime) printf("%d is a prime\n", n); else printf("%d is not a prime\n", n); RUN מבוא למדעי המחשב. כל הזכויות שמורות ©

בדיקת ראשוניות: הצעות ייעול #include <math.h> ... int is_prime = 1, n, i; if (n < 0) n = -n; if(n < 2 || (n != 2 && n % 2 == 0)) is_prime = 0; else { int sqrt_n = sqrt(n) + 0.5; for(i = 3; i <= sqrt_n; i+=2) if(n % i == 0){ break; } printf("%d is %sa prime\n", n, is_prime ? "" : "not "); RUN אם n איננו 2 אך מתחלק ב-2 אזי הוא אינו ראשוני. מספיק לבדוק מחלקים אפשריים עד שורש n. כיוון ש-n אינו זוגי, ניתן לדלג על בדיקת המחלקים הזוגיים. כשנמצא מחלק שלם, אין סיבה להמשיך בבדיקה. מבוא למדעי המחשב. כל הזכויות שמורות ©