- •Кафедра Естественно-научных дисциплин учебно-методическое пособие по программированию
- •Глава 1. Алгоритмы линейной и разветвляющейся структуры
- •Результаты работы Pascal-программы
- •Система тестов
- •Система тестов
- •Система тестов
- •Результаты работы Pascal-программы:
- •Задачи для самостоятельного решения
- •Глава 2. Алгоритмы, реализуемые с помощью циклов типа для
- •Система тестов
- •Исполнение алгоритма
- •Задачи для самостоятельного решения
- •Глава 3. Алгоритмы, реализуемые с помощью вложенных циклов типа для
- •Пример 3.3. В заданной матрице a(n, m) поменять местами строки с номерами p и
- •Задачи для самостоятельного решения
- •Глава 4. Алгоритмы, реализуемые с помощью циклов типа пока
- •Цикл типа пока с прерыванием
- •Цикл типа пока без прерывания
- •Пример 4.1. Определить, является ли заданная последовательность чисел a1, a2, ..., aN монотонно убывающей. Система тестов
- •Система тестов
- •Результаты работы Pascal-программы
- •Система тестов
- •Задачи для самостоятельного решения
- •Глава 5. Алгоритмы, реализуемые с помощью вложенных циклов типа пока
- •Система тестов
- •Система тестов
- •Система тестов
- •Система тестов
- •Блок-схема (фрагмент)
- •Задачи для самостоятельного решения
- •Глава 6. Алгоритмы, реализуемые с помощью комбинации циклов типа для и пока
- •Система тестов
- •Система тестов
- •Исполнение алгоритма
- •Задачи для самостоятельного решения
- •Глава 7. Алгоритмы обработки символьной информации
- •Типы данных, используемые для обработки символьной информации
- •Функции и команды обработки строк
- •Система тестов
- •Исполнение алгоритма
- •Исполнение алгоритма
- •Система тестов
- •Задачи для самостоятельного решения
Глава 3. Алгоритмы, реализуемые с помощью вложенных циклов типа для
Язык |
Схемы вложенных циклов типа для |
Алгоритмический язык |
нц для i от A1 до B1 тело внешнего цикла . . . . . . нц для j от A2 до B2 тело внутреннего цикла . . . . . . кц . . . . . . Кц |
Pascal |
For i := A1 to B1 do begin . . . . . . For j := A2 to B2 do begin . . . . . . end; . . . . . . end; |
Вложенные циклы типа для особенно часто используются при обработке матриц
(двумерных массивов, прямоугольных таблиц) и векторов (одномерных массивов,
линейных таблиц):
Пример 3.1. Вычислить суммы элементов столбцов заданной матрицы A(N, M).
Тест
Данные |
Результат |
|
N=2 M=2 |
S=(6,74) |
Алгоритмический язык
алг Суммы столбцов (арг цел N, M, арг вещ таб A[1:N, 1:M], рез вещ таб S[1:M])
дано | N>0, M>0
нач цел i, j
нц для j от 1 до M | цикл по столбцам
S[j]:=0
нц для i от 1 до N | цикл по элементам
S[j]:=S[j] + A[i, j] |текущего столбца
кц Блок-схема
кц
кон
Исполнение алгоритма
J |
I |
S[i] |
1 |
1 2 |
S1=0 S1=0+2=2 S1=2+4=6 |
2 |
1 2 |
S2=0 S2=0+1=1 S2=1+3=4 |
Turbo Pascal
Program SumColumn;
Uses Crt;
Var A : Array [1..10, 1..10] of Real;
N, M, i, j : Integer;
S : Array [1..10] of Real;
{--------------------------------------------}
Procedure InputOutput;
Begin {описание процедуры ввода-вывода исходных данных}
ClrScr;
Write('Количество строк - '); ReadLn(N);
Write('Количество столбцов - '); ReadLn(M);
For i := 1 to N do {Ввод элементов матрицы}
For j := 1 to M do
begin Write('A[' , i , ', ' , j , ']= ? '); {вывод запроса}
ReadLn(A[i, j]) {ввод значения}
end; WriteLn;
ClrScr;
WriteLn(' Матрица А');
For i := 1 to N do {Вывод матрицы по строкам}
begin
For j := 1 to M do Write(A[i, j] : 5 : 1); {вывод i-ой строки}
WriteLn {перенос курсора на начало следующей строки}
end; WriteLn
End; { of InputOutput }
{--------------------------------------------}
Procedure SumCol;
Begin {описание процедуры вычисления сумм элементов столбцов}
For j := 1 to M do {цикл по столбцам матрицы}
begin
S[j] := 0; {обнуление суммы элементов j-го столбца}
For i := 1 to n do S[j] := S[j] + A[i, j] {накопление суммы}
end;
End; { of SumCol }
{--------------------------------------------}
Procedure OutResult; {описание процедуры вывода результатов}
Begin
Write( 'О т в е т : Суммы элементов столбцов равны ');
For j := 1 to M do Write(S[j] : 5 : 1); WriteLn; ReadLn
End; { of OutResult }
{--------------------------------------------}
BEGIN
InputOutput; {вызов процедуры ввода-вывода исходных данных }
SumCol; {вызов процедуры вычисления сумм }
OutResult; {вызов процедуры вывода результатов}
END.
Пример 3.2. Подсчитать, сколько раз встречается в заданной целочисленной
матрице A(N, M) максимальное по величине число.
Тест
Данные |
Результат |
|
N=2 M=3 |
K=3 |
Алгоритмический язык
алг Количество максимумов(арг цел N,M, арг цел таб А[1:N,1:M], рез цел K)
нач цел i, j, Amax
Amax := A[1, 1] | Поиск максимального элемента матрицы
нц для i от 1 до N
нц для j от 1 до M
если A[i, j] > Amax
то Amax := A[i, j]
все
кц
кц
K := 0 | подсчет количества вхождений Amax
нц для i от 1 до N
нц для j от 1 до M
если A[i, j] = Amax
то K := K+1
все
кц
кц
кон
Turbo Pascal
Program NumberOfMaximums;
Uses Crt;
Type Mas = Array [1..10, 1..10] of Integer;
Var A : Mas;
N, M, K, Amax, i, j : Integer; {K - искомый результат}
{--------------------------------------------}
Procedure InputOutput(Var A : Mas);
Begin {описание процедуры ввода-вывода матрицы}
ClrScr;
Write('Количество строк - '); ReadLn(N);
Write('Количество столбцов - '); ReadLn(M);
For i := 1 to N do {Ввод матрицы}
For j := 1 to M do
begin Write('A[' , i , ', ' , j , ']= ? ');
ReadLn(A[i, j])
end; WriteLn; Блок-схема (фрагмент)
ClrScr; WriteLn(' Матрица А');
For i := 1 to N do {Вывод матрицы}
begin
For j := 1 to M do Write(A[i, j] : 5 );
WriteLn;
end; WriteLn;
End; { of InputOutput }
{--------------------------------------------}
Procedure MaxElement(Var A : Mas; Var Amax : Integer);
Begin {описание процедуры поиска Amax}
Amax := A[1, 1];
For i := 1 to N do
For j := 1 to M do
If A[i, j] > Amax then Amax := A[i, j];
End; {of MaxElement}
{--------------------------------------------}
Procedure HowMuch(Var A : Mas; K : Integer);
Begin {описание процедуры подсчета числа вхождений Amax}
K:=0;
For i := 1 to N do
For j := 1 to M do
if A[i, j] = Amax then K := K+1;
WriteLn('Максимальное число ', Amax : 3, ' встречается ', K, ' раз(a)'); ReadLn;
End; {of HowMuch}
{--------------------------------------------}
BEGIN
InputOutput(A); {Вызов процедуры ввода-вывода матрицы}
MaxElement(A, Amax); {Вызов процедуры поиска макс. элемента}
HowMuch(A, K); {Вызов процедуры подсчета числа вхождений максимального элемента }
END.