Автор: Пользователь скрыл имя, 07 Марта 2013 в 02:12, курс лекций
Лекция 1. Представление алгоритмов на языке Программирования ПаскальАВС.
Лекция 2. Построение линейных алгоритмов
Лекция 3. Алгоритмы, содержащие структуру ветвления.
Лекция 4. Алгоритмы, содержащие структурные операторы циклов.
...
Лекция 9. Файловый тип данных
Лекция 7.
Структурный тип данных.
В лекции рассматриваются следующие вопросы:
1.Понятие массива в языке программирования ПаскальАВС.
2.Объявление одномерного
3.Ввод элементов одномерного массива с клавиатуры и вывод на экран.
4.Задание элементов одномерного массива с помощью функции случайных чисел.
5.Процедуры
ввода и вывода элементов
6.Поиск и сортировка в одномерных массивах
7.Циклическая перестановка элементов в одномерном массиве
8.Одномерные массивы символов.
9.Понятие двумерного массива
10.Объявление двумерного массива в программе.
11.Процедуры ввода и вывода элементов двумерного массива.
12.Свойства элементов, лежащих на диагоналях.
1.Понятие массива в
языке программирования
Массивами пользуются тогда, когда необходимо обработать большой набор однотипных данных.
Массив в языке Паскаль – это набор фиксированного числа некоторых значений, которые называются компонентами (элементами). Все компоненты должны быть одного типа, который называют типом элементов или базовым типом. Каждый элемент массива имеет свой порядковый номер.
Каждому конкретному массиву
Количество индексов каждого элемента массива определяет размерность массива. Если каждый элемент массива имеет только один индекс, то такие массивы называются одномерными. Если каждый элемент массива имеет два индекса, то такие массивы называют двумерными. Количество элементов в массиве определяет его размер.
Данные типа массив относятся к классу структурных данных.
Рассмотрим одномерные массивы, т.е. каждый элемент имеет только один номер – это порядковый номер элемента в ряду.
2.Объявление одномерного массива в программе.
Одномерный массив объявляется в программе двумя способами:
1 способ: Var Имя массива : Array [n..m] of тип элементов; |
2 способ: Type Имя типа=Array [n..m] of тип элементов; Var Имя массива : Имя типа; |
Слова TYPE, ARRAY, OF – служебные слова, переводятся соответственно тип, ряд, из.
Имя типа и имя массива дает пользователь.
В квадратных скобках указывается с какого числа по какое число могут быть номера (индексы) элементов данного массива, поэтому n, m – это должны быть обязательно целые числа или целые константы.
3.Ввод элементов одномерного массива с клавиатуры и вывод на экран.
Задача. Дан одномерный массив, который состоит не более чем из n<=50 вещественных чисел. Элементы массива ввести с клавиатуры и найти сумму отрицательных элементов данного массива.
Program a20;
Type mas = Array[1..50] of Real;
Var a:mas;
s:Real;
i,n:Integer;
Begin
Writeln('Ввести размер массива, т.е.количество элементов массива');
Readln(n);
{Ввод самих элементов массива}
For i:=1 to n do
Begin
Writeln('Ввести a[',i,']');
Readln(a[i]);
End;
{Вывод элементов массива на экран: все элементы в одну строку}
Writeln('Массив a:');
For i:=1 to n do Write(a[i]:6:2);
Writeln;
{Вычисление суммы}
s:=0;
For i:=1 to n do if a[i]<0 Then s:=s+a[i];
{вывод ответа}
Writeln('Сумма=',s:8:2);
End.
4.Задание элементов одномерного массива с помощью функции случайных чисел.
Элементы массива можно задавать с помощью функции случайных чисел.
Задача. Дан одномерный массив, который содержит не более 20 вещественных чисел. Найти номер последнего отрицательного элемента в данном массиве. Если отрицательных элементов нет, вывести об этом сообщение.
Решение.
Будем по порядку просматривать все элементы массива.
Как только найдется отрицательный элемент, просмотр необходимо закончить и зафиксировать номер этого элемента в массиве. Чтобы зафиксировать нашелся отрицательный элемент или нет в массиве, введем переменную k. Этой переменной перед просмотром всех элементов массива дадим значение, например, TRUE. Когда найдется отрицательный элемент, то значение переменной k поменяем на FALSE. Если же в массиве отрицательных элементов не найдется, то переменная k не изменит свое значение и останется равной TRUE.
Такие переменные в программе называются флажками, дополнительными переменными, флюгерами.
Также введем переменную m, в которой сохраним номер отрицательного элемента.
Program a21;
Uses Crt;
Type mas=Array[1..20] of Real;
Var a:mas; i,n,m:Integer; k:Boolean;
Begin
Randomize;
Writeln('Ввести размер массива');
Readln(n);
{Ввод элементов массива с
помощью функции случайных
For i:=1 to n do a[i]:=Random-Random;
{Вывод элементов массива на экран}
Writeln('Массив a:');
For i:=1 to n do Write(a[i]:6:2);
Writeln;
{Решение задачи}
k:=TRUE;
m:=0;
For i := 1 to n do
If a[i]<0 Then begin m:=i; k:= FALSE; end;
{Вывод ответа на экран}
If k=True
Then Writeln('Отрицательных элементов нет')
Else Writeln('Первый отрицательный=',a[m]:5,' его номер=',m);
End.
5.Процедуры
ввода и вывода элементов одном
Поскольку в задачах на массивы всегда нужно вводить элементы массива и выводить этот массив на экран, создадим процедуры ввода элементов массива и вывода на экран. Этими процедурами будем пользоваться во всех остальных программах.
Задача. Дан массив, который содержит не более 40 вещественных чисел. Найти максимальный по величине элемент и указать его номер в массиве.
Решение. Решение задачи разобьем на несколько частей:
1.Ввод элементов массива.
2.Вывод элементов массива на экран.
3.Нахождение максимального элемента и вывод его на экран.
Каждую из этих частей можно представить как процедуру пользователя. В основной программе нужно будет записать только обращение к этим процедурам в перечисленном порядке.
Максимальный элемент будем находить следующим образом:
1.Сначала за максимум примем первый элемент массива (зафиксируем это так: max:=a[первый]) и зафиксируем его номер в переменной nom:=1.
2.Затем каждый следующий элемент массива будем сравнивать с тем, который находится в ячейке max, если элемент массива больше того элемента, который находится в ячейке max, то значение ячейки max меняем на значение большего элемента и значение ячейки nom также меняем на номер этого большего элемента.
3.После просмотра всех элементов массива в ячейке max будет находиться самый большой элемент, а в ячейке nom будет находиться его номер.
4.Вывод ответа на экран.
Процедуры пользователя записываются в разделе объявлений. Программа начинает выполняться с основной части, в которой необходимо записывать операторы обращения к процедурам в нужном порядке. Таким образом, будем иметь следующую программу на языке Паскаль.
Program a22;
{Раздел объявлений}
Uses Crt;
Type mas=Array[1..40] of Real;
{Процедура ввода элементов массива}
Procedure Wwod(k:Integer; Var c:mas);
{Это заголовок процедуры. После служебного слова Procedure записывается имя данной процедуры – это имя придумывает пользователь. В круглых скобках идут входные формальные параметры, т.е. параметры, значения для которых необходимо передать из основной программы. Далее после слова Var пишут выходные формальные параметры. Это такие параметры, которые передаются из процедуры в основную программу. В процедуре ввода переменная k обозначает количество элементов в массиве (это входной формальный параметр), переменная с – это создаваемый массив (выходной формальный параметр) }
Var i:Integer;
{После заголовка идет раздел объявлений. Здесь после слова Var записывают локальные формальные параметры, т.е. это параметры, которые используются только в теле процедуры и к основной программе не относятся.}
{Далее идет исполняемая
часть процедуры, которая
Begin
For i:=1 to k do c[i]:=100*(Random-Random);
End;
{Процедура вывода элементов массива на экран записана по тем же правилам}
Procedure Wuwod(k:Integer; c:mas);
Var i:Integer;
Begin
Writeln('Массив :');
For i:=1 to k do Write(c[i]:6:2);
Writeln;
End;
{Процедура поиска
Procedure Poisk(k:Integer; c:mas);
Var i:Integer; max:Real;
Begin
max:=c[1]; nom:=1;
For i:=1 to k do If max<c[i] Then Begin max:=c[i];nom:=i;End;
Writeln('Максимальный элемент=
End;
{Основная программа }
Var a:mas;
n:Integer;
{n – количество элементов в исходном массиве не может быть больше 40}
{a,n – фактические параметры}
Begin
Randomize;
Writeln(‘Ввести количество элементов массива’);
Readln( n );
{Обращение к процедуре Wwod. Здесь параметры n и a – фактические параметры, которые есть или будут в основной программе. Параметр n стоит первым после скобок в операторе обращения к процедуре, поэтому он свое значение передает формальному параметру k, который стоит первым в заголовке процедуры. Вторым в заголовке процедуры стоит параметр с, к тому же он стоит после слова var , значит параметр с передает свое значение из процедуры фактическому параметру а. }
Wwod(n,a);
Writeln(‘Заданный массив’);
{Далее идет оператор обращения к процедуре вывода элементов массива а на экран}
Wuwod(n,a);
{Далее обращаемся к процедуре Poisk, чтобы найти максимальный элемент и вывести его на экран }
Poisk(n,a); End.
Задача. Дан массив вещественных чисел. Размер массива N<=35. Расположить элементы массива так, чтобы сначала шли отрицательные элементы, затем нули, и в конце положительные элементы.
Решение.
Решение задачи будет состоять из следующих частей:
1.Ввод элементов массива.
2.Вывод элементов массива на экран.
3.Перестановка элементов массива в заданном порядке.
А)Для перестановки элементов массива создадим новый массив, который будет полностью состоять из нулей.
Б)Затем будем просматривать по порядку все элементы исходного массива. Те элементы, которые меньше 0, будем ставить в начало массива, а те, которые больше 0, в конец массива. Для этого введем два счетчика, которые будут считать и указывать номера отрицательных элементов и положительных элементов в новом массиве. Не занятые отрицательными и положительными элементами места останутся равными нули. Таким образом, нулевые элементы останутся между положительными и отрицательными.
Все части программы оформим в виде процедур пользователя.
В этой задаче необходимо дважды обратиться к процедуре вывода массива на экран. Первый раз, когда мы создадим заданный массив. Второй раз, когда переставим элементы массива в нужном порядке.
Таким образом программа на языке Паскаль будет иметь следующий вид:
Program a23;
{Раздел объявлений}
Uses Crt;
Type mas=Array[1..35] of Real;
{Процедура ввода элементов
Procedure Wwod(Var k:Integer; c:mas);
Var i:Integer;
Begin
For i:=1 to k do c[i]:=100*(Random-Random);
End;
{Процедура вывода элементов массива на экран}
Procedure Wuwod(k:Integer; c:mas);
Var i:Integer;
Begin
For i:=1 to k do Write(c[i]:6:2);
Writeln;
End;
{Процедура создания массива, который будет состоять из одних нулей}
Procedure Sosd(Var k:Integer; c:mas);
Var i:Integer;
Begin
For i:=1 to k do c[i]:=0;
End;
{Процедура перестановки
Procedure Poisk(k:Integer; c: mas; Var d:mas);
Var i,o,p:Integer;
Begin
о:=1;
{Для отрицательных
элементов введем счетчик о
и его начальное значение
P:=k;
{Для положительных
элементов введем счетчик Р
и его начальное значение
For i:=1 to k do Begin
If c[i]<0 Then Begin
D[o]:=c[i];
o:=o+1;
{Поскольку один элемент
отрицательный нашелся, то
End;
If c[i]>0 Then Begin
D[p]:=c[i];
p:=p-1;
{Поскольку нашелся
один положительный элемент,
End;
End;
{Основная программа}
Var a,b:mas;
n:Integer;
{n – количество элементов в исходном массиве не может быть больше 35}
Begin
Randomize;
Writeln('Ввести размер массива');
Readln(n);
{Обращение к процедуре ввода}
Wwod(n,a);
Writeln('Исходный массив :');
{Обращение к процедуре вывода}
Wuwod(n,a);
{Обращение к процедуре
Sosd(n,b);
{Обращение к процедуре,
в которой элементы
Poisk(n,a,b);
Writeln('Полученный массив :');
{Обращение к процедуре вывода нового массива на экран}
Wuwod(n,b);
End.
6.Поиск и сортировка в одномерных массивах
Рассмотрим несколько задач на сортировку элементов массива. Сортировка – это расположение элементов массива в заданном порядке, т.е. перестановка элементов внутри самого массива не заводя нового массива.
Информация о работе Лекции по "Языкам и методам программирования" (PascalABC)