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