int main int i0 int a100 for i0

  • Slides: 45
Download presentation

int main() { int i=0; int a[100]; for (i=0; i<100; i++) scanf (“%d”, &a[i]);

int main() { int i=0; int a[100]; for (i=0; i<100; i++) scanf (“%d”, &a[i]); for (i=99; i>=0; i--) printf (“%d”, a[i]); } קלט פלט

 אתחול - מערכים 1 a[1] 2 a[2] 3 int a[10] = {1, 2,

אתחול - מערכים 1 a[1] 2 a[2] 3 int a[10] = {1, 2, 3}; a[0] 0 a[1] 0 a[2] 0 int a[10] = {0}; a[9] 0

#include <stdio. h> #include <stdlib. h> #define SIZE 7 int main() { int face,

#include <stdio. h> #include <stdlib. h> #define SIZE 7 int main() { int face, roll, frequency[ SIZE ] = { 0 }; srand( time(NULL) ); for ( roll = 1; roll <= 6000; roll++ ) { face = rand() % 6 + 1; ++frequency[ face ]; } printf( "%s%17 sn", "Face", "Frequency" ); for ( face = 1; face <= SIZE - 1; face++ ) printf( "%4 d%17 dn", face, frequency[ face ] ); return 0; }

 מצביעים int a; int b; a = 5; b = 7; 5000 5

מצביעים int a; int b; a = 5; b = 7; 5000 5 a 5004 7 b

 מצביעים int a, b; 5000 5 a 5004 7 b 7026 5000 p

מצביעים int a, b; 5000 5 a 5004 7 b 7026 5000 p 1 7030 5004 p 2 int *p 1; int *p 2; a = 5; b = 7; p 1 = &a; p 2 = &b;

 מצביעים int a, b; int *p 1; int *p 2; a = 5;

מצביעים int a, b; int *p 1; int *p 2; a = 5; b = 7; p 1 = &a; p 2 = &b; *p 1 = 2; *p 2 = *p 1; 5000 5 a 5004 7 b 7026 5000 p 1 7030 5004 p 2

 מצביעים int a, b; int *p 1; int *p 2; a = 5;

מצביעים int a, b; int *p 1; int *p 2; a = 5; b = 7; p 1 = &a; p 2 = &b; *p 1 = 2; *p 2 = *p 1; 5000 2 a 5004 2 b 7026 5000 p 1 7030 5004 p 2

int main() { int a; scanf(“%d”, &a); } scanf *pa = ערך מהמשתמש 5000

int main() { int a; scanf(“%d”, &a); } scanf *pa = ערך מהמשתמש 5000 a

int main() { int a=10, b=2, x=3, y=5; swap(x, y); swap(a, b); } void

int main() { int a=10, b=2, x=3, y=5; swap(x, y); swap(a, b); } void swap (int q, int p) { int temp =p; p = q; q = temp; }

int main() { int a=10, b=2, x=3, y=5; swap(&x, &y); swap(&a, &b); } void

int main() { int a=10, b=2, x=3, y=5; swap(&x, &y); swap(&a, &b); } void swap (int* q, int* p) { int temp = *p; *p = *q; *q = temp; } 5000 5 3 x 5004 3 5 y 7026 5000 p 7030 5004 q 7034 3 temp

1 תרגיל כתבו פונקציה שמקבלת אורך ורוחב של מלבן . ומחזירה את שטח המלבן

1 תרגיל כתבו פונקציה שמקבלת אורך ורוחב של מלבן . ומחזירה את שטח המלבן ואת היקפו void rectangle(int a, int b, int *area, int *circuit); int main() { int x, y; int area, circuit; scanf("%d %d", &x, &y); rectangle(x, y, &area, &circuit); printf(“Area is %d Circuit is %dn", area, circuit); return 0; }

 פתרון void rectangle(int a, int b, int *area, int *circuit) { *area =

פתרון void rectangle(int a, int b, int *area, int *circuit) { *area = a * b; *circuit = 2 * (a + b); }

void Get. Array(int a[], int size); void Print. Array(int a[], int size); int main()

void Get. Array(int a[], int size); void Print. Array(int a[], int size); int main() { int a[SIZE]; Get. Array(a, SIZE); Print. Array(a, SIZE); return 0; }

 פתרון מילוי מערך void fill_array(int array[], int size) { int i; srand(time(NULL)); for

פתרון מילוי מערך void fill_array(int array[], int size) { int i; srand(time(NULL)); for (i = 0; i < size; i++) array[i] = rand()/327; }

 פתרון הדפסת מערך void print_array(int array[], int size) { int i; for (i

פתרון הדפסת מערך void print_array(int array[], int size) { int i; for (i = 0; i < size; i++) printf("%d ", array[i]); printf("n"); }

 פתרון הפיכת מערך void reverse_array(int array[], int size) { int i; for (i

פתרון הפיכת מערך void reverse_array(int array[], int size) { int i; for (i = 0; i < size/2; i++) swap(&array[i], &array[size - 1 - i]); }

#include <stdio. h> #include <stdlib. h> #include <time. h> #define SIZE 5 void fill_array(int

#include <stdio. h> #include <stdlib. h> #include <time. h> #define SIZE 5 void fill_array(int array[], int size); void reverse_array(int array[], int size); void print_array(int array[], int size); void swap(int *a, int *b); int main() { int my_arr[SIZE]; fill_array(my_arr, SIZE); print_array(my_arr, SIZE); reverse_array(my_arr, SIZE); print_array(my_arr, SIZE); return 0; }

 חשבון מצביעים reverse_array(my_arr, my_arr + SIZE -1); void reverse_array(int *begin, int *end) {

חשבון מצביעים reverse_array(my_arr, my_arr + SIZE -1); void reverse_array(int *begin, int *end) { while (begin < end) { swap(begin, end); begin++; end--; } } ae begin d r e a end

 קלט b 35 22 445 פלט ] &a[4 a 15 35 100 11

קלט b 35 22 445 פלט ] &a[4 a 15 35 100 11 22 445 3 1

int *find. Sub. Array (int *array, int array_size, int *sub_array, int sub_size) { int

int *find. Sub. Array (int *array, int array_size, int *sub_array, int sub_size) { int i, j; for (i = 0; i <= array_size - sub_size; i++, array++) { for (j = 0; j < sub_size; ++j) if ( *(array + j) != sub_array[j] ) break; if (j == sub_size) return array; } return NULL; }

#include <stdio. h> int *find. Sub. Array (int *array, int array_size, int *sub_array, int

#include <stdio. h> int *find. Sub. Array (int *array, int array_size, int *sub_array, int sub_size); int main() { int array 1[] = {1, 45, 67, 1001, -19, 67, 89, 1004, -867, 34, 3, -1900, 10029}, array 2[] = {34, 3, -1900}, *position; position = find. Sub. Array (array 1, sizeof (array 1) / sizeof (int), array 2, sizeof (array 2) / sizeof(int)); printf ("array 2 appears in array 1 starting from place : % d. n", (position == NULL)? -1 : position - array 1 + 1); } return 0;

#include <stdio. h> int strlen (const char * str) { const char *eos =

#include <stdio. h> int strlen (const char * str) { const char *eos = str; while( *eos++ ) ; return( eos - str - 1 ); } int main() { char str[]="Shai"; printf("%d", strlen(str)); return 0; } ? מה קורה פה 100 101 102 103 104 105 106 L str I N U X ‘’ eos

 קלט b 35 22 445 פלט ] &a[4 a 15 35 100 11

קלט b 35 22 445 פלט ] &a[4 a 15 35 100 11 22 445 3 1

int *find. Sub. Array(int *array, int array_size, int *sub_array, int sub_size) { int i,

int *find. Sub. Array(int *array, int array_size, int *sub_array, int sub_size) { int i, j; for (i = 0; i <= array_size - sub_size; i++) { for (j = 0; j < sub_size; j++) if ( *(array + i + j) != sub_array[j] ) break; if (j == sub_size) return array+i; } return NULL; }

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

! נניח שהמערכים הם מחרוזות • אפשר להעביר לפונקציה רק מצביע לתחילת ( המערך )המחרוזת int *find. Sub. Array(int *array, int array_size, int *sub_array, int sub_size) while (*cp) for (i = 0; i <= array_size – sub_size; i++) { for (j = 0; j < sub_size; j++) if ( *(array + i + j) != sub_array[j]) break; if (j == sub_size) return array+i; }

#include <stdio. h> char * strstr ( char * str 1, char * str

#include <stdio. h> char * strstr ( char * str 1, char * str 2) { char *cp = str 1; char *s 1, *s 2; ! if ( !*str 2 ) return(str 1); while (*cp) { s 1 = cp; s 2 = str 2; while ( *s 1 && *s 2 && !(*s 1 -*s 2) ) s 1++, s 2++; if (!*s 2) return(cp); cp++; } return(NULL); בדיקת תת המחרוזת } void main() { char s 1[]="I am a boy"; char s 2[]="am"; printf("%s", strstr(s 1, s 2)); } נניח שהמערכים הם מחרוזות

int word_cnt (const char *s) { int cnt = 0; const char *next =

int word_cnt (const char *s) { int cnt = 0; const char *next = s + 1; if (*s == '') /*empty string*/ return 0; while(*next != '') { if (!isspace(*s) && isspace(*next)) cnt++; s++; next++; } if (!isspace(*s)) cnt++; return cnt; }