Двумерные массивы (матрицы) в Паскале
Одномерный массив можно представить как линейную структуру, в которой элементы следуют друг за другом. Однако бывают более сложные структуры данных. Например, двумерные массивы, которые можно описать как таблицу, в ячейках которой располагаются значения. Для обращения к данным массива указывается номера их строк и столбцов. Часто табличные массивы называют матрицами.
Обычно двумерные массивы на языке программирования Pascal описываются так:
array [1..m, 1..n] of базовый_тип
Однако можно их описывать как массив массивов:
array [1..m] of array [1..n] of базовый_тип
При этом описание может быть в разделе type и тогда создается новый тип, который можно использовать при объявлении переменных. m и n – это константы, их можно опустить и вставить конкретные значения, но лучше так не делать. Обычно подразумевают, что в интервале от 1 до m определяется количество строк, а в интервале от 1 до n – количество столбцов массива.
1 вариант – описание массива через раздел type :
Что такое массив. Примеры. Теория. Array. Одномерный массив. Синтаксис. C++. Урок #25.
const M = 10; N = 5; type matrix = array [1..M, 1..N] of integer; var a: matrix;
2 вариант – описание массива в разделе переменных:
const M = 10; N = 5; var a: array [1..M, 1..N] of integer;
При использовании третьего варианта описания лучше сначала определить некоторый тип одномерного массива (строка двухмерного массива), который затем используется при описании двухмерного массива:
type a = array[1..10] of byte; var b: array[1..100] of a;
Для обращения к элементу двухмерного массива необходимо указать имя массива и в квадратных скобках через запятую – значения двух индексов (первый указывает номер строки, а второй – номер столбца), на пересечение которых стоит элемент (например, a[i,2]:=6) . В языке программирования Pascal допустимо разделение индексов с помощью квадратных скобок (например, a[i][5]:= 7 ).
Если описывается двумерный массив как типизированная константа, то при задании значений его элементов он рассматривается как массив массивов. При этом в общих круглых скобках через запятую перечисляются заключенные в круглые скобки значения элементов строк (каждая строка в своих скобках):
type arr = array[1..4, 1..3] of integer; const cords: arr = ((1,-1,3), (0,0,0), (1,4,0), (4,-1,-1));
Рассмотрим простой пример работы с двумерным массивом. Сначала заполним его данными, а затем выведем их на экран в виде таблицы.
var matrix: array[1..3,1..5] of integer; i, j: integer; begin writeln(‘Введите 15 чисел: ‘); for i := 1 to 3 do for j := 1 to 5 do read(matrix[i,j]); for i := 1 to 3 do begin for j := 1 to 5 do write(matrix[i,j], ‘ ‘); writeln end; end.
Размерность массива (т.е. количество содержащихся в нем значений) определяется произведением количества строк на количество столбцов. В примере выше в массив помещается 15 значений.
Когда пользователь вводит очередное число, то процедура read считывает его и помещает в ячейку с текущими индексами i и j . Когда i равна единице, значение j меняется пять раз, и, значит, заполняется первая строка таблицы. Когда i равна двум, значение j снова меняется пять раз и заполняется вторая строка таблицы. Аналогично заполняется третья строка таблицы. Внутренний цикл for в общей сложности совершает 15 итераций, внешний только 3.
Урок 6: Массивы и выполнение программы
Как пользователь вводит значения – не важно. Он может их разделять либо пробелом, либо переходом на новую строку.
Вывод значений двумерного массива организован в виде таблицы. Выводятся 3 строки по 5 чисел в каждой. Внутри строк числа разделяются пробелом.
На самом деле, это не совсем корректно написанная программа. Мы несколько раз используем цифры 3 и 5. А что если мы захотим поменять размерность массива? Придется просмотреть всю программу (представьте, что она очень большая) и исправить значения. Это неэффективно. Поэтому в программе следует использовать константы.
В случае необходимости значения можно поменять всего лишь в одном месте.
Вторая проблема – это «кривость» выводимой на экран таблицы значений матрицы, в случае если есть значения разной разрядности (однозначные, двузначные числа). Неплохо бы под каждое число отводить равное количество знаков.
Вот так может выглядеть подправленный вариант программы:
const M = 3; N = 5; var matrix: array[1..M,1..N] of integer; i, j: integer; begin writeln (‘Введите 15 чисел: ‘); for i := 1 to M do for j := 1 to N do read (matrix[i,j]); for i := 1 to M do begin for j := 1 to N do write (matrix[i,j]:5); writeln end; end.
Источник: pas1.ru
Программы с двумя массивами что это
А теперь посмотрим, как можно на Паскале запрограммировать алгоритм вычисления среднегодовой температуры.
Для этого сначала познакомимся с правилами описания массивов. Заметим, что в данном разделе учебника мы ограничиваемся только работой с одномерными массивами (линейными таблицами).
Описание и обработка массива на Паскале
Общая форма описания одномерного массива на Паскале такая:
var : array [ ] of
Слово «array» буквально переводится как «массив». Границы индекса могут быть любыми целыми числами. Важно, чтобы нижняя граница была меньше верхней границы. Описание массива температур будет следующим:
var T: array [1..12] of real;
Цикл с параметром на Паскале
Рассмотрим полный текст программы на Паскале.
Program Temperature;
var T: array[1..12] of real;
I: integer; Tsred: real;
begin
for I:=l to 12 do
begin
write ( ‘T[ ‘,1:2, ‘] = ‘) ;
readln(T[I])
end;
Tsred:=0;
for I:=l to 12 do
Tsred:=Tsred+T[I] ;
Tsred:=Tsred/12;
writeln( ‘Среднегодовая температура = ‘, Tsred:6:2, ‘ градусов’)
end.
В этой программе дважды использован оператор цикла с параметром. Он имеет следующий формат:
for := to do ;
Если параметр цикла — целая переменная, то ее значение будет возрастать через единицу. Существует другой вариант этого оператора, в котором вместо слова to записывается downto. В этом случае значение параметра цикла убывает через единицу. Следовательно, начальное значение в этом случае должно быть больше конечного.
Так же как и для оператора цикла while, здесь тело цикла может быть либо простым оператором, либо составным. В первом случае тело цикла заканчивается на ближайшей точке с запятой. В нашем примере — это цикл суммирования. Во втором случае тело цикла заключается между словами begin и end (цикл ввода).
Форматы вывода
В программе присутствует еще один новый для вас элемент Паскаля: формат вывода. Это числа с двоеточиями, стоящие после переменных в операторе вывода write:
В этой записи I:2 обозначает, что значение переменной I выводится как целое число в две символьные позиции на экране. Для однозначного числа в первой позиции будет помещен пробел, например: _5.
В операторе вывода результата также используется формат: Tsred: 6:2. Значение переменной Tsred выводится как смешанное число в 6 позиций, две последние из которых занимает дробная часть. В третьей справа позиции — точка. Лишние позиции для целой части занимаются пробелами. Например: _34.25.
Результат выполнения программы Temperature будет выведен на экран в следующем виде:
Среднегодовая температура =2.56 градусов
Программа с двумя массивами
А теперь расширим условие задачи. Требуется для каждого месяца определить отклонение его средней температуры от среднегодовой величины.
Вернемся к электронной таблице на рис. 3.13. Добавим к ней еще один столбец С, в котором будут вычисляться искомые отклонения. В ячейку С2 занесем формулу =В2-$В$14. По этой формуле вычислится отклонение январской температуры от среднегодовой.
Скопировав эту формулу в ячейки СЗ:С13, получим все остальные величины. Смысл «замораживания» адреса В14 вам должен быть понятен. Результаты приведены в таблице на рис. 3.14.
A | B | ||
1 | Месяц | Температура | Отклонения |
2 | 1 | -21 | -23,56 |
3 | 2 | -18 | -20,56 |
4 | 3 | -7,5 | -10,06 |
5 | 4 | 5,6 | 3,04 |
6 | 5 | 10 | 7,44 |
7 | 6 | 18 | 15,44 |
8 | 7 | 22,2 | 19,64 |
9 | 8 | 24 | 21,44 |
10 | 9 | 17 | 14,44 |
11 | 10 | 5,4 | 2,84 |
12 | 11 | -7 | -9,56 |
13 | 12 | -18 | -20,56 |
14 | Среднее: | 2,56 |
Рис. 3.14. Температуры и отклонения от среднего
Реализуем вычисление отклонений в программе на Паскале. Очевидно, в программе должен появиться еще один массив для размещения в нем таблицы отклонений. Дадим этому массиву имя Dt. Как и массив температур, он состоит из 12 чисел: Dt[l] , Dt[2] , Dt[3] , . Dt [12] .
К предыдущей программе надо добавить описание массива Dt в следующем виде:
var Dt: array[1..12] of real;
Значение каждого элемента массива равно разности между температурой соответствующего месяца и среднегодовой температурой. Например, для января: Dt[l] = Т[1] — Tsred. Такие вычисления повторяются в цикле 12 раз. Значения массива Dt выводятся на экран.
Запишем на Паскале фрагмент, который надо вставить в конец предыдущей программы, чтобы решить поставленную задачу.
for I:=l to 12 do
begin
Dt[I]:= T[I] — Tsred;
writeln(‘Dt[‘,I:2,’]=’, Dt[I]:б:2)
end
Здесь вычисление значений массива Dt и вывод их на экран совмещены в одном цикле. Результат работы программы будет следующим:
Dt[1]= -23,56
Dt[2]= -20,56
Dt[3]= -10,06
…
Dt[12]= -20,56
Как и следовало ожидать, это те же самые числа, что получены в электронной таблице.
Вопросы и задания
1. Как можно описать на Паскале массив, в котором будут храниться значения численности населения Москвы к концу каждого года XX века?
2. Вы приобрели котенка. Каждый вечер вы определяете его вес с помощью весов. Как можно описать на Паскале массив, в котором будут храниться значения веса котенка в течение месяца (например, мая)?
3. Напишите фрагмент программы на Паскале ввода исходных данных для массивов, определенных в заданиях 1 и 2.
4. Введите в компьютер программу Temperature, добавив к ней обработку массива Dt. Выполните программу, получите результаты. Сравните их с приведенными в параграфе.
5. Составьте программы на Паскале по алгоритмам из заданий 3, 4 предыдущего параграфа. Выполните эти программы на компьютере.
Спецтехника для любых нужд на сайте оффициального дилера. |
Источник: www.5byte.ru
Двумерные массивы в Pascal.
Двумерный массив представляет собой массив, в котором положение элементов определяется 2-мя индексами. Фактически, двумерный массив – это обычный (одномерный) массив, элементами которого являются другие одномерные массивы.
Поэтому двумерный массив можно задать следующим образом: b:array[1..n] of array[1..m] of integer.
Однако, подобная запись двумерного массива на практике используется нечасто. Наиболее предпочтительным является следующий вариант: b: array[1..n,1..m] of integer.
Схематично, двумерный массив можно представить в виде матрицы, где первый индекс [1..n] определяет количество строк, а второй индекс [1..m] определяет количество столбцов. Для примера возьмем массив b: array[1..7,1..6] of integer. Схематично его можно представить так:
Как видно, такой массив содержит 42 элемента (7?6). Для доступа к элементу массива необходимо указать номер строки и столбца, на пересечении которых этот элемент расположен. Например, на нашем рисунке элемент массива b[3,3] имеет значение 122.
Следующая программа записывает в каждый элемент массива случайное число и затем выводит все эти числа на экран.
program massiv10; uses crt; const N=5; M=4; var X:array [1..N, 1..M] of integer; I, J:integer; begin clrscr; randomize; for i:=1 to N do for j:=1 to M do x [I, J]:=random (100); for i:=1 to N do begin for j:=1 to M do write (‘ ‘,x[I,J]); writeln end; readln end.
В строке №3 и №4 укажем значение для константы «N» и «M».
В строке№5 запишем область двумерного массива, состоящего из N – строк и M – столбцов. Он записывается также как и одномерный массив, только в квадратных скобках указывается область хранения двумерного массива. Таким образом, наш массив будет состоять из 5 строк и 4 столбцов
В строке №6 записываем переменные, для хранения индексов строки и столбца.
Строка №9,10,11,12 – заполняем массив случайными числами (Все строки и столбцы заполнятся случайными числами). Как видно из программы, для того чтобы заполнить элементы двумерного массива различными значениями, необходимо использовать 2 цикла (один цикл вкладывается в другой). Во внешнем цикле счетчиком выступает индекс строки, во внутреннем цикле — индекс столбца. Внешний цикл выполнится один раз только когда внутренний цикл выполнится 4 раза. А так как внешний цикл должен выполниться 5 раз, то внутренний цикл за это время выполнится 20 раз, заполнив при этом все 20 элементов двумерного массива.
Строка №13-№17. Выводим значения всех элементов массива на экран. Причем, как только заполняются все ячейки одной строки массива, проиходит переход на другую строку, и следующая строка массива выводится на другой строке.
Источник: mojainformatika.ru
Программы с двумя массивами что это
Двумерный массив в Паскале трактуется как одномерный массив, тип элементов которого также является массивом (массив массивов). Положение элементов в двумерных массивах Паскаля описывается двумя индексами. Их можно представить в виде прямоугольной таблицы или матрицы.
Рассмотрим двумерный массив Паскаля размерностью 3*3, то есть в ней будет три строки, а в каждой строке по три элемента:
Каждый элемент имеет свой номер, как у одномерных массивов, но сейчас номер уже состоит из двух чисел – номера строки, в которой находится элемент, и номера столбца. Таким образом, номер элемента определяется пересечением строки и столбца. Например, a 21 – это элемент, стоящий во второй строке и в первом столбце.
Описание двумерного массива
Пример описания двумерного массива Паскаля
var a: array [1..n, 1..m] of < тип элементов >;
В примере объявлен двумерный массив Паскаля a, состоящий из n строк, в каждой из которых m столбцов. При этом к каждой i -й строке можно обращаться m[i], а каждому j -му элементу внутри i -й строки – m[i,j].
Обращение к элементам двумерного массива имеет вид: a [i,j]. Обращение происходит к элементу, расположенному в i -й строке и j -м столбце.
Ввод двумерного массива
Для последовательного ввода элементов одномерного массива применялись циклы, в которых изменяли значение индекса с 1-го до последнего. Положение элемента в двумерном массиве Паскаля определяется двумя индексами: номером строки и номером столбца. Это значит, что необходимо последовательно изменять номер строки с 1-й до последней и в каждой строке перебирать элементы столбцов с 1-го до последнего. Для этого потребуются два цикла for или while , причем один из них будет вложен в другой.
Ввод двумерного массива с клавиатуры:
const n=5; m=10;
var a: array [1.. n , 1.. m ] of integer;
i, j: integer; < индексы массива >
begin
for i :=1 to n do
for j :=1 to m do
Вывод двумерного массива Паскаля
Вывод элементов двумерного массива Паскаля также осуществляется последовательно, необходимо напечатать элементы каждой строки и каждого столбца.
Вывод двумерного массива в строку :
Вывод можно осуществить и в столбик с указанием соответствующего индекса. Но в таком случае нужно учитывать, что при большой размерности массива все элементы могут не поместиться на экране и будет происходить скроллинг, т.е. при заполнении всех строк экрана будет печататься очередной элемент, а верхний смещаться за пределы экрана.
Вывод двумерного массива в столбик:
Var
A: array [1..10, 1..10] of integer;
i, j : integer ; < переменная i,j вводятся как индекс массива >
Begin
For i:=1 to 10 do
For j :=1 to 10 do
Writeln (‘a[‘, i,j, ’]=’, a[i,j]); < вывод элементов массива в столбик >
readln;
end .
Вывод на экран элементов будет в следующем виде:
Вывод двумерного массива таблицей:
k — обычно выбирают на 1-2-3 символа больше чем само число, например: число 123 => k можно выбрать от 4 и более, если меньше, то числа будут сливаться или вообще не показываться(если n=0)
Источник: www.sites.google.com