русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Примеры решения задач


Дата добавления: 2014-02-04; просмотров: 5606; Нарушение авторских прав


Двумерные массивы

6.2.1 Основные понятия

Иногда решение задачи возможно только при наличии многомерных массивов, или матриц. Наиболее часто применяются двумерные массивы, поскольку описывать информацию по ее позиции в одномерном списке весьма неудобно. Представьте себе, как трудно было бы найти свое место на стадионе, если бы на билете указывался лишь порядковый номер сиденья - один из многих тысяч! Билеты же, на которых проставлены и номер ряда, и номер места, существенно упрощают эту задачу. Составители географических карт тоже пользуются таким приемом. Координаты Парижа, Осло, Рима, обозначаются не как 1, 2 или 300, а в терминах градусов широты и долготы. Эти два числа указывают местоположение города относительно экватора и начального (Гринвичского) меридиана.

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

A[4,5], A[2,7], A[6,3], ..., A[m,n].

6.2.2 Описание массива

Формат

Var

<идентификатор,…>:array[тип индекса] of <тип компонент>;

Например:

M: array[1..4,1..5] of integer; {двумерный массив, состоящий из 4 строк и 5 столбцов}

MAS: array[1..6,1..7] of real;

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

Например,

Const

G1=4; G2=6;

Var

M1: array[1..G1,1..G2] of integer;

6.1.3 Заполнение и вывод элементов двумерного массива

1 Способ (заполнение с клавиатуры)

Var

M:array[1..7,1..5] of integer;

I,J: byte;

Begin

For I:=1 To 7 Do {цикл по строкам}

For J:=1 To 5 Do {цикл по столбцам}

ReadLn(M[I,J]);

End.

2 Способ (с использованием генератора случайных чисел)

Var

M: array[1..5,1..4] of integer;

I,J: byte;

Begin

For I:=1 To 5 Do Begin

For J:=1 To 4 Begin



M[I,J]:=Random(50);

Write(M[I,J]:4);

End;

WriteLn;

End;

End.

1. Алгоритмы действий над элементами двумерного массива

1.В течение недели измерялась температура три раза в день: утром, в обед и вечером. Показания записали в таблицу размерностью 7х3. Определить среднюю температуру за каждый день.

USES Crt;

VAR

T:ARRAY[0..7,0..3] OF INTEGER;

I,J:BYTE; S:INTEGER; ST:REAL; A:STRING[12];

BEGIN

ClrScr; WriteLn;

{ Заполнение таблицы }

FOR I:=1 TO 7 DO Begin

WriteLn(' Введите показания за ',I,' день');

FOR J:=1 TO 3 DO Begin

CASE J OF

1: A:=' Утром - ';

2: A:=' В обед - ';

3: A:=' Вечером - ';

End;

Write(A); ReadLn(T[I,J]);

End;

End; WriteLn;

{ Подсчет средней температуры за каждый день }

FOR I:=1 TO 7 DO Begin

S:=0;

FOR J:=1 TO 3 DO

S:=S+T[I,J];

ST:=S/3;

WriteLn('Средняя температура за ',I,' день = ',ST:4:1);

End;

END.

2. Группа из 10 учащихся сдавала экзамен по 4 предметам. Результаты экзаменов записали в таблицу размерностью 10х4. Определить средний балл по каждому предмету.

USES Crt;

VAR

E:ARRAY[0..10,0..4] OF INTEGER;

I,J:BYTE; S:INTEGER; SB:REAL; A:STRING[16];

BEGIN

ClrScr; WriteLn;

{ Заполнение таблицы }

FOR I:=1 TO 10 DO Begin

WriteLn(' Введите оценки ',I,' учащегося');

FOR J:=1 TO 4 DO Begin

CASE J OF

1: A:=' Математика - ';

2: A:=' Физика - ';

3: A:=' Химия - ';

4: A:=' Информатика - ';

End;

Write(A); ReadLn(E[I,J]);

End;

End; WriteLn;

{ Подсчет среднего балла по каждому предмету. Циклы меняются местами.' }

FOR J:=1 TO 4 DO Begin

S:=0;

FOR I:=1 TO 10 DO

S:=S+E[I,J];

SB:=S/10;

CASE J OF

1: A:=' математике - ';

2: A:=' физике - ';

3: A:=' химии - ';

4: A:=' информатике - ';

End;

WriteLn(' Средний балл по ',A,' = ',SB:4:1);

End;

END.

3. Поменять местами значения К-ого и Р-ого столбцов матрицы В, размерностью MхM, заполненную случайным образом.

USES Crt;

LABEL M1;

CONST M=8;

VAR

A:ARRAY[0..M,0..M] OF INTEGER;

I,J,K,P:BYTE; PP:INTEGER;

BEGIN

ClrScr;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения двумерного массива');

FOR I:=1 TO M DO Begin

FOR J:=1 TO M DO Begin

A[I,J]:=Random(23); Write(A[I,J]:3);

End; WriteLn;

End; WriteLn;

WriteLn(' Введите номера столбцов, которые необходимо поменять');

WriteLn(' Их значения не должны превышать ',M);

M1:ReadLn(K,P);

IF (K>M) OR (P>M) THEN GOTO M1;

{ Перестановка значений введенных столбцов }

FOR I:=1 TO M DO Begin

PP:=A[I,K]; A[I,K]:=A[I,P]; A[I,P]:=PP;

End;

WriteLn(' Измененный двумерный массив');

FOR I:=1 TO M DO Begin

FOR J:=1 TO M DO Begin

Write(A[I,J]:3);

End; WriteLn;

End;

END.

4. Дан двумерный массив размерностью 6х3, заполненный целыми числами. Подсчитать количество строк, в которых первый элемент строки меньше нуля.

USES Crt;

VAR

M:ARRAY[0..6,0..3] OF INTEGER;

I,J,K:BYTE;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения двумерного массива');

FOR I:=1 TO 6 DO Begin

FOR J:=1 TO 3 DO Begin

M[I,J]:=Random(23)-10; Write(M[I,J]:3);

End; WriteLn;

End; WriteLn; K:=0;

{ Подсчет количества строк, в которых первый элемент строки меньше 0 }

FOR I:=1 TO 6 DO

IF M[I,1]<0 THEN Inc(K);

Write(' Количество строк, в которых первый элемент строки меньше 0 = ',K);

END.

5. Дан двумерный массив размерностью Nх2N, заполненный целыми числами. Найти среднее арифметическое элементов, имеющие четные номера строк.

USES Crt;

CONST N=5;

VAR

H:ARRAY[0..N,0..2*N] OF INTEGER;

I,J,K:BYTE; S:LongInt; SA:REAL;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов двумерного массива'); WriteLn;

FOR I:=1 TO N DO Begin

FOR J:=1 TO 2*N DO Begin

H[I,J]:=Random(23); Write(H[I,J]:3);

End; WriteLn;

End; WriteLn;

{ Нахождение суммы значений элементов, имеющих четные номера строк }

I:=2; K:=0;

WHILE I<=N DO Begin

FOR J:=1 TO 2*N DO Begin

S:=S+H[I,J]; Inc(K);

End; I:=I+2;

End;

SA:=S/K;

Write(' Среднее арифметическое элементов, имеющих четные номера строк =',SA:4:1);

END.

Примеры для самостоятельного решения:

1. Найти произведение элементов К-го и Р-го столбцов квадратной матрицы, размерностью 6х6.

2. Дан двумерный массив размерностью 5х3, заполненный целыми числами. Найти произведение элементов нечетных строк матрицы.

3. Дан двумерный массив размерностью 5х6, заполненный целыми числами и величина К. Найти количество элементов, равных К и их сумму.

4. Дан двумерный массив размерностью NхM, заполненный целыми числами. Определить, есть ли в данном массиве столбец, в котором имеются одинаковые элементы.

2 Алгоритмы формирования одномерного массива

1. Дан двумерный массив размерностью 5х6, заполненный целыми числами. Сформировать одномерный массив, каждый элемент которого соответственно равен сумме элементов строк. Оба массива вывести на экран.

USES Crt;

VAR

H:ARRAY[0..5,0..6] OF INTEGER; K:ARRAY[0..5] OF INTEGER;

I,J:BYTE; S:INTEGER;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения двумерного массива');

FOR I:=1 TO 5 DO Begin

FOR J:=1 TO 6 DO Begin

H[I,J]:=Random(23); Write(H[I,J]:3);

End; WriteLn;

End; WriteLn;

{ Нахождение суммы элементов строк и заполнение одномерного массива }

WriteLn(' Значения одномерного массива');

FOR I:=1 TO 5 DO Begin

S:=0;

FOR J:=1 TO 6 DO

S:=S+H[I,J];

K[I]:=S; Write(K[I]:4);

End;

END.

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

USES Crt;

LABEL M1;

CONST N=5;

VAR

H:ARRAY[0..N,0..N] OF INTEGER; B:ARRAY[0..N] OF INTEGER;

I,J:BYTE;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов двумерного массива');

WriteLn;

FOR I:=1 TO N DO Begin

FOR J:=1 TO N DO Begin

H[I,J]:=Random(25)-10; Write(H[I,J]:3);

End; WriteLn;

End; WriteLn;

WriteLn(' Значения первых положительных элементов соответствующих строк');

WriteLn;

FOR I:=1 TO N DO Begin

FOR J:=1 TO N DO

IF H[I,J]>0 THEN Begin B[I]:=H[I,J]; GOTO M1; End;

M1: Write(B[I]:3);

End;

END.

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

USES Crt;

CONST N=5; M=7;

VAR

A:ARRAY[0..N,0..M] OF INTEGER; B:ARRAY[0..N] OF INTEGER;

I,J:BYTE;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

WriteLn;

FOR I:=1 TO N DO Begin

FOR J:=1 TO M DO Begin

A[I,J]:=Random(30); Write(A[I,J]:3);

End; WriteLn;

End; WriteLn;

WriteLn(' Cумма первого и последнего элементов соответствующих строк');

WriteLn;

FOR I:=1 TO N DO Begin

B[I]:=A[I,1]+A[I,M]; Write(B[I]:3);

End;

END.

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

USES Crt;

VAR

M:ARRAY[0..5,0..6] OF INTEGER; F:ARRAY[0..6] OF INTEGER;

I,J:BYTE; P:LongInt;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO 5 DO Begin

FOR J:=1 TO 6 DO Begin

M[I,J]:=Random(20)-5; Write(M[I,J]:3);

End; WriteLn;

End; WriteLn;

{ Формирование одномерного массива}

WriteLn(' Значения элементов одномерного массива');

FOR J:=1 TO 6 DO Begin

P:=1;

FOR I:=1 TO 5 DO

IF (M[I,J]>0) AND (M[I,J] mod 2 =0) THEN P:=P*M[I,J];

IF P=1 THEN F[J]:=0 ELSE F[J]:=P;

Write(F[J]:4);

End;

END.

Примеры для самостоятельного решения:

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

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

3. Дана квадратная матрица размерностью NхN, заполненная целыми числами и величина А. Сформировать одномерный массив, каждый элемент которого равен элементу, расположенному на главной диагонали , умноженному на величину А .

4. Дан двумерный массив размерностью 6х8, заполненный целыми числами, введенными с клавиатуры. Сформировать одномерный массив, каждый элемент которого равен количеству элементов соответствующих строк матрицы, значения которых находятся в интервале( -2, 10).

3 Алгоритмы нахождения наибольшего и наименьшего элементов двумерного массива

1. В соревнованиях по плаванию принимали участие 5 спортсменов. Соревнования состояли из 3 заплывов. Результаты заплывов записали в таблицу размерностью 3х5. Получить одномерный массив размером 3, элементами которого будут лучшие результаты в каждом из заплывов.

USES Crt;

VAR

RZ:ARRAY[0..3,0..5] OF INTEGER; LR:ARRAY[0..3] OF INTEGER;

I,J:BYTE;

BEGIN

ClrScr; WriteLn;

{ Заполнение таблицы }

FOR I:=1 TO 3 DO Begin

WriteLn(' Введите результаты ',I,' заплыва');

FOR J:=1 TO 5 DO Begin

Write(J,' участник - '); ReadLn(RZ[I,J]);

End;

End; WriteLn;

{ Определение лучшего результата в каждом из заплывов }

FOR I:=1 TO 3 DO Begin

LR[I]:=RZ[I,1];

FOR J:=2 TO 5 DO

IF RZ[I,J]<LR[I] THEN LR[I]:=RZ[I,J];

WriteLn(' Лучший результат ',I,' заплыва = ',LR[I]);

End;

END.

2. Дан двумерный массив размерностью 5х6, заполненный целыми числами. Сформировать одномерный массив, каждый элемент которого равен наибольшему по модулю элементу соответствующего столбца.

USES Crt;

VAR

M:ARRAY[0..5,0..6] OF INTEGER; MAX:ARRAY[0..6] OF INTEGER;

I,J:BYTE;

BEGIN

ClrScr; Randomize;

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO 5 DO Begin

FOR J:=1 TO 6 DO Begin

M[I,J]:=Random(20)-8; Write(M[I,J]:3);

End; WriteLn;

End; WriteLn;

{ Формирование одномерного массива}

WriteLn(' Значения элементов одномерного массива');

FOR J:=1 TO 6 DO Begin

MAX[J]:=ABS(M[1,J]);

FOR I:=2 TO 5 DO

IF ABS(M[I,J]) > MAX[J] THEN MAX[J]:=ABS(M[I,J]);

Write(MAX[J]:3);

End;

END.

3. Дан двумерный массив размерностью NхM, заполненный случайным образом. Определить, есть ли в данном массиве строка, в которой имеется два элемента массива, имеющие наибольшее значение.

USES Crt;

CONST N=6; M=8;

VAR

A:ARRAY[0..N,0..M] OF INTEGER;

I,J,K,FL:BYTE; MAX:INTEGER;

BEGIN

ClrScr; Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

WriteLn(' Значения элементов двумерного массива');

FOR I:=1 TO N DO Begin

FOR J:=1 TO M DO Begin

A[I,J]:=Random(20); Write(A[I,J]:3);

End; WriteLn;

End; WriteLn;

{ Нахождение наибольшего значения }

MAX:=A[1,1];

FOR I:=1 TO N DO

FOR J:=1 TO M DO

IF A[I,J]>MAX THEN MAX:=A[I,J];

WriteLn(' Максимальное значение = ',MAX);

{ Нахождение строки, в которой два элемента имеют наибольшее значение }

FL:=0;

FOR I:=1 TO N DO Begin

K:=0;

FOR J:=1 TO M DO

IF A[I,J]=MAX THEN Inc(K);

IF K=2 THEN Begin WriteLn('В ',I,' строке два элемента имеют наибольшее значение');

FL:=1;

End;

End;

IF FL=0 THEN WriteLn(' Нет строк, в которых два элемента имеют наибольшее значение');

END.

Примеры для самостоятельного решения:

1. Дан двумерный массив размерностью 5x7, заполненный случайным образом. Найти наименьший и наибольший элементы двумерного массива, поменять их местами.

2. Дан двумерный массив размерностью NxM, заполненный случайным образом. Получить одномерный массив, элементами которого являются сумма наименьшего и наибольшего элементов соответственной строки двумерного массива.

 

7. Множества

Множество – структурированный тип данных, представляющих набор взаимосвязанных по какому-либо признаку или группе признаков объектов, которое можно рассматривать как единое целое. Каждый объект в множестве называется элементом множества. Все элементы множества должны принадлежать одному из скалярных типов, кроме вещественного. Значения элементов множества указываются в квадратных скобках. Например:

[1,2,3,4]; [‘f’,’d’,’c.’]; [‘a’..’z’]

Формат:

Type

<имя типа>= set of <элемент1, элемент2, …,элементn>;

Var

<идентификатор>:<имя типа>;

или

Var

<идентификатор>:set of <элемент1, элемент2, …,элементn >;

Например:

Type

Pros=set of (1,3,5,7,13);

Nom=set of 1..31;

Var

Pr: Pros;

N: Nom;

Buk: set of (‘A’,’S’, ‘Z’,’J’);

S: Set Of Byte;

Количество элементов множества не более 256. Объем памяти, занимаемый одним элементом множества, составляет 1 бит.



<== предыдущая лекция | следующая лекция ==>
Одномерные массивы | Операции над множествами


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.961 сек.