TURBO PASCAL

Новости           

Программы

Turbo Pascal

Игры

Документация

"Странности"

FAQ

Ссылки

Благодарности

Гостевая книга

От автора

Одномерные массивы. Работа с элементами

Пример

Найти сумму 30 целых чисел.

Решение

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

Одномерный массив - это фиксированное количество элементов одного и того же типа, объединенных одним именем, где каждый элемент имеет свой номер.

Например, введем 30 целых чисел от 25 до54 и объединим их общим именем А

№ А
1 25
2 26
3 27
... ...
29 53
30 54

Имя А - это общее имя для всех элементов. Элементы массива - это целые числа, их 30.

Опишем в разделе типов свой тип - одномерный массив, состоящий из 30 целых чисел.

Type myarray = Array [1..30] Of Integer.

Напомним, что раздел типов, начинается со служебного слова TYPE, после этого идет имя нового типа и его описание. Между именем типа и его описанием ставится знак "равно" (в разделе переменных между именем переменной и её описанием ставится двоеточие). Тогда:

myarray - это имя нового типа;

Array - служебное слово (в переводе с английского означает "массив", "набор");

[1..30] - в квадратных скобках указывается номер первого элемента, затем, после двух точек, номер последнего элемента массива, пусть в этом примере первый элемент имеет номер 1, а последний - номер 30;

Of - служебное слово (в переводе с английского -"из" );

Integer - тип всех элементов массива.

Таким образом, одномерный массив описывается следующим образом:

Array[n1..n2] Of <тип элементов>;

где n1 - номер первого элемента, n2 - номер последнего элемента, в качестве типа элементов может использоваться любой тип данных, кроме файлового. Так как каждый элемент имеет свой номер, то к каждому элементу можно обращаться непосредственно. Для того, чтобы обратиться к i-у элемент этого массива, необходимо записать:

A[i] - сначала имя массива, а в квадратных скобках указывается номер элемента, к которому обращаемся, - i. Например, обращаемся к первому элементу массива А - А1[1], а к пятому - А[5].

Пример: Составить программу нахождения суммы элементов массива.

Решение

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

Program Example-37;
Const n = 30; {n - это количество элементов массива }
Type myarray = Array [1...n] Of Integer;
Var A : myarray;
s : Integer; {s - значение этой переменной будет равно сумме всех элементов массива}

Procedure Init1(Var m : myarrfy);
Var i : Integer; {i - это переменная для работы с элементами массива}
Begin
Writen ('введите',n,'чисел');
For i:=1 To n Do {ввод массива с клавиатуры}
Readln(m[i]); {чтение i-го элемента}
End;

Procedure Print(m: myarray);
Var i : Integer;
Begin
For i:=1 To n Do {вывод массива}
Write(m[i]:3); {вывод i-го элемента}
Writeln;
End;

Function Sum(m: myarray): Integer;
Var i, sum : Integer;
Begin
sum:=0 {начальное значение суммы}
For i:=1 To n Do {её нахождение}
sum:=sum+m[i]; {к уже найденной сумме первых (i-1) элементов прибавляем i-ый элемент}
End;

Begin
Init1(A); {обращение к процедуре формирования}
Print (A); {вывод массива}
s:=Sum (A); {нахождение суммы элементов}
Writeln ('их сумма равна ',s);{вывод результата на экран}
Readln;
End.

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

Первый способ задания одномерного массива - это задание с клавиатуры (он был рассмотрен в примере выше - процедура Init1).

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

Program Example-38;
Const n = 30; dd = 51; {n - это количество элементов массива, dd - для генератора случайных чисел}
Type myarray = Array [1..n] Of Integer;
Var A : myarray;

Procedure Init2(Var m : myarray);
{процедура заполнения (инициализации) массива случайными числами}
Var i : Integer;
Begin
For i:=1 To n Do
m[i] := -25 + Random(dd);
{Random выбирает случайное число из отрезка от 0 до dd-1, тогда i-му элементу массива будет присвоена сумма выбранного случайного числа и -25, таким образом, массив будет заполняться случайными числами от -25 до -25+(dd-1), то есть до -26+dd}
End;

Procedure Print (m : myarray); {процедура вывода (распечатки) массива}

...

Begin
Randomize; {включение генератора случайных чисел}
Init2(A); {обращение к процедуре заполнения массива}
Print(A); {обращение к процедуре вывода заполненного массива}
Readln;
End.

Третий способ задания - это чтение чисел из файла. Можно заранее создать типизированный файл одномерных массивов (например, по тридцать элементов), а затем считывать из него сразу целый массив и работать с ним. Но мы воспользуемся текстовым файлом, так как его создавать намного удобнее. Пусть в файле записано несколько строк, а в каждой из них по 30 целых чисел. Тогда вся программа может быть такой:

Program Example-39;
Const n = 30; {n - это количество элементов массива,}
Type myarray = Array [1..n] Of Integer;
Var A : myarray;

F : text;

 

Procedure Init3 (Var m : myarray); {процедура заполнения (инициализации) массива}
Var i : Integer;
Begin
For i:=1 To n Do
Read (f, m[i]) {чтение из файла очередного числа}
End;

Procedure Print (m:myarray); {процедура вывода (распечатка) массива}

...

Begin {связываем файловую переменную с конкретным внешним файлом}
Assign (F,'...');
Reset(F); {открываем его для чтения }
While Not EOf (F) Do
Begin {считаем очередную строку}
Init3(A);{обращение к процедуре вывода }
Readln(F);
End;
Readln;
End.

Работа с элементами массива (разбор на примерах)

При работе с элементами массивов можно выделить несколько видов задач.

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

Такая задача была рассмотрена выше. Могут быть различные модификации - найти сумму с заданным свойством.

Пример

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

Решение

Воспользуемся функцией Sum из программы Example-37, но будем суммировать не все элементы, а только те, которые удовлетворяют данному условию, то есть только те, которые делятся нацело на заданное число (остаток равен 0).

Function Sum (m : myarray) : Integer;
Var i, s, k : Integer;
Begin
Writeln ('введите число');
Readln(k);
s:=0; {начальное значение суммы}
For i:=1 To n Do {нахождение суммы}
If m[i] Mod k=0 Then s := s + m[i]; {если элемент кратен k,то прибавляем его к сумме}
sum:=s;
End;

Всё остальное можно оставить без изменений.

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

Пример

Найти номера чётных элементов.

Решение

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

Procedure Solve (m: myarray);
Var i : lnteger;
Begin
For i:=1 To n Do
If m [i] Mod 2=0 Then Write (i: 5);
End;

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

 

Пример

Найти количество положительных и отрицательных элементов в данном массиве.

Решение

Опишем процедуру, которой будем отправлять три параметра - массив и два счётчика, один для элементов, больших нулю, а второй - для меньших нулю, элементы, равные нулю, учитывать не будем.

Procedure Quantity (m: myarray: Var kl , k2: lnteger);
Var i : lnteger;
Begin
k1 := 0; k2 := 0; {начальные значения}
{просматриваем все элементы массива}
For i:=1 To n Do
If m [i]>0 Then lnc (k1)
Else lf m [i] <0 Then lns(k2);
End;

Есть ли в данном массиве элементы с данным свойством или найти первый (последний) элемент, отвечающий заданным условиям.

 

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

Пример

Есть ли отрицательный элемент в массиве?

Решение

Начинаем с первого элемента (i = 1). Пока не просмотрен последний (i<=n) и не найден отрицательный (m [i]>=0), будем переходить к следующему (inc (i)). Таким образом, мы закончим просмотр в одном из двух случаев: первый - просмотрели все элементы и не нашли отрицательный, тогда i>n, второй - нашли нужный, при этом i<=n. Опишем функцию, значение которой истина (True), если такой элемент есть, и ложь (False), если его нет.

Function Controll (m: myarray): Boolean;
Var i : Integer;
Begin
i := 1;
While (i<=n) And (m |i|>0) Do Inc(i);
Control1:=(i<=n)
End;

Пример

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

Решение

Последний отрицательный - это первый отрицательный элемент, если начать просмотр с конца. Если очередной элемент не является отрицательным , то нужно уменьшать значение текущего индекса, пока он не станет меньше номера первого элемента или не будет найден отрицательный элемент. Таким образом, можно модифицировать предыдущую функцию. Но поскольку надо найти номер элемента, тип результата будем целым.

Договоримся, что если такого элемента нет, то значение функции будет равно 0.

Function Control2 (m: myarray): Integer;
Var i : Integer;
Begin
i:=n;
While (i>=1) And (m |i|>0) Do Des(i);
If i<1 Then Control2:=0
Else Control2:=i;
End;

Содержание

 

На главную страницу
(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

    Rambler's Top100 PROext: Top 1000
    Rambler's Top100 Яндекс цитирования
Hosted by uCoz