Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
unsigned long factorial(unsigned int n)⇐ ПредыдущаяСтр 11 из 11
{ if (n < = 1) Return 1; // выход из рекурсии – терминальная ветвь else return n * factorial(n-1); } 4. Компиляция, отладка, тестирование и получение результата:
Задание 2. Написать рекурсивную функцию, определяющую количество положительных элементов в заданном векторе vectorn. 1. Представим решение этой сложной задачи через решение более простой задачи посредством рекурсивного обращения. Чтобы подсчитать количество нужных нам элементов во всем векторе, содержащем n элементов, необходимо сначала сделать это для вектора, содержащего n–1 элемент, n-2 элемента, и так далее. Затем остается выполнить проверку последнего элемента, и добавить к результату единицу в том случае, если он окажется положительным. 2. Схема алгоритма решения задачи:
3. Код программы
3.1. На языке Паскаль:
Program Variant_0; Uses WinCrt; Const n = 10; {задание размера вектора именованной константой} Type TVect=Array [1..n] Of Integer; {описание нового типа} Var i, count: Word; v_min, v_max: Integer; vector: TVect; Function Count_pol(k: Word; Var AA: TVect): Word; Var m: Word; Begin If (k=0) Then m: =0 {если в векторе уже нет элементов} Else Begin m: =Count_pol(k-1, AA); If (AA[k]> 0) Then m: =m+1; End; Count_pol: =m; End; {функции Count_pol} Begin {головная программа} Randomize; {запуск генератора случайных чисел} WriteLn('Лабораторная работа №9_2'); WriteLn('Вариант №0'); WriteLn('ИС-11-1'); WriteLn('Пупкин Василий'); WriteLn; WriteLn('Задайте диапазон случайных чисел'); Write('v_min='); ReadLn(v_min); Write('v_max='); ReadLn(v_max); For i: =1 To n Do {заполнение вектора случайными числами} vector[i]: =Random(v_max-v_min + 1) + v_min; WriteLn; WriteLn('Исходный вектор: '); For i: =1 To n Do {вывод на экран исходного вектора} Write(vector[i]: 5); WriteLn; count: =Count_pol(n, vector); WriteLn; WriteLn('count=', count); End. 3.2. На языке Си: #include < stdio.h> #include < conio.h> #include < math.h> #include < time.h> // прототипы функций void vorm_vector(int nn, int vect_max, int vect_min, int vect[nn]); int count_pol(int nn, int vect[nn]); Int main() { int i, n, vector_min, vector_max, count; printf(" \nЛабораторная работа №9_2" ); printf(" \nВариант №0" ); printf(" \nПО-11-1" ); printf(" \nПупкин Василий\n" ); printf(" \nВведите нижнюю границу диапазона: " ); scanf(" %d", & vector_min); printf(" \nВведите верхнюю границу диапазона: " ); scanf(" %d", & vector_max); printf(" \nВведите размер вектора: " ); scanf(" %d", & n); int vector[n]; printf(" \nИсходный вектор: \n" ); vorm_vector(n, vector_max, vector_min, vector); for (i=0; i< n; i++) printf(" %5d", vector[i]); printf(" \n" ); count = count_pol(n, vector); printf(" \nКоличество положительных элементов в векторе %d\n", count); return 0; } //описание функций // 1. формирование вектора void vorm_vector(int nn, int vect_max, int vect_min, int vect[nn]) { int i, m; time_t t; // текущее время для инициализации // генератора случайных чисел srand((unsigned) time(& t)); // инициализация генератора // случайных чисел m = vect_max-vect_min + 1; // получение случайного числа в диапазоне // от vector_min до vector_max for (i=0; i< nn; i++) vect[i]=rand()% m + vect_min; } // 2. рекурсивное определение количества положительных элементов в векторе int count_pol(int nn, int vect[nn]) { int m; if (nn == 0) m = 0; //в векторе уже нет элементов - терминальная ветвь Else { m = count_pol(nn-1, vect); if (vect[nn] > 0) m++; } return m; }
4. Компиляция, отладка, тестирование и получение результата:
Задания на лабораторную работу №9 Исходные данные (значения переменных и строк) вводить с консоли. Размеры исходных векторов задавать именованными константами. Для задания элементов исходных векторов использовать генератор случайных чисел с заданным с консоли диапазоном от v_min до v_max. Вывести на экран исходные и выходные векторы. Никакие другие массивы (рабочие) кроме исходных и выходных, не использовать. Внутри рекурсивных функций и процедур использовать циклы запрещается.
Вариант 1 Задание 1 Написать функцию для вычисления суммы цифр натурального числа n. Задание 2 Написать функцию для вычисления максимального элемента заданного вектора vectorn.
Вариант 2 Задание 1 Написать функцию для вычисления количества цифр натурального числа n. Задание 2 Написать функцию для вычисления суммы элементов заданного вектора vectorn.
Вариант 3 Задание 1 Написать функцию для вычисления цифрового корня натурального числа n. Задание 2 Написать функцию для вычисления индекса максимального элемента заданного вектора vectorn. Вариант 4 Задание 1 Задан первый член и разность арифметической прогрессии. Написать функция для нахождения n-го члена прогрессии. Задание 2 Написать функцию, переводящую целое положительное число x из десятичной в двоичную систему счисления. Вариант 5 Задание 1 Задан первый член и разность арифметической прогрессии. Написать функцию для нахождения суммы n первых членов прогрессии. Задание 2 Последовательность полиномов Лагерра определяется следующим образом: L0(x) = 1, L1(x) = x – 1, Lk(x) = (x – 2k + 1)Lk-1(x) + (k-1)2Lk-2(x) Написать функцию для вычисления n-го полинома Лагерра для заданного x. Вариант 6 Задание 1 Задан первый член и знаменатель геометрической прогрессии. Написать функцию для нахождения n-го члена прогрессии. Задание 2 Написать функция для вычисления значения полинома Эрмита для заданных x и n> 1: H0(x) = 1, H1(x) = 2x, Hn(x) = 2xHn-1(x) – 2(n-1)Hn-2(x) Вариант 7 Задание 1 Задан первый член и знаменатель геометрической прогрессии. Написать функцию для нахождения суммы n первых членов прогрессии. Задание 2 Написать функция для возведения вещественного x (x#0) в целую степень n:
xn = 1, если n=0, xn = 1/x|n|, если n< 0, xn = x•xn-1, если n> 0. Вариант 8 Задание 1 Написать функцию для вычисления значения функции Аккермана для неотрицательных n и m: A(n, m) = m + 1, если n=0, A(n, m) = A(n-1, 1), если m=0, n#0, A(n, m) = A(n-1, A(n, m – 1)), если m> 0, n> 0, Например, для n=1, m=2: A(1, 2) = 4 Задание 2 Написать функцию для вывода на экран всех перестановок n различных натуральных чисел (n≤ 5). Вариант 9 Задание 1 Написать функцию для перестановки цифр натурального числа n в обратном порядке. Задание 2 Написать функцию, вычисляющую сумму n корней вида: Вариант 10 Задание 1 Написать процедуру для ввода с консоли последовательности чисел (конец последовательности – цифра ноль) и вывода ее на экран в обратном порядке. Массивы, строки, файлы, очереди, стеки, деревья не использовать. Задание 2 Написать функцию, вычисляющую сумму n корней вида: Вариант 11 Задание 1 Написать функцию для вычисления значения функции Маккарти для неотрицательного n: M(n) = n - 10, если n> 100, M(n) = M(M(n + 11)), если n< =100 Задание 2 Ввести шесть цифр. Написать функцию, которая расставляет между ними знаки арифметических операций (сложение, вычитание, умножение, деление без остатка) так, чтобы полученное выражение было равно заданному числу k. Вариант 12 Задание 1 Написать функцию для вычисления значения функции Кадью для неотрицательных x, y, z: K(x, y, z) = z, если x = y, K(x, y, z) = K(x, y+1, (y+1)z), если x#y Задание 2 Написать функцию, переводящую целое положительное число x из десятичной в восьмеричную систему счисления. Вариант 13 Задание 1 Задан прямоугольник со сторонами a и b. Разбиваем его на части квадратами. Написать функцию для нахождения количества получившихся квадратов, если каждый раз выбирается самый большой квадрат. Задание 2 Написать функцию, переводящую целое положительное число x из десятичной в 16-ричную систему счисления. Вариант 14 Задание 1 Написать функцию для вычисления числа сочетаний из n по m: Cn0 = Cnn = 1, Cnm = Cn-1m + Cn-1m-1, 0≤ m≤ n Задание 2 Написать функцию, вычисляющую сумму n вложений вида: s = cos(1+sin(2+cos(3+sin(4+cos(5+ …)…))
Вариант 15 Задание 1 Задано целое положительное число x длиной не более 20 цифр. Написать функцию, расставляющую между некоторыми его цифрами знаки сложения и вычитания так, чтобы полученное выражение равнялось заданному n: x = 123456789 n = 171 12 + 34 + 56 + 78 - 9 = 171 Задание 2 Написать функцию, определяющую, является ли заданная строка палиндромом. Популярное: |
Последнее изменение этой страницы: 2017-03-11; Просмотров: 670; Нарушение авторского права страницы