Использование указателей bc++, страница 2

·  Научиться выполнять отладку рекурсивных функций;

·  Научиться использовать рекурсии в С-программах.

Задание: Разработать программы, содержащие следующие задачи:

      Задача 1. В ней должна быть: а) создана программа определения факториала числа n, использующая цикл (любой – for или while); б) составлено описание рекурсии математическими терминами; в) разработана схема рекурсивных вызовов; г) составлена программа определения факториала числа n, использующая рекурсию; д) проанализирована работа рекурсивной функции с помощью отладчика; е) сделан сравнительный анализ работы двух программ.

      Задача 2. Написать программу рекурсивной функции Аккермана с использованием основной функции ackr и вспомогательной функции smacc (см. лекцию 10). Составить описание рекурсии математическими терминами. Разработать схему рекурсивных вызовов. Проанализировать работу рекурсивной функции с помощью отладчика.

      Задача 3. Подобрать собственный пример, иллюстрирующий работу рекурсивной функции. Составить программу, выполнить ее анализ. Тематика может быть любой.  

      Примечание: предметную область задач выбрать самостоятельно. При решении задач использовать материалы лекции 10. В разработанных программах должен соблюдаться стиль программирования, каждый раздел ее должен быть прокомментирован, программы должны носить индивидуальный характер.

В качестве примера приведем программу определения числа х в степени n, где x и n – целые числа, построенной на основе рекурсии. Рекурсивная функция названа power().

// Программа для иллюстрации функции power()

#include <iostream.h>

#include <stdlib.h>

#include<conio.h>

int power(int, int); // Прототип функции power()

void main(void)

{

int n,x;

clrscr();  // Очистка экрана

cout << " Введите x " << endl;

cin >> x;

for (n=0; n<4; n++)

cout << x << " в степени " << n

<< " равно " << power(x,n) << endl;

return 0;

}

int power(int x,int n)

{

if (n<0) {

cout << "Недопустимый аргумент функции power.\n";

exit(1);

}

if (n>0)

return( power(x, n-1)*x);

else return (1);

}

Результаты работы программы:

Введите х

4

4 в степени 0 равно 1

4 в степени 1 равно 4

4 в степени 2 равно 16

4 в степени 3 равно 64

      Примечание: в задаче 3 представлены только отдельные ее фрагменты. Аналогично должны быть разработаны и представлены остальные задачи на рекурсию. Отчет должен содержать титульный листок, постановку задач, алгоритм их решения, отлаженные программы на алгоритмическом языке и результаты расчета. На кафедру сдать отчет на бумажной основе, выполненный  в Word’e и исходные файлы программ.

12. СПИСКИ И ИХ РЕАЛИЗАЦИЯ В ВС++.

Цель работы:

·  Научиться разрабатывать программы с простейшими списками;

·  Научиться моделировать списки типа стек и очередь;

·  Научиться использовать списки в С-программах.

Задание: Разработать программы, содержащие следующие задачи:

      Задача 1. Создать несвязанный числовой список в виде массива. Распечатать его. Выполнить следующие операции с несвязанным списком: а) найти максимальный по модулю элемент; б) вставить за ним новый элемент, равный по величине, но противоположный по знаку; в) исключить первый элемент списка. Новый список распечатать.

      Задача 2. Создать связанный числовой список. Распечатать его. Выполнить следующие операции со связанным списком: а) найти максимальный по модулю элемент; б) вставить за ним новый элемент, равный по величине, но противоположный по знаку; в) исключить первый элемент списка. Новый список распечатать.

      Задача 3. Создать связанный числовой список типа очередь из 5 объектов. Распечатать его. Выполнить следующие операции со связанным списком: а) добавить два новых объекта в очередь. Распечатать очередь; б) Поменять местами первый и последний объект в очереди. Распечатать очередь; в) Удалить из очереди первых три объекта. Распечатать очередь.