Алгоритмы циклической структуры (повторение) —




Задание 1

I. Постановка задачи

Разработать в среде Turbo Pascal программу решения четырех взаимосвязанных задач:

a. расчет элементов квадратной матрицы A = (aij), i,j – 1,2,…,n по заданной формуле:

b. вычисление элементов вектора X = (xi), i = 1,2,…,n по заданному правилу:

c. упорядочить элементы четных строк матрицы А по убыванию значений;

d. вычисление значения y по заданной формуле:

 

Решение:

II. Алгоритм задачи, описанный в виде блок-схемы:

 
 


задача а):

 
 


 
 

 


3

 
 


j = 1, N
4

       
 
   
 

 

 


           
 
 
   
 
   

 

 


i = 1, N  
6

           
 
   
   
 
 

 


j = 1, N
7

           
   
   
 
 


Вывод a[i,j]
8

 

             
   
 
   
 
 
 
   

 

 


S:=0
9

задача b):

P:=0
10

 

 
 


i = 1, N  
11

 


12

 
 


P:=P*a[i,j]  
13

 
 

 


 
 


x[i]:=P+S  

15

 
 

 


16

           
   
 
 
 
   

 


i = 1, N  
17

задача с):

       
 
   
+
 


i mod 2=0  
18

       
   
 

 

 


j = 1, N-1  
19

 


20

+

a[i,k]>=a[i,k+1]
21

 
 


z:=a[i,k]
22

       
   
 
 


a[i,k]:=a[i,k+1]
23

 

 
 


a[i,k+1]:=z
24

 

               
   
 
   
 
 
 
   

 


i = 1, N  
25

           
 
   
   
 
 

 


j = 1, N  
26

           
 
   
   
 
 

 


           
   
 
 
 
   

 


Задача d):

Y:=0  
28

 
 


i = 2, N  
29

           
 
   
   
 
 

 


i mod 2 =0  
30

       
 
   
 

 


y:=y+x[i]*x[n+1-i]  
31

       
 
 
   

 

 


Вывод y  
32

 

 
 

 

 


 

 

Описание блоков схемы:

Задача а):

1 - начало алгоритма;

2 - ввод n- размерности матрицы А;

3,4,5 – расчёт значений элементов матрицы по заданной формуле:

;

6,7,8 – вывод матрицы;

Задача b):

9 – начальное значение суммы S:=0;

10 – начальное значение произведения P:=1;

11,12,13,14,15 – расчет значений элементов вектора х по правилу:

 

16 – вывод вектора Х;

Задача с):

17 – организация цикла по i;

18 – проверка условия чётности строк;

19 – организация цикла по j;

20,21,22,23,24 – сортировка элементов чётных строк матрицы А по убыванию значений методом пузырька;

25,26,27 – вывод преобразованной матрицы А;

 

Задача d):

28 – первоначальное значение суммы Y=0;

29 - организация цикла по i;

30 – проверка условия чётности строк;

31 – расчёт значения у по заданной формуле:

 

32 – вывод значения y;

33 – конец алгоритма.

 

 

III. Алгоритм задачи, описанный на языке программирования Pascal-программа:

Program zadaha;

Const r=100;

Var a: array[1..r,1..r] of real; x: array[1..r] of real;

i,j,n,k: integer; s,p,m,z,y: real;

begin {задача а}

writeln(‘vvedite razmernost matrizi n=?’); {запрашиваем и

readln(n); вводим размер матрицы А}

for i:=1 to n do {расчёт элементов

for j:=1 to n do матрицы А по формуле}

a[i,j]:=sin(2*i+5*j);

writeln(‘matriza A:’);

writeln;

for i:=1 to n do

begin

for j:=1 to n do {вывод матрицы А}

writeln(a[i,j]:6:2,’ ‘);

writeln;

end;

s:=0; {задача b;}

{ сумме присваиваем нулевое, произведению единичное значение}

p:=1;

writeln(‘vector X:’);

writeln;

for i:=1 to n do

begin

for j:=1 to n do

begin {вычисление элементов вектора Х}

p:=p*a[i,j];

s:=s+cos(a[i,j]);

x[i]:=p+s;

writeln(x[i]:6:2,’ ‘); {вывод вектора Х}

writeln;

end;

end;

for i:=1 to n do {задача с}

if i mod 2 =0 then {условие чётности строк}

begin

{сортировка элементов чётных строк матрицы A по убыванию методом пузырька}

for j:=1 to n-1 do

begin

for k:=1 to n-1 do

if a[i,k]>a[i,k+1] then

begin

z:=a[i,k];

a[i,k]:=a[i, k+1];

a[i, k+1]:=z;

end;

end;

writeln(‘otsortirovannay matriza A:’);

writeln;

for i:=1 to n do

begin {вывод преобразованной матрицы А}

for j:=1 to n do

writeln(a[i,j]:6:2,’ ‘);

writeln;

end;

y:=0; {задача d}

for i:=2 to n do

begin

if i mod 2 = 0 then {условие чётности строк}

y:=y+x[i]*x[n+1-i]; {расчёт значений у}

end;

writeln(‘y=’,y:6:2); {вывод y}

readln;

end.

 

 

IV. Описание используемых модулей и основных операторов.

 

При решении задачи № 1 использовались следующие операторы

Операторы — отдельные инструкции, входящие в программу.

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

К простым операторам относятся:

