Слайд 1
«Структурированные
типы данных»
Автор проекта
Тихонина Нина Григорьевна
Методика преподавания темы:
Слайд 2Данные - это общее понятие всего того, с чем работает компьютер.
Программа, написанная на языке Паскаль, обрабатывает данные, то есть является описанием последовательности действий, которые надо осуществить с некоторой последовательностью данных.
Данные
Слайд 3Целые
Вещественные
Символьные
Логические
Простые типы данных
Целые
Вещественные
Символьные
Логические
Слайд 4Структурированные типы данных
Структурированными данными называют такие данные, которые состоят из других
типов данных. Структурированные типы данных определяют наборы однотипных или разнотипных компонент.
К ним относятся, в частности, переменные типов:
Array - массивы (табличные данные);
String – строковые величины;
Record – данные типа запись;
Set – данные типа множество;
File – данные типа файл.
Любой из структуированных типов данных характеризуется множественностью образующих этот тип элементов. Переменная или константа структуированного типа всегда имеет несколько компонент. Каждая из этих компонент, в свою очередь, может принадлежать структуированному типу, что позволяет говорить о возможной вложенности типов.
Слайд 5Строки
Множества
Записи
Файлы
Одномерные
массивы
Двумерные
массивы
РАЗДЕЛЫ РАБОТЫ
Структурированные
типы данных
Слайд 6Одномерные массивы
Массив - это поименованная совокупность однотипных элементов, упорядоченных по индексам,
определяющим положение элемента в массиве.
1
2
3
4
5
6
7
8
Значение элемента массива
Индекс элемента массива
Слайд 7Var :array[тип индекса] of
Примеры:
I. var
A : array [1..7]
of integer;
D : array [1..17] of string;
S : array [‘A’..’Z’] of ;
Описание массива
II.
Const m=10;
Var a : array [1.. m] of integer;
III.
Type t=array[1..10] of integer;
Var a : t;
Слайд 8Ввод элементов массива (заполнение)
For i:=1 to 7 do
A[i]:=i;
For i:=1
to 7 do
A[i]:=sqr(i);
For i:=1 to 7 do
A[i]:=’*’;
Как в данном случае должен быть описан массив?
For i:=1 to 7 do
readln (A[i]);
for i:=1 to 7 do
begin
write (‘A[‘,i, ‘]=‘);
readln (A[i]);
end;
Randomize;
For i:=1 to n do
Begin
a[i]:=random(10);
Writeln (a[i]);
End;
Слайд 9Вывод элементов массива
а) в столбик:
For i:=1 to 7 do
Writeln(a[i]:4:2);
б) в строку
For i:=1 to 7 do
Write(a[i]:4:2);
Типовые алгоритмы обработки массива
Вычисление суммы, произведения элементов массива
Выбор по условию
Изменение элементов массива удовлетворяющих условию
Нахождение максимального и минимального элементов массива
Слайд 10Суммирование элементов массива
осуществляется за счёт поочерёдного добавления слагаемых:
Определяется ячейка памяти
(переменная s),
в которой будет последовательно накапливаться
результат суммирования
Присваивается переменной s начальное значение 0
- число, не влияющее на результат сложения
Для каждого элемента массива из переменной s
считывается её текущее значение и складывается
со значением элемента массива;
полученный результат присваивается переменной s.
Алгоритм нахождения суммы элементов массива
Слайд 11Алгоритм нахождения суммы элементов массива
Основной фрагмент программы:
s:=0;
for
i:=1 to n do s:=s+a[i];
Слайд 12Program Summa;
const n=7;
var a:array [1..n] of real;
S:real;
i:integer;
begin
write (‘введите 7 элементов массива,
через пробел’);
For i:=1 to n do
readln(a[i]);
S:=0;
For i:=1 to n do
S:=S+a[i];
writeln;
write(‘Сумма всех элементов массива =’,S);
end.
Вычисление суммы элементов массива
Слайд 13Изменение элементов массива удовлетворяющих условию
For i:=1 to N do
If (условие) then a[i]:=значение;
Изменения:
a [ i ] :=5 – заменить i-ый элемент на число 5
a [ i ] := - a [ i ] – заменить i-ый элемент на противоположный по знаку
a [ i ] := a [ i ] * 2 – удвоить каждый элемент массива
a [ i ] := a [ i - 1]+3 –заменить i-ый элемент предшествующим плюс 3
Слайд 14Выбор по условию
…
k:=0; s:=0; p:=1;
for i:=1 to 10 do
if
{условие} then
begin
k:=k+1; s:=s +a[i] ; p:=p*a[i] ;
end;
…
Что считает программа при заданном условии?
Слайд 151) Взять верхнюю карточку, записать на доске
(запомнить) число как наибольшее.
2) Взять
следующую карточку, сравнить числа. Если
на карточке число больше, то записать это число.
Нахождение наибольшего числа
в стопке карточек с записанными числами:
Повторить действия, описанные в пункте 2 для всех
оставшихся карточек
Алгоритм нахождения наибольшего элементов массива
Слайд 16…
max:= a[1]; min:= a[1];
for i:=1 to n do
begin
if a[i]
> max then begin max:= a[i]; nmax:=i; end;
if a[i] < min then min:= a[i];
end;
…
Нахождение максимального и минимального элементов массива
Слайд 17Алгоритм сортировки элементов массива
1. В массиве выбирается максимальный элемент
2. Максимальный и
первый элемент меняются местами
(первый элемент считается отсортированным)
3. В неотсортированной части массива снова выбирается
максимальный элемент; он меняется местами с первым
неотсортированным элементом массива
Действия пункта 3 повторяются с неотсортированными
элементами массива, пока не останется один
неотсортированный элемент (минимальный)
Сортировка элементов массива по убыванию
выбором осуществляется следующим образом:
Слайд 18program n_8;
var n, i, j, x, imax: integer;
a:array[1...10] of integer;
begin
for i:=1 to 10 do read (a[i]);
for i:=1 to 10 do write (a[i],` `);
for i:=1 to 9 do
begin
imax:=i;
for j:=i+1 to 10 do if a[j]>a[imax] then imax:=j;
x:=a[i];
a[i]:=a[imax];
a[imax]:=x
end;
for i:=1 to 10 do write (a[i],` `);
end;
Программа сортировки элементов массива
Слайд 19Программа удаления элемента с номером k из массива
…
begin
write (‘введите индекс удаляемого
элемента’);
readln(k);
For i:=k to n-1 do
b[i]:=b[i+1];
For i:=1 to n-1 do
Write (b[i]:4);
…
Программа вставки элемента
с номером k в массив
…
begin
writeln (‘введите индекс вставляемого элемента’);
readln(k);
For i:=n+1 downto k do
b[i]:=b[i-1]; b[k] :=min;
For i:=1 to n+1 do
Write (b[i]:4);
…
Вставить на k-е место массива элемент, равный наименьшему элементу массива.
Слайд 201. В классе 20 учеников писали диктант по русскому языку. Напишите
программу, подсчитывающую количество двоек, троек, четвёрок и пятёрок, полученных за диктант.
2. Напишите программу, которая вычисляет среднюю за неделю температуру воздуха. Исходные данные вводятся с клавиатуры.
Задачи для самостоятельной работы
Слайд 213. Запишите на языке Паскаль программу решения задачи.
Объявлен набор в
школьную баскетбольную команду. Известен рост каждого из N учеников, желающих попасть в эту команду.
Подсчитайте количество претендентов, имеющих шанс попасть в команду, если рост игрока команды должен быть не менее 170 см.
Считайте рост претендента в команду случайным числом из диапазона от 150 до 200 см, а число претендентов n = 50.
Слайд 224. В целочисленных массивах a и b содержатся длины катетов десяти
прямоугольных треугольников:
a[i] - длина первого катета,
b[i]—длина второго катета i-го треугольника.
Найдите треугольник с наибольшей площадью. Выведите его номер, длины катетов и площадь. Предусмотрите случай, когда таких треугольников несколько.
Задачи
5. Занесите информацию о десяти европейских странах в массивы n (название страны), к (численность населения), s (площадь страны). Выведите названия стран в порядке возрастания плотности их населения.
Слайд 236. Запишите на языке Паскаль программу решения задачи.
В некотором населённом
пункте N домов. Известно, сколько людей проживает в каждом из домов.
Исходные данные (количество жильцов) представить с помощью линейной таблицы А, содержащей N элементов: A[1] - количество жильцов дома 1, A[2] - количество жильцов дома 2, …, A[N] - количество жильцов дома N.
В общем случае А[i] — количество жильцов дома i, где i принимает все значения от 1 до n (i =1,n). Результат работы обозначить через s.
Считайте количество жильцов дома случайным числом из диапазона от 50 до 200 человек, а число домов n = 30.
меню
Слайд 24Двумерные массивы
Двумерный массив можно представить себе в виде таблицы, в которой
все строки и столбцы пронумерованы.
Каждый элемент такого массива имеет два индекса:
Первый индекс – это номер строки;
Второй индекс – номер столбца.
Слайд 25Const n=4;
m=5;
Var A :array
[1..n, 1..m] of integer;
Описание двумерных массивов
A [2,4]
A [4,2]
Type mas = array[1..5] of array[1..10] of integer;
Type mas = array[1..5, 1..10] of integer;
Var A:mas;
Слайд 26Заполнение двумерного массива
Методов заполнения множество. Основные - это путем ввода данных
с клавиатуры, с помощью случайных чисел и вычислений по формулам.
Для формирования массива используется два вложенных цикла. Первый цикл перебирает строки, а второй – столбцы.
For i:=1 to n do
for j:=1 to m do
readln (a[i , j]);
С клавиатуры
Слайд 27Заполнение двумерного массива
For i:=1 to n do
for j:=1
to m do
a[i , j]:=random(100);
For i:=1 to n do
for j:=1 to m do
a[i , j]:=i*j;
Случайными числами от 0 до 100
Произведением индексов
For i:=1 to n do
for j:=1 to m do
a[i , j]:=random(100)+30;
Случайными числами от ___ до ___?
For i:=1 to n do
for j:=1 to m do
a[i , j]:=sqr(i*j);
Слайд 28Вывод двумерного массива
For i:=1 to n do
begin
writeln;
end;
for j:=1 to m do
write (a[i , j]);
Слайд 29Задача 1. Создать программу для формирования таблицы умножения (таблицы Пифагора).
Вывод массива:
Слайд 30Задача №1
Составить программу, которая в двумерном массиве случайных чисел находит в
каждой строке наибольший элемент и записывает его в одномерный массив.
m – количество строк в двумерном массиве и длина одномерного массива;
n – количество столбцов;
A[1..m,1..n] - двумерный массив;
B[1..m] – одномерный массив
max – вспомогательная переменная для нахождения наибольшего элемента в каждой строке.
Слайд 31Задача №1
Program max_str;
Const
m=5; n=6;
var i,j:byte;
a: array [1..m, 1..n]
of integer;
b: array [1..m] of integer;
max: integer;
begin
randomize;
for i:=1 to m do
begin
for j:=1 to n do
begin
a[i,j]:=random(100);
write(a[i,j]:4);
end;
writeln;
end;
writeln ('Массив из максимальных значений в строках:');
for i:=1 to m do
begin
max:=a[i,1];
for j:=2 to n do
begin
if a[i,j]>max then max:=a[i,j];
end;
b[i]:=max;
write (b[i]:4);
end;
readln;
end.
Слайд 32Главная диагональ
a11
a22
a33
a44
a55
Удовлетворяет неравенству
i < j
Удовлетворяет неравенству
i > j
1
Слайд 33Побочная диагональ
a15
a24
a33
a42
a51
Удовлетворяет неравенству
i+jn+1
1
2
Слайд 34Условия выбора фрагментов массива
a11
a22
a33
a44
a55
1
2
3
4
5
1 2 3 4 5
a42
a51
a24
a15
(i+j(i+j>n+1) And (i
(i+j>n+1) And (i>j)
(i+jj)
Слайд 35Обработка элементов главной диагонали
Если нужно что то сделать только
с главной
диагональю,
то можно обойтись без вложенных циклов
For i:=1 to n do s:=s+ a[i,i];
m:=a[1,1];
For i:=2 to n do
if (a[i,i]
Слайд 36Задачи для самостоятельной работы
Составить программу, которая вычисляет суммы элементов столбцов двумерного
массива и записывает их в одномерный массив.
Составить программу, которая в двумерном массиве случайных чисел элементы всех четных строк делает нулевыми.
Составить программу, которая в каждом столбце двумерного массива случайных чисел находит наименьший элемент и записывает его индекс в одномерный массив.
Составить программу, которая в двумерном массиве находит самое большое значение и элементы строки и столбца, на пересечении которых он стоит, делает нулевыми.
меню
Слайд 37Строковый тип данных
Для обработки строковой информации в Турбо Паскаль введен строковый
тип данных. Строкой в Паскале называется последовательность из определенного количества символов. Количество символов последовательности называется длиной строки.
Строки в Паскале – это данные типа string. Они используются для хранения последовательностей символов. В Паскале длина стандартной строки ограничена 255 символами. Под каждый символ отводится по одному байту, в котором хранится код символа. Кроме того, каждая строка содержит еще дополнительный байт, в котором хранится длина строки.
Если заранее известно, что длина строки будет меньше 255 символов, то программист может сам задать максимальную длину строки.
Слайд 38Описание строкового типа данных
type
str_type = string[12];
const
n = 50;
var
s1: string;
s2, s3:
str_type;
s4: string[n];
s5, s6, s7: string[7];
Длина строки хранится в первом ее байте, индекс которого равен 0.
Объявление типизированной константы для типа string осуществляется так:
const
s: string = 'FreePascal'
…
Существует понятие пустой строки, т.е. строки, которая не имеет элементов. Пустая строка обозначается двумя рядом стоящими апострофами (например, st := '').
Слайд 39Операции над строками
1. Строки можно присваивать друг другу. Если максимальная длина
переменной слева меньше длины присваиваемой строки, то лишние символы справа отбрасываются.
…
s1 := 'this is text';
s2 := s1;
…
3. Строки можно объединять с помощью операции конкатенации, которая обозначается знаком +.
…
s1 := 'John';
s2 := 'Black';
s1 := s1 + ' ' + s2;
…
2. Строки можно сравнивать друг с другом с помощью операций отношения.
'abc' > 'ab' (true)
'abc' = 'abc' (true)
'abc' < 'abc ' (false)
Слайд 40Операции над строками
Имя строки может использоваться в процедурах ввода-вывода. При вводе
в строку считывается из входного потока количество символов, равное длине строки или меньшее, если символ перевода строки (который вводится нажатием клавиши Enter) встретится раньше. При выводе под строку отводится количество позиций, равное ее фактической длине.
…
readln (s1);
write (s1);
…
К отдельному символу строки можно обращаться как к элементу массива символов, например s1[3]. Символ строки совместим с типом char, их можно использовать в выражениях одновременно, например:
…
s1[3] := 'h';
writeln (s2[3] + 'r');
…
Слайд 41Операции над строками
Элементы строки нумеруются с единицы, т.к. в каждой строковой
переменной имеется элемент с номером 0, в котором в виде символа хранится длина текущей строки. Чтобы узнать текущую длину, достаточно применить функцию ord к нулевому элементу строки. Например:
…
writeln(ord(st[0]))
…
Выражение str[0]:=#50 устанавливает текущую длину равной 50.
При работе со строками, как правило, возникает необходимость выполнять их копирование, вставку, удаление или поиск. Для эффективной реализации этих действий в Паскале предусмотрены стандартные процедуры и функции.
Слайд 42Процедуры и функции для работы со строками
Функция Concat (s1, s2, ...,
sn) возвращает строку, являющуюся слиянием строк s1, s2, ..., sn.
Функция Copy (s, start, len) возвращает подстроку длиной len, начинающуюся с позиции start строки s.
Процедура Delete (s, start, len) удаляет из строки s, начиная с позиции start, подстроку длиной len.
Процедура Insert (subs, s, start) вставляет в строку s подстроку subs, начиная с позиции start.
Функция Length (s) возвращает фактическую длину строки s, результат имеет тип byte.
Функция Pos (subs, s) ищет вхождение подстроки subs в строку s и возвращает номер первого символа subs в s или нуль, если subs не содержится в s.
Слайд 43Процедуры преобразования типов
Процедура Str (x, s) преобразует числовое значение x в
строку s, при этом для x может быть задан формат, как в процедурах вывода write и writeln. Например:
x := 123;
s := str(x:6,s);
Результат: s = ' 123'.
Процедура Val (s, x, errcode) преобразует строку s в значение числовой переменной x, при этом строка s должна содержать символьное представление числа. В случае успешного преобразования переменная errcode равна нулю. Если же обнаружена ошибка, то errcode будет содержать номер позиции первого ошибочного символа, а значение x не определено.
Слайд 44Типовые задачи на строковый тип данных
var
s1,s2: string;
i:
byte;
begin
write('Input string 1: ');
readln(s1);
write('Input string 2: ');
readln(s2);
write('Input position: ');
readln(i);
insert(s2,s1,i);
writeln(s1);
readln
end.
1. Вставить в заданную позицию строки другую строку.
Примечание.
Процедура insert(subs, s, start) вставляет в строку s подстроку subs, начиная с позиции start.
Алгоритм решения задачи:
Определить значения s1, s2 и i.
С помощью процедуры insert() вставить s2 в s1, начиная с позиции i
Слайд 45Замена подстроки в строке
2. Найти в строке определенную последовательность символов и
заменить ее другой.
Описание переменных:
s, s_old, s_new – исходная строка, заменяемая подстрока, вставляемая подстрока;
i – номер символа строки, с которого начинается подстрока;
l_old – длина заменяемой подстроки.
Алгоритм решения задачи:
Ввести строку, подстроку, которую требуется заменить, и подстроку, которую требуется вставить на место прежней.
Найти место вхождения подстроки в строку с помощью функции pos().
Удалить старую подстроку с помощью процедуры delete().
Вставить новую подстроку, используя процедуру insert().
Var s,s_old,s_new: string;
i,l_old: byte;
begin
write('Insert string: ');
readln(s);
write('What change? ');
readln(s_old);
l_old := length(s_old);
write('What to replace? ');
readln(s_new);
i := pos(s_old,s);
delete(s,i,l_old);
insert(s_new,s,i);
writeln(s);
readln
end.
Слайд 46Копирование части строки
var
s1,s2: string;
n,len: byte;
begin
write('Input
string: ');
readln(s1);
write('Place of start of copy: ');
read(n);
write('Length of copy: ');
readln(len);
s2 := copy(s1,n,len);
writeln('Your copy: ',s2);
readln
end.
Алгоритм решения задачи:
Записать в переменную s1 исходную строку.
Узнать начало второй строки и ее длину.
Присвоить s2 результат выполнения функции copy().
Слайд 47Определение длины строки
var
s: string;
len: byte;
begin
write('Input
string: ');
readln(s);
len := length(s);
writeln('Its lenght is ', len,' characters.');
readln
end.
Описание переменных:
s – строка;
len – ее длина.
Алгоритм решения задачи:
Введенная пользователем строка записывается в переменную s.
Результат выполнения функции length(s) сохраняется в переменной len и, затем, выводится на экран.
Слайд 48Удаление подстроки
var
s: string;
i,len: byte;
begin
write('Input string:
');
readln(s);
write('Place of start to delete: ');
readln(i);
write('Length to delete: ');
readln(len);
delete(s,i,len);
writeln(s);
readln
end.
Алгоритм решения задачи:
Присвоить переменной s произвольную строку.
Записать в i и len первый символ, с которого будет производиться удаление, и длину удаляемой последовательности.
Применить процедуру delete() к строке s.
Вывести на экран строку s.
меню
Слайд 49Множества (описание множества)
Const
x1:set of byte=[3,5,7,11];
y1:set
of char=['а','б','в','г','д','е','ж'];
Type
t=set of 1..31;
Var
x2, x3:t;
x4:set of byte;
{ Или без предварительного описания:}
Var
y2: set of char;
a, i: byte;
Можно, предварительно задав тип множества в разделе
пользовательских типов, описать его в разделе описания переменных:
Слайд 50Операции над множествами
1. Операции отношений ("=","",">=","
, если они состоят из одних и тех же элементов. При этом, что очень ценно, порядок следования не имеет значения!
Begin
x1:=[11,7,3,5];
x2:=[ 7,5,3,11];
WriteLn(x1=x2);
{ На экране появиться "TRUE“}
2. Операция "in" - используется для проверки принадлежности какого-либо значения указанному множеству.
Например
WriteLn(5 in x2);
{ На экране TRUE, т.к. 5 есть в множестве x2}
Слайд 51Операции над множествами
Операция «in» позволяет эффективно производить сложные проверки условий, заменяя
десятки других операций.
Например, вместо
if (a=1) or (a=2) or (a=3) or (a=4) ... (a=99) or (a=100) then ...
можно использовать:
readLn(a);
if a in [1..100] then
writeLn('Попали в первую сотню!')
else writeLn('Не попали в первую сотню!');
Слайд 52Операции над множествами
3. Операция "объединение множеств" (+)
Например:
x3:=[1,2,3,4,5]+[4,5,6];
for i:=1 to
255 do
if i in x3 then write(i,' '); writeLn;
{ На экране появится
1 2 3 4 5 6 }
4. Операция «пересечение множеств" (*)
Например:
{ На экране появится
3 4}
Слайд 53Операции над множествами
5. Операция "разность" множеств (-)
- третье множество, которое содержит
элементы первого множества, не входящие во второе множество, например:
x4:=[1,2,3,4,5]-[3,4,7,8,9];
for i:=1 to 255 do
if i in x4 then write(i,' ');
writeLn;
{ На экране появится 1 2 5 }
Repeat until keypressed;
end.
Слайд 54Операции над множествами
Для задания множества с клавиатуры используется следующий алгоритм:
x4:=[
];
repeat
write('Введите элемент множества: ');
readLn(a);
x4:=x4+[a];
write('Все (0/1)? ');
readLn(a);
until a=1;
При работе с множествами невозможно обратиться
к какому-либо конкретному элементу множества - это их недостаток.
Но из этого свойства следуют и важные преимущества - ряд операций, которые невозможно совершать с другими типами данных “в одно действие“, а требуются громоздкие алгоритмы.
меню
Слайд 55Запись
Данные, описывающие существенные стороны того или иного объекта путем включения
в описание нескольких, часто разнотипных, элементов, называют записью (record).
В языке Паскаль запись определяется путем указания служебного слова record и перечисления входящих в запись элементов с указанием типов этих элементов.
Запись Паскаля – структурированный комбинированный тип данных, состоящий из фиксированного числа компонент (полей) разного типа.
Слайд 56Запись
Например, анкетные данные о студенте вуза могут быть представлены в виде
информационной структуры
Такая структура называется двухуровневым деревом. В Паскале эта информация может храниться в одной переменной типа record (запись).
Слайд 57Запись
Поля записи Паскаля могут иметь любой тип, в частности сами могут
быть записями. Такая возможность используется в том случае, когда требуется представить многоуровневое дерево (более 2 уровней). Например, те же сведения о студентах можно отобразить трехуровневым деревом.
Такая организация данных позволит, например, делать выборки по году рождения или по городу, где живут студенты.
Слайд 58Задать тип record можно следующим образом:
type < имя _ типа
>=record
<имя_поля1>: тип;
<имя_поля2>: тип;
………………….
<имя_поля K >: тип
end ;
где record – служебное слово,
а <имя_типа> и <имя_поля> - правильные идентификаторы языка Паскаль.
Слайд 59Пример описания
Описание анкеты студента в Паскале будет выглядеть так:
Type anketa=record
fio:
string[45];
pol: char;
dat_r: string[8];
adres: string[50];
curs: 1..5;
grupp: string[3];
end;
Такая запись Паскаля, так же как и соответствующее ей дерево, называется двухуровневой.
Слайд 60Пример описания
В этом случае описание соответствующей записи в Паскале будет
выглядеть так:
Type anketa1=record
fio: string [45];
pol: char;
dat_r: record;
god: integer;
mes: string [10];
den: 1..31;
end;
adres: record
gorod: string [25];
ulica: string [20];
dom, kv: integer;
end;
curs: 1..5;
grupp: string [3];
end;
Слайд 61Определение переменной типа запись
После того, как определен тип записи Паскаля, можно
определять переменную этого типа. Переменная определяется путем задания ее идентификатора и указания типа.
var
student: anketa;
student 1: anketa 1;
Теперь нам нужно узнать, как правильно получать доступ к элементам записи Паскаля. Элементы записи называются полями, а обращение к ним производится через использование их имен – идентификаторов полей.
Но в отличие от обычной переменной имена полей должны предваряться ссылкой на идентификатор записи Паскаля и отделяться от него точкой. Такая запись называется уточняющий идентификатор:
<имя_записи>.<имя_поля>
Слайд 62Составное имя переменной
Например, чтобы обратиться к полю curs переменной student ,
необходимо указать следующее составное имя:
student.curs :=3;
Для того чтобы обратиться к полю god в записи student 1, необходимо записать уточняющий идентификатор, состоящий из трех имен:
student1.dat_r.god:=1982;
Использование полей записи Паскаля в выражениях и условиях идентично использованию обычных переменных.
Слайд 63Операции над записями
Единственная операция над записью (как над единым целым) которую
можно произвести над однотипными записями Паскаля – это присваивание.
Все другие операции производятся над отдельными полями записи.
Рассмотрим для начала простейший пример заполнения записи Паскаля и вывода ее на экран.
Пусть нам необходимо заполнить сведения о студенте (Ф.И.О., дата рождения, адрес, курс и группа), а затем вывести эти сведения на экран.
Слайд 64Пример заполнения
begin {обратите внимание, ввод каждого поля осуществляется отдельно}
writeln (‘введите сведения о студенте’);
writeln (‘введите фамилию, имя и отчество’);
readln (student.fio);
writeln (‘введите дату рождения’);
readln (student.dat_r);
writeln (‘введите адрес’);
readln (student.adres);
writeln (‘введите курс’);
readln (student.curs);
writeln (‘введите группу’);
readln (student.grupp);
writeln (‘ввод закончен’);
writeln;
{обратите внимание, что вывод записи осуществляется по полям}
writeln (‘фамилия студента: ’, student . fio );
writeln (‘ дата рождения : ’, student.dat_r);
writeln (‘ адрес : ’, student.adres);
writeln (‘ курс : ’, student.curs);
writeln (‘ группа : ’, student.grupp);
end.
Слайд 65Оператор присоединения
Префикс – обязательная предшествующая часть составного идентификатора для имен полей
в структуре типа запись Паскаля.
Очень часто у программиста возникает желание не указывать префикс в имени полей, например, когда идет постоянное использование одних и тех же записей.
В языке Паскаль предусмотрена такая возможность, реализуемая при помощи оператора присоединения, который в общем виде выглядит так:
with <имя_записи> do <действие с полем записи>;
Следует обратить внимание на то, что после служебного слова do может стоять только один оператор, но он может быть составным (любая последовательность операторов, заключенная в операторные скобки begin end ).
Слайд 66Оператор присоединения (пример использования)
Например, фрагмент программы с использованием оператора присоединения будет
выглядеть так:
Пример фрагмента программы c записью и префиксом Паскаля
for I:=1 to 100 do
with student[I] do
begin
writeln (‘введите сведения о’, I , ‘-м студенте’);
writeln (‘введите фамилию, имя и отчество’);
readln (fio);
writeln (‘введите дату рождения’);
readln (dat_r);
writeln (‘введите адрес’);
readln(adres);
writeln (‘введите курс’);
readln(curs);
writeln (‘введите группу’);
readln (grupp);
end;
меню
Слайд 67Текстовые файлы
Содержимое текстовых файлов представляет собой символьную последовательность, разделённую на строки.
Каждая строка заканчивается специальным признаком EOLD (конец строки). Весь файл заканчивается признаком EOF.
Схема файла
Операторы (стандартные процедуры) работы с файлами
Assign – назначение связей между файловой переменной и файлом на внешнем устройстве;
Reset – открытие файла для чтения;
Rewrite - открытие файла для записи;
Close – закрытие файла (разрыв связей с файловой переменной).
Слайд 68Ввод из текстового файла
Ввод из текстового файла:
Для организации ввода данных из
текстового файла следует:
Объявить в программе переменную с типом Text (она называется файловой переменной)
Связать файловую переменную с файлом внешней памяти, содержащим исходные данные, с помощью оператора Assign;
Открыть файл для чтения с помощью процедуры Reset;
Осуществить чтение из файла с помощью оператора Read или ReadLn;
Закрыть файл с помощью оператора Close.
Слайд 69Пример 1.
В текстовом файле с именем abc.txt хранятся пать чисел, разделённых
на две строки:
2.5 3.1 4.0
0.7 1.5
Организовать ввод этих данных в вещественные переменные а, b, c, d, e
Ввод из текстового файла
Слайд 72Литература и источники
http://mif.vspu.ru/books/pascal/records.html
http://www.win-ni.narod.ru/biblio/gl6.htm
http://physics.herzen.spb.ru/library/03/01/pp/TPHelp/types.htm
1. Абрамов С. А., Гнездилова Г. Г., Капустина Е.
Н., Селюн М. И. Задачи по программированию – М.: Наука, 1998
2. Златопольский Д. М. Я иду на урок информатики: Задачи по программированию. Книга для учителя. – М.: Издательство «Первое сентября», 2002.
4. Конспекты уроков информатики в 9-11 классах: Практикум по программированию / Авт.-сост. А. А. Чернов. – Волгоград: Учитель, 2005
3. И.Г. Семакин, Е.К. Хеннекер, Т.Ю. Шеина Информатика. Базовый уровень. Учебник для 10 класса - М.: Бином, Лаборатория знаний, 2014
Интернет источники: