- •ВВЕДЕНИЕ
- •1. ЭЛЕМЕНТЫ ЯЗЫКА ПАСКАЛЬ. ЛИНЕЙНЫЕ ПРОГРАММЫ
- •Стандартные функции
- •Функции преобразования типов
- •Порядок вычислений
- •Заданиe 1. Вычислить арифметические выражения
- •2. СТРУКТУРИРОВАННЫЕ ОПЕРАТОРЫ
- •2.1. Составной оператор
- •2.2. Условные операторы
- •2.3. Селективный оператор
- •2.4 Операторы цикла
- •Задание 2.1
- •Задание 2.2
- •Задание 3*
- •4. ПОДПРОГРАММЫ В ПАСКАЛЕ
- •4.1. Процедуры
- •4.2. Функции
- •Задание 4
- •5. МАССИВЫ
- •5.1. Одномерные масивы
- •5.2. Двумерные массивы
- •Задания 5.1
- •Задания 5.2
- •ГЛАВА 7. СОРТИРОВКА МАССИВОВ
- •Сортировка посредством простого выбора
- •Сортировка обменом (метод «пузырька»)
- •Сортировка включением
- •Быстрая сортировка
- •Задание 7.
5. МАССИВЫ
Язык программирования Паскаль предлагает некоторые методы определения типов данных: скалярных (простых) и структурированных. Скалярные типы мы уже рассмотрели: целые, вещественные, символьные, булевы.
Структурированные типы базируются на скалярных типах и могут содержать их различные комбинации. Возможно использование следующих структур, образованных из простых типов: массив, запись, множество, строка и последовательность (файл).
При решении научно-технических задач возникает совокупность значений, организованных в форме вектором и матриц.
Аналогом в программировании на языке паскаль является массив. Все элементы (компоненты) массива принадлежат одному типу. Тип компонент массива может быть любым, число элементов задается при его описании и в дальнейшем не изменяется.
К любому элементу массива можно обратиться, задав индекс, который однозначно определяет позицию элемента в массиве. Тип индекса может быть одним из упорядоченных типов, т.е. любым скалярным типом, кроме real.
5.1. Одномерные масивы
Одномерный массив – это фиксированное количество элементов одного и того же типа, объединённых одним именем, где каждый элемент имеет свой номер. Например, введём 30 целых чисел от 25 до 54 и объединим их одним именем А.
N A
1 25
2 26
……
2953
3054
45
Описываем массив в разделе описания типов: type MyArray=array[1..30] of integer;
Здесь MyArray – имя нового типа и его описание, array – служебное слово (на англ. языке означает «массив»), [1..30] – номера первого и последнего элемента, integer – тип всех элементов массива.
В общем виде задание массива выглядит следующим образом: array [n1..n2] of <тип элементов>, каждый элемент имеет свой номер, и к каждому можно обратиться непосредственно. Чтобы обратиться к элементу массива нужно записать A[i]. Например, для обращения к первому элементу необходимо записать A[1].
При решении задач с массивами могут возникать несколько видов задач. Основные типы задач: нахождение суммы элементов, нахождение комбинации элементов с заданным свойством, работа с несколькими массивами (вычисление произведения векторов).
Рассмотрим программу нахождения суммы элементов массива. Опишем две процедуры (формирование и вывод) и функцию, нахождения суммы элементов, которые будем использовать в основной
программе.
Значения элементов массива будем вводить с клавиатуры.
Program Example1;
сonst n=30; {количество элементов массива} type MyArray= array [1..n] of integer;
var A : MyArray;
S : Integer; {значение суммы} Procedure Init1(var m : MyArray); var i : integer;
begin
writeln(‘Введите ‘,n,’ чисел’);
for i:=1 to n do readln(m[i]); {ввод массива с клавиатуры}
end;
Procedure Print(m : MyArray); var i: integer;
begin
46
for i:=1 to n do write(m[i]:3); {вывод массива} 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.
Рассмотрим примеры программ, иллюстрирующие работу с элементами одномерного массива.
1. Нахождение суммы элементов, кратных заданному числу.
Function Sum(m : MyArray) : integer; var i,s,k: integer;
begin
writeln(‘Введите число’); read(k);
s:=0; {начальное значение суммы} for i:=1 to n do
if (m[i] mod k =0) then S:=S+m[i]; {если элемент кратен k, то прибавляем его к сумме}
Sum:=S;
end;
47
2. Поиск номера четных элементов.
procedure Solve (m : Myarray); var i: integer;
begin
for i:=1 to n do
if (i mod 2 =0) then write(i:5);
end;
3.Поиск количество положительных и отрицательных элементов
взаданном массиве.
procedure Quantity(m : MyArray, var k1,k2 : integer); var I : integer;
begin K1:=0; K2:=0;
for i:=1 to n do
if m[i]>0 then inc(k1) else
if m[i]<0 then inc(k2);
end;
4. Проверка наличия отрицательных элементов в массиве.
function Control(m: MyArray): boolean; var i: integer;
begin i:=1;
while (i<=n) and (m[i]>0) do inc(i); Control:= (i<=n);
end;
5. Изменение значения некоторых элементов.
Пример. Заменить отрицательные элементы на противоположные по знаку.
48