¨ оператор присваивания;

¨ оператор безусловного перехода;

¨ пустой оператор;

¨ операторы ввода-вывода.

Оператор присваивания

Оператор присваивания является важнейшим оператором любого языка программирования. С его помощью можно присвоить переменной значение выражения.

Имеет вид:

<имя>:= <выражение>;

Оператор работает следующим образом:

· вначале оценивается выражение, т.е. определяется его значение;

· полученное значение присваивается идентификатору, стоящему в левой части оператора.

В результате прежнее значение идентификатора перезаписывается, а поэтому старое значение утрачивается. Знаком присваивания в Паскале является совокупность знаков (:=).

Нужно запомнить: слева от знака присваивания не может быть выражение.

При использовании оператора присваивания следует учитывать, что идентификатор и выражение должны иметь одинаковый тип. Имеется лишь одно исключение из этого правила: идентификатор может иметь тип REAL, а выражение значение типа INTEGER.

Операторы ввода данных

Для ввода данных в языке Паскаль предусмотрены стандартные зарезервированные слова — READ и READLN.

Оператор ввода служит для ввода данных в процессе выполнения программы и используется в виде:

READ (а1, а2, а3, …,аn) — каждое вводимое значение присваивается последовательно переменным а1, а2, а3, …,аn;

READLN (а1, а2, а3, …,аn) — каждое вводимое значение присваивается последовательно переменным а1, а2, а3, …,аn, после чего происходит переход на новую строку (следующий оператор ввода будет вводить данные с новой строки);

READLN — переход на новую строку при вводе данных.

Логические данные в Паскале вводить не разрешается.

При вводе числовые данные должны разделяться пробелом или символом окончания ввода (клавиша enter).

Пример ввода:

VAR a, b, c: REAL;

k, t: INTEGER;

....

READ (a, b, c);

READLN;

READ (k, t);

После набора на экране дисплея всей программы и запуска ее на выполнение происходит останов машины при встрече READ (a, b, c). На клавиатуре компьютера необходимо набрать три действительных числа, затем с новой строки (выполняется оператор READLN) — два

Числа можно отделять друг от друга не только пробелами, но и символом окончания ввода (клавиша enter), т.е. каждое число вводится с новой строки.

Операторы вывода

Для вывода значений в языке Паскаль предусмотрены стандартные зарезервированные слова — WRITE и WRITELN.

Общий вид записи при выводе значений целого типа:

WRITE (b: m);

WRITELN (b: m); где b — имя выводимой переменной, m — константа или выражение целого типа.

Например: WRITE (х: 6, у: 8);

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

Общий вид записи при выводе значений действительного типа с фиксированной точкой:

WRITE (b: m: n);

WRITELN (b: m: n); где m — поле, отводимое под все значение, n — часть поля, отводимого под дробную часть числа.

С т р у к т у р и р о в а н н ы е о п е р а т о р ы. Структурированными называются операторы, состоящие из других операторов.

Они подразделяются:

¨ составной оператор;

¨ условный оператор;

¨ операторы повтора.

Составной оператор

Составной оператор — это последовательность произвольных операторов программы, заключенная в операторные скобки – зарезервированные слова BEGIN…END. Операторы разделяются “; ”.

Составной оператор служит, в первую очередь, для того, чтобы несколько операторов синтаксически объединить в один. Это часто требуется там, где нужно выполнить несколько операторов, когда допустим лишь один. Понятие составного оператора позволяет с помощью команд BEGIN и END объединить несколько операторов и рассматривать их с точки зрения синтаксиса как один оператор. На характер операторов, входящих в составной оператор, не накладывается никаких ограничений.

Среди них могут быть и другие составные операторы.

BEGIN

………

BEGIN

………

………

END;

………

END;

Условный оператор

Условный оператор позволяет проверить некоторое условие и в зависимости от результата выполнить то или иное действие. С помощью этого оператора программируются алгоритмы разветвляющейся структуры.

Структура условного оператора:

IF <условие> THEN <оператор 1> ELSE<оператор 2>, где IF, THEN, ELSE — зарезервированные слова (если, то, иначе); <условие> — произвольное выражение логического типа; <оператор 1>, <оператор 2> — любые операторы языка.

Условный оператор работает по следующему алгоритму:

¨ вначале вычисляется выражение <условие>;

¨ если результат есть TRUE (истина), то выполняется <оператор 1>, а оператор <оператор 2> пропускается;

¨ если результат есть FALSE (ложь), наоборот, <оператор 1> пропускается, а выполняется <оператор 2>.

Правила использования условного оператора:

1. Перед ELSE никогда не ставится точка с запятой (поскольку это еще не конец оператора IF).

2. Если требуется выполнить после THEN и ELSE несколько операторов, они обрамляются командами BEGIN и END, образуя тем самым составной оператор.

3. Часть ELSE<оператор 2> условного оператора может быть опущена. Тогда при значении TRUE условного выражения выполняется <оператор 1>, в противном случае этот оператор пропускается.

Если ELSE отсутствует, а после оператора THEN вновь стоит оператор IF, то возникает неоднозначность трактовки условий. Эта неоднозначность решается следующим образом: любая встретившаяся часть ELSE соответствует ближайшей к ней “сверху” части THEN условного оператора.

Операторы повтора. Циклы

Алгоритмы циклической структуры (повторение) —



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-12-29 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: