תרגול סיכום וחזרה

22
ההההה ההההה ההההה

Upload: tanisha-warner

Post on 01-Jan-2016

27 views

Category:

Documents


1 download

DESCRIPTION

תרגול סיכום וחזרה. שאלות ידע בסיסי. #include < stdio.h > int main() { int i =10, stop=0; while(!stop && ( i -- >= 0)) { stop=!(i%5); printf ("%d\ n",i ); } printf ("%d\ n",i ); return 0; }. חורף תשס"ט – מועד א. שאלות ידע בסיסי. #include - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: תרגול סיכום וחזרה

תרגול סיכום וחזרה

Page 2: תרגול סיכום וחזרה

שאלות ידע בסיסי...

#include <stdio.h> int main() { int i=10, stop=0; while(!stop && (i--

>= 0)) { stop=!(i%5); printf("%d\n",i); } printf("%d\n",i); return 0; }

אבגדה

10109

987654

1010

987655

אבגדה

10109

987654

1010

987655

חורף תשס"ט – מועד א

Page 3: תרגול סיכום וחזרה

שאלות ידע בסיסי...

#include <stdio.h>

enum BOOL{TRUE,FALSE};

int main()

{

enum BOOL mybool;

mybool=TRUE;

if (mybool)

printf("hello1\n");

else

printf("hello2\n");

return 0;

}

אבגדה

hello1hello2hello1hello2

שגיאת זמן ריצה

שגיאת הידור

חורף תשס"ט – מועד ב

אבגדה

hello1hello2hello1hello2

שגיאת זמן ריצה

שגיאת הידור

Page 4: תרגול סיכום וחזרה

שאלות ידע בסיסי...

#include <stdio.h>int main(){ int z=5; int x=1; int y=(--x)?(z--):(++z); printf("%d\n%d\n%d\n",x,y,z); return 0;}

אבגדה

066

065

044

045

145

אבגדה

066

065

044

045

145

Page 5: תרגול סיכום וחזרה

שאלות ידע בסיסי...

#include <stdio.h> int main(){

int i='1'-1; 

for (i++;i<'9';i++)putchar(i);

 return 0;

} אבגדה

0123456789

123456789

12345678

1357902468

אבגדה

0123456789

123456789

12345678

1357902468

Page 6: תרגול סיכום וחזרה

שאלות ידע בסיסי...

 #include <stdio.h>int main(){  int y='\0'; switch(y) {

case (0): printf("hello1\n"); case ('0'): printf("hello2\n"); case (1): } return 0;}

אבגדה

hello1hello2hello1hello2

לא יודפס כלום

שגיאת הידור

אבגדה

hello1hello2hello1hello2

לא יודפס כלום

שגיאת הידור

Page 7: תרגול סיכום וחזרה

מצביעים

: ו-*יש לנו שני אופרטורים חשובים& גורם לנו לרדת רמה – נותן את התוכן הנמצא - *

בכתובתמעלה אותנו רמה – נותן את כתובת המשתנה - &-אם היא מופיעה *חשוב לשים לב איפה מופיעה ה .

בהגדרת המשתנה או בחתימה של פונקציה, היא חלק מהטיפוס

;int* xלדוג: int f(int *y) ;

שימו לב – אסור להשתמש במצביע לא מאותחל – לפנישהוא מצביע על משהו.

;int *p לדוגמה:*p=3 ;

Page 8: תרגול סיכום וחזרה

שאלות על מצביעים:

#include <stdio.h> int g(int * x) { *x-=8;

return 7;} int f(int x) {

g(&x); printf("%d",x); return 5;

}

int main() { int x=9; f(x); printf("%d",x); return 0; }

אבגדה

79

11

71

19

15

אבגדה

79

11

71

19

15

Page 9: תרגול סיכום וחזרה

מערכים

חשוב לזכור: שם המערך בעצם מצביע על התאהראשון במערך

אסור בתכלית האיסור לשנות את המקום אליו מצביעשם המערך – זה אפילו לא עובר קומפילציה!

:לדוגמהint A[6], B[6];

A=B ; כאשר מבצעיםsizeof על מערך מקבלים את מספר

הבתים שכל המערך תופס. אופרטור[]:

arr[i]*(arr+i) p[i]*(p+i)

Page 10: תרגול סיכום וחזרה

שאלות על מערכים

#include <stdio.h>int main(){ int a[8]={1,2,3,4}; printf("%d", ((int)(sizeof(a)/sizeof(int)))); return 0;} אבגדה

328421

אבגדה

328421

Page 11: תרגול סיכום וחזרה

אביב תשס"ח – מועד א

בהנתן מערך של מספרים שלמיםa[] נגדיר את , 0 כמערך שבתא ה-[]bשלו, מערך ההפרשים

(כלומר aמכיל את האיבר הראשון של b[0]=a[0] ובכל תא אחר ,(i הוא מכיל את

לאיבר הקודם לו (כלומר a[i]ההפרש בין האיבר b[i]=a[i]-a[i-1].(

לדוגמה, עבור המערך a[] = {1, -2, 5, 3, 6}

מערך ההפרשים יהיה b[] = {1,-3, 7, -2, 3}

Page 12: תרגול סיכום וחזרה

ואינדקס []bא. כתבו פונקציה שמקבלת את מערך ההפרשים k ומחזירה את תוכן המערך המקורי בתא בעל אינדקס "k ,

. a[k]כלומר O(1) ומקום O(k)על הפונקציה לעמוד בסיבוכיות זמן

int get(int b[],int k){

int sum = b[0]; int i; for (i = 1; i<=k; i++) sum+=b[i]; return sum;}

Page 13: תרגול סיכום וחזרה

ב. לצורך הסעיף הבא נתונה פונקציית העזר int magicget (int b[], int

k), ומחזירה את תוכן k ואינדקס []bהמקבלת מערך הפרשים

.O(1) , ומקום O(logk) בזמן a[k]המערך המקורי

, n, את אורכו []bכתבו פונקציה המקבלת מערך הפרשים כך שערך המערך []b, ומשנה את המערך x וערך kאינדקס

a[k]=x, כלומר x יהיה kהמקורי בתא ה-, וסיבוכיות O(logk)על הפונקציה לעמוד בסיבוכיות זמן

.O(1)מקום

Page 14: תרגול סיכום וחזרה

void change(int b[],int n, int k, int x)

{

int old;

if (k>=n) return;

old = magicget(b,k);

b[k] += x-old; if(k+1<n) b[k+1]-= x-old;

}

חשוב לשים לב ל:עמידה בדרישות הסיבוכיותמקרי הקצה

Page 15: תרגול סיכום וחזרה

()changeג. באמצעות שימוש בפונקציות מהסעיפים הקודמים, ממשו את ()magicgetו-

הפונקציה הבאה שמקבלת את מערך ההפרשים b את אורכו ,n ושני אינדקסים i-ו j של תאים

כך שהאיברים bבמערך, ומשנה את התוכן של a[i]-ו a[j].במערך המקורי יתחלפו

.O(1), מקום – O(logn) זמן - דרישות סיבוכיות:

Page 16: תרגול סיכום וחזרה

void swap (int b[], int n, int i, int j){

int a_i, a_j; a _i= magicget(b,i); a_j=magicget(b,j); change(b,j,a_i); change(b.i,a_j);}

Page 17: תרגול סיכום וחזרה

המכילים מספרים שלמים הממויינים בסדר b ו-aנתונים שני מערכים עולה.

m ו-n מהסוג הנ"ל, בגודל b ו-aכתבו פונקציה המקבלת שני מערכים אם קיימים שני איברים 1 ומחזירה kבהתאמה, ומספר שלם

.0כך שמתקיים . אחרת, על הפונקציה להחזיר לדוגמה – עבור המערכים

k=5 עבור 1הפונקציה תחזיר k=4 עבור 0ו-

דרישות סיבוכיות – זמן מקום

,i ja a b b

i ja b k

15820 21521a b

O n m

1O

Page 18: תרגול סיכום וחזרה

פתרון

int is_diff(int a[], int n, int b[], int m, int k) {

int i=0, j=0; 

while (i<n && j<m) {

if (k==a[i]-b[j]) return 1;if (k<(a[i]-b[j])) j++;else i++;

}return 0;

}

Page 19: תרגול סיכום וחזרה

מחרוזות

מחרוזות הן רצף תווים המסתיימים בתו המיוחד\‘0’.

מחרוזות קבועות המופיעות בקוד נשמרות באיזורמיוחד אליו יש רק גישת קריאה. כל נסיון לכתוב

שגיאת זמן ריצה.לאיזור זה גורר מחרוזות שאינן קבועות יאוחסנו במערכים. שימו לב

שאורכו של המערך יכול להיות הרבה יותר ארוך מהמחרוזת עצמה, אולם אותנו לא מעניין מה קורה

’0‘\אחרי ה-

Page 20: תרגול סיכום וחזרה

include <stdio.h>int main(){char a[] ="google"; *a='c'; printf("%s\n",a); printf("%s\n",a+3); return 0;}

אבגדה

coogleogle

googlegle

cooglegle

שגיאת זמן ריצה

שגיאת הידור

אבגדה

coogleogle

googlegle

cooglegle

שגיאת זמן ריצה

שגיאת הידור

Page 21: תרגול סיכום וחזרה

 #include <stdio.h>int main(){

char * str1="hello";char * str2="world";

 str1[0]=str2[2];printf("%s\n",str1);

 return 0;}

אבגדה

hellolelloeello שגיאתזמן ריצה

שגיאת הידור

אבגדה

hellolelloeello שגיאתזמן ריצה

שגיאת הידור

Page 22: תרגול סיכום וחזרה

דברים חשובים שכדאי לדעת לפני שמתחילים לפתור שאלה ב... סיבוכיות

חוקי לוגריתם:

סכום סדרה חשבונית:

סכום סדרה הנדסית:

log logi iii

a a

log logba b a

1

2n

n

a a nS

1 1

1

n

n

a qS

q

טורים נוספים:

1

2 3

1

1

1

1log

1 2 1

6

n

i

n

i

nk k

i

ni

n n ni n

i n