«Презентация для подготовки к ЕГЭ «Структурированные типы данных»


Чтобы посмотреть презентацию с картинками, оформлением и слайдами, скачайте ее файл и откройте в PowerPoint на своем компьютере.
Текстовое содержимое слайдов презентации:

«Структурированные типы данных»Автор проекта Тихонина Нина Григорьевна Методика преподавания темы: Данные - это общее понятие всего того, с чем работает компьютер. Программа, написанная на языке Паскаль, обрабатывает данные, то есть является описанием последовательности действий, которые надо осуществить с некоторой последовательностью данных.ДанныеДанныеКонстантыПеременныеТипИмяЗначение ЦелыеВещественныеСимвольныеЛогическиеПростые типы данныхТипДиапазон значенийОбъем памятиByte0 … 2551 байт, без знакаShortInt–128 … 127 1 байт, со знакомWord0 … 655352 байта, без знакаInteger–32768 … 327672 байта, со знакомLongInt–2147483648 … 21474836474 байта, со знакомSingleДействительные короткие4 байтаRealДействительные (основной тип) 6 байтовDoubleДействительные длинные8 байтовExtendedДействительные очень длинные12 байтовЦелыеВещественныеChar1 символ1 байтStringСтрока символовот 1 до 255 байтовСимвольныеBooleanЗначение True или False1 байтЛогические Структурированные типы данныхСтруктурированными данными называют такие данные, которые состоят из других типов данных. Структурированные типы данных определяют наборы однотипных или разнотипных компонент. К ним относятся, в частности, переменные типов:Array - массивы (табличные данные);String – строковые величины;Record – данные типа запись;Set – данные типа множество;File – данные типа файл.Любой из структуированных типов данных характеризуется множественностью образующих этот тип элементов. Переменная или константа структуированного типа всегда имеет несколько компонент. Каждая из этих компонент, в свою очередь, может принадлежать структуированному типу, что позволяет говорить о возможной вложенности типов. СтрокиМножестваЗаписиФайлыОдномерные массивыДвумерные массивыРАЗДЕЛЫ РАБОТЫСтруктурированные типы данных Одномерные массивыМассив - это поименованная совокупность однотипных элементов, упорядоченных по индексам, определяющим положение элемента в массиве.31-76902-312345678Значение элемента массиваИндекс элемента массива Var <имя массива>: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; Ввод элементов массива (заполнение)For i:=1 to 7 do A[i]:=i; For i:=1 to 7 doA[i]:=sqr(i); For i:=1 to 7 doA[i]:=’*’; Как в данном случае должен быть описан массив?For i:=1 to 7 doreadln (A[i]); for i:=1 to 7 do begin write (‘A[‘,i, ‘]=‘); readln (A[i]); end;i := 1, NВвод a iRandomize;For i:=1 to n do Begin a[i]:=random(10); Writeln (a[i]); End; Вывод элементов массиваа) в столбик: For i:=1 to 7 do Writeln(a[i]:4:2); б) в строкуFor i:=1 to 7 do Write(a[i]:4:2);Типовые алгоритмы обработки массиваВычисление суммы, произведения элементов массиваВыбор по условиюИзменение элементов массива удовлетворяющих условию Нахождение максимального и минимального элементов массива Суммирование элементов массива осуществляется за счёт поочерёдного добавления слагаемых:Определяется ячейка памяти (переменная s), в которой будет последовательно накапливаться результат суммированияПрисваивается переменной s начальное значение 0 - число, не влияющее на результат сложения Для каждого элемента массива из переменной s считывается её текущее значение и складывается со значением элемента массива; полученный результат присваивается переменной s. Алгоритм нахождения суммы элементов массива Алгоритм нахождения суммы элементов массива{BC89EF96-8CEA-46FF-86C4-4CE0E7609802}s = 0s = 0Основной фрагмент программы: s:=0; for i:=1 to n do s:=s+a[i];{BC89EF96-8CEA-46FF-86C4-4CE0E7609802}s = s + a[1]s = 0+ a[1]{BC89EF96-8CEA-46FF-86C4-4CE0E7609802}s = s + a[2]s = 0+ a[1]+ a[2]{BC89EF96-8CEA-46FF-86C4-4CE0E7609802}s = s + a[3]s = 0+ a[1]+ a[2]+ a[3]{BC89EF96-8CEA-46FF-86C4-4CE0E7609802}……{BC89EF96-8CEA-46FF-86C4-4CE0E7609802}s = s + a[10]s = 0+a[1]+a[2]+a [3]+a[10] Program Summa;const n=7;var a:array [1..n] of real;S:real;i:integer;beginwrite (‘введите 7 элементов массива, через пробел’);For i:=1 to n doreadln(a[i]);S:=0;For i:=1 to n doS:=S+a[i]; writeln;write(‘Сумма всех элементов массива =’,S);end.Вычисление суммы элементов массива
Изменение элементов массива удовлетворяющих условию For i:=1 to N do If (условие) then a[i]:=значение; Изменения:a [ i ] :=5 – заменить i-ый элемент на число 5a [ i ] := - a [ i ] – заменить i-ый элемент на противоположный по знакуa [ i ] := a [ i ] * 2 – удвоить каждый элемент массиваa [ i ] := a [ i - 1]+3 –заменить i-ый элемент предшествующим плюс 3 Выбор по условию…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;…Что считает программа при заданном условии? 1) Взять верхнюю карточку, записать на доске(запомнить) число как наибольшее.2) Взять следующую карточку, сравнить числа. Еслина карточке число больше, то записать это число. Нахождение наибольшего числав стопке карточек с записанными числами:Повторить действия, описанные в пункте 2 для всехоставшихся карточекАлгоритм нахождения наибольшего элементов массива …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;…Нахождение максимального и минимального элементов массива Алгоритм сортировки элементов массива1. В массиве выбирается максимальный элемент2. Максимальный и первый элемент меняются местами(первый элемент считается отсортированным) 3. В неотсортированной части массива снова выбираетсямаксимальный элемент; он меняется местами с первымнеотсортированным элементом массиваДействия пункта 3 повторяются с неотсортированными элементами массива, пока не останется один неотсортированный элемент (минимальный)Сортировка элементов массива по убываниювыбором осуществляется следующим образом:






program  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;Программа сортировки элементов массива Программа удаления элемента с номером k из массива…beginwrite (‘введите индекс удаляемого элемента’);readln(k);For i:=k to n-1 dob[i]:=b[i+1];For i:=1 to n-1 doWrite (b[i]:4);…Программа вставки элемента с номером k в массив…beginwriteln (‘введите индекс вставляемого элемента’);readln(k);For i:=n+1 downto k dob[i]:=b[i-1]; b[k] :=min;For i:=1 to n+1 doWrite (b[i]:4);…Вставить на k-е место массива элемент, равный наименьшему элементу массива. 1. В классе 20 учеников писали диктант по русскому языку. Напишите программу, подсчитывающую количество двоек, троек, четвёрок и пятёрок, полученных за диктант.2. Напишите программу, которая вычисляет среднюю за неделю температуру воздуха. Исходные данные вводятся с клавиатуры.Задачи для самостоятельной работы 3. Запишите на языке Паскаль программу решения задачи. Объявлен набор в школьную баскетбольную команду. Известен рост каждого из N учеников, желающих попасть в эту команду.Подсчитайте количество претендентов, имеющих шанс попасть в команду, если рост игрока команды должен быть не менее 170 см.Считайте рост претендента в команду случайным числом из диапазона от 150 до 200 см, а число претендентов n = 50. 4. В целочисленных массивах a и b содержатся длины катетов десяти прямоугольных треугольников: a[i] - длина первого катета, b[i]—длина второго катета i-го треугольника. Найдите треугольник с наибольшей площадью. Выведите его номер, длины катетов и площадь. Предусмотрите случай, когда таких треугольников несколько.Задачи5. Занесите информацию о десяти европейских странах в массивы n (название страны), к (численность населения), s (площадь страны). Выведите названия стран в порядке возрастания плотности их населения. 6. Запишите на языке Паскаль программу решения задачи. В некотором населённом пункте N домов. Известно, сколько людей проживает в каждом из домов.Исходные данные (количество жильцов) представить с помощью линейной таблицы А, содержащей N элементов: A[1] - количество жильцов дома 1, A[2] - количество жильцов дома 2, …, A[N] - количество жильцов дома N. В общем случае А[i] — количество жильцов дома i, где i принимает все значения от 1 до n (i =1,n). Результат работы обозначить через s. Считайте количество жильцов дома случайным числом из диапазона от 50 до 200 человек, а число домов n = 30.меню Двумерные массивыДвумерный массив можно представить себе в виде таблицы, в которой все строки и столбцы пронумерованы.Каждый элемент такого массива имеет два индекса:Первый индекс – это номер строки;Второй индекс – номер столбца.A[1,1]A[1,2]A[1,3]A[1,4]A[1,5]A[2,1]A[2,2]A[2,3]A[2,4]A[2,5]A[3,1]A[3,2]A[3,3]A[3,4]A[3,5]A[4,1]A[4,2]A[4,3]A[4,4]A[4,5] Const n=4; m=5;Var A :array [1..n, 1..m] of integer;Описание двумерных массивовA [2,4]A[1,1]A[1,2]A[1,3]A[1,4]A[1,5]A[2,1]A[2,2]A[2,3]A[2,4]A[2,5]A[3,1]A[3,2]A[3,3]A[3,4]A[3,5]A[4,1]A[4,2]A[4,3]A[4,4]A[4,5]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;
Заполнение двумерного массиваМетодов заполнения множество. Основные - это путем ввода данных с клавиатуры, с помощью случайных чисел и вычислений по формулам.Для формирования массива используется два вложенных цикла. Первый цикл перебирает строки, а второй – столбцы.For i:=1 to n do for j:=1 to m do readln (a[i , j]);С клавиатурыj , 1, NВвод a i , ji , 1, N Заполнение двумерного массива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); Вывод двумерного массиваFor i:=1 to n do begin writeln; end;for j:=1 to m do write (a[i , j]);j , 1, NВывод a i , ji , 1, N Задача 1. Создать программу для формирования таблицы умножения (таблицы Пифагора).Вывод массива: Задача №1Составить программу, которая в двумерном массиве случайных чисел находит в каждой строке наибольший элемент и записывает его в одномерный массив.m – количество строк в двумерном массиве и длина одномерного массива;n – количество столбцов;A[1..m,1..n] - двумерный массив;B[1..m] – одномерный массивmax – вспомогательная переменная для нахождения наибольшего элемента в каждой строке. Задача №1Program 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;beginrandomize; 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. Главная диагональa11a22a33a44a55Удовлетворяет неравенствуi < jУдовлетворяет неравенствуi > j1 2 3 4 5 1 2 3 4 5I - Jfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.on
fillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.on
Побочная диагональa15a24a33a42a51Удовлетворяет неравенствуi+j<n+1Удовлетворяет неравенствуi+j>n+11 2 3 4 5I+J=N+1fillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.on
fillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.on
Условия выбора фрагментов массиваa11a22a33a44a551 2 3 4 5 1 2 3 4 5a42a51a24a15(i+j<n+1) And (i<j)(i+j>n+1) And (i<j)(i+j>n+1) And (i>j)(i+j<n+1) And (i>j)fillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.on
fillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.on
fillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.on
fillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.onfillcolorfill.typefill.on
Обработка элементов главной диагоналиЕсли нужно что то сделать только с главной диагональю, то можно обойтись без вложенных циклов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]<m) then m:=a[i,i]; Задачи для самостоятельной работыСоставить программу, которая вычисляет суммы элементов столбцов двумерного массива и записывает их в одномерный массив.Составить программу, которая в двумерном массиве случайных чисел элементы всех четных строк делает нулевыми. Составить программу, которая в каждом столбце двумерного массива случайных чисел находит наименьший элемент и записывает его индекс в одномерный массив.Составить программу, которая в двумерном массиве находит самое большое значение и элементы строки и столбца, на пересечении которых он стоит, делает нулевыми. меню Строковый тип данныхДля обработки строковой информации в Турбо Паскаль введен строковый тип данных. Строкой в Паскале называется последовательность из определенного количества символов. Количество символов последовательности называется длиной строки.Строки в Паскале – это данные типа string. Они используются для хранения последовательностей символов. В Паскале длина стандартной строки ограничена 255 символами. Под каждый символ отводится по одному байту, в котором хранится код символа. Кроме того, каждая строка содержит еще дополнительный байт, в котором хранится длина строки.Если заранее известно, что длина строки будет меньше 255 символов, то программист может сам задать максимальную длину строки. Описание строкового типа данных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 := ''). Операции над строками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) Операции над строкамиИмя строки может использоваться в процедурах ввода-вывода. При вводе в строку считывается из входного потока количество символов, равное длине строки или меньшее, если символ перевода строки (который вводится нажатием клавиши Enter) встретится раньше. При выводе под строку отводится количество позиций, равное ее фактической длине.…readln (s1); write (s1);…К отдельному символу строки можно обращаться как к элементу массива символов, например s1[3]. Символ строки совместим с типом char, их можно использовать в выражениях одновременно, например:…s1[3] := 'h'; writeln (s2[3] + 'r');… Операции над строкамиЭлементы строки нумеруются с единицы, т.к. в каждой строковой переменной имеется элемент с номером 0, в котором в виде символа хранится длина текущей строки. Чтобы узнать текущую длину, достаточно применить функцию ord к нулевому элементу строки. Например:…writeln(ord(st[0]))…Выражение str[0]:=#50 устанавливает текущую длину равной 50.При работе со строками, как правило, возникает необходимость выполнять их копирование, вставку, удаление или поиск. Для эффективной реализации этих действий в Паскале предусмотрены стандартные процедуры и функции. Процедуры и функции для работы со строкамиФункция 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. Процедуры преобразования типовПроцедура 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 не определено. Типовые задачи на строковый тип данных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);readlnend.1. Вставить в заданную позицию строки другую строку.Примечание.Процедура insert(subs, s, start) вставляет в строку s подстроку subs, начиная с позиции start.Алгоритм решения задачи: Определить значения s1, s2 и i. С помощью процедуры insert() вставить s2 в s1, начиная с позиции i Замена подстроки в строке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);readlnend. Копирование части строки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);readlnend.Алгоритм решения задачи: Записать в переменную s1 исходную строку.Узнать начало второй строки и ее длину.Присвоить s2 результат выполнения функции copy(). Определение длины строкиvar s: string; len: byte;begin write('Input string: '); readln(s); len := length(s); writeln('Its lenght is ', len,' characters.');readlnend.Описание переменных: s – строка;len – ее длина.Алгоритм решения задачи: Введенная пользователем строка записывается в переменную s.Результат выполнения функции length(s) сохраняется в переменной len и, затем, выводится на экран. Удаление подстроки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);readlnend.Алгоритм решения задачи: Присвоить переменной s произвольную строку.Записать в i и len первый символ, с которого будет производиться удаление, и длину удаляемой последовательности. Применить процедуру delete() к строке s.Вывести на экран строку s.меню Множества (описание множества)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;Можно, предварительно задав тип множества в разделепользовательских типов, описать его в разделе описания переменных: Операции над множествами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} Операции над множествамиОперация «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('Не попали в первую сотню!'); Операции над множествами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} Операции над множествами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. Операции над множествамиДля задания множества с клавиатуры используется следующий алгоритм: x4:=[ ]; repeat write('Введите элемент множества: '); readLn(a); x4:=x4+[a]; write('Все (0/1)? '); readLn(a); until a=1;При работе с множествами невозможно обратитьсяк какому-либо конкретному элементу множества - это их недостаток.Но из этого свойства следуют и важные преимущества - ряд операций, которые невозможно совершать с другими типами данных “в одно действие“, а требуются громоздкие алгоритмы.меню Запись Данные, описывающие существенные стороны того или иного объекта путем включения в описание нескольких, часто разнотипных, элементов, называют записью (record). В языке Паскаль запись определяется путем указания служебного слова record и перечисления входящих в запись элементов с указанием типов этих элементов. Запись Паскаля – структурированный комбинированный тип данных, состоящий из фиксированного числа компонент (полей) разного типа. ЗаписьНапример, анкетные данные о студенте вуза могут быть представлены в виде информационной структуры Такая структура называется двухуровневым деревом. В Паскале эта информация может храниться в одной переменной типа record (запись). ЗаписьПоля записи Паскаля могут иметь любой тип, в частности сами могут быть записями. Такая возможность используется в том случае, когда требуется представить многоуровневое дерево (более 2 уровней). Например, те же сведения о студентах можно отобразить трехуровневым деревом. Такая организация данных позволит, например, делать выборки по году рождения или по городу, где живут студенты. Задать тип record можно следующим образом: type < имя _ типа >=record   <имя_поля1>: тип;    <имя_поля2>: тип;    ………………….    <имя_поля K >: тип end ; где record – служебное слово, а <имя_типа> и <имя_поля> - правильные идентификаторы языка Паскаль. Пример описания Описание анкеты студента в Паскале будет выглядеть так:Type anketa=record   fio: string[45];    pol: char;    dat_r: string[8];    adres: string[50];    curs: 1..5;    grupp: string[3];end; Такая запись Паскаля, так же как и соответствующее ей дерево, называется двухуровневой. Пример описания В этом случае описание соответствующей записи в Паскале будет выглядеть так: 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; Определение переменной типа записьПосле того, как определен тип записи Паскаля, можно определять переменную этого типа. Переменная определяется путем задания ее идентификатора и указания типа. var student: anketa; student 1: anketa 1; Теперь нам нужно узнать, как правильно получать доступ к элементам записи Паскаля. Элементы записи называются полями, а обращение к ним производится через использование их имен – идентификаторов полей. Но в отличие от обычной переменной имена полей должны предваряться ссылкой на идентификатор записи Паскаля и отделяться от него точкой. Такая запись называется уточняющий идентификатор: <имя_записи>.<имя_поля> Составное имя переменнойНапример, чтобы обратиться к полю curs переменной student , необходимо указать следующее составное имя: student.curs :=3; Для того чтобы обратиться к полю god в записи student 1, необходимо записать уточняющий идентификатор, состоящий из трех имен: student1.dat_r.god:=1982; Использование полей записи Паскаля в выражениях и условиях идентично использованию обычных переменных. Операции над записямиЕдинственная операция над записью (как над единым целым) которую можно произвести над однотипными записями Паскаля – это присваивание.Все другие операции производятся над отдельными полями записи. Рассмотрим для начала простейший пример заполнения записи Паскаля и вывода ее на экран.Пусть нам необходимо заполнить сведения о студенте (Ф.И.О., дата рождения, адрес, курс и группа), а затем вывести эти сведения на экран. Пример заполнения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. Оператор присоединенияПрефикс – обязательная предшествующая часть составного идентификатора для имен полей в структуре типа запись Паскаля. Очень часто у программиста возникает желание не указывать префикс в имени полей, например, когда идет постоянное использование одних и тех же записей. В языке Паскаль предусмотрена такая возможность, реализуемая при помощи оператора присоединения, который в общем виде выглядит так: with <имя_записи> do <действие с полем записи>; Следует обратить внимание на то, что после служебного слова do может стоять только один оператор, но он может быть составным (любая последовательность операторов, заключенная в операторные скобки begin end ). Оператор присоединения (пример использования)Например, фрагмент программы с использованием оператора присоединения будет выглядеть так: Пример фрагмента программы 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; меню {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}S1S2…Sk1EOLDS1S2…Sk2EOLD…EOFТекстовые файлыСодержимое текстовых файлов представляет собой символьную последовательность, разделённую на строки. Каждая строка заканчивается специальным признаком EOLD (конец строки). Весь файл заканчивается признаком EOF.Схема файлаОператоры (стандартные процедуры) работы с файламиAssign – назначение связей между файловой переменной и файлом на внешнем устройстве; Reset – открытие файла для чтения;Rewrite - открытие файла для записи;Close – закрытие файла (разрыв связей с файловой переменной). Ввод из текстового файлаВвод из текстового файла:Для организации ввода данных из текстового файла следует:Объявить в программе переменную с типом Text (она называется файловой переменной)Связать файловую переменную с файлом внешней памяти, содержащим исходные данные, с помощью оператора Assign;Открыть файл для чтения с помощью процедуры Reset;Осуществить чтение из файла с помощью оператора Read или ReadLn;Закрыть файл с помощью оператора Close. Пример 1.В текстовом файле с именем abc.txt хранятся пать чисел, разделённых на две строки:2.5 3.1 4.00.7 1.5Организовать ввод этих данных в вещественные переменные а, b, c, d, eВвод из текстового файла Запись из файла в массив Вывод в текстовый файлменю Литература и источникиhttp://mif.vspu.ru/books/pascal/records.htmlhttp://www.win-ni.narod.ru/biblio/gl6.htmhttp://physics.herzen.spb.ru/library/03/01/pp/TPHelp/types.htm1. Абрамов С. А., Гнездилова Г. Г., Капустина Е. Н., Селюн М. И. Задачи по программированию – М.: Наука, 19982. Златопольский Д. М. Я иду на урок информатики: Задачи по программированию. Книга для учителя. – М.: Издательство «Первое сентября», 2002.4. Конспекты уроков информатики в 9-11 классах: Практикум по программированию / Авт.-сост. А. А. Чернов. – Волгоград: Учитель, 20053. И.Г. Семакин, Е.К. Хеннекер, Т.Ю. Шеина Информатика. Базовый уровень. Учебник для 10 класса - М.: Бином, Лаборатория знаний, 2014Интернет источники:

Приложенные файлы


Добавить комментарий