פתרונות תרגילים 6,7
/* #include <stdio.h> void main() { char str[80]; int i , cnt = 0; printf("Enter string:\n"); gets( str ); for(i=0; str[i] != NULL; i++) { if(str[i]>='a' && str[i]<='z' && !(str[i+1]>='a' && str[i+1]<='z' ) ) cnt++; } printf("cnt: %d\n",cnt); } */ /* #include <stdio.h> void main() { char str[80]; int i , c = 0 , max = 0; printf("Enter string:\n"); gets( str ); for(i=0; str[i] != NULL; i++) { if(str[i]>='0' && str[i]<='9') { c++; } else { if(c > max) max=c; c = 0; } } if(c > max) max = c; printf("Max: %d\n",max); } */
משימה בשיעור:
שאלה 1:
נתונה התוכנית הבאה:
#include <stdio.h>
void main( ){
int i,j,k;
char str[30] = "#Bill – Klinton 199581";
for(i=k=1; str[i] ; i++)
{
for(j=0; j<k && str[j] != str[i]; j++);
if(j == k)
str[k++] =str[i];
}
str[k] = NULL;
printf("%s",str);
}
· מה הפלט של התוכנית הנ"ל ?
· מה מבצעת התוכנית הנ"ל באופן כללי ?
מצביעים - pointer
- המצביע הוא משתנה שיכול לקבל דבר אחד בלבד: כתובת בזיכרון.
- כל המצביעם באותו הגודל: 4 בתים (= int=32bits), ללא התחשבות בסוגם.
(הסוג נועד רק להגיד למצביע איך להתייחס למה שהוא מצביע עליו)
הגדרה:
type *Name;
דוגמה שמסבירה הרבה:
#include <stdio.h> void main() { int x, y=12, *p; // כשמגדירים מצביע, חייבים להשתמש ב*. וצריך להקפיד // שסוג המצביע זהה לסוג המשתנה עליו הוא עתיד להצביע- p = &x; // & ע"י השימוש ב x מבקבלים את מיקום הבית הראשון של *p = 27; // מכניסים את הערך 27 למשתנה שמתחיל בבית שהמצביע מצביע עליו // ללא התחשבות אם המשתנה הזה מוגדר בפונקציה שלנו או לא- p = &y; // & ע"י השימוש ב y מבקבלים את מיקום הבית הראשון של *p +=5; // עוד 5 p מוסיפים למשתנה שבכתובת שעליה מצביע printf("x: %d y: %d\n",x,y); }
#include <stdio.h> void swap(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; } void main() { int x=5, y=6; swap(&x,&y); printf("x: %d y: %d\n",x,y); }
דברים שעשינו בשיעור (כונן M):
/* #include <stdio.h> \\ דוגמה לתוכנית שלא עובדת void swap(int a, int b) { int tmp; tmp = a; a = b; b = tmp; } void main() { int x = 5 , y = 6; swap(x, y); printf("x: %d y: %d\n",x , y); } /////////////////////////////////////////////// #include <stdio.h> void swap(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; } void main() { int x = 5 , y = 6; swap(&x, &y); printf("x: %d y: %d\n",x , y); } ///////////////////////////////////////// #include <stdio.h> void f1(int n, int *p1, int *p2) { int i; *p1 = 0; *p2 = 1; for(i=1; i <= n; i++) { *p1 += i; *p2 *= i; } } void main() { int n , S , M; printf("Enter n: "); scanf("%d",&n); f1(n, &S, &M); printf("Sum: %d Mul: %d\n",S , M); } */ #include <stdio.h> int f1(int n, int *p1) { int i , m = 1; *p1 = 0; for(i=1; i <= n; i++) { *p1 += i; m *= i; } return m; } void main() { int n , S , M; printf("Enter n: "); scanf("%d",&n); M = f1(n, &S); printf("Sum: %d Mul: %d\n",S , M); }
משימה:
#include <stdio.h> #include <math.h>
double f(double a,double b,double c,double *p1,double *p2) { double m; if(a==0 || (b*b-4*a*c)<0) return 0; if((b*b-4*a*c)==0) { *p1=(-b)/2.0*a; return 1; } m=sqrt(b*b-4*a*c); *p1=((-b)+m)/(2.0*a); *p2=((-b)-m)/(2.0*a); return 2; } void main() { double a,b,c,k; double x1,x2; printf("Enter a , b , c: "); scanf("%lf%lf%lf",&a,&b,&c); k=f(a,b,c,&x1,&x2); if(k==0) printf("No Solution\n"); if(k==1) printf("x1: %.2lf\n",x1); if(k==2) printf("x1: %.2lf x2: %.2lf\n",x1,x2); }
אתה יכול בבקשה להסביר ולהרחיב על השורה for (j = 0; j < k && str[j] != str[i]; j++);
השבמחק?