Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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




Пример 1

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

Решение

Для решения этой задачи можно описать пять целых переменных для данных чисел и еще одну − для их сум­мы. Обозначим исходные числа а1, а2, а3, а4 и а5, а их сумму - s. Тогда можно составить такую программу, используя функцию нахождения суммы пяти чисел:

Program Example_87;

Var а1, а2, аЗ, а4, а5, s: Integers;

Function Sum(х1, х2, хЗ, х4, х5: Integer):

Integer;

Begin

Sum:=x1+x2+x3+x4+x5;

End;

Begin

Writeln('Введите пять целых чисел');

Readln(а1, а2, а3, а4, а5);

{Вводим пять целых чисел}

s:=Sum (a1,а2, аЗ, а4,а5);

{Находим их сумму}

Writeln('их сумма равна ', s);

{Выводим результат на экран}

Readln;

End.

Пример 2

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

Решение

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

Одномерный массив - это фиксированное количество элементов одного типа, объединенных одним именем, при­чем каждый элемент имеет свой уникальный номер и но­мера элементов идут подряд. Например, введем 30 целых чисел от 25 до 54 и объединим их общим именем А.

1 2 3 29 30
А 25 26 27 53 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 - номер послед­него элемента, в качестве типа элементов может исполь­зоваться любой тип данных, кроме файлового.

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

Program Example_88;

Const n=30; {Количество элементов массива}

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

i,sum: Integer;

Begin

Writeln('Введите ', n, ' чисел');

For i:=1 To n Do

{Ввод массива с клавиатуры}

Readln(a[i]);

{Чтение i-гo элемента}

For i:=1 To n Do {Вывод массива}

Write(a[i]: 3);

{Вывод i-гo элемента}

sum:=0; {Начальное значение суммы}

For i:=1 To n Do sum:=sum+a[i];

{К уже найденной сумме прибавляем

i-й элемент}

Writeln('их сумма равна ',sum);

Readln;

End.

Пример 3

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

Решение

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

Program Example_89;

Const n=30; {Количество элементов массива}

Type myarray=Array[1..n] Of Integer;

Var A: myarray;

s: Integer;

{Значение этой переменной s будет равно

сумме всех элементов массива}

Procedure Init1(Var m: myarray);

Var i: Integer; {Переменная для работы с элементами

массива}

Begin

Writeln('Введите ', n, ' чисел');

For i:=1 To n Do

{Ввод массива с клавиатуры}

Readln(m[i]); {Чтение i-гo элемента}

End;

Procedure Print (m: myarray);

Var i: Integer

Begin

For i:=1 To n Do {Вывод массива}

Write(m[i]: 3);

{Вывод i-гo элемента}

Writeln;

End;

Function Summa (m: myarray): Integer;

Var i, sum: Integer;

Begin

sum:=0; {Начальное значение суммы}

For i:=1 To n Do sum:=sum+m[i];

{К уже найденной сумме прибавляем

i-й элемент}

summa:=sum;

End;

Begin

Init1(A); {Обращение к процедуре

формирования массива}

Print(A); {Вывод массива}

s:=Summa(A); {Нахождение суммы элементов}

Writeln('их сумма равна ',s);

{Вывод результата на экран}

Readln;

End.

 

При решении задач часто приходится заполнять мас­сивы (присваивать значения элементам). Рассмотрим не­сколько способов заполнения массивов.

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

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

Для получения случайных чисел практически во всех современных языках программирования имеется стандартная функция. В языке Паскаль имеется функция Random. Формулы для расчета случайного числа x различного типа в программе приведены в таблице:

 

Тип величины х Диапазон возможных значений Паскаль

Вещественный

0≤x<1 x:=Random
0≤x<A x:=Random*A
A≤x<B x:=A+Random*(B-A)

Целый

0≤x≤A x:=Random(A+1)
A≤x≤B x:=Random(B-A+1)

 

При каждом новом запуске программы с использовании функции Random будут генерироваться одни и те же случайные числа. Чтобы исключить это, необходимо записать (желательно в начале программы) оператор Randomize (без параметров), инициализирующий генератор случайных чисел.

Составим программу заполнения одномерного мас­сива с помощью генератора случайных чисел. Процедура вывода уже составлена ранее.

Program Example_90;

Const n=30; dd=51; {n - количество элементов

массива, dd используется в генераторе

случайных чисел}

Type myarray = Array [1..n] Of Integer;

Var A: myarray;

Procedure Init2 (Var m: myarray);

{Процедура заполнения (инициализации)

массива случайными числами}

Var :Integer;

Begin

For i:=1 To n Do m [i]:=-25+Random(dd);

{Функция Random выбирает случайное

число из отрезка от 0 до dd-1.

Оче­редному элементу массива будет

при­своена сумма выбранного случайного

числа и -25, таким образом, массив будет

заполняться случайными числами от -25

до -25+(dd-1), то есть до -26+dd}

End;

Procedure Print (m:myarray);

{процедура вывода (распечатки) массива}

Begin

Randomize;

{Инициализация генератора случайных чисел}

Init2(А);

{Обращение к процедуре заполнения массива}

Print(A);

{Обращение к процедуре вывода массива}

Readln;

End.

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

Program Example_91;

Const n=30;

{Количество элементов массива}

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(А);

{Обращение к процедуре заполнения массива}

Print(A);

{Обращение к процедуре вывода}

Readln(F);

End;

Close(F); Readln;

End.

     Четвертый способ − описание одномерного массива − типизированной константы:

Const

digit: array[0..9] of char=

('0', '1', '2', '3', '4', '5',

'6', '7', '8', '9');

DayOfWeek: array[0..6] of String =

('понедельник', 'вторник', 'среда',

'четверг', 'пятница', 'суббота');

Chislo: array[0..9] of byte=(0, 1, 2, 3,

4, 5, 6, 7, 8, 9).

Элемент массива может быть любого типа, кроме файлового. Напомним, что типизированные константы являются переменными, которым начальное значение присваивается в начале выполнения программы (см. §26).










Последнее изменение этой страницы: 2018-05-31; просмотров: 208.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...