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


לדף הקורס