Как заполнить двумерный массив из файла паскаль

Обновлено: 06.07.2024

Например, запись Matr[4, 4] делает доступным для обработки значение элемента, находящегося в четвертой строке четвертого столбца массива M.

Индексированные элементы массива называются индексированными переменными. За границы массива выходить нельзя. То есть, если в массиве Mas пять элементов, то обращение к шестому или восьмому элементу приведет к ошибке.

Рассмотрим типичные операции, возникающие при работе с одномерными массивами.

Заполнение одномерного массива значениями

Паскаль не имеет средств ввода-вывода элементов массива сразу, поэтому ввод и значений производится поэлементно. Значения элементу массива можно присвоить с помощью оператора присваивания, или ввести с клавиатуры с помощью операторов Read или Readln. Очень удобно перебирать все элементы массива в цикле типа for.

Способы заполнения одномерных массивов:

  1. Ввод значения с клавиатуры.
  2. Задание значений в операторе присваивания с помощью генератора случайных чисел. Этот способ более удобен, когда много элементов в массиве (ввод их значений с клавиатуры занимает много времени).
  3. Задание значений по формуле.
  4. Ввод элементов массива из файла

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

3. Заполнение массива по формуле. Каждому элементу массива присваивается значение, вычисленное по формуле. Если каждый элемент массива равен утроенному значению его порядкового номера (индекса), то процедура будет иметь вид:

4. Чтение чисел из файла. Нужно заранее создать текстовый файл, в который запишите несколько строк, в каждой из которых по 30 чисел.

Вывод значений элементов массива на экран

Вывод значений элементов массива на экран выполняется, как и ввод, поэлементно в цикле. Для вывода будем использовать операторы Write или Writeln. В качестве входных параметров будем передавать процедуре не только массив, но и количество элементов, которые надо вывести, начиная с первого (это понадобится нам, когда мы будем удалять и добавлять элементы в массиве).

Пример 1. Заполнить массив с клавиатуры и вывести его на экран.

В программе будет использоваться две процедуры: процедура Init1 (заполнение массива с клавиатуры) и процедура Print (вывод массива на экран).

Пример 2. Заполнить массив из текстового файла и вывести на экран. В текстовом файте несколько строк, в каждой строке по 30 чисел.

Вы научились заполнять одномерный массив и выводить его на экран.

На следующем уроке продолжим знакомиться с алгоритмами обработки одномерных массивов.

Матрица или двумерный массив – это прямоугольная таблица чисел (или других элементов одного типа). Каждый элемент матрицы имеет два индекса (номер строки и номер столбца).

матрица

двумерный массив Pascal

Исходные данные для решения многих задач можно представить в табличной форме:

Таблица результатов производственной деятельности нескольких филиалов фирмы может быть представлена так:

zavod1: array [1..4] of integer; zavod2: array [1..4] of integer; zavod3: array [1..4] of integer;

Или в виде двумерного массива так:

var A: array[1..3,1..4] of integer; begin

begin var a := new integer[3,4]; <. >end.

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

Варианты описания двумерного массива (традиционный pascal)

    Описание массива в разделе переменных:

const N = 3; M = 4; var A: array[1..N,1..M] of integer;

const M=10; N=5; type matrix=array [1..M, 1..N] of integer; var A: matrix;

ввод двумерного массива

for i:=1 to N do for j:=1 to M do begin write('A[',i,',',j,']='); read ( A[i,j] ); end;

for var i:=0 to a.RowCount-1 do for var j:=0 to a.ColCount-1 do a[i,j]:=readinteger;

заполнение случайными числами

var a := MatrRandomInteger(3,4,0,10); // целые числа в диапазоне от 0 до 10 var a1 := MatrRandomReal(3,4,1,9) // веществ. числа в диапазоне от 1 до 9

вывод двумерного массива

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

for i:=1 to N do begin for j:=1 to M do write ( A[i,j]:5 ); writeln; end;

begin var a := MatrRandomInteger(3,4,0,10); var a1 := MatrRandomReal(3,4,1,9); a.Println; a1.Println(6,1) // 6 позиций всего на вывод, 1 знак после десят. запятой end.

Рассмотрим следующую задачу: Получены значения температуры воздуха за 4 дня с трех метеостанций, расположенных в разных регионах страны:

Номер станции 1-й день 2-й день 3-й день 4-й день
1 -8 -14 -19 -18
2 25 28 26 20
3 11 18 20 25

Т.е. запись показаний в двумерном массиве выглядела бы так:

t[1,1]:=-8; t[1,2]:=-14; t[1,3]:=-19; t[1,4]:=-18;
t[2,1]:=25; t[2,2]:=28; t[2,3]:=26; t[2,4]:=20;
t[3,1]:=11; t[3,2]:=18; t[3,3]:=20; t[3,4]:=25;

var t := Matr(3,4,-8,-14,-19,-18,25,28,26,20,11,18,20,25); t.Println;

Объявление двумерного массива:

var t: array [1..3, 1..4] of integer;

  1. Распечатать температуру на 2-й метеостанции за 4-й день и на 3-й метеостанции за 1-й день.
  2. Распечатать показания термометров всех метеостанций за 2-й день.
  3. Определить среднюю температуру на 3-й метеостанции.
  4. Распечатать, в какие дни и на каких метеостанциях температура была в диапазоне 24-26 градусов тепла.

Самостоятельно подумайте, как находится сумма элементов массива pascal.

Задание array 2. Найти сумму элементов массива (прямоугольной таблицы) размером [m x n] Задание array 3. Найти максимальный элемент массива размером [m x n] Задание array 4.
Найти сумму всех элементов массива (переменная sum ) 5 x 4, а также сумму элементов, составляющих столбцы таблицы (двумерного массива). Для хранения сумм столбцов чисел использовать одномерный массив ( s ). Дополните код.

const m = 5; n = 4; var a: array[1..m,1..n] of byte; s: array[1..n] of byte; i,j, sum: byte; begin randomize; for i := 1 to m do begin for j := 1 to n do begin . . end; writeln end; writeln ('------------'); . for i := 1 to n do begin for j := 1 to m do begin s[i]:=. ; end; write(. ) ; end; sum:=0; . for . . write (' | sum = ', sum); readln end.

Задание array 4_1.
Найти сумму элементов двумерного массива [m x n] по строкам:

Методы матриц для работы со строками и столбцами:

begin var a := MatrRandomInteger(3,4); a.Println; a.Row(0).Sum.Println(); a.Row(1).Average.Println; a.Row(2).Product.Println; a.Col(0).Min.Println; a.Col(1).Max.Println; end.

Главная и побочная диагональ при работе с двумерными матрицами в Pascal

Главная диагональ квадратной матрицы n x n (т.е. той, у которой количество строк равно количеству столбцов) проходит с верхнего левого угла матрицы (элемент 1,1) до правого нижнего угла матрицы (элемент n,n).

Побочная диагональ квадратной матрицы n x n проходит с нижнего левого угла матрицы (элемент n,1) до правого верхнего угла матрицы (элемент 1,n).

Формулу поиска элементов диагоналей проще всего искать, нарисовав элементы матрицы:

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

var i,j,n:integer; a: array[1..100,1..100]of integer; begin randomize; writeln ('введите размерность матрицы:'); readln(n); for i:=1 to n do begin for j:=1 to n do begin a[i,j]:=random(10); write(a[i,j]:3); end; writeln; end; writeln; for i:=1 to n do begin for j:=1 to n do begin if (i=j) or (n=i+j-1) then a[i,j]:=0; write(a[i,j]:3) end; writeln; end; end.

Задание array 5:
Найти отдельно сумму элементов главной и побочной диагонали квадратной матрицы Пример:
Дана матрица 5х5. Найти сумму элементов, стоящих на двух соседних диагоналях с главной и параллельных ей.

Для решения задачи воспользуйтесь таблицей

var A:array[1..5,1..5] of integer; i,j:integer; sum,sum1,sum2:integer; begin randomize; for i:=1 to 5 do for j:=1 to 5 do A[i,j]:=random(10); write ('Исходный массив A: '); for i:=1 to 5 do begin writeln; for j:=1 to 5 do write (A[i,j]:2,' '); end; sum1:=0; for i:=1 to 5 do for j:=1 to 5 do if (i-j=1) then sum1:=sum1+A[i,j]; sum2:=0; for i:=1 to 5 do for j:=1 to 5 do if (j-i=1) then sum2:=sum2+A[i,j]; sum:=sum1+sum2; writeln; writeln('Сумма = ',sum); end.

Задание array 6: Сформировать матрицу размерностью n. Вывести ее на экран. Затем преобразовать ее, заменив необходимые элементы на 0:
Задание array 7: Сформировать матрицу размерностью n. Вывести ее на экран. Затем преобразовать ее, заменив необходимые элементы на 0:
Задание array 8: Сформировать матрицу размерностью n. Вывести ее на экран. Затем преобразовать ее, заменив необходимые элементы на 0:

Задание array 9: Составить программу, позволяющую с помощью датчика случайных чисел сформировать матрицу размерностью N. Определить:

Рассмотрим еще один пример работы с двумерным массивом.

Пример: В двумерном массиве размером N х M определить среднее значение элементов. Найти индекс элемента массива, наиболее близкого к среднему значению.

var index1,index2,i,j,N,M:integer; s,min,f:real; a:array[1..300,1..300] of real; begin N:=10; M:=5; for i:=1 to N do begin for j:=1 to M do begin a[i,j]:=random(20); s:=s+a[i,j]; write(a[i,j]:3); end; writeln; end; f:=s/(N*M); writeln('srednee znachenie ',f); min:=abs(a[1,1]-f); for i:=1 to N do begin for j:=1 to M do begin if abs(a[i,j]-f)<min then begin min:=abs(a[i,j]-f); index1:=i; index2:=j; end; end; end; writeln('naibolee blizkiy ',index1,' ',index2); end.

А теперь предлагаем пройти тест по программированию Pascal начальный уровень. Перейдите по ссылке или щелкните здесь, если у вас есть пароль для прохождения теста.

Потренируйтесь в решении задач по теме, щелкнув по пиктограмме:

обучение PascalABC

Двумерный массив является разновидностью многомерных. Визуально двумерный массив можно представить в виде таблицы. Положение элемента задается двумя индексами:

двумерный массив паскаль

Описание двумерного массива на Паскале отличается от одномерного только добавлением второй размерности в квадратных скобках.

Главная и побочная диагонали матрицы

Большое количество задач на обработку связано с элементами главной и побочной диагонали. Они обладают особыми свойствами.

главная и побочная диагональ - двумерный массив

В побочной диагонали (ячейки зеленого цвета) расположены элементы, у которых сумма индексов равна количеству строк (столбцов) плюс один.

Пример двумерного массива

Заполнение и вывод на экран

Рассмотрим пример программы на паскале. Заполнение будем проводить случайными числами, так как ручной ввод для отладки программы на Паскале не удобен.

  • опишем массив, укажем все необходимые переменные;
  • заполним случайными значениями;
  • сделаем вывод на экран в виде таблицы.

Текст программы

Второй вариант немного короче. Отличается от первого тем, что заполнение и вывод проходит в одном цикле. Можно использовать в качестве шаблона для решения однотипных задач на Паскаль.

При составлении программ, этот код будет присутствовать практически в каждой задаче. Здесь происходит подготовка исходного массива, заданного случайными числами.

двумерный массив паскаль

Результат работы программы

Обработка элементов по условию задачи будет различаться и записываться в продолжении указанного выше текста программы на Паскаль. После обработки следует код вывода результата работы программы.

Сумма элементов двумерного массива

Запишем код обработки элементов, который вычислит их сумму.

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

Двумерный массив в Паскале трактуется как одномерный массив, тип элементов которого также является массивом (массив массивов). Положение элементов в двумерных массивах Паскаля описывается двумя индексами. Их можно представить в виде прямоугольной таблицы или матрицы.
Рассмотрим двумерный массив Паскаля размерностью 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)

Читайте также: