Слайд 2
Простейшие данные
Структурированные данные
Простейшие данные – элементы данных,
являющиеся неделимыми (числа, строки, знаки). Для простейших данных существуют
стандартные типы (Integer,Real, Char, String, Boolean).
Структурированные данные – это структуры, состоящие из нескольких простейших данных. Определяются пользователем в программе при помощи двух конструкций:
Слайд 3
Массивы, записи
Массив – структура однотипных данных с индексированным
доступом.
Запись – структура данных с доступом по идентификатору.
Слайд 4
Определение
Массив – структура однотипных данных с индексированным доступом.
Каждый элемент массива получает один или несколько номеров, называемых
индексами. Индексы записываются в квадратных скобках через запятую.
Слайд 5
Виды массивов
Одномерные – каждый элемент массива получает два индекса
(пр. [2,3]).
Многомерные – каждый элемент получает более 2-х индексов (пр.
[1,1,k]).
Слайд 6
Описание массивов
Массив в языке Паскаль это сложный
тип данных, поэтому чаще всего его описывают в разделе
переменных.
Var <переем. массив>: array[<диапазон 1>..<диапазон N>]
Of <тип переменной>;
Слайд 7
Получение элементов массива
Каждый элемент массива — это
переменная, которой можно присваивать значения в операторах и функциях.
Для того, чтобы указать элемент массива, необходимо записать все его индексы.
<перем. массив>[<индекс>,..,<индекс N>]
Пример:
Spisok[1]:=’Иванов’;
Слайд 8
Ввод массива с клавиатуры
Массив нельзя ввести с
клавиатуры одной командой, для этого организуется цикл с параметром.
Для того чтобы обеспечить правильный ввод массива, необходимо соблюдать следующий алгоритм:
<приглашение к вводу массива>;
<ввод количества элементов массива>;
For i:=1 to <кол-во элементов> do
Begin
<приглашение к вводу i-го элемента>;
<ввод i-го элемента>;
End;
Слайд 9
Пример:
WriteLn (‘ввод списка студентов’);
WriteLn (‘введите количество студентов’);
ReadLn
(kolvo);
For i:=1 to kolvo do
Begin
WriteLn (i,’ ’);
ReadLn (spisok[i]);
End;
Слайд 10
Вывод массива на экран
Вывод в строку
При
выводе массива в строку нужно использовать Write, которая будет
находиться в цикле с параметром, а после цикла нужно поставить WriteLn.
Слайд 11
Пример:
For i:=1 to kolvo do
Write(spisok[i],’ ‘);
WriteLn;
Слайд 12
Вывод массива в столбец.
При выводе в столбец в
цикле указывается WriteLn, причем для массивов, содержащих числа, следует
также указывать количество знаков при выводе на экран.
Слайд 13
Пример:
For i:=1 to kolvo do
Write (i:2,’. ’,spisok[i]);
Слайд 14
Действия с массивами
Над массивами нельзя выполнять арифметические
действия (вычитать, складывать и др.). Все действия выполняются поэлементно.
Слайд 15
Пример:
Написать программу, которая выполняет поэлементное суммирование массивов A
и B.
Слайд 16
Program Summ;
Var A,B Array [1..10] of Integer;
Kolvo:Integer;
C: Array
[1..10] of Integer;
i: Integer;
Begin
WriteLn (‘введите количество элементов массивов’);
ReadLn (Kolvo);
WriteLn
(‘введите элементы маcсива A’);
For i:=1 to Kolvo do
begin
Write(i, ‘) ’);
ReadLn (A[i]);
end;
WriteLn (‘введите элементы маcсива B’);
For i:=1 to Kolvo do
begin
Write(i, ‘) ’);
ReadLn (B[i]);
end;
For i:=1 to Kolvo do
C[i]:= A[i]+B[i];
For i:=1 to Kolvo do
Writeln (C[i]:5);
End.
Слайд 17
Двухмерные массивы
Ввод построчно
;
;
Begin
ввода строки>;
;
Begin
;
;
End;
End.
Слайд 18
Ввод по столбцам
;
;
Begin
;
по строкам>;
Begin
;
;
End;
End
Слайд 19
Пример
Задача:
В одномерном массиве найти максимальный из отрицательных элементов
и поменять его местами с последним элементом массива.
Слайд 20
Описание переменных:
N - количество элементов в массиве;
a
- массив;
i - счетчик элементов;
j - индекс максимального отрицательного
элемента;
b - "буферная" переменная для обмена.
Слайд 21
Алгоритм решения задачи:
Присвоить j ноль. Это будет
сигналом о том, что отрицательных элементов вообще нет.
Если очередной
элемент массива меньше нуля и j = 0, то присвоить его индекс переменной j. Если он отрицательный, а j не равно 0, то если он больше, чем значение под j, переписать j на текущий индекс.
Если значение j не равно нулю, произвести обмен и вывести массив.
Слайд 22
Программа на языке Паскаль:
const N = 15;
var a: array[1..N] of integer; i, j: byte; b:
integer; begin randomize; for i:=1 to N do begin a[i] := random(100)-50; write(a[i],' '); end; writeln; j := 0; for i:=1 to N do if a[i] < 0 then if j = 0 then j := i else if a[i] > a[j] then j := i;
if j <> 0 then begin b := a[j]; a[j] := a[N]; a[N] := b; for i:=1 to N do write(a[i],' '); writeln; end else writeln('Отрицательных элементов нет'); end.
Слайд 23
Пояснения к программе
Процедура Randomize используется вместе с функцией Random. Она устанавливает
генератор случайных чисел в его последовательность из 232 псевдослучайных
чисел
Слайд 24
Randomize
Randomize для этого повторного установления использует время дня как
начальное значение, обеспечивая, таким образом, надежный метод создания непредсказуемой
последовательности чисел, даже если они часть предопределенной последовательности.
Слайд 25
Похожие команды
Random Генерирует случайное целое число или число
с плавающей запятой
RandomRange Генерирует произвольное число в пределах введённого диапазона
RandSeed Устанавливает
генератор случайного числа на следующее значение
Слайд 26
Пример2:
Сортировка через два массива
Задача:
Даны два массива с различным
количеством элементов. Перераспределить их элементы так, чтобы в первом
массиве были наименьшие из двух массивов, а во втором - наибольшие.
Слайд 27
Алгоритм решения задачи:
Задача решается сортировкой через два
массива. В коде ниже выбран метод пузырька.
В результате в
одном массиве оказываются наименьшие элементы, а во втором - наибольшие. Причем в каждом массиве элементы отсортированы по возрастанию.
Слайд 28
Программа на языке Паскаль:
const M = 20;
N = 15; var a1: array[1..M] of word;
a2: array[1..N] of word; i, j, k: byte;
begin randomize; write ('Исходный массив №1: '); for i := 1 to M do begin a1[i] := random(256); write (a1[i],' '); end;
Слайд 29
Продолжение программы1
writeln; write ('Исходный массив №2: '); for
i := 1 to N do begin a2[i] :=
random(256); write (a2[i],' '); end; writeln; for i := 1 to M+N-1 do begin for j := 1 to M+N-i do begin
if j < M then begin if a1[j] > a1[j+1] then begin k := a1[j]; a1[j] := a1[j+1]; a1[j+1] := k end; end