Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Информатика.doc
Скачиваний:
19
Добавлен:
14.02.2015
Размер:
356.86 Кб
Скачать

Задания к работе 5

№1

Дан символьный файл f. Получить копию файла в файле g.

№2

Дан файл f, компоненты которого являются целыми числами. Получить файл g, образованный из файла f исключением повторных вхождений одного и того же числа.

№3

Дан символьный файл f. Добавить в его конец символы e,n,d (если необходимо, использовать вспомогательный файл g).

№4

Дан символьный файл f. Найти самое длинное слово среди слов, вторая буква которых есть k; если слов с наибольшей длиной несколько, то найти последнее.

№5

Дан файл f, компоненты которого являются целыми числами. Число компонент файла f делится на 100. Записать в файл g наибольшее значение первых ста компонент файла f, затем – следующих ста компонент и т.д.

№6

Дан файл, содержащий сведения об учениках (его имени и фамилии и названия класса (года учения и буквы), в котором он учится). Выяснить имеются ли в школе однофамильцы.

№7

Дан файл, который содержит номера телефонов сотрудников учреждения (указывается фамилия, его инициалы и номер телефона). Найти номер телефона по его фамилии и инициалам.

№8

Дан файл, содержащий сведения об экспортируемых товарах: указывается наименование товара, страна, импортирующая товар и объем поставляемой партии в штуках. Найти страны, в которые экспортируется товар, и общий объем его экспорта.

№9

Дан текстовый файл f. Переписать в файл g все компоненты файла f с заменой в них символа 0 на символ 1 и наоборот.

№10

Дан текстовый файл f. Получить все его строки, содержащие более 60 символов.

№11

Дан файл, содержащий сведения об учениках (его имени и фамилии и названия класса (года учения и буквы), в котором он учится). Выяснить, в каких классах насчитывается более 35 учеников.

№12

Дан текстовый файл f. Получить самую длинную строку файла.

№13

Дан текстовый файл f и строка s. Получить все строки файла f, содержащие в качестве фрагмента строку s.

№14

Дан файл, содержащий сведения об учениках (его имени и фамилии и названия класса (года учения и буквы), в котором он учится). Выяснить, на сколько учеников в восьмых классах больше, чем в десятых.

Практическая работа 6. Множества. Записи.

Множество в паскале имеет такой же смысл, как и в алгебре – это неупорядоченная совокупность отличных друг от друга однотипных элементов. При описании множественного типа используются слова set и of. Задание конкретного множества определяется правилом (конструктором) – списком элементов или интервалов, заключенным в квадратные скобки. Пустое множество обозначается двумя символами [].

Множественный тип можно определить:

  • в разделе описания типов по схеме: type<имя>=set of<тип элементов>

  • можно совместить описание множественного типа и соответствующих переменных: type <имя> = set of <тип элементов>

  • Можно описать переменную множественного типа и задать ее первоначальное значение в разделе описания констант, как констант-множество.

Для данных множественного типа определены операции объединения, пересечения и дополнения множеств, обозначаемые в Паскале соответственно знаками +,* и -, а также отношения равенства множеств (А=В), неравенств (A<>B), включения (A<=B, A>=B). Результат операций отношения имеет булевский тип.

Переменные множественного типа удобно применять в задачах, где порядок данных не имеет значения, например при моделировании случайных событий.

Пример. Составим программу, анализирующую латинский текст и печатающую в алфавитном порядке все найденные в нем буквы, а затем все ненайденные

Пусть alfa – множество всех букв латинского алфавита. Будем вводить заданный текст с клавиатуры символ за символом, одновременно формируя множество E – множество латинских букв текста. В конце текста введем символ *. Затем с помощью операции in будем проверять, какие буквы алфавита имеются во множестве Е. Множество N – ненайденных букв в тексте – определяется оператором: N:=alfa-E.

program alfa;

const alfa:set of char=[‘a’..’z’];

var c:char; E,N:set of char;

begin

clrscr; E:=[]; writeln(‘введите текст, конец ввода -*’); read(c);

while c<> ‘*’ do

begin

if c in alfa then E:=E+[c; read(c)]

end;

writeln;

if E=alfa then writeln (‘найдены латинские буквы’)

else begin

N:=alfa-E;

writeln(‘найдены:’);

for c:=’a’ to ‘z’ do if c in E then write(c);

writeln; writeln(‘не найдены:’);

for c:=’a’ to ‘z’ do if c in N then write(c);

writeln

end

end.

Записи (record).

Записи (комбинированный тип) – одна из наиболее гибких и удобных структур данных, применяющихся при описании сложных объектов, которые характеризуются различными свойствами, а также при создании различных информационных систем.

Запись – структурированный тип данных, состоящий из фиксированного числа величин разных типов, называемых полями или компонентами записи. Так же как массив, запись содержит ряд отдельных компонент, но компоненты могут быть разных типов.

Схема записи:

type <имя типа записи> = record

имя поля 1: тип;

…………………

имя типа N : тип

end;

Как и при описании массивов, можно совместить описание типа записи и соответствующих переменных.

Для доступа к полям используются составные имена, состоящие из имени переменной типа запись и имени поля, разделенных точкой. Например, M1.Marka – обращение к полю Marka. Поля могут получать значения с помощью оператора присваивания: M1.Marka:=’Волга 3110’; M1.Fio:=’Петров А.И.’;

Составные имена можно использовать в операторе ввода-вывода: writeln(M1.Marka); и т.д. Поля записи, в свою очередь, могут быть записями.

Для сокращения записей при использовании составных имен применяется оператор with. Его структура: with <имя записи> do <оператор>. В операторе можно использовать имена полей без имени переменной типа запись.

В Паскале разрешается использовать тип «запись» при описании других составных типов данных, например, можно построить массив записей.

Пример. Используя записи составить программу начисления стипендии

Предположим, что вводится список группы с оценками за экзамены. Графа «Балл» вычисляет суммарную оценку. Графа «Сумма» определяет размер стипендии по правилу: если нет троек и балл равен 12, то стипендия 600 рублей, если нет четверок, и балл равен 15, то стипендия 800 рублей. В других случаях сумма равна нулю.

ФИО

Эк 1

Эк 2

Эк 3

Балл

Сумма

1

Иванов

4

5

5

14

600

Program spisok;

type stud=record

fio: string[20];

ex1, ex2, ex3: 2..5;

bal: 6..15;

sum: real;

end;

var x: array[1..30] of stud;

i,k,m,n: integer;

y: 6..15; z: stud;

begin write (‘введи число студентов:’); readln(n);

for i:=1 to n with x[i] do

begin write (‘введи ФИО’, i,’-го студента:’);

readln (fio); write (‘введи три оценки:’);

readln (ex1,ex2,ex3);

end;

for i:=1 to n do with x[i] do

begin bal:=ex1+ex2+ex3;

if (ex1=2) or (ex1=3) or (ex2=2) or (ex2=3) or (ex3=2) or (ex3=3)

then sum:=0 else if bal<12 then sum:=0

else if bal<15 then sum:=600 else if bal=15 then sum:=800;

end;

{Можно перед распечаткой ведомости упорядочить записи по убыванию в графе «Балл»}

{for k:=1 to n-1 do begin y:=x[k].bal; m:=k;

for i:=k+1 to n do if y<x[i].bal then begin y:=x[i].bal; m:=i end;

z:=x[k]; x[k]:=x[m]; x[m]:=z; end;}

writeln; writeln(‘Стипендиальная ведомость’);

for i:=1 to 64 do write(‘-‘); writeln;

write(‘N|ФИО|эк1|эк2|эк3|балл|сумма|’);

for i:=1 to 64 do write(‘-‘); writeln;

for i:=1 to n do with x[i] do

begin write(i:3, fio:20, ex1:4, ex2:4, ex3:4); writeln(bal:5, sum:9:2); end end.