מבוא לתכנות ולמדעי המחשב בשפת 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; 
}


לדף הקורס