Массивы в Pascal

Общее представление о массивах

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

Представление переменных в памяти компьютера

В данных ячейках могут содержаться любые значения из диапазона, определяемого их типами. Например, в ячейке month может быть любое одно значение от 1 до 12, а в ячейке x любое натуральное число в диапазоне примерно от -32000 до 32000.

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

Представление массивов в компьютерной памяти

Ячейки массива можно назвать элементами; в квадратных скобках стоят индексы. Базовый тип массива – это тип элементов, из которых составлен массив (в каждом массиве все компоненты одного типа).

Элементы можно обрабатывать так же, как переменные базового типа:

...
nums[3] := 115.58;
read(nums[1]);
tbl[2,a] := true;
write(tbl[2,a]);
tbl[1,c] := not tbl[2,a];
...

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

Во фрагменте кода ниже записывается false во все элементы массива tbl и 0 во все элементы массива nums:

...
for n := 1 to 4 do
    for ch := a to c do
        tbl[n, ch] := false;
 
for i := 1 to 3 do 
    nums := 0;
...

Одномерные массивы

Предположим, что программа работает с большим количеством однотипных данных. Скажем около ста разных целых чисел нужно обработать, выполнив над ними те или иные вычисления. Как вы себе представляете 100 переменных в программе? И для каждой переменной нужно написать одно и тоже выражение вычисления значения? Это очень неэффективно.

Есть более простое решение. Это использование такой структуры (типа) данных как массив. Массив представляет собой последовательность ячеек памяти, в которых хранятся однотипные данные. При этом существует всего одно имя переменной связанной с массивом, а обращение к конкретной ячейке происходит по ее индексу (номеру) в массиве.

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

Итак, массив – это именованная группа однотипных данных, хранящихся в последовательных ячейках памяти. Каждая ячейка содержит элемент массива. Элементы нумеруются по порядку, но необязательно начиная с единицы (хотя в языке программирования Pascal чаще всего именно с нее). Порядковый номер элемента массива называется индексом этого элемента.

Помним, все элементы определенного массива имеют один и тот же тип. У разных массивов типы данных могут различаться. Например, один массив может состоять из чисел типа integer, а другой – из чисел типа real.

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

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

Массив можно создать несколькими способами.

const n = 200;
type
	months = (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec);
	years = 1900..2100;
	people = array[years] of longint;
var
	growth: array[months] of real;
	hum: people;
	notes: array[1..n] of string;

Обращение к определенному элементу массива осуществляется путем указания имени переменной массива и в квадратных скобках индекса элемента.

Простой массив является одномерным. Он представляет собой линейную структуру.

var ch: array [1..11] of char;
    h: char;
    i: integer;
 
begin
    for i := 1 to 11 do read (ch[i]);
 
    for i := 1 to 11 do write (ch[i]:3);
 
readln
end.

В примере выделяется область памяти под массив из 11 символов. Их индексы от 1 до 11. В процессе выполнения программы пользователь вводит 11 любых символов (например, ‘q’, ’w’, ’e’, ’2’, ’t’, ’9’, ’u’, ’I’, ’I’, ’o’, ’p’), которые записываются в ячейки массива. Текущее значение переменной i в цикле for используется в качестве индекса массива. Второй цикл for отвечает за вывод элементов массива на экран.

Функция sizeof, примененная к имени массива или имени массивного типа, возвращает количество байтов, отводимое под массив.

Комментарии

Ответ на от Гость (не проверено)

program n1;
uses crt;
var aw:array[1..10] of integer;
i,w,g:integer;
begin
g:=0;
w:=10;
for i:=0+1 to w do begin
aw[i]:=random(100);
write(aw[i]:6);
          end;
writeln();
write('Чот');
for i:=0+1 to w do begin
if aw[i] mod 2 = 0 then g:=g+1; end; write('Всего чотных чисел ',g);
writeln();
write('Не чот');
g:=0;
for i:=0+1 to w do begin
if aw[i] mod 2 > 0 then g:=g+1;end; write('Всего не чотных чисел ',g) ;
end.

Ответ на от Гость (не проверено)

я хотел бы предложить более удобный способ
uses crt;
const
n=10;
var
mas:array[1..n] of integer;
i,c,b:integer;
begin
randomize;
c:=0;
b:=0;
for i:=1 to n do
mas[i]:=random(101)+1;
for i:=1 to n do
write(mas[i],' ');
for i:=1 to n do
begin
if mas[i] mod 2=0 then
inc(c);
end;
writeln('c=',c);
for i:=1 to n do
begin
if mas[i] mod 2<>0 then
inc(b);
end;
writeln('b=',b);
end.

Ответ на от Гость (не проверено)

const n = 10;
type Mstring = array [1..n] of string;
var m:Mstring;
procedure InputM(var arg:Mstring);
var i:byte;
begin
     for i:=1 to n do
         begin
              writeln('enter string number ',i);
              readln(arg[i]);
         end;
end;
 
procedure OutputM(const arg:Mstring);
var i:byte;
begin
     for i:=1 to n do
         begin
              writeln(arg[i]);
         end;
