Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Программа. Procedure create_two(n, m : integer; var a : t);



Читайте также:
  1. I. УЧЕБНАЯ ПРОГРАММА ДИСЦИПЛИНЫ
  2. II Программа сроки и место проведения Форума
  3. V. ПРОГРАММА СОРЕВНОВАНИЙ
  4. VII. Программа проведения работ и ее обоснование
  5. Антивирусная программа
  6. В мотивационных программах должна принимать участие вся команда ресторана.
  7. В рамках выставки будет проходить культурно-развлекательная программа.

 

Program Problem3;

Const

n = 4; m = 5;

Type

s = array [1..m] of integer;

t = array [1..n] of s;

st = array [1..n] of integer;

Var

a: t;

b: st;

{----------------------------------------------------------------------------------------}

Procedure create_two(n, m: integer; var a: t);

Var

i, j: integer;

Begin

writeln('Заданный двумерный массив целых чисел');

randomize;

for i:= 1 to n do

Begin

for j:= 1 to m do

Begin

a[i, j]:= random(201) - 100;

write(a[i, j]:6, ' ')

End;

writeln

End

End;

{----------------------------------------------------------------------------------------}

Procedure maxim_line(n, m: integer; a: t; var b: st);

Var

i, j: integer;

Begin

for i:= 1 to n do

Begin

b[i]:= a[i, 1];

for j:= 1 to m do

if a[i, j] > b[i] then b[i]:= a[i, j];

end;

writeln('Наибольшие элементы каждой строки массива');

for i:= 1 to n do write(b[i]:6, ' ');

writeln

End;

{----------------------------------------------------------------------------------------}

Begin

create_two(n, m, a);

maxim_line(n, m, a, b)

End.


Задание 1

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

2. Составьте программу нахождения наибольших элементов каждого столбца двумерного массива.

 

Пример 4. Составьте программу преобразования матрицы в одномерный массив (вектор).

 

Разберем решение этой задачи на частном примере.

Пусть задана матрица целых чисел:

Ее надо преобразовать в одномерный массив, который назовем B. Число элементов этого массива должно быть равно числу элементов матрицы, т. е. Для этого в начале программы надо зарезервировать не только двумерный массив, но и одномерный.

В программе обязательно нужен счетчик, который бы считал элементы одномерного массива. Пусть в качестве такого счетчика будет переменная k, которой перед началом циклов устанавливается значение 1.

Теперь весь процесс будет выглядеть так. Организуются циклы для перебора элементов двумерного массива (по количеству строк и количеству столбцов).

k:= 1, b[1]:= a[1, 1] = 3, k:= k + 1 = 2; b[2]:= a[1, 2] = -12 и т. д.

В конечном итоге мы должны получить одномерный массив, который и надо вывести на экран. Для матрицы из рассматриваемого примера этот одномерный массив будет таким: 3, -12, 45, 9, 6, 8, -10, 52, 7, 4, 25, -2

 

Вот процедура, а затем и программа, выполненная по этому алгоритму:

 

Procedure sprain(n, m: integer; a: t; var b: u);

Var

k, i, j: integer;

Begin

k:= 0;

for i:= 1 to n do

for j:= 1 to m do

Begin

k:= k + 1;

b[k]:= a[i, j]

End

End;

Программа

Program Problem4;

Const

n = 5; m = 6;

Type

s = array [1..m] of integer;

t = array [1..n] of s;

u = array [1..n*m] of integer;

Var

a: t; b: u;

i: integer;

{----------------------------------------------------------------------------------------}

Procedure create_two(n, m: integer; var a: t);

Var

i, j: integer;

Begin

writeln('Заданный двумерный массив целых чисел');

randomize;

for i:= 1 to n do

Begin

for j:= 1 to m do

Begin

a[i, j]:= random(201) - 100;

write(a[i, j]:6, ' ')

End;

writeln

End

End;

{----------------------------------------------------------------------------------------}

Procedure sprain(n, m: integer; a: t; var b: u);

Var

k, i, j: integer;

Begin

k:= 0;

for i:= 1 to n do

for j:= 1 to m do

Begin

k:= k + 1;

b[k]:= a[i, j]

End

End;

{----------------------------------------------------------------------------------------}

Begin

create_two(n, m, a);

sprain(n, m, a, b);

writeln('Одномерный массив, полученный из двумерного');

for i:= 1 to n*m do write(b[i], ' '); writeln

End.

 

Пример 5. Сформировать матрицу размерности из случайных чисел от 1 до 100. Расположить их в порядке возрастания по следующей схеме (см. рис. 54):

Рис. 54

 

Алгоритм

Эта задача является логическим продолжением задачи примера 4. В самом деле, чтобы расположить элементы массива по такой схеме и выполнить условие задачи - упорядочить элементы в порядке возрастания, надо:

1) "растянуть" матрицу в одномерный массив;

2) упорядочить полученный массив в порядке возрастания;

3) "выбрать" из полученного одномерного массива столбцы с расположением элементов по предложенной схеме.

Первый пункт этого алгоритма выполнить нетрудно, основываясь на предыдущем примере.

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

Третий пункт является для нас новым. Чтобы выполнить его, надо заметить следующую закономерность. Если столбец двумерного массива имеет нечетный номер, т. е. 1-й, 3-й, 5-й и т.д., тогда элементы располагаются в порядке возрастания от 1-го элемента столбца до n-го - "сверху вниз".

Если номера столбцов четные, т. е. 2-й, 4-й, 6-й и т. д., тогда элементы располагаются от n-го до 1-го - "снизу вверх".

Теперь можно составить схему программы.

 


Дата добавления: 2015-07-11; просмотров: 71 | Нарушение авторских прав






mybiblioteka.su - 2015-2024 год. (0.011 сек.)