Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие для учеников .doc
Скачиваний:
12
Добавлен:
18.12.2018
Размер:
2.27 Mб
Скачать

Пример 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