Рефераты. Выражения и условный оператор IF. Операторы циклов. Массивы и подпрограммы

3. В чем ее основные отличия от остальных циклов Turbo Pascal?

Цикл while имеет следующие отличия от оператора repeat:

1) В операторе while проверка условия выхода выполняется в начале выхода, а у repeat в конце.

2) Тело цикла может выполняться ни разу в while, а в repeat всегда выполняется хотя бы один раз;

3) Условие выхода удовлетворяется, если выражение ложно, repeat - если истинно;

4) Тело цикла должно содержать только один оператор, а в repeat можно поместить любое количество операторов.

Оператор For: Если значение условного выражения истинно, то цикл продолжает выполняться, а если значение условного выражения ложно, то происходит выход из цикла. После выхода из цикла идет переход к следующему оператору программы. Изменение - это выражение, определяющее, как будет меняться параметр цикла. В операторе for сначала проверяется условие и если значение условия "истинно", то идёт выполнение тела цикла (блока операторов или простого оператора).

Задание №3. «Массивы и подпрограммы»

Результатом выполнения третьего задания должна быть программа, написанная с использованием подпрограмм - не менее 2 процедур и 1 функции.

Задание связанно с действиями над квадратной матрицей m[n,n], у которой количество строк и столбцов равно n (2 ? n ? 10). Матрицы могут быть либо вещественного, либо целого типа. Значения компонентов матрицы следует задавать случайным образом и в таком диапазоне, чтобы полученные данные были нетривиальными, т.е. неочевидными, не лежащими на поверхности.

Задание:

1) Найти минимальное и максимальное значение компонентов квадратной вещественной матрицы m[n,n].

2) Поменять местами в матрице m[n,n] компоненты строки, содержащей минимум, с компонентами столбца, содержащего максимум. Если минимумов или максимумов в матрице несколько, то взять строку и столбец первых встречных при переборе из минимумов и максимумов соответственно.

3) В одномерный массив v[n] записать компоненты главной диагонали измененной матрицы m[n,n] (индексы строки и столбца главной диагонали равны).

4) Вычислить сумму компонентов полученного массива v[n].

5) На экран вывести исходную матрицу m[n,n], первые встреченные минимальную и максимальную компоненты с индексами, измененную матрицу m[n,n], массив v[n], сумму компонентов массива v[n].

Решение.

В следующей программе использованы 3 процедуры:

- input_matrix для ввода n и заполнения матрицы m[n,n];

- output_matrix для вывода матрицы на экран;

- change_matrix для изменения элементов стоки и столбца матрицы;

и одна функция:

- vector_v для вывода на экран вектора v[n] и суммирования его элементов.

Формат вывода результатов расчета задается постоянной digits:

const

digits=3;

которая указывает, сколько знаков после запятой отображать.

Программа:

program prog3;

const

digits=3;

type

matrix=array[1..10, 1..10] of real;

vector=array[1..10] of real;

var

m:matrix;

v:vector;

n:integer;

procedure input_matrix (var m:matrix; var n:integer);

var

p1,p2,a,b:real;

input:boolean;

i,j:integer;

begin

input:=false;

repeat

writeln('Введите размер квадратной матрицы n');

writeln('не менее 2 и не более 10:');

readln(n);

if (n<2) or (n>10) then

begin

writeln(' Вы ввели неправильный размер матрицы,');

writeln('n должно быть не менее 2 и не более 10.');

end

else

begin

input:=true;

end;

until input;

writeln('Введите левую a и правую b границы ');

writeln('диапазона значений компонент матрицы:');

write('a = ');readln(a);

write('b = ');readln(b);

if a>b then

begin

p1:=a;

a:=b;

b:=p1;

end;

if a=b then begin p1:=0; p2:=b; end

else if b=0 then begin p1:=a; p2:=0; end

else begin p1:=b-a; p2:=a; end;

{p1 - расстояние между левой и правой границей}

{p2 - левая граница}

randomize;

for i:=1 to n do

for j:=1 to n do

m[i,j]:=p2+random*p1;

end; {input_matrix}

procedure output_matrix(var m:matrix; n:integer);

var

i,j:integer;

begin

for i:=1 to n do

begin

for j:=1 to n do

begin

write(m[i,j]:0:digits);

write(' ');

end;

writeln;

end;

writeln;

end; {output_matrix}

procedure change_matrix(var m:matrix;n:integer);

var

i,j:integer;

min_r,min_c,max_r,max_c:integer;

min_z,max_z:real;

value:real;

begin

min_z:=100000;

for i:=1 to n do

for j:=1 to n do

if m[i,j]<min_z then

begin

min_r:=i;min_c:=j;min_z:=m[i,j];

end;

writeln('Минимальное значение и индексы:');

write(min_z:0:digits);

write('; столбец: ');

write(min_c);

write(', строка: ');

writeln(min_r);

max_z:=-100000;

for i:=1 to n do

for j:=1 to n do

if m[i,j]>max_z then

begin

max_c:=j;max_r:=i;max_z:=m[i,j];

end;

writeln('Максимальное значение и индексы:');

write(max_z:0:digits);

write('; столбец: ');

write(max_c);

write(', строка: ');

writeln(max_r);

{изменение элементов строки и столбца}

write('Изменение элементов ');

write(min_r);

write(' строки и ');

write(max_c);

writeln(' столбца');

for i:=1 to n do

begin

value:=m[min_r,i];

m[min_r,i]:=m[i,max_c];

m[i,max_c]:=value;

end;

end; {change_matrix}

procedure vector_v(m:matrix;var v:vector;n:integer);

var

i:integer;

s:real;

begin

for i:=1 to n do

v[i]:=m[i,i];

s:=0;

for i:=1 to n do

s:=s+v[i];

writeln('Вектор v[n]:');

for i:=1 to n do

write(v[i]:0:digits,' ');

writeln;

write('Сумма компонентов вектора: ');

writeln(s:0:digits);

end; {vector_v}

begin

input_matrix(m,n);

writeln('Первоначальная матрица');

output_matrix(m,n);

change_matrix(m,n);

writeln('Новая матрица');

output_matrix(m,n);

vector_v(m,v,n);

readln;

end.

Тестирование программы:

Введите размер квадратной матрицы n

не менее 2 и не более 10:

3

Введите левую a и правую b границы

диапазона значений компонент матрицы:

a = -5

b = 5

Первоначальная матрица

4.326 -3.582 -2.539

-2.236 -1.983 1.980

2.884 3.248 -1.216

Минимальное значение и индексы:

-3.582; столбец: 2, строка: 1

Максимальное значение и индексы:

4.326; столбец: 1, строка: 1

Изменение элементов 1 строки и 1 столбца

Новая матрица

4.326 -2.236 2.884

-3.582 -1.983 1.980

-2.539 3.248 -1.216

Вектор v[n]:

4.326 -1.983 -1.216

Сумма компонентов вектора: 1.127

Результаты тестирования:

- сгенерированные элементы матрицы не выходят за границы заданного диапазона;

- минимальное и максимальное значения определены верно;

- вектор диагональных элементов составлен правильно;

- изменены местами нужные строка и столбец.

Отладка завершена.

Страницы: 1, 2



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.