Форум программистов, компьютерный форум, киберфорум
Наши страницы

Pascal (Паскаль)

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 780, средняя оценка - 4.99
STGE
770 / 575 / 91
Регистрация: 17.06.2009
Сообщений: 1,188
#1

Описание, объявление и заполнение массивов (матриц) - Pascal

21.05.2010, 13:13. Просмотров 111853. Ответов 16
Метки нет (Все метки)

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

Итак, начнём с видов описания одномерного массива (при описании массивов будет использоваться базовый тип integer (-32768..+32767)):

1) описание в разделе констант:
Pascal
1
const a: array[1..10] of integer=(31,546,61,9876,-35,654,1,0,90,-429);
2) описание в разделе var (раздел описания переменных):
Pascal
1
var a: array[1..10] of integer;
3) описание типа массив в разделе описания типов или type:
Pascal
1
type a=array[1..10] of integer;
Заполнение массивов:

1) заполнение одномерного массива посредством генератора случайных чисел, состоящего из 10-ти элементов и описанного в разделе описаний переменных:

Pascal
1
2
3
4
5
6
7
8
9
var a: array[1..10] of integer; i: byte;
begin
randomize   {процедура, которая служит для инициализации (или как ещё называют раскачки) генератора случайных чисел}
for i:=1 to 10 do
begin
a[i]:=random(19);   {функция, генерирующая случайное число от нуля до 18:  random(n+1)} 
write(a[i],'     ');
end;
end.
2) прямое заполнение массива через ввод с клавиатуры с помощью команд read/readln (на этот раз опишем тип массив и переменную данного типа):

Pascal
1
2
3
4
5
6
7
8
9
type a=array[1..10] of integer; 
var b: a; i: byte;  {переменная i выполняет роль счётчика цикла с параметром, т.е. for}
begin
writeln('введите значения элементов одномерного массива: ');
for i:=1 to 10 do begin
  write('a[',i,'] = ');
  readln(a[i]);   {вот здесь, собственно, и осуществляется ввод очередного значения элемента массива}
end;
end.
3) метод присваивания элементам массива определённых значений с помощью оператора присваивания ":=":

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var a: array[1..10] of integer; i: byte;
begin
a[1]:=25;
a[2]:=-65;
a[3]:=0;
a[4]:=12;
a[5]:=-968;
a[6]:=-459;
a[7]:=-21;
a[8]:=54;
a[9]:=901;
a[10]:=2890;
for i:=1 to 10 do   {вывод значений элементов массива на экран}
write(a[i],'    ');    
end.
4) заполнение массива по определённому закону, т.е. с помощью формул:
допустим что очередной элемент массива будет равен разности квадратов двух предыдущих элементов, т.е. a[i]=sqr(a[i-1])-sqr(a[i-2]):

Pascal
1
2
3
4
5
6
7
8
9
10
11
var a: array[1..10] of integer; i: byte;
begin
a[1]:=2;    {т.к. у нас формула a[i]=sqr(a[i-1]) - sqr(s[i-2]), то понятно, что 1-й и 2-й элементы не будут иметь двух предыдущих элементов, и поэтому мы их заполним с помощью оператора присваивания}
a[2]:=3;
write(a[1],'   ',a[2],'   ');
for i:=3 to 10 do
begin
a[i]:=sqr(a[i-1]) - sqr(a[i-2]);
write(a[i],'   ');
end;
end.
Существуют ещё несколько способов заполнения массивов, но об этом потом.
Надеюсь моя тема, оказалась полезной и информативной для непросвещённых.

Добавлено через 11 часов 25 минут
5) импорт данных (двоичный типизированный/нетипизированный, текстовый):
для начала рассмотрим двоичный типизированный файл:
т.к. мы считываем инф. из файла, то необходимо его заполнить с помощью следующей программы:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
var a: file of integer; i,k: integer;
begin
assign(a,'file.bin');   {установка связи файловой переменной типа integer с двоичным типизированным файлом (содержит элементы типа integer, поэтому типизированный, т.е. тип данных уже определён)}
rewrite(a);  {открываем файл посредством файловой переменной для записи}
for i:=-4 to 5 do   {записывать будем абсолютные значения от -4 до -1 и квадраты значений от 0 до 5}  
begin
if i<0 then k:=abs(i)
else k:=sqr(i);
write(a,k);
end;
close(a);   {обязательно закрываем этот файл после работы с ним}
end.
А вот и программа считывающая данные из файла в ячейки массива:

Pascal
1
2
3
4
5
6
7
8
9
10
11
var a: file of integer; i: byte; mas: array[1..10] of integer;
begin
assign(a,'file.bin');
reset(a);   {открываем файл для чтения}
for i:=1 to n do   {считываем очередное значение в ячейку массива и выводим его на экран}
begin
read(a,mas[i]);
write(mas[i],'   ');
end;
close(a);
end.
47
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2010, 13:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Описание, объявление и заполнение массивов (матриц) (Pascal):

Обработка и описание массивов - Pascal
Помогите пожалуйста: 1)Сформировать и вывести матрицу А(10,10),элементы которой заданы произвольно,кроме элементов,расположенных в...

Обработка двумерных массивов(матриц) - Pascal
Дана матрица А(M,N) 1)Составить вектор из номеров столбцов матрицы, где есть хотя бы одно число Фибоначчи 2)Определить сумму тех...

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

Задачи на обработку двухмерных массивов(матриц). - Pascal
Пожалуйста Help!!!! 1). Определить след матрицы Т(3,3), минимальный элемент каждого столбца матрицы уменьшить на ее след. Отпечатать...

Заполнение массивов исходных данных - Pascal
Сижу на экзамене:( вообще не представляю как эти задачи написать.

Транспонирование массива и заполнение массивов по формулам. - Pascal
Помогите решить, кому не трудно 1) Транспортировать массив (т.е. a1,a2...an сформироваь в an, an-1...a1) при этом: а) сохранить...

16
STGE
770 / 575 / 91
Регистрация: 17.06.2009
Сообщений: 1,188
25.05.2011, 02:12  [ТС] #16
Цитата Сообщение от Kaka' Посмотреть сообщение
Извиняюсь за туповатый вопрос, но как заменить в массиве четверти?
Pascal
1
2
3
4
5
6
7
8
9
...
for i:=1 to n do
 for j:=1 to n do
  begin
   k:=mas[i,j];
   mas[i,j]:=mas[n-j+1,n-i+1];
   mas[n-j+1,n-i+1]:=k;
 end;
...
2
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3601 / 2298 / 1196
Регистрация: 22.11.2013
Сообщений: 6,114
19.10.2016, 18:48 #17
Замечание к ответу №2 про нетипизированный файл.

Если собрались писать в файл только целые, открывать проще сразу с нужным размером элемента, тогда при записи/чтении можно будет указывать просто количество элементов:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const n=10;
var
  a: array [1..n] of Integer;
  i: Integer;
  f: file;
begin
  Assign(f,'file.bin');
 
  for i:=1 to 3 do a[i]:=4-i;
  for i:=4 to n do a[i]:=Sqr(i-4);
 
  Reset(f,SizeOf(a[Low(a)]));
  BlockWrite(f,a,n); { записываем n элементов массива одним вызовом }
  Close(f);
...
  Reset(f,SizeOf(a[Low(a)]));
  BlockRead(f,a,n); { читаем n элементов массива одним вызовом }
  Close(f);
 
  for i:=1 to n do Write(' ',a[i]); WriteLn;
end.
0
19.10.2016, 18:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2016, 18:48
Привет! Вот еще темы с ответами:

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

Чтение матриц с внешнего файла, умножение матриц... - Pascal
Вот не могу составить программу... Необходимо считать матрицы А и В с внешнего файла (input). Матрица А размерностью 5х7, В размерностью...

Объявление массивов в коде - PascalABC.NET
Ну и еще один вопрос,это объявление массивов внутри кода. Я имею в виду не просто var a:array of Integer; А объявление массивов с...

Написать объявление и описание класса, который вычисляет выражение - C++
Написать объявление и описание класса, который вычисляет следующее выражение: t=(2*cos(x - pi/2))/(0.5 + sin^2*y)*(1+(z^2)/(3-z^2/5))....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.