1 of 9

Указатели

Упражнение

2 of 9

Административно

  • Контролно на 6 април!
    • Указатели
    • Структури
    • Всичко предишно - цикли, масиви, условия, функции
  • В задачата за 3 ще има структури, но няма да има указатели
  • Задача, която не се компилира ще се счита за грешна и ще носи 0 точки!
  • Ще има по-малко задачи, за да имате време да обърнете внимание на компилацията и грешките, които ви дава

3 of 9

4 of 9

Задачи(1)

  • Да се разменят стойностите на две числа чрез функцията void swap(int*, int*)
  • Да се дефинира функцията void rotr(int*, int*, int*); която “завърта” стойностите на трите подадени числа надясно т.е. стойността на второто става равна на стойнстта на първото и така за останлите две.
  • Да се дефинира функцията int* find(int *haystack, int size, int needle);, която връща указател към елемента в масива haystack със стойност needle. Ако няма такава стойност да се върне NULL

5 of 9

Задачи(2)

  • Да се дефинира функцията void get_min_max(int *arr, int *min, int *max, int size); която връща минималната и максималната стойност в масива, чрез указателите към min и max. Ако масивът е празен да се запише стойността -1 за min и max
  • Да се дефинира функцията int print_sequence(int *start, int *end);, която принтира всички елементи между началния и крайния указател включително и връща бройката принтирани елементи
  • Да се дефинира функцията void str_reverse(char*);, който обръща подадения стринг. Note: ако извикаме функцията по този начин str_reverse(“asd”), ще се компилира, но няма да работи! Защо?

6 of 9

Задачи(3)

  • Да се дефинира функцията void max_seq(int *arr, int *start, int *end, int size);, която връща индексите на началото и края на най-дългата възходяща последователност от числа в arr. Пример: Ако в arr има числата 5, 8, 12, 3, 7, 1, 9 - то най-дългата възходяща последователност са числата 5, 8, 12, следователно в start трябва да има стойност 0, а в end стойност 2 след изпълнението на функцията

7 of 9

Задачи(4)

  • Да се дефинира функцията void max_seq(int *arr, int **start, int **end, int size);, която връща указатели към началото и края на най-дългата възходяща последователност от числа в arr. Пример: Ако в arr има числата 5, 8, 12, 3, 7, 1, 9 - то най-дългата възходяща последователност са числата 5, 8, 12, следователно start трябва да бъде указател към елемента 5, а end да е указател към елемента 12. Може да използвате print_sequence, с аргументи start и end, от предишните задачи, за да проверите дали функцията ви работи правилно

8 of 9

Задачи(5)

  • Да се дефинира функцията void get_min_max(int *arr, int **min, int **max, int size); която връща минималната и максималната стойност в масива като указатели към тях чрез указателите min и max. Ако масивът е празен да се запишат NULL указатели.

9 of 9

Въпроси?