end;
function repl(const arg:string):string;
var i:byte;
    res:string;
begin
     res:=arg;
     for i:=1 to length(res) do
         begin
              if res[i] = '!' then res[i]:='.';
         end;
     repl:=res;
end;
 
procedure MasRepl(var arg:Mstring);
var i:byte;
begin
     for i:=1 to n do
         begin
              arg[i]:= repl(arg[i]);
         end;
end;
 
begin
     InputM(m);
     MasRepl(m);
     OutputM(m);
     readln;
end.

Школьников отправили на распределение яблок из кучи. Количество яблок в куче не известно. Распределяют яблоки на 4 корзины. 1(Красные), 2(Зеленые), 3(Желтые), 4(Испорченные). Требуется написать программу для распределения и подсчета яблок в каждой корзине и куче. Количество яблок в куче должно быть рандомизировано. Если цифра один, то в первую корзину ,если 2 то во вторую ,а если 3 ,то в 3 ,ну а если 4 то в 4 (когда выпадает ноль то все конец).

Ответ на от Гость (не проверено)

Я точно как не понял по вашему описанию так как вы написали что что должно быть рандомизировано но при этом чтобы на 0 был конец программы также я не понял ну чот написал просьба ответить так надо или нет!!!

program n1;
uses crt;
var i,c,m,g,v,s,q,h :integer;
begin
q:=random (10);
for h:=1 to q do begin
writeln('Какое попалось яблоко ? Красное,Зеленое,Желтое,Испорченное ?');
readln(s);
if s=1 then i:=i+1 else if s=2 then c:=c+1 else if s=3 then g:=g+1 else if s=4 then v:=v+1 ;
end;
writeln('     Всего яблок в куче ',i+c+g+v);
writeln ('  Красных яблок ' ,i, '  Зеленых яблок ',c);
writeln ('  Желтых яблок ',g,'  Испорченных яблок ',v);
end.

Ответ на от Гость (не проверено)

Program i563;
  Var M: array [1..100] of integer;
      N, a, b, c, d, i: integer;
  Begin
    a:=0;
    b:=0;
    c:=0;
    d:=0;
    readln(N);
    for i := 1 to N do read (M[i]);
    for i:=1 to N do
      Begin
        if M[i]=1 then inc(a);
        if M[i]=2 then inc(b);
        if M[i]=3 then inc(c);
        if M[i]=4 then inc(d);
      End;
    write(a,' ',b,' ',c,' ',d);
  End.

Нужно создать массив. Элементы вводятся с клавиатуры, а вывести каждый элемент, увеличен в два раза, причем на первой строке вводится количество элементов (не более ста), а на второй - сами элементы. Если с увеличением в два раза я справится могу, то не знаю что делать с количеством элементов. Объясните пожалуйста!

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

Ответ на от Гость (не проверено)

program m1;
var i : byte;
	max,imax:integer;
	a:array [1..10] of integer;
BEGIN
for i:=1 to 10 do
	begin
		readln(a[i]);
	end;	
	max:=a[1];
for i:=1 to 10 do
	while max<a[i] do
		begin
			max:=a[i];
			imax:=i;
		end;
	writeln('max=',max);
	writeln('imax=',imax);
END.

Ответ на от Гость (не проверено)

const
         n = 10; //Константа для массива
 
var
         a: array [1..n] of integer; //Обявили массив от 1 до 10(n)
         i, min, max: integer;
 
begin
         for i := 1 to n do // Включили счетчик для ввода чисел в массив от 1 до n
         begin
                  Write('Введите число ', i, ' в массив: ');
                  Readln(a[i]);
         end;
         // Алгоритм вычисления минимального элемента
         min := a[1];
         for i := 2 to n do // Начали с 2, т.к мы присвоили переменной min первое значение
         begin
                  if a[i] < min then
                           min := a[i];
         end;
                             // Алгоритм вычисления максимального элемента
         max := a[1];
         for i := 2 to n do
         begin
                  if a[i] > max then
                           max := a[i];
         end;
         Writeln('Максимальный элемент: ',max);
         Writeln('Минимальный элемент: ',min);
         Writeln('{ВЫВОДИМ МАССИВ}');
         for i:= 1 to n do //Счетчик на вывод массива
         begin
         Writeln(i ,' элемент: ',a[i]);
end;
end.

Заполните целочисленный массив m, состоящий из n элементов, значениями, которые равны порядковому номеру элемента. Выведите результат на экран двумя способами.

В исходном массиве подсчитать количество чётных и не чётных элементов,положительных и отрицательных элементов,количество нулей диапазон -100,100.

Ответ на от Гость (не проверено)

const N=100;
var
a:array[1..n] of integer;
s,null,o,h,r,k,i:integer;
begin
s:=0; h:=0; r:=0;k:=0;
for i:=1 to n do
begin
a[i]:=random(100)-100;
write(a[i]:4);
end;
for i:=1 to n do
begin
if a[i] mod 2=0 then inc(k);
if a[i] mod 2>0 then inc(r);
if a[i]<0 then inc(h);
if a[i]>0 then inc(o);
if a[i]=0 then inc(null); 
end;
writeln;
writeln('kol chetnix elementov= ',k);
writeln('kol nechetnix elementov= ',r);
writeln('kol otrisatelnix elementov= ',h);
writeln('kol polojitelnix elementov= ',o);
writeln('kol 0 elementov= ',null);
end.

Составьте программу, дающую ответ "да" или "нет" в зависимости от того встречается или нет число "а" в одномерном числовом массиве.

Ответ на от Гость (не проверено)

const n=30;
var a:array[1..n] of integer;
      i,k:integer;
begin 
  for i:=1 to n do 
    begin
      a[i]:=random(100);
       write(a[i],'   ');
    end;
  writeln;
   k:=0
   for i:=1 to n do
      begin 
      if a[i]>50 then 
         k:=k+1;
        end; 
     writeln('чисел со значениями >50: ', k);
   end.

вычислить сумму и количество элементов массива x больших по абсолютной по величене заданного числа a где a больше 0. эллементы массива вычисляются по формуле Xi=i^2-10i+1 где i=1,2,...,10

Дан массив из 7 чисел.Найти сумму отрицательных чисел и порядковые номера положительных.

В массиве из 10 элементов найти сумму элементов больше 0 и сумму элементов меньше 25

заполнить случайным образом массив из 10 чисел, подсчитать сколько элементов являются четными числами

Заполнить массив А 10 integer числами и выдать на экран все числа стоящие на чётных и нечётных местах.

Напишите программу определения суммы четных чисел элементов массива (массив из 30 случайных чисел в диапазоне от 0 до 30).

Для массива X(m) напечатать сумму, произведение и номера положительных элементов после последнего нулевого элемента. Данные для ввода: m=7, X(1;0;4;0;-1;2;3)

Напишите программу, которая заполняет массив случайными числами на отрезке [–2; 2] и считает сумму положительных элементов массива.

Ответ на от Ваня (не проверено)

program gg;
 var
  a: array[1..50] of integer;
  i,j: integer;
   begin
   j:=0;
    for i:=1 to 50 do begin
    a[i]:= random(5)-2;
    write(a[i]:3);
    end;
    for i:= 1 to 50 do 
        if a[i]>0 then
    j:=j+a[i];
     writeln();
    write(j);
    end.

Дан одномерный массив из n элементов, члены которого заданы случайным образом. Заменить все большие 7 члены массива числом 3.

Заменить каждый четный отрицательный элемент массива M(n,m) на произведение элементов побочной диагонали. Вывести количество замен.

Помогите пожайлуста)! Случайно заполненный массив из 10 чисел. Вывести сколько ячеек содержит числа (больше)>30, но (меньше)<60.

Дан одномерный массив состоящий из 10 элементов заполнить целыми числами и найти минимальный элемент в этом массиве

Массив с(15) заполнен целыми случайными числами в диапазоне от 0 до 100. Массив-мамку м(15) заполнить 0 и 1, расположенными случайным образом. Найти максимальный элемент MAX массива С по нулям массива маски М, а так же его индекс К. Вывести С, М, МАХ, К.

Занести введённые с кл-ры числа в массив А(5х5) так чтобы : 1) 5 первых введённых числа были по главной диагонали , а остальные по побочной 2) подсчитать произведение всех элементов нах-ся в 5 строке

1. Дан одномерный массив А, состоящий из N элементов. Сколько значений элементов в массиве А встречается более одного раза?

Дан динамический массив целых чисел, массив матрица. Найти максимальное и минимальное число и поменять местами. Главная диагональ - все числа заменить 0, под главной диагональю поставить 1, а над ней поставить сумму чисел кратную 2.

Как вывести определённое количество чисел массива? Нужно вывести 5 чисел. Задача: Заполните массив случайными числами в интервале [0,5]. Введите число X и найдите все значения, равные X. Пример№1: Массив: 1 2 3 1 2 Что ищем: 2 Нашли: A[2]=2, A[5]=2 Пример№2: Массив: 1 2 3 1 2 Что ищем: 6 Ничего не нашли.

Вопрос 1 из 1 Заполните массив с клавиатуры целыми числами и найдите количество нечетных элементов массива. Входные данные: в первой строке целое число n (0 < n ≤ 100) — кол-во элементов в массиве. Во второй строке целые числа Х1, Х2,..,Хn разделенные пробелом (числа по модулю не превосходят 32000) — значения элементов массива. Выходные данные: количество нечетных элементов массива Пример. на входе: 5 2 2 3 1 5 на выходе: 3

имеется двумерный массив nxn, заполненный случайными числами (0-5). повернуть массив вокруг своей оси относительно середины, которая должна быть заполнена строго нулями(нулем)

Задать массив из десяти значений. Вывести массив на экран. Поменять местами значения элементов , использовать цикл. Вывести массив на экран. 0-9 1-8 2-7 3-6 4-5