Добавлен: 25.10.2018
Просмотров: 2852
Скачиваний: 49
6
Алгоритм не сильно отличается от рассмотренного в лекционном
примере. Остановимся на различиях. Для накапливания произведения
необходимо перед циклом переменной р присвоить начальное значение 1
(умножение на 1 не изменяет произведение). Переменная k нужна для
выявления ситуации отсутствия элементов, меньших заданного значения;
развилка после цикла позволяет обнаружить эту ситуацию.
Далее приведена программа.
include
<stdio.h>
#include
<conio.h>
#include
<math.h>
void
main()
{
float
a[10],c,p;
int
N,k,i;
printf(
"Введите N, c\n"
);
scanf_s(
"%d%f"
,&N,&c);
printf(
"Введите массив из %d элементов\n"
,N);
/* Далее цикл для поэлементного ввода массива*/
for
(i=0; i<N; i++)
scanf_s(
"%f"
, &a[i]);
/*Далее алгоритм по блок-схеме*/
p=1; k=0;
for
(i=0; i<N; i++)
if
(a[i]<c)
{ p=p*a[i];
k=k+1;
}
if
(k==0)
printf(
"Таких элементов нет\n"
);
else
printf(
" p=%f \n"
,p);
_getch();
}
7
Пример 2. Дан массив а из N элементов (N
10). Найти минимальное
значение среди элементов массива и номер элемента с таким значением.
Таблица 2. Состав данных примера 2.
Имя
Смысл
Тип
Структура
Исходные данные
N
число элементов массива
целый
простая переменная
а
заданный массив
вещественны
й
одномерный массив из 10
элементов
Выходные данные
min
минимальный элемент
массива
вещественны
й
простая переменная
k
номер минимального
элемента
целый
простая переменная
Промежуточные данные
i
счетчик элементов
массива
целый
простая переменная
Блок-схема алгоритма приведена на рис. 2. В начале каждого выполнения
цикла min – это минимальное значение среди (i-1) первых элементов массива.
Это значение min сравнивается с а[i] и в результате определяется минимум из
первых i элементов массива; при изменении текущего минимального значения
запоминается номер элемента, на котором достигается текущий минимум
(оператор k:=i).
8
Если минимальное (одинаковое) значение имеют несколько элементов
массива, то предложенный алгоритм выдаст наименьший из их индексов; при
нестрогом неравенстве (a[i]
min) будет выдаваться наибольший номер. В
ситуации, когда надо определить номера всех элементов, имеющих
минимальное значение, алгоритм должен иметь два цикла обработки: в первом
цикле должен определяться минимум, а во втором по сравнению min=a[i]
находиться номера элементов.
#include
<stdio.h>
Рис.2. Блок-схема программы примера 2
д
а
да
k:=i+1
нет
Ввод N,
a[i], i=0,…,N-1
min:=a[0]; k:=1
начало
i:=1
i
N-1
a[i]<min
min:=a[i]
i:=i+1
вывод min, k
конец
9
#include
<conio.h>
void
main()
{
float
a[10],min;
int
N,k,i;
printf(
"Введите N\n"
);
scanf_s(
"%d"
,&N);
printf(
"Введите массив из %d элементов\n"
,N);
/* Далее цикл для поэлементного ввода массива*/
for
(i=0; i<N; i++)
scanf_s(
"%f"
, &a[i]);
/*Далее алгоритм по блок-схеме*/
min=a[0]; k=1;
for
(i=1; i<N; i++)
if
(a[i]<min)
{ min=a[i];
k=i+1;
}
printf(
" min=%f k=%d \n"
,min,k);
_getch();
}
10
4. Пример обработки матриц
Дана матрица а из N строк и M столбцов (N
5, M
5). Для каждой строки
матрицы найти сумму элементов и определить число строк, для которых эта
сумма положительна.
Таблица 3. Состав данных примера раздела 4.
Имя
Смысл
Тип
Структура
Исходные данные
N
число строк матрицы
целый
простая переменная
М
число столбцов
целый
простая переменная
а
заданная матрица
вещественный двумерный массив
размером 5*5
Выходные данные
i
счетчик строк матрицы
целый
простая переменная
s
сумма элементов i-ой
строки
вещественный простая переменная
k
число строк с положи-
тельной суммой эле-
ментов
целый
простая переменная
Промежуточные данные
j
счетчик столбцов
матрицы
целый
простая переменная
Обратим внимание, что считая s простой переменной мы предполагаем,
что значения сумм всех строк должны последовательно записываться в одну
ячейку памяти. В этом случае в одном цикле по строкам мы должны
вычислить сумму элементов строки s, вывести s и сравнить ее с нулем для
вычисления k. Можно было объявить s как одномерный массив (число его
элементов равно числу строк матрицы); тогда алгоритм обработки мог бы
состоять из двух последовательных циклов по строкам: в первом из них
вычислялись бы все элементы массива s и накапливалось значение k, а во
втором производился бы вывод значений элементов массива s.
Таким образом, этот несложный пример иллюстрирует два очень важных
положения: