Основы программирования. Лабораторная работа №13

Содержание

Слайд 2

Факториал – рекурсивная реализация
long fuct2(int n) {
if (n == 0) {
return 1;
}
long

Факториал – рекурсивная реализация long fuct2(int n) { if (n == 0)
res = fuct2(n - 1) * n;
return res;
}
void main() {
int n = 4;
long f = fuct2(n);
printf("%d! = %ld", n, f);
}

Слайд 3

Факториал – трассировка

long fuct2(int n) {
if (n == 0) {
return 1;
}
long res

Факториал – трассировка long fuct2(int n) { if (n == 0) {
= fuct2(n - 1) * n;
return res;
}

main(): f = fuct2(4)
--------------------------------------------------
РЕКУРСИВНЫЙ СПУСК

void main() {
int n = 4;
long f = fuct2(n);
printf("%d! = %ld", n, f);
}

Слайд 4

Факториал – трассировка

long fuct2(int n) {
if (n == 0) {
return 1;
}
long res

Факториал – трассировка long fuct2(int n) { if (n == 0) {
= fuct2(n - 1) * n;
return res;
}

main(): f = fuct2(4)
--------------------------------------------------
fuct2(4): n = 4
res = fuct2(3)*4
--------------------------------------------------
РЕКУРСИВНЫЙ СПУСК

void main() {
int n = 4;
long f = fuct2(n);
printf("%d! = %ld", n, f);
}

Слайд 5

Факториал – трассировка

long fuct2(int n) {
if (n == 0) {
return 1;
}
long res

Факториал – трассировка long fuct2(int n) { if (n == 0) {
= fuct2(n - 1) * n;
return res;
}

main(): f = fuct2(4)
--------------------------------------------------
fuct2(4): n = 4
res = fuct2(3)*4
--------------------------------------------------
fuct2(3): n = 3
res = fuct2(2)*3
--------------------------------------------------
РЕКУРСИВНЫЙ СПУСК

void main() {
int n = 4;
long f = fuct2(n);
printf("%d! = %ld", n, f);
}

Слайд 6

Факториал – трассировка

long fuct2(int n) {
if (n == 0) {
return 1;
}
long res

Факториал – трассировка long fuct2(int n) { if (n == 0) {
= fuct2(n - 1) * n;
return res;
}

main(): f = fuct2(4)
--------------------------------------------------
fuct2(4): n = 4
res = fuct2(3)*4
--------------------------------------------------
fuct2(3): n = 3
res = fuct2(2)*3
--------------------------------------------------
fuct2(2): n = 2
res = fuct2(1)*2
--------------------------------------------------
РЕКУРСИВНЫЙ СПУСК

void main() {
int n = 4;
long f = fuct2(n);
printf("%d! = %ld", n, f);
}

Слайд 7

Факториал – трассировка

long fuct2(int n) {
if (n == 0) {
return 1;
}
long res

Факториал – трассировка long fuct2(int n) { if (n == 0) {
= fuct2(n - 1) * n;
return res;
}

main(): f = fuct2(4)
--------------------------------------------------
fuct2(4): n = 4
res = fuct2(3)*4
--------------------------------------------------
fuct2(3): n = 3
res = fuct2(2)*3
--------------------------------------------------
fuct2(2): n = 2
res = fuct2(1)*2
--------------------------------------------------
fuct2(1): n = 1
res = fuct2(0)*1
--------------------------------------------------
РЕКУРСИВНЫЙ СПУСК

void main() {
int n = 4;
long f = fuct2(n);
printf("%d! = %ld", n, f);
}

Слайд 8

Факториал – трассировка

long fuct2(int n) {
if (n == 0) {
return 1;
}
long res

Факториал – трассировка long fuct2(int n) { if (n == 0) {
= fuct2(n - 1) * n;
return res;
}

main(): f = fuct2(4)
--------------------------------------------------
fuct2(4): n = 4
res = fuct2(3)*4
--------------------------------------------------
fuct2(3): n = 3
res = fuct2(2)*3
--------------------------------------------------
fuct2(2): n = 2
res = fuct2(1)*2
--------------------------------------------------
fuct2(1): n = 1
res = fuct2(0)*1
--------------------------------------------------
fuct2(0): n = 0
РЕКУРСИВНЫЙ СПУСК

void main() {
int n = 4;
long f = fuct2(n);
printf("%d! = %ld", n, f);
}

Слайд 9

Факториал – трассировка

long fuct2(int n) {
if (n == 0) {
return 1;
}
long res

Факториал – трассировка long fuct2(int n) { if (n == 0) {
= fuct2(n - 1) * n;
return res;
}

main(): f = fuct2(4)
--------------------------------------------------
fuct2(4): n = 4
res = fuct2(3)*4
--------------------------------------------------
fuct2(3): n = 3
res = fuct2(2)*3
--------------------------------------------------
fuct2(2): n = 2
res = fuct2(1)*2
--------------------------------------------------
fuct2(1): n = 1
res = fuct2(0)*1
--------------------------------------------------
fuct2(0): n = 0
РЕКУРСИВНЫЙ СПУСК РЕКУРСИВНЫЙ ВОЗВРАТ

void main() {
int n = 4;
long f = fuct2(n);
printf("%d! = %ld", n, f);
}

Слайд 10

Факториал – трассировка

long fuct2(int n) {
if (n == 0) {
return 1;
}
long res

Факториал – трассировка long fuct2(int n) { if (n == 0) {
= fuct2(n - 1) * n;
return res;
}

main(): f = fuct2(4)
--------------------------------------------------
fuct2(4): n = 4
res = fuct2(3)*4
--------------------------------------------------
fuct2(3): n = 3
res = fuct2(2)*3
--------------------------------------------------
fuct2(2): n = 2
res = fuct2(1)*2
--------------------------------------------------
fuct2(1): n = 1
res = fuct2(0)*1
-------------------------------------------------- ----------------------------------------------------
fuct2(0): n = 0 return 1
РЕКУРСИВНЫЙ СПУСК РЕКУРСИВНЫЙ ВОЗВРАТ

void main() {
int n = 4;
long f = fuct2(n);
printf("%d! = %ld", n, f);
}

Слайд 11

Факториал – трассировка

long fuct2(int n) {
if (n == 0) {
return 1;
}
long res

Факториал – трассировка long fuct2(int n) { if (n == 0) {
= fuct2(n - 1) * n;
return res;
}

main(): f = fuct2(4)
--------------------------------------------------
fuct2(4): n = 4
res = fuct2(3)*4
--------------------------------------------------
fuct2(3): n = 3
res = fuct2(2)*3
--------------------------------------------------
fuct2(2): n = 2
res = fuct2(1)*2
-------------------------------------------------- ----------------------------------------------------
fuct2(1): n = 1
res = fuct2(0)*1 = 1 * 1 = 1 return 1
-------------------------------------------------- ----------------------------------------------------
fuct2(0): n = 0 return 1
РЕКУРСИВНЫЙ СПУСК РЕКУРСИВНЫЙ ВОЗВРАТ

void main() {
int n = 4;
long f = fuct2(n);
printf("%d! = %ld", n, f);
}

Слайд 12

Факториал – трассировка

long fuct2(int n) {
if (n == 0) {
return 1;
}
long res

Факториал – трассировка long fuct2(int n) { if (n == 0) {
= fuct2(n - 1) * n;
return res;
}

main(): f = fuct2(4)
--------------------------------------------------
fuct2(4): n = 4
res = fuct2(3)*4
--------------------------------------------------
fuct2(3): n = 3
res = fuct2(2)*3
--------------------------------------------------
fuct2(2): n = 2
res = fuct2(1)*2 = 1 * 2 = 2 return 2
-------------------------------------------------- ----------------------------------------------------
fuct2(1): n = 1
res = fuct2(0)*1 = 1 * 1 = 1 return 1
-------------------------------------------------- ----------------------------------------------------
fuct2(0): n = 0 return 1
РЕКУРСИВНЫЙ СПУСК РЕКУРСИВНЫЙ ВОЗВРАТ

void main() {
int n = 4;
long f = fuct2(n);
printf("%d! = %ld", n, f);
}

Слайд 13

Факториал – трассировка

long fuct2(int n) {
if (n == 0) {
return 1;
}
long res

Факториал – трассировка long fuct2(int n) { if (n == 0) {
= fuct2(n - 1) * n;
return res;
}

main(): f = fuct2(4)
--------------------------------------------------
fuct2(4): n = 4
res = fuct2(3)*4
--------------------------------------------------
fuct2(3): n = 3
res = fuct2(2)*3 = 2 * 3 = 6 return 6
-------------------------------------------------- ----------------------------------------------------
fuct2(2): n = 2
res = fuct2(1)*2 = 1 * 2 = 2 return 2
-------------------------------------------------- ----------------------------------------------------
fuct2(1): n = 1
res = fuct2(0)*1 = 1 * 1 = 1 return 1
-------------------------------------------------- ----------------------------------------------------
fuct2(0): n = 0 return 1
РЕКУРСИВНЫЙ СПУСК РЕКУРСИВНЫЙ ВОЗВРАТ

void main() {
int n = 4;
long f = fuct2(n);
printf("%d! = %ld", n, f);
}

Слайд 14

Факториал – трассировка

long fuct2(int n) {
if (n == 0) {
return 1;
}
long res

Факториал – трассировка long fuct2(int n) { if (n == 0) {
= fuct2(n - 1) * n;
return res;
}

main(): f = fuct2(4)
--------------------------------------------------
fuct2(4): n = 4
res = fuct2(3)*4 = 6 * 4 = 24 return 24
-------------------------------------------------- ----------------------------------------------------
fuct2(3): n = 3
res = fuct2(2)*3 = 2 * 3 = 6 return 6
-------------------------------------------------- ----------------------------------------------------
fuct2(2): n = 2
res = fuct2(1)*2 = 1 * 2 = 2 return 2
-------------------------------------------------- ----------------------------------------------------
fuct2(1): n = 1
res = fuct2(0)*1 = 1 * 1 = 1 return 1
-------------------------------------------------- ----------------------------------------------------
fuct2(0): n = 0 return 1
РЕКУРСИВНЫЙ СПУСК РЕКУРСИВНЫЙ ВОЗВРАТ

void main() {
int n = 4;
long f = fuct2(n);
printf("%d! = %ld", n, f);
}

Слайд 15

Факториал – трассировка

long fuct2(int n) {
if (n == 0) {
return 1;
}
long res

Факториал – трассировка long fuct2(int n) { if (n == 0) {
= fuct2(n - 1) * n;
return res;
}

main(): f = fuct2(4) = 24 printf("%d! = %ld", 4, 24);
-------------------------------------------------- ----------------------------------------------------
fuct2(4): n = 4
res = fuct2(3)*4 = 6 * 4 = 24 return 24
-------------------------------------------------- ----------------------------------------------------
fuct2(3): n = 3
res = fuct2(2)*3 = 2 * 3 = 6 return 6
-------------------------------------------------- ----------------------------------------------------
fuct2(2): n = 2
res = fuct2(1)*2 = 1 * 2 = 2 return 2
-------------------------------------------------- ----------------------------------------------------
fuct2(1): n = 1
res = fuct2(0)*1 = 1 * 1 = 1 return 1
-------------------------------------------------- ----------------------------------------------------
fuct2(0): n = 0 return 1
РЕКУРСИВНЫЙ СПУСК РЕКУРСИВНЫЙ ВОЗВРАТ

void main() {
int n = 4;
long f = fuct2(n);
printf("%d! = %ld", n, f);
}

Слайд 16

Задача 1

Собрать и отладить (т.е. заставить работать) код рекурсивного вычисления факториала.
И выполнить

Задача 1 Собрать и отладить (т.е. заставить работать) код рекурсивного вычисления факториала.
трассировку его для n=5 используя встроенный отладчик VS

Слайд 17

Простейшие рекурсивные функции

void rec1(int n) {
printf(" %d", n);
if (n > 1) {
rec1(n

Простейшие рекурсивные функции void rec1(int n) { printf(" %d", n); if (n
- 1);
}
}
void rec2(int n) {
if (n > 1) {
rec2(n - 1);
}
printf(" %d", n);
}
void rec3(int n) {
printf(" %d", n);
if (n > 1) {
rec3(n - 1);
}
printf(" %d", n);
}

void main() {
rec1(3);
printf(" rec1 FINISH\n");
rec2(3);
printf(" rec2 FINISH\n");
rec3(3);
printf(" rec3 FINISH\n");
}

Слайд 18

Задача 2

Используя простейшие рекурсивные функции с предыдущего слайда в качестве вдохновения и

Задача 2 Используя простейшие рекурсивные функции с предыдущего слайда в качестве вдохновения
основы, сделайте собственные рекурсивные функции (f1(), f2(), f3()), которые выводят в консоль последовательность чисел:
Задача 2.1.
Вызов функции: f1(11)
Формируемый вывод: 11 9 7 5 3 1
Задача 2.2.
Вызов функции: f2(11)
Формируемый вывод: 1 3 5 7 9 11
Задача 2.3.
Вызов функции: f3(11)
Формируемый вывод: 11 9 7 5 3 1 3 5 7 9 11

Слайд 19

Задача 3

Выполнить трассировку только что созданных функций
Задача 3.1.
Выполнить трассировку для n=7

Задача 3 Выполнить трассировку только что созданных функций Задача 3.1. Выполнить трассировку
используя встроенный отладчик VS. Выполнить трассировку по очереди для всех функций f1(), f2(), f3()
Задача 3.2.
Выполнить трассировку для n=7 используя встроенный бумагу и ручку/карандаш. Выполнить трассировку по очереди для всех функций f1(), f2(), f3()

Слайд 20

Задача 4* (по мотивам ЕГЭ)

void recEGE1(int n) {
if (n >= 1) {
printf("

Задача 4* (по мотивам ЕГЭ) void recEGE1(int n) { if (n >=
%d", n);
recEGE1(n - 1);
recEGE1(n - 1);
}
}
void main() {
recEGE1(3);
}

Нужно выполнить трассировку представленного кода в отладчике VS.
(Задачи, подобные этой, периодически встречаются в ЕГЭ по информатике. )

Слайд 21

Задача 5* (по мотивам ЕГЭ)

Нужно выполнить трассировку представленного кода в отладчике VS.
(Крайне

Задача 5* (по мотивам ЕГЭ) Нужно выполнить трассировку представленного кода в отладчике
желательно) выполнить ручную трассировку – на бумаге!

Слайд 22

Задача 6* (по мотивам ЕГЭ)

Нужно выполнить трассировку представленного кода в отладчике VS.
(Крайне

Задача 6* (по мотивам ЕГЭ) Нужно выполнить трассировку представленного кода в отладчике
желательно) выполнить ручную трассировку – на бумаге!

Слайд 23

Задача 7** (по мотивам ЕГЭ)

Нужно выполнить трассировку представленного кода в отладчике VS.
(желательно)

Задача 7** (по мотивам ЕГЭ) Нужно выполнить трассировку представленного кода в отладчике
выполнить ручную трассировку – на бумаге!

Слайд 24

Задача 8*

В игру, реализованную в лаб работах 8, 9 и т.д. добавить

Задача 8* В игру, реализованную в лаб работах 8, 9 и т.д.
«руку Мидаса» - прикосновение к стене превращают всю стену в набор золотых элементов. В золото превращаются ВСЕ ЭЛЕМЕНТЫ связанные друг с другом – в не зависимости от конфигурации стены.

Слайд 25

Задача 8* (Код обслуживающий)

Задача 8* (Код обслуживающий)

Слайд 26

Задача 8* (Код превращения стены в золото)

Задача 8* (Код превращения стены в золото)

Слайд 27

Задача 8.2*

Выполнить трассировку в отладчике VS заливки небольшой стены при помощи добавленной

Задача 8.2* Выполнить трассировку в отладчике VS заливки небольшой стены при помощи
функции
void doMidasHand(int i, int j)

Слайд 28

Задача 9**

Реализовать бинарный поиск в отсортированном массиве.
Необходимо реализовать его двумя способами –

Задача 9** Реализовать бинарный поиск в отсортированном массиве. Необходимо реализовать его двумя
итерационно и рекурсивно.

Слайд 29

Задача 9** (2)

Задача 9** (2)

Слайд 30

Задача 9** (3)

Задача 9** (3)

Слайд 31

Задача 9** (4)

Задача 9** (4)
Имя файла: Основы-программирования.-Лабораторная-работа-№13.pptx
Количество просмотров: 43
Количество скачиваний: 0