Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PASCAL.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
186.79 Кб
Скачать

Var ИмяМассива: array[НижняяГраница.. ВерхняяГраница] of Тип Элементов;

Например:

Const n=100;

var a: array[1..n] of real; { 100 элементов — вещественные числа }

b: array[0..50] of char; { 51 элементсимволы }

с: array[-3..4] of boolean; { 8 элементов — логические значения }

x,y: array[1..20] of integer; { два массива x и у содержат по 20 элементов — целые числа }

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

Массив также можно описать как типизированную константу в разделе опи­сания констант. Список значений элементов массива при этом заключается в круглые скобки.

Например:

const x: array[1..5] of integer=(l,3,5,7,9);

В этом примере не просто выделяется память под массив, а происходит за­полнение ячеек заданными значениями по строкам.

При описании массивов также широко используется предвари­тельное описание типа в разделе описания типов данных. Такая возможность может потребоваться, например, при использовании имени массива в качестве параметра процедуры или функции.

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

СПОСОБЫ ЗАПОЛНЕНИЯ МАССИВА

Значения элементов массива можно задать следующими способами:

  • при вводе данных с клавиатуры:

for i:=1 to n do read (a[i]);

  • с помощью датчика случайных чисел.

Заполним массив числами в диапазоне от -3 до 7.

randomize;

for i:=1 to n do a[i]:=random(11)-3;

  • присваиванием заданных значений;

Заполним массив четными числами

for i:=1 to n do a[i]:=i*2;

или

for i:=1 to n do begin

readln (x);

if x mod 2=0 then a[i]:=x

  • считывая значения элементов из файла: for i:=1 to n do read (f,a[i]);

Вывод элементов массива осуществляется в цикле: for i:=1 to n do write (a[i],’ ‘)

ЗАПОЛНЕНИЕ МАССИВА С КЛАВИАТУРЫ

var a: array [1..100] of real;

i,n: integer;

begin

cls;

for i:=1 to 5 do

begin

read ( a[i] );

end; end.

ЗАПОЛНЕНИЕ МАССИВА СЛУЧАЙНЫМИ ЧИСЛАМИ

var a: array [1..100] of real;

i,n: integer;

begin

cls;

for i:=1 to 10 do

begin

a[i]:=random(101);

writeln(a[i]);

end; end.

ЗАПОЛНЕНИЕ МАССИВА С ПОМОЩЬЮ ФОРМУЛЫ

var a: array [1..100] of real;

i,n: integer;

begin

cls;

for i:=1 to 10 do

begin

a[i]:=i*3;

writeln(a[i]);

end; end.

ПРАКТИЧЕСКАЯ РАБОТА

Дан массив из 15 элементов. Рассмотреть различные способы вывода:

write (x(i), ‘ ‘);

writeln (x[i]);

write (‘x(‘,i,’)=’, x[i],’ ‘)

writeln('a[i]=',a[i])

random (100)

random (500)

random (10) -5

random (70) -35

Вывести на экран массив из 20 элементов, заполнив его случайными значениями, лежащими в диапазоне от -10 до 10.

var a: array [1..20] of real;

i,n: integer;

begin

cls;

for i:=1 to 20 do

begin

a[i]:=random(20)-10;

writeln(a[i]);

end;

end.

Массив предназначен для хранения ростов 12 человек. С помощью датчика случайных чисел заполнить массив целыми значениями, лежащими в диапазоне от 163 до 190 включительно

var a: array [1..12] of real;

i,n: integer;

begin

cls;

for i:=1 to 12 do

begin

a[i]:=random(190-163+1)+163;

writeln(a[i]);

end;

end.

ОПЕРАЦИИ НАД МАССИВАМИ

Для работы с массивом как с единым целым надо использовать имя массива (без [ ]).

Для доступа к элементу массива необходимо указывать его имя и порядковый номер. Для обращения к элементу массива надо указать имя массива и порядковый номер элемента: Х[1], у[5], е[25], А[8].

Если указано только имя массива, то речь идет обо всем массиве (А, С и F). Обычно для обработки массива нужно организовать цикл и уже в нем работать с элементами.

В Паскале определена также операция присваивания для массивов, идентичных по структуре, то есть с одинаковыми типами индексов и компонентов. Например, если массивы С и D описаны как

var c,d: array [0..30] of real;

то можно записать оператор c:=d;

Такая операция сразу всем элементам массива С присвоит значения элементов массива D, соответствующих им по номерам.

    1. Описание массива.

    2. Заполнение массива.

    3. Нахождение суммы (или произведения) элементов.

    4. Нахождение максимального (минимального) элемента;

    5. Нахождение номеров элементов, обладающих заданным свойством.

    6. Нахождение количества элементов, обладающих заданным свойством.

    7. Замена элементов массива

    8. Удаление элементов из одномерного массива.

    9. Вставка элементов.

    10. Изменение значений некоторых элементов.

    11. Создание массивов.

Дан массив из 15 элементов. Вычислить сумму положительных элементов массива.

var b:array [1..15] of real;

s:real; i:integer;

begin

for i:=1 to 15 do

read (b[i]);

s:=0;

for i:=1 to 15 do

begin

if b[i]>0 then

s:=s+b[i];

end;

writeln(s);

end.

  1. сумму четных элементов массива;

  2. сумму положительных элементов;

  3. сумму элементов кратных Р;

  4. сумму элементов, оканчивающихся на К;

  5. сумму элементов с нечетными номерами.

В одномерном массиве В, состоящем из N произвольных элементов. Найти количество отрицательных элементов.

var b:array [1..100] of real;

k, i:integer;

begin

for i:=1 to 15 do

read (b[i]);

k:=0;

for i:=1 to 15 do

begin

if b[i]>0 then

k:=k+1;

end;

writeln(k);

end.

  1. количество элементов кратных В;

  2. количество четных элементов;

  3. количество элементов больших В.

Подсчитать количество четных элементов и вывести их всех на экран

var i,x,y:integer;

s:array [1..10] of integer;

begin

for i:=1 to 10 do

read(s[i]);

for i:=1 to 10 do

if s[i] mod 2=0 then

begin

writeln (s[i]);

y:=y+1;

end;

writeln ('количество четных чисел = ',y)

end.

Составить программу нахождения количества элементов целочисленного массива с нечетными индексами, запись которых оканчивается на 5.  const n=30;  var a: array [1..n] of integer;      k,i: integer; begin cls; k:=0; for i:=1 to n do begin read (a[i]); if (a[i] mod 10=5) and (i mod 2=1) then k:=k+1; end; writeln(k); end.

Найти произведение элементов имеющих нечетный индекс.

Const n=10;

Var a:array[1..n] of integer;

i, p: integer;

begin

randomize;

p:=1;

for i:=1 to n do begin

a[i]:=random(11)-3; //заполняем массив а случайными числами

write (a[i],’ ‘); //выводим заполненный массив

end;

for i:=1 to n do

if i mod 2=1 then

p:=p*a[i] //находим произведение элементов массива а имеющих нечетный индекс

writeln (s);

end.

Дан массив целых чисел.

Найти количество тех элементов, значения которых положительны и не превосходят заданного натурального числа А

Var X: Array[1..20] Of Integer;

      i, n, k, A: Integer;

Begin

     Write (‘n=’); Readln (n);

     For i:=1 To n Do Readln (X[i]);   {ввод массива}

      Write (‘A=’);  Readln (A); k:= 0; 

     For i:=1 To n Do   {обработка массива}

      If (X[i] >0) and (X[i] <= A) Then k:=k + 1;

      Writeln (‘k=’, k);

      End.

Найти номера четных элементов, стоящих на нечетных местах

Var X: Array[1..20] Of Integer;

      i, n:  Integer;

Begin

     Write (‘n=’); Readln (n);

     For i:=1 To n Do Readln (X[i]);   {ввод массива}

      For i:=1 To n Do   {обработка массива}

      If (X[i] mod 2 = 0) and (i mod 2<>0) Then

Write (i)

      End.

Найти номер последнего отрицательного элемента массива

Const n=10;

Var A: Array[1..n] Of Integer;

      i, m: Integer; 

Begin

      For i:=1 To n Do Readln (A[i]);   {ввод массива}

      m := 0;  i:=n;

      While  (i >= 1) and (A[i] >=0) Do i:=i-1;    m:=i;

       Writeln (‘m=’, m);

      End.

Поиск максимального (минимального) элемента массива

var a: array [1..20] of integer;

max, min,i,n: integer;

begin

cls;

for i:=1 to 20 do

begin

a[i]:=random(50)-10;

writeln (a[i]);

max:= a[1]; min:= a[1];

end;

for i:=1 to 20 do

begin

if a[i]>max then max:= a[i];

if a[i]<min then min:= a[i];

end;

writeln ('max=', max); writeln ('min=', min);

end.

Вывести индексы max, min

const n = 7; var a: array[1..n] of real; n_max, i: integer; begin

for i:=1 to n do read (a[i]); n_max:=i; for i:=2 to n do if a [ i ] >a [ n_max] then n_max:= i;

writeln ( n_max); end.

ЗАДАЧА. Поиск максимального (минимального) элемента, удовлетворяющего какому-либо условию.

Например: найти первый максимальный четный элемент.

В этом случае задача решается за три прогона:

1 прогон - инициализация массива;

2 прогон – поиск первого элемента массива, удовлетворяющего данному условию;

3 прогон – берем найденный элемент за основу…

Поиск максимального (минимального) элемента произвольного массива

Максимальный элемент массива

max: = a [ 1 ];

for i:=2 to n do

if a [ i ] > max then

max:=a [ i ];

write ('max=',max) ;

Номер максимального элемента массива

n_max:=1;

for i:=2 to n do

if a [ i ] > a[n_max] then

n_max:= i;

write ('max=',a [ n_max ]) ;

Минимальный элемент массива

min : = a [ 1 ];

for i:=2 to n do

if a [ i ] < min then

min:=a [ i ];

write ('min =',min) ;

Поиск максимального (минимального) элемента массива, про значения элементов которого известно, что они принадлежат определенному диапазону [a; b].

Максимальный элемент массива

max: = a;

for i:=1 to n do

if a [ i ] > max then

max:=a [ i ];

write ('max=',max) ;

Минимальный элемент массива

min : = b;

for i:=1 to n do

if a [ i ] < min then

min:=a [ i ];

write ('min =',min) ;

Поиск номера максимального элемента произвольного массива

n_max:=1;

for i:=2 to n do

if a [ i ] >a [ n_max] then

n_max:= i ;

write ('n_max =',n_max) ;

Обнулить элементы массива, расположенные между его минимальным и максимальным элементами (не включая минимальный и максимальный элементы). var a: array [1..10] of integer; min,max:integer; // номера макс и мин элемента j,jj:integer; // № эл между которых обнулить эл-ты i:integer; // счетчик в цикле begin // формирование исходного массива

for i:=1 to 10 do begin readln(A[i]); end; // присвоение начальных значений

min:=1; max:=1; // нахождение номеров макс и мин эл-ов for i:=1 to n do

begin if a[min]>a[i] then min:=i; if a[max] >a[i] then max:=i; end

// определяем номера первого и последнего элемента if min>max then

begin

j:=max; jj:=min;

end else

begin

jj:=max; j:=min;

end;

// организуем цикл для обнуления элементов

for i:=j+1 to jj-1 do begin a[i]:=0; end;

// вывод результата for i:=1 to 10 do Write(A[i],' '); end.

УДАЛЕНИЕ ЭЛЕМЕНТОВ ИЗ МАССИВА

Дан массив A(N). Удалить элемент, расположенный на месте k.

  • Сдвинуть весь «хвост» массива, начиная с элемента с номером k+1, на одну позицию влево, т.е. выполняя операцию: ai=ai+1, где i = k, k+1, …, N-1

  • Полученный массив будет содержать N-1 элемент.

Var a:array [1..100] of integer;

n, k, i:byte;

Begin

Randomize;

Readln(n); // количество элементов

Readln(k); //№ удаляемого элемента

{формирование массива случайным образом}

For i:=1 to n do begin

a[i]:=random(101)-50;//

write(a[i])

end; writeln;

{удаление заданного элемента}

For i:=k to n-1 do

a[i]:=a[i+1];

{вывод итогового массива}

For i:=1 to n-1 do

write(a[i]:4);

end.

УДАЛЕНИЕ ЭЛЕМЕНТОВ ИЗ МАССИВА Задан одномерный массив размера 10. Необходимо удалить его третий элемент.

  1. Сколько элементов в массиве? (10.)

  2. Сколько элементов станет в массиве после удаления третьего элемента? (9.)

  3. Что должно произойти с элементами с первого по второй? (Они не должны измениться.)

  4. Какой элемент должен быть помещен на третье место? (На третье место должен быть помещен четвертый элемент исходного массива.)

  5. На четвертое? На пятое? (На четвертое место пятый. На пятое шестой.)

  6. Какую закономерность вы можете указать? (На текущее место в массиве должен быть помещен элемент, следующий за текущим, из исходного массива.)

  7. Элементы с какими индексами останутся неизменными, а с какими — будут изменены? (Неизменными останутся элементы, с индексами 1 и 2, а остальные элементы должны измениться.)

  8. Начиная с какого индекса элементы должны перемещаться? (Начиная с четвертого.)

  9. Необходимо перемещать элементы вправо или влево? (Перемещаться элементы должны влево.)

10. Какой элемент должен быть перемещен на место элемента A[i]? (A[i] :=A[i+1].)

for i:=3  to  9  do A[i]:=A[i+1].

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

const n=10;

var A: array[1..n] of integer;

max, i, k: integer;

begin

cls;

randomize;

for i:=1 to n do

A[i]:= -20+random(60);

for i:=1 to n do

write(A[i]:4);

writeln;

max:=A[1];

for i:=1 to n do

if A[i]>=max then

begin

max:=A[i] ;

k:=i;

end;

for i:=k to 9 do

A[i]:=A[i+1];

for i:=1 to n-1 do

write(A[i]:4);

writeln;

end.

Удалить из массива все элементы, стоящие перед максимальным элементом.

const n=10; var A: array[1..n] of integer; max, i, k: integer; begin randomize; for i:=1 to n do A[i]:=-20+random(60); max:=A[1]; for i:=1 to n do if A[i]>=max then  begin max:=A[i]; k:=i;  end; for i:=1 to n-k+1 do A[i]:=A[i+k-1]; for i:=1 to n-k+1 do write(A[i]:4); writeln; end.

ВСТАВКА ЭЛЕМЕНТОВ В МАССИВ

Дан массив A(N). Включить на k место в этом массиве элемент, равный m.

  • Перед включением заданного элемента в массив, необходимо раздвинуть этот массив, т.е. передвинуть «хвост» массива вправо на одну позицию, т.е. выполняя операцию: ai+1=ai, где i = N, N-1, …, k.

  • Перемещение элементов массива начинаем с конца, в противном случае весь хвост массива заполнится k-ым элементом.

  • Размер массива увеличится до N+1 элемента.

Var a:array [1..100] of integer;

n,k,i:byte; m:integer;

Begin

Randomize;

Readln(n); // количество элементов

Readln(k); //№ включаемого элемента

Readln(m); //значение включаемого эл-та

{формируем массив}

For i:=1 to n do begin

a[i]:=random(101)-50;

write(a[i]:4)

end; writeln;

{раздвигаем эл-ты массива}

For i:=n downto k do

a[i+1]:=a[i];

{заносим новый эл-т на k-ую позицию}

a[k]:=m;

{выводим получившийся массив}

For i:=1 to n+1 do

write(a[i]:4);

end.

ВСТАВКА ЭЛЕМЕНТОВ В МАССИВ Задан одномерный массив размера 10. Необходимо вставить число 5 после третьего элемента.

  1. Сколько элементов в массиве? (10.)

  2. Сколько элементов станет в массиве в результате вставки числа 5 после третьего элемента? (11.)

  3. Какой индекс будет у вставленного элемента? (4.)

  4. Что должно произойти с элементами с первого по третий? (Эти элементы не должны измениться.)

  5. Какой элемент должен быть помещен на пятое место? (На пятое место должен переместиться четвертый элемент.)

  6. На шестое? На седьмое? (На шестое пятый. На седьмое шестой.)

  7. Какую закономерность вы можете указать? (Элементы сдвигаются вправо.)

  8. Элементы с какими индексами останутся неизменными, а с какими будут изменены? (Неизменными останутся элементы с индексами 13, на четвертое место помещается число 5, а изменяются все остальные.)

  9. Начиная с какого индекса элементы должны перемещаться? (Перемещаться должны элементы с четвертого.)

  10. Необходимо перемещать элементы вправо или влево? (Вправо.)

  11. Если на четвертое место поместить пятерку, что произойдет с тем элементом, который находился до этого на четвертом месте? (Его значение потеряется.)

  12. Перемещение лучше начать с четвертого или с последнего элемента? (С последнего.)

  13. Какой элемент должен быть перемещен на место элемента A[i]? (A[i] :=A[i — 1].)

for  i:=11  downto 5 do A[i]:=A[i-1]; A[4]:=5.

В одномерном массиве вставить после минимального элемента число 10.

const n=10; var A: array[l..n+1] of integer; min, i, k: integer; begin randomize; for i:=1to n do A[i]:=-20+random(60); for i:=1 to n do write(A[i]:4); writeln; min:=A[1]; for i:=1 to n do        if A[i]<=min then begin min:=A[i]; k:=i; end; for i:=n+1 downto k+2 do A[i]:=A[i-1]; A[k+1]:=10; for i:=l to n+1 do write(A[i]:4); writeln;  end.

В одномерном массиве вставить число 100 перед первым отрицательным элементом. const n=10; var A: array[1..n+1] of integer; i, k: integer; begin randomize; for i:=1 to n do A[i]:=-20+random(60);  for i:=1to n do if A[i]<0 then begin k:=i; i:=n; end;  for i:=n+1downto k+1 do A[i]:=A[i-1]; A[k]:=100;  for  i:=1  to n+1  do write(A[i]:4); writeln; end.

ПЕРЕМЕЩЕНИЕ ЭЛЕМЕНТОВ В МАССИВЕ Задан одномерный массив размера 10. Осуществить перемещение элементов массива следующим образом: последний элемент записать на место первого, при этом сдвинув первый, второй, ..., предпоследний элементы на одну позицию вправо.

  1. Сколько элементов в массиве? (10.)

  2. Изменится ли количество элементов в массиве после перемещения? (Нет.)

  3. Какой элемент должен оказаться на месте первого? На месте второго? На месте третьего? (Десятый. Первый. Второй.)

  4. Можно ли последний элемент сразу поместить на место первого? Что станет в этом случае с первым элементом? (Нет. Его значение будет потеряно.)

  5. Можно ли сначала переместить поочередно все элементы вправо, начиная с первого, а затем последний элемент поместить на место первого? Что станет в этом случае с последним элементом? (Нет. Его значение будет утеряно.)

  6. Можно ли этого избежать, заведя дополнительную переменную? (Да. В дополнительную переменную можно поместить значение последнего элемента. Затем переместить элементы с девятого до первого вправо. Далее на первое место поместить значение десятого элемента из дополнительной переменной.)

t:=A[10]; for  i:=10  downto  2  do A[i]:=A[i-1]; A[l]:=t.

Дан массив размера N. Поменять порядок его элементов на обратный.

var a: array [1..10] of integer; t:integer; // для обмена значениями двух переменных N:integer; i:integer; // счетчик в цикле begin

ввод данных readln(N);

формирование исходного массива for i:=1 to n do

begin

readln(A[i]);

end;

for i:=1 to n div 2 do begin

обмен значениями элементов t:=a[i]; a[i]:=a[n-i+1]; a[n-i+1]:=t; end;

вывод результата for i:=1 to n do

Write(A[i],' '); end.

Дан массив размера N. Поменять местами его минимальный и максимальный элементы.

var a: array [1..10] of integer; t:integer; // для временного хранения значения min,max:integer; // номера макс. и мин. элементов N:integer; i:integer; // счетчик в цикле begin

ввод данных readln(N);

формирование исходного массива for i:=1 to n do

readln(A[i]);

начальное значение переменных min:=1; max:=1; for i:=1 to n do begin // определение номеров искомых элементов if a[i] < a[min] then min:=i; if a[i] > a[max] then max:=i; end;

обмен значениями элементов t:=a[min]; a[min]:=a[max]; a[max]:=t;

вывод результата

for i:=1 to n do Write(A[i],' '); end.

Поменять местами элементы массива следующим образом

1-ый со 2-ым 3-ий с 4-ым 5-ый с 6-ым 7-ой с 8-ым

СОРТИРОВКА ЭЛЕМЕНТОВ МАССИВА

Сортировка – это процесс упорядочивания элементов.

Числовой массив упорядочивается

- по убыванию;

- по возрастанию.

СОРТИРОВКА МАССИВА

  Сортировка массива методом пузырька.

  Эту сортировку так называют потому, что при обработке массива более "лёгкие" элементы перемещаются вверх.

program pyz;

const n = 20;

var V:array[1..n] of integer;

i,j,tmp:integer;

begin

Randomize;

for i:=1 to n do

V[i]:= Random(100);

Writeln('Исходный массив: ');

for i:=1 to n do Write(V[i],' ');

for i:=1 to n do

for j:=i+1 to n do

if V[i] >= V[j] then

begin

tmp:= V[i];

V[i]:= V[j];

V[j]:= tmp;

end;

Writeln;

Writeln('Упорядоченный по неубыванию массив: ');

for i:=1 to n do Write(V[i],' ');

Readln;

End.

СОРТИРОВКА МАССИВА

Сортировка массива методом пузырька.

По убыванию элементов:

program pyz;

const n = 20;

var V:array[1..n] of integer;

i,j,tmp:integer;

begin

Randomize;

for i:=1 to n do

V[i]:= Random(100);

Writeln('Исходный массив: ');

for i:=1 to n do Write(V[i],' ');

for i:=1 to n-1 do

for j:=i+1 to n do

if V[i] < V[j] then begin

tmp:= V[i];

V[i]:= V[j];

V[j]:= tmp;

end;

Writeln;

Writeln('Упорядоченный по убыванию массив: ');

for i:=1 to n do Write(V[i],' ');

Readln;

End.

СОРТИРОВКА МАССИВА

Сортировка методом нахождения минимального элемента

Ещё один вариант сортировки, более быстрый, чем метод пузырька.

При каждом просмотре массива находим минимальный элемент и меняем местами его с первым на первом проходе, со вторым - на втором и т.д.

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

Const N=20

var Arr : array[0;N] of Integer;

………

procedure SortMin;

var

i, j : Integer;

Min, Pos, Temp : Integer;

begin

for i := 0 to n - 1 do begin

Min := Arr [i];

Pos := i;

for j := i + 1 to n do

if Arr [j] < Min then begin

Min := Arr [j];

Pos := j;

end;

Temp := Arr [i];

Arr [i] := Arr [Pos];

Arr [Pos] := Temp;

end;

end;

СОРТИРОВКА МАССИВА

Сортировка массива вставками

Более быстрый и оптимальный метод сортировки - сортировка вставками.

Суть её в том, что на n-ном шаге мы имеем упорядоченную часть массива из n элементов, и следующий элемент встаёт на подходящее ему место.

Имейте в виду - первый индекс массива - 0.

(var Arr : array[0;N] of Integer; n : Integer)

procedure SortInsert;

var

i, j, Temp : Integer;

begin

for i := 1 to n do begin

Temp := Arr [i];

j := i - 1;

while Temp < Arr [j] do begin

Arr [j + 1] := Arr [j];

Dec (j);

if j < 0 then

Break;

end;

Arr [j + 1] := Temp;

end;

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]