
Задача 5
Определить, какой из данных векторов X[N], Y[M], Z[K] содержит наибольшее количество ненулевых компонент. |
N=15 M=17 K=20 |
Определение количества ненулевых компонент вектора оформить в виде функции. |
ПРОГРАММА
#include <stdio.h>
float func(float n[],int c)
{
int kol_vo = 0;
for (int i = 0; i < c; i ++)
if (n[i]!=0) kol_vo++;
return kol_vo;
}
void main ()
{
float x [15], y [17], z [20];
int max ,k[3],n, i, j;
for ( i = 0; i < 15; i ++)
{
printf("X[%d]: ",i);
scanf("%f",&x[i]);}
for ( i = 0; i < 17; i ++)
{
printf("Y[%d]: ",i);
scanf("%f",&y[i]);}
for ( i = 0; i < 20; i ++)
{
printf("Z[%d]: ",i);
scanf("%f",&z[i]);}
k [0]= func(x,15);
k [1]=func(y,17);
k [2]=func(z,20);
max=k[0];n=0;
for (i=1, i<=2,i++)
{if (max<k[i])
{max=k[i]; n=i;}
}
printf ("v %d vectore %d nenul komponent", n+1,max);
}
Пояснительная записка
#include - директива препроцессора, включающая в текст программы содержимое файла, имя и путь к которому указывается после этой самой директивы. Имя файла заключается в угловые скобки, если он находится в одной из стандартных папок. Если же вышеуказанный файл находится в текущей директории, его имя заключается в кавычки.
stdio.h - данный заголовочный файл содержит описания стандартных функций ввода-вывода.
math.h - содержит объявление математических функций.
Программа состоит их двух функций: пользовательской func(float n[],int c) и обязательной функции main(). Функция main() не возвращает никаких значений и поэтому она объявляется с ключевым словом void. Пользовательская функция func(float n[],int c) возвращает вещественное значение и объявляется с ключевым словом float. Тела функций объявляются блоками и поэтому ограничены фигурными скобками.
В определении функции func(float n[],int c) участвует массив вещественных переменных n[] и целая переменная c, являющаяся размером вышеуказанного массива, все они являются формальными параметрами этой функции. В теле функции определяются локальные переменные: i(целая) – для индексов массива, kol_vo (целая) - для подсчета количества ненулевых компонент вектора, которая предварительно инициализируется с нулем. Значение переменной out (количество ненулевых компонент) возвращается функции при помощи оператора return.
В теле main() объявляются: вещественные переменные: массивы х [15], y [17], z [20] – заданные компонентами исходных векторов; целые: массив k[3] – для хранения количества ненулевых компонент векторов,max – для хранения максимального значения массива k[3], i - для индексов массивов, n – для хранения номера вектора, содержащего наибольшее количесвто ненулевых компонент.
Для того, чтобы ввести компоненты заданных массивов открываются циклы for для ввода каждого из трех массивов. Затем происходит обращение к функции func() три раза, сначала фактическим параметров является вектор х [15], затем y [17], z [20]. В результате количество ненулевых компонент векторов присваиваются элементам массива k[3]. При помощи цикла for for находим максимальный элемент k[3], значения которого затем и выводится на экран.
Далее тело функции main() закрывается фигурной скобкой. На этом программа заканчивается.
Результат:
X[0]=5 |
Y[0]=3 |
Z[0]=7 |
X[1]=6 |
Y[1]=0 |
Z[1]=5 |
X[2]= 3 |
Y[2]= 4 |
Z[2]=1 |
X[3]= 2 |
Y[3]= 1 |
Z[3]=0 |
X[4]= 0 |
Y[4]= 8 |
Z[4]=0 |
X[5]=3 |
Y[5]=0 |
Z[5]=6 |
X[6]= 0 |
Y[6]=7 |
Z[6]=0 |
X[7]= 0 |
Y[7]= 0 |
Z[7]=0 |
X[8]= 0 |
Y[8]=1 |
Z[8]=2 |
X[9]= 0 |
Y[9]=0 |
Z[9]=0 |
X[10]=5 |
Y[10]= 3 |
Z[10]=5 |
X[11]= 0 |
Y[11]= 1 |
Z[11]=0 |
X[12]= 0 |
Y[12]= 9 |
Z[12]= 4 |
X[13]= 6 |
Y[13]=5 |
Z[13]=3 |
X[14]= 0 |
Y[14]=2 |
Z[14]=0 |
|
Y[15]= 0 |
Z[15]=5 |
|
Y[16]= 10 |
Z[16]=0 |
|
|
Z[17]= 0 |
|
|
Z[18]=3 |
|
|
Z[19]=0 |
v 2 vectore 12 nenul komponent
БЛОК-СХЕМА
да