Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Рекурсивные алгоритмы.doc
Скачиваний:
3
Добавлен:
05.11.2018
Размер:
400.9 Кб
Скачать

Тексты программ с комментариями.

Программа 1 (Поиск максимума) (Имя файла: maxelem.cpp) :

-------------------------------------------------------------------------------------------------------

//*******************************************************

//Подключаемые заголовочные файлы

#include <stdio.h> //стандартный ввод-вывод

#include <conio.h>//для ф-ии getch() и т. д.

#include <ctype.h>//для ф-ии isdigit()

#include <string.h>//работа со строками

#include <stdlib.h>//стандартная библиотека (для ф-ии //atoi(),exit(1))

//*******************************************************

//Основная функция main()

void main()

{

int arr[10];//объявление массива из 10 элементов

int Error(int);//прототип ф-ии проверки на //введенные значения

int Maximum(int [10], int, int);//прототип //рекурсивной ф-ии поиска max

int n;//число элементов массива

int i,max;//счетчик цикла, максимальный эл-т

textcolor(15);//задать ярко-белый цвет шрифта

while(1)//цикл проверки введенного n в диапазоне

{

n=Error(0);// вызов ф-ии запроса и прис-е рез-та

if (n>=1 && n<=10) break; // диапазон

}

for (i=1;i<=n;i++)//цикл заполнения массива с //помощью ф-ии Error()

{

arr[i-1]=Error(i);

}

max=Maximum(arr,0,n-1);//вызов рекурсивной ф-ии и //присвоение рез-та

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

//вывод рез-та на экран

printf("\nМаксимальный элемент: %d",max);

printf("\nPress any key for quit\n");

getch(); //задержка

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

return;//возврат из ф-ии

}

//*******************************************************

//ф-ия запроса и проверки (защита от неверных нажатий)

int Error(int k)//заголовок ф-ии

{//k-ключ, по значению которого печатается та или иная //строка на экран

int i;//счетчик цикла

char str[6]; //вводимая строка

int str_int[6]; //массив из 6 целых значений

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

// печать строки на экран

if (k==0) printf("\n\t\tВведите количество элементов массива (1-10): ");

if (k!=0)

{// печать строк на экран

printf("\n\t\tНеверно введенное значение заменяется на 0!");

printf("\n\t\tВведите %d-й элемент массива(-32000...32000): ",k);

}

gets(str);//ф-ия ввода строки с клавиатуры

i=1;

while (i<=strlen(str))//цикл преобразования кодов символов из char в int,

{ //а также анализ на код не цифры

if (str[i-1]=='-') {i++; continue;}//если первым //стоит знак '-', то не анализировать его

str_int[i-1]=(int)str[i-1];//в эл-ты массива //str_int поместить преобразованные в тип int коды //введенных символов

if (isdigit(str_int[i-1])==0) return 0;//выйти из //ф-ии с передачей 0, если это код не цифры

i++;

}

return atoi(str);//ф-ия преобразования введенной //строки в целое число типа int, а также возвращение //этого рез-та в главную ф-ию main()

}

//*******************************************************

//рекурсивная ф-ия поиска максимума