מבוא לתכנות ולמדעי המחשב בשפת C/תרגיל 1
מועד הגשה: יום ראשון ה 6.11.2011 עד 22:00.
שאלה 1
עריכהכיתבו תוכנית מחשב בקובץ בשם q1.c שמדפיסה את הפרטים האישיים שלכם (שם מלא ומספר תעודת זהות). פורמט ההדפסה יהיה כזה:
/*
Ori Mosenzon
ID:01212121-4
*/
(כאשר השם ומספר הזהות הם שלכם)
התוכנית הזאת יכולה לשמש אתכם בכדי להכניס את הפרטים האישיים שלכם לתוך קבצי מקור ב C. אם קובץ ההרצה של התוכנית הזאת נקרא q1 תוכלו להשתמש בו כך:
./q1 >> check.c
(שימו לב לכתוב << (שירשור בסוף הקובץ) ולא רק < שיגרום לדריסת קובץ הקוד שלכם)
ההדפסה כוללת סימנים של הערה בכדי שהקוד check.c ימשיך להיות קוד C חוקי גם אחרי התוספת.
שאלה 2
עריכהשכללו את התוכנית שכתבתם בשאלה הקודמת כך שניתן יהיה להכניס לה את מספר התרגיל. בנוסף לפרטי התלמיד, ההדפסה תכלול גם את מספר התרגיל וכותרת הקורס. בלינק זה תמצאו קובץ הרצה המתנהג דומה להתנהגות המצופה מהתוכנית שלכם. ההבדל היחידי אמור להיות השם ומספר תעודת הזהות (בקוד שלכם הם אמורים להיות שלכם).
כבררת מחדל, לקובץ שמורידים מהרשת אין הרשאות ריצה (לכן הוא לא מופיע כירוק כשאתם רואים אותו ב ls מהטרמינל). בכדי להפוך אותו לקובץ ריצה, יש לכתוב את הפקודה הבאה:
chmod +x q2_ori
שימו לב איך מתנהג קובץ הרצה זה כאשר נותנים לו מספר תרגיל שאיננו חיובי. גם התוכנית שלכם אמורה להתנהג כך.
קובץ קוד המקור של תוכנית זו יהיה q2.c
שאלה 3
עריכהבשאלה זו תתבקשו לשפר את התוכנית שכתבנו בשעור 3 למציאת שורשים של משוואה ריבועית. עליכם לדאוג שהתוכנית תעבוד נכון גם כאשר הערך של a הוא 0. בלינק זה תמצאו קובץ הרצה שמתנהג בדיוק כפי שהתוכנית שלכם אמורה להתנהג. נסו להריץ אותו עם הערכים הבאים ולראות מה קורה:
- <m>a=0, b=0, c=0</m>
- <m>a=0, b=0, c=1</m>
- <m>a=0, b=2, c=-4</m>
- <m>a=2, b=-8, c=8</m>
- <m>a=3, b=-15, c=18</m>
התוכנית שלכם אמורה להגיב באופן זהה בכל המקרים.
קובץ קוד המקור של תוכנית זו יהיה q3.c
בונוס (10 נק')
עריכהזו שאלת רשות. פתרון מלא עשוי להוסיף לכם עוד 10 נקודות מעל הציון הרגיל.
כתבו תוכנית דומה לזו שבשאלה 3 הפותרת משוואות ממעלה שלישית. התוכנית תקבל מהמשתמש ארבעה מספרים a,b,c,d ותתן פתרון. ניתן להשוות אותו לפתרון שניתן בוולפרם אלפה.
קובץ קוד המקור של הבונוס יקרה qb.c
הגשה
עריכההוספת הפרטים האישיים שלכם לקבצי הקוד
עריכההריצו את q1 (קובץ ההרצה של q1.c) כך שיוסיף את הפרטים האישיים שלכם לכל אחד מקבצי הקוד שלכם:
./q1 >> q1.c
./q1 >> q2.c
./q1 >> q3.c
./q1 >> qb.c (אם קיים)
יצירת קובץ ארכיון
עריכההפקודה הבאה תיצור לכם קובץ מכווץ בשם ex1.tgz המכיל את כל קבצי הקוד שלכם:
tar czvf ex1.tgz q1.c q2.c q3.c
(אם כתבתם גם את qb.c, הוסיפו גם אותו)
בדיקת קובץ הארכיון
עריכהפיתחו תקייה ריקה, העתיקו אליה את קובץ הארכיון שיצרתם ובידקו את תכולתו:
mkdir tmp
cp ex1.tgz tmp/
cd tmp
tar xzvf ex1.tgz
more q*
cd ..
rm -r tmp
הפקודה הרביעית היא פקודה לחילוץ קבצים מקובץ ארכיון. הפקודה החמישית תדפיס לכם את תכולת כל הקבצים המתחילים באות q.
אפשר להוסיף לבדיקה זו גם הידור והרצה של כל הקבצים.
העלאת קובץ הארכיון
עריכההעלו את הקובץ ex1.tgz שבדקתם לתקייה המתאימה ב moodle.
- בכדי לעשות זאת, הכנסו לדף הקורס במערכת מודל. ולחצו על "מטלות":
- במסך הבא, ביחרו "תרגיל ראשון":
- במסך הבא, בחרו את הקובץ ex1.tgz ממערכת הקבצים שלכם ולחצו על כפתור ההעלאה:
פתרון
עריכהq2
עריכה#include <stdio.h>
int main() {
int n;
printf("Please enter exercise number: "); scanf("%d",&n);
if (n <= 0)
printf("Exerecise number cannot be negative or zero\n");
else {
printf("/*\nIntroduction to programming and computer science.\n");
printf("Exercise %d\n",n);
printf("Ori Mosenzon\nID:01212121-4\n*/\n");
}
return 0;
}
q3
עריכה#include <stdio.h>
#include <math.h>
int main() {
printf("Please enter the three coefficients of a quadratic equation\n(a*x^2+b*x+c=0)\n");
double a,b,c;
printf ("a: ");
scanf("%lf",&a);
printf ("b: ");
scanf("%lf",&b);
printf ("c: ");
scanf("%lf",&c);
if(a == 0)
if (b == 0)
if (c == 0)
printf("Any number is a solution to this equation\n");
else
printf("This equation has no soltions\n");
else
printf("x=%lf\n",-c/b);
else {
double d = b*b-4*a*c;
if (d < 0)
printf ("There are no real solutions to this equation\n");
else
if (d==0)
printf("x = %.2lf \n",-b/(2*a));
else {
d = sqrt(d);
printf("x1 = %.2lf, x2 = %.2lf \n",(-b+d)/(2*a),(-b-d)/(2*a));
}
}
return 0;
}