Написать рекурсивную функцию, определяющую количество положительных элементов в заданном векторе 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]);