Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 1601

.pdf
Скачиваний:
5
Добавлен:
30.04.2022
Размер:
1.46 Mб
Скачать

Задача 6.

Составить программу, с помощью которой необходимо элементы главной диагонали оформить в виде одномерного массива и этот массив вывести на печать.

Program_tub;

Var a:array[1..5, 1..5]_of_integer; b:array[1..5]_of_integer;

Begin

i:=1_to_5_do j:=1_to_5_do_begin

writeln (´введите a[´, i:2, ´, ´, j:2, ´] ´); readln (a[i, j]);

end; for_i:=1_to_5_do for_j:=1_to_5_do

if_i=j then b[i]:=а[i, j]); for_i:=1_to_5_do writeln (b[i]);

End.

Задача 7.

Составить программу на обработку двумерной матрицы 5 5 по следующему алгоритму: вместо отрицательных элементов матрицы вставить нули, результат обработки вывести на экран дисплея в виде квадратной матрицы.

Program_matr;

Var a:array[1..5, 1..5]_of_integer; i, j:integer;

Begin

for_i:=1_to_5_do for_j:=1_to_5_do_begin

written (´введите a[´, i:2, ´, ´, j:2, ´] ´); readln (a[i, j]);

end;

S:=0 for_i:=1_to_5_do for_j:=1_to_5_do

if_а[i, j]<0_then_a[i, j]:=0; for_i:=1_to_5_do_begin for_:=1_to_5_do write (a[i, j]:3); Writeln;

End;

End.

Задача 8.

Составить программу для суммирования всех положительных элементов матрицы 5 5. Pogram_matr;

Var i,j:integer;

a:array[1..5,1..5]_of_integer; Begin

For_i:=1_to_5_do

For_j:=1_to_5_do Read(a[i,j]); For_i:=1_to_5_do For_j:=1_to_5_do If_a[i,j]<0_then_s:=s+a[i,j]; Write(s);

End.

Задача 9.

Составить программу для суммирования всех элементов матрицы, расположенных над главной диагональю матрицы.

Pogram_matr; Var s,i,j:integer;

a:array[1..5,1..5]_of_integer; Begin

For_i:=1_to_5_do

For_j:=1_to_5_do Read(a[i,j]); For_i:=1_to_5_do For_j:=1_to_5_do

If_i > j _then_s:=s+a[i,j]; Write(s);

End.

Задача 10.

Составить программу для обработки двумерного массива на предмет определения максимальной величины элемента массива.

Program_matr;

i, j, max:integer; a:array[1..5, 1..5]_of_integer;

Begin

for_i:=1_to_5_do for_j:=1_to_5_do read a[i, j]; max:=a[1, 1]; for_i:=1_to_5_do

for_j:=1_to_5_do

if_а[i, j]>max_then_max:=a[i, j]; Writeln(max);

End.

Задача 11.

Программная обработка символьных данных.

Выше (4.2.1.) было отмечено, что символьные данные можно сравнивать. Такое сравнение может быть осуществлено с помощью соответствующих операторов, используя в них символы сравнения:

<,<=,>,>=,=.

Для того, чтобы осуществлять сравнения данных типа Char, необходимо знать, что компьютер «знает», что

‗0‘<‘1‘<‘2‘<‘3‘….. <‘9‘

т.е. сравнение такое, как и у обычных цифр.

В то же время следует знать, что компьютер «знает» следующее соотношение:

‗a‘<‘b‘<‘<‘<…… <‘z‘.

т.е. сравнение символов осуществляет в зависимости от порядкового номера соответствующего символа в алфавите.

То же касается и заглавных букв латинского алфавита.

Заметим, что сравнивать, можно и символы из русского алфавита (как заглавных, так и прописных).

Учитывая изложенное можно привести программу, которая выводит на экран дисплея символы латинского алфавита от a до z.

Program alfavit; Var

Simv:Char; Begin

For_simv

:=‘a‘_to_‗z‘_do

Write(simv);

End.

ОПЕРАТОР ЦИКЛА WHILE-DO

Данный оператор называют оператором цикла с предусловием (с предпроверкой условия) и используется тогда, когда количество циклов заранее неизвестно, а задано некоторое условие его окончания (продолжения).

В общем виде такой оператор можно представить:

WHILE (условие) do (оператор)

Здесь:

WHILE (пока); DO (выполнить);

Условие – логическое, выражение (равенство или неравенство: больше, меньше или равно) после слова do должен стоять только один оператор, если по алгоритму их должно быть несколько, то их необходимо заключить в операторные скобки BEGIN - END.

Выполняя данный оператор ЭВМ проверяет условие после WHILE и если условие выполняется, то и выполняется оператор после do (группа операторов), если условие не выполняется, то и не выполняется оператор после слова do и цикл прекращается

(выполняются нижерасположенные после цикла операторы).

Работу данного оператора можно проиллюстрировать структурной схемой:

.

.

.

Установка

условия

не выполняется

Условие

выполняется

Оператор

продолжение программы

Рис. 4.2.3. структурная схема работы оператора цикла

Рассмотрим конкретный пример.

Пусть требуется составить программу для вычисления элементарного ряда:

S

1

1

1

1

...

1

 

 

 

 

 

 

 

 

n2

12

22

32

n2

n 1

 

с заданной погрешностью:

1*10 4 12 n

Таким образом, вычисление данного ряда можно прекратить тогда, когда последующие члены ряда (слагаемые) становятся довольно малы и слабо влияют на величину суммы S.

Вариант программы: Program_win; Var

S, eps: real; n:integer;

Begin

read (eps); S:=0; n:=1;

While_1/sqr (n)>eps_do Begin

S:=S+1/sqr (n); n:=n+1;

End;

Write (´S=´, S, ´n=´, n);

End.

ОПЕРАТОР ЦИКЛА REPEAT-UNTIL

Данный оператор называют оператором цикла с постусловием и используется так же, как и предыдущий оператор, когда количество циклов заранее неизвестно.

В общем виде данный оператор можно представить:

Repeat

Оператор 1; Оператор 2;

.

. тело (поле) цикла

.

Оператор n;

Until (условие)

Здесь repeat – повторять;

until – до тех пор (пока выполнится условие после слова until)

Компьютер выполняет операторы 1, 2, …, n в цикле до тех пор пока выполнится условие (неравенство) после служебного слова until.

Отличие данного оператора от WHILE – DO заключается в том, что здесь можно использовать несколько операторов (1,2,…,n) в отличие от предыдущего, где требовалось использовать BEGIN – END. Кроме того, отличие заключается ещѐ и в том, что здесь условие проверяется после выполнения каждого цикла (в предыдущем операторе – условие проверялось ещѐ до того, как произвести (выполнить оператор) первый или очередной цикл.

Таким образом, одну и туже задачу возможно решить, как с помощью предыдущего оператора, так и с помощью данного.

В тоже время, следует отметить, что предыдущий оператор while-do используется чаще, чем repeat-until. Это связано с тем, что во многих практических случаях желательно осуществить проверку условия на окончание цикла до его выполнения и иметь

возможность при необходимости пропустить лишний цикл, так как это может отразиться на точности вычислений.

Работу данного оператора можно проиллюстрировать на следующей структурной схеме:

.

.

.

Оператор

нет Условие

Продолжение да программы после

Рис. 4.2.4. Структурная схема работы оператора цикла.

Рассмотрим конкретный пример:

Составить программу (с помощью данного оператора) для вычисления предыдущего примера:

S

1

1

1

...

 

 

 

 

 

n2

12

22

n 1

 

n

с заданной точностью

1

1 10

4

 

n2

 

 

 

Вариант программы следующий.

Program_sum; Var

S, eps: real; n: integer;

Begin

read (eps); S:=0; n:=1;

Repeat

S:=S+1/sqr (n); n:=n+1;

Until 1/sqr (n) <=eps;

Write (´S=´, S, ´n=´, n);

End.

4.2.4. ПРОЦЕДУРЫ И ФУНКЦИИ

Известно, что существует множество алгоритмов, в которых одни и те же действия (операции), многократно повторяются.

В алгоритмах такого рода в различных местах встречаются фрагменты, одинаковые по выполняемым действиям и различающиеся только в числовых исходных данных.

При составлении программы по такому алгоритму приходится писать одну и туже группу операторов по несколько раз.