Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ОПК, семинар №8

Ilya
March 12, 2015

ОПК, семинар №8

Указатели на функции

Ilya

March 12, 2015
Tweet

More Decks by Ilya

Other Decks in Education

Transcript

  1. #include <stdio.h> #include <stdlib.h> double long_calculation(double x, unsigned n) {

    double result = 1.0; unsigned i; for(i = 0; i < n; i++) { result *= x; sleep(1); } return result; } int main() { double my_power = long_calculation(2.0, 5); printf("Result: %lf\n", my_power); return 0; }
  2. Callbacks void printer(int i) { printf("Progress: %d%% complete\n", i); }

    int main() { void (*printer_func)(int); printer_func = &printer; printer_func(20); return 0; }
  3. double long_calculation(double x, unsigned n, void (*callback)(int)) { double result

    = 1.0; unsigned i, progress; for(i = 0; i < n; i++) { result *= x; progress = (unsigned) (((double) i)/ n * 100); callback(progress); sleep(1); } return result; }
  4. typedef void (*callback_func)(int); double long_calculation(double x, unsigned n, callback_func callback);

    int main() { callback printer_func = &printer; double my_power = long_calculation(2.0, 3, printer_func); printf("Result: %lf\n", my_power); return 0; }
  5. void bubble_sort(int *base, size_t size) { int temp; size_t i,

    j; for(i = 0; i < size; i++) { for(j = i; j < size; j++) { if(base[i] > base[j]) { temp = base[i]; base[i] = base[j]; base[j] = temp; } } } } Абстракция
  6. int main() { int array[] = {1, 9, 5, 4,

    7, 2, 4, 6}; size_t length = sizeof(array)/sizeof(int); bubble_sort(array, length); size_t i; for(i = 0; i < length; i++) { printf("%d ", array[i]); } printf("\n"); return 0; }
  7. void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *,

    const void *)); int greater_than(const void* pleft, const void* pright) { int left = *(int*) pleft; int right = *(int*) pright; return left > right; } qsort(array, length, sizeof(int), greater_than);
  8. int less_than(const void* pleft, const void* pright) { int left

    = *(int*) pleft; int right = *(int*) pright; return left < right; } qsort(array, length, sizeof(int), less_than);