Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Урок из серии Pas ABC.doc
Скачиваний:
10
Добавлен:
17.08.2019
Размер:
694.78 Кб
Скачать

Вывод значений элементов массива на экран

Вывод значений элементов массива на экран выполняется, как и ввод, поэлементно в цикле. Для вывода будем использовать операторы Write или Writeln. В качестве входных параметров будем передавать процедуре не только массив, но и количество элементов, которые надо вывести, начиная с первого (это понадобится нам, когда мы будем удалять и добавлять элементы в массиве).

Procedure Print(n: integer; m : myarray);

{Процедура вывода массива на экран}

Var i : Integer;

Begin

For i:=1 To n Do

Write(m[i]:3); {вывод i-го элемента}

Writeln;

End;

Пример 1. Заполнить массив с клавиатуры и вывести его на экран.

Решение.

В программе будет использоваться две процедуры: процедура Init1 (заполнение массива с клавиатуры) и процедура Print (вывод массива на экран).

Program primer1;

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;

Begin {main}

Init1(A); {процедуре заполнения массива}

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

Readln;

End.

Пример 2. Заполнить массив из текстового файла и вывести на экран. В текстовом файте несколько строк, в каждой строке по 30 чисел.

Решение.

Program primer2;

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

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

Var A : myarray;

F:text;

Procedure Init4(Var m : myarray);

{Процедура заполнения (инициализации) массива из файла}

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

Begin

For i:=1 To n Do {ввод массива из файла}

Readln(f, 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;

Begin {main}

{связываем файловую переменную с конкретным внешним файлом}

Assign (F,'...');

Reset(F); {открываем его для чтения }

While Not EOf (F) Do

Begin

Init3(A);{заполняем массив числами из текущей строки файла}

Print(A) {выводим массив на экран}

readln(F);{в файле переходим в начало следующей строки}

End;

Readln;

End.

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

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

Урок 22 из серии: "Язык программирования Паскаль"

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

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

Пример 1. Найти сумму элементов массива.

Решение.

Воспользуемся написанными ранее процедурами для ввода и вывода массива. Массив заполним случайными числами.

Добавим функцию Sum для нахождения суммы элементов массива. В алгоритме переменная i - является счетчиком элементов массива, s - сумма элементов массива, она вычисляется по реккурентной формуле s = s+m(i).

Обработка элементов массива производится в цикле. Перед циклом сумме присваивается начальное значение равное нулю: sum := 0. В теле цикла записывается рабочая формула для накопления суммы: s := s + m[i].

Текст функции получится таким:

Function Sum(m: myarray): Integer;

Var i, s : Integer;

Begin

sum:=0;

For i:=1 To n Do

{к уже найденной сумме первых (i-1) элементов прибавляем i-ый элемент}

s:=s+m[i];

sum:=s;

End;

Составим программу. В ней воспользуемся для заполнения массива процедурой Init2, которая заполняет массив случайными числами из заданного интервала.

Program primer_1;

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

Type

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

Var C : myarray;

s : Integer; {s - сумма всех элементов массива}

Procedure Init2(a,b: integer; Var m : myarray);

{Процедура заполнения массива случайными числами из интервала [a,b] и вывода на экран}

...

Function Sum(m: myarray): Integer;

{Функция для нахождения суммы элементов массива}

...

Begin {main}

{заполняем массив случайными числами из интервала [-25, 25] и выводим на экран}

Init2(-25, 25, C);

s:=Sum(C); {находим сумму элементов}

Writeln ('Их сумма равна ',s);{выводим результат}

Readln;

End.

Для нахождения произведение элементов массива, переменной P перед циклом присваиваем начальное значение равное 1: P:= 1. В теле цикла ставится рабочая рекуррентная формула для нахождения произведения: P:= P* C[i].

Пример 2. Найти сумму элементов массива, кратных заданному числу Решение. Воспользуемся функцией Sum из предыдущей программы, но будем суммировать не все элементы, а только те, которые делятся на заданное число (остаток от деления равен 0)

Function Sum(m : myarray) : Integer;

Var i, s, k : Integer;

Begin

Writeln ('введите число');

Readln(k);

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

For i:=1 To n Do

{если элемент кратен k,то прибавляем его сумме}

If m[i] Mod k = 0 Then s := s + m[i];

sum:=s;

End;

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

Вы познакомились с алгоритмом суммирования элементов массива. На следующем уроке продолжим изучение алгоритмов для одномерных массивов.

Урок 23 из серии: "Язык программирования Паскаль"

На этом уроке рассмотрим алгоритмы поиска элемента в одномерном массиве. Эти алгоритмы очень похожи на обработку последовательностей (поиск, выборка и т.д.).

Отличие заключается в том, что в массиве одновременно доступны все его компоненты. Такой доступ называется параллельным.

Рассмотрим несколько примеров.

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

Решение.

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

Procedure Solve(m : myarray);

Var i: Integer;

Begin

For i:=1 To n Do

If m[i] Mod 2 = 0 Then Write(i:5);{если элемент четный, то вывести на экран}

End;

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

Решение.

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

Начинаем с первого элемента (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;

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

Решение.

Последний отрицательный - это первый отрицательный элемент, если начать просмотр с конца.

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

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

Договоримся, что если такого элемента нет, то значение функции будет равно 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;

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

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

Урок 24 из серии: "Язык программирования Паскаль"

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

Переменные:

m - массив;

n - количество элементов в массиве;

i - переменная цикла;

max - значение наибольшего элемента;

numer_max - его порядковый номер.

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

max := m[1]; {Cчитать 1-й элемент максимальным}

numer_max := 1; {Запомнить номер максимального элемента}

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

Сравнение очередного элемента массива с максимальным осуществляется оператором if m[i] > max then. Если очередной элемент массива больше, чем максимальный, то следует считать его значение максимальным и запомнить его индекс. Данный фрагмент кода записывается таким образом:

for i:= 2 to n do

begin

if m[i]> max then

begin

max:= m[i];

numer_max:= i;

end;

end;

Текст процедуры получится таким:

procedure Maximum(m:myarray; var max,numer_max:integer);

{

Процедура нахождение максимального элемента массива и его номера.

m : имя массива;

max : значение максимального элемента;

maxi : номер максиального элемента в массиве.

}

var

i: integer;

begin

max:=m[1];

numer_max:=1;

for i:= 2 to n do

begin

if m[i]> max then

begin

max:= m[i];

numer_max:= i;

end;

end;

end;

Составим программу. В ней воспользуемся для заполнения массива уже знакомой процедурой - Init2, которая заполняет массив случайными числами из заданного интервала.

program Max_elem;

const

n = 20;

type

myarray= array[1..count] of byte;

var

m:myarray;

i, max, maxi: integer;

Procedure Init2(a,b: integer; Var m : myarray);

...

procedure Maximum(m:myarray; var max,numer_max:integer);

...

begin {main}

init2(0, 50, m);

maximum(m, max, maxi);

writeln('Максимальный элемент - ', max);

writeln('Он расположен на ',maxi, ' месте.');

end.

Для поиска минимального элемента и его порядкового номера меняем обозначения:

min - значение наименьшего элемента;

numer_min - его порядковый номер.

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

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

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

Урок 25 из серии: "Язык программирования Паскаль"

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