Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лабораторные на Pasca (Кудрявцев)l

.pdf
Скачиваний:
32
Добавлен:
18.03.2015
Размер:
1.63 Mб
Скачать

Файлы

163

 

 

нент с нечетными номерами; d) сумму наибольшего и наименьшего из значе- ний компонент; e) разность первой и последней компонент файла.

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

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

Вариант 15

1.Дан файл f, компоненты которого являются целыми числами. Найти: а) количество четных чисел среди компонент; b) количество удвоенных нечет- ных чисел среди компонент; c) количество квадратов нечетных чисел среди компонент.

2.Даны символьные файлы f1 и f2. Переписать с сохранением порядка сле- дования компоненты файла f1 в файл f2, а компоненты файла f2 – в файл f1. Использовать вспомогательный файл h.

3.Дан текстовый файл f. Записать в перевернутом виде строки файла f в файл g. Порядок строк в файле g должен a) совпадать с порядком исходных строк в файле f; b) быть обратным по отношению к порядку строк исходного файла.

Вариант 16

1.Дан файл f, компоненты которого являются целыми числами. Получить в файле g все компоненты файла f: a) являющиеся четными числами; b) деля- щиеся на 3 и не делящиеся на 7; c) являющиеся точными квадратами.

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

3.Дан текстовый файл f. Переписать компоненты файла f в файл g, вставляя

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

Вариант 17

1.Дан файл f, компоненты которого являются целыми числами. Записать в файл g все четные числа файла f, а в файл h все нечетные. Порядок следо- вания чисел сохраняется.

2.Дан символьный файл f. Подсчитать число вхождений в файл сочетаний ab. Определить, входит ли в файл сочетание abcdefgh. Подсчитать число вхождений в файл каждой из букв a, b, c, d, e, f и вывести результат в виде

таблицы

a – N b – N c – N d – N e – N f – N

164

Лабораторная работа № 13

 

 

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

Вариант 18

1.Дан файл f, компоненты которого являются целыми числами. Ни одна из компонент файла не равна нулю. Файл f содержит столько же отрицательных чисел, сколько и положительных. Используя вспомогательный файл h, пере- писать компоненты файла f в файл g так, чтобы в файле g: a) не было двух соседних чисел с одним знаком; b) сначала шли положительные, потом отри- цательные числа; c) числа шли в следующем порядке: два положительных, два отрицательных, два положительных, два отрицательных и т.д. (предпола- гается, что число компонент в файле f делится на 4).

2.Дан символьный файл f. Записать в файл g компоненты файла f в обрат- ном порядке.

3.Дан текстовый файл f. Исключить пробелы, стоящие в концах его строк. Результатпоместить в файл f .

Вариант 19

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

2.Даны символьные файлы f и g. Записать в файл h все начальные совпа- дающие компоненты файлов f и g.

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

Вариант 20

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

итого же числа.

2.Сведения об автомобиле состоят из его марки, номера и фамилии вла- дельца. Дан файл f, содержащий сведения о нескольких автомобилях. Найти: a) фамилии владельцев и номера автомобилей данной марки; b) количество автомобилей каждой марки.

3.Даны два текстовых файла f и g. Определить, совпадают ли компоненты файла f с компонентами файла g. Если нет, то получить номер первой строки

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

Вариант 21

1. Прямая на плоскости задается уравнением ax + by + c = 0, где a и b одно- временно не равны нулю. Будем рассматривать только прямые, для которых

Файлы

165

 

 

коэффициенты a, b, c целые числа. Пусть f файл, содержащий коэффици- енты нескольких прямых (не менее трех). Требуется получить в файле g ко- эффициенты всех различных прямых файла f.

2.Дан символьный файл f. Записать в файл g с сохранением порядка следо- вания те символы файла f: a) которым в этом файле предшествует буква 'a'; b) вслед за которым в этом файле идет буква 'a'.

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

Вариант 22

1.Дан файл f, компоненты которого являются натуральными числами. Ко- личество чисел в файле кратно 4. Первые два числа из каждых четырех зада- ют координаты левого верхнего угла прямоугольника, следующие два числа

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

2.Дан символьный файл f. В файле f не менее двух компонент. Определить, являются ли два первых символа файла цифрами. Если да, то установить, яв- ляется ли число, образованное этими цифрами, четным.

3.Дан символьный файл f, содержащий произвольный текст длиной более 5000 слов. Слова в тексте разделены пробелами и знаками препинания. По- лучить 100 наиболее часто встречающихся слов и число их появлений. Ре- шить задачу: a) без ограничения на длины слов; b) предполагая, что любое слово текста состоит не более чем из 16 букв.

Вариант 23

1.Дан файл f, содержащий различные даты. Каждая дата это число, месяц

игод. Найти: a) год с наименьшим номером; b) все весенние даты; в) самую позднюю дату.

2.Дан символьный файл f. Группы символов, разделенные пробелами (од- ним или несколькими) и не содержащие пробелов внутри себя, будем назы- вать словами. Найти самое длинное слово среди слов, вторая буква которых есть e; если слов с наибольшей длиной несколько, то найти последнее. Если таких слов нет вообще, то сообщить об этом. Решить эту задачу: а) полагая, что слова состоят не более чем из 10 символов; b) без ограничения на число символов в слове.

3.Создать текстовый файл. Подсчитать количество знаков препинания в нем. Найти самое короткое слово.

Вариант 24

1. Создать файл из 35 целых чисел с помощью датчика случайных чисел. Вывести его на экран. Найти наибольшее из чисел, оканчивающихся на 5.

166

Лабораторная работа № 13

 

 

Посчитать числа оканчивающиеся на 5. Найти среднее геометрическое ос- тальных чисел.

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

3.Дан символьный файл f, содержащий сведения о сотрудниках учрежде- ния, записанные по следующему образцу: фамилия_имя_отчество, фами- лия_имя_отчество, ... Записать эти сведения в файле g, используя образцы: а) имя_отчество_фамилия, имя_отчество_фамилия, ...; b) фамилия_и.о., фа- милия_и.о., ...

Вариант 25

1.Дан файл f, компоненты которого являются целыми числами. Записать в файл g все четные числа файла f, а в файл h все нечетные. Порядок следо- вания чисел сохраняется.

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

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

Вариант 26

1.Создать файл из 20 вещественных чисел, выбранных случайным образом из отрезка [10..30]. Вывести его на экран. Найти наибольший и наименьший элементы в этом файле и их произведение.

2.Дан файл f, содержащий сведения о кубиках: размер каждого кубика (длина ребра в сантиметрах), его цвет (красный, желтый, зеленый или синий)

иматериал (деревянный, металлический, картонный). Найти: a) количество кубиков каждого из перечисленных цветов и их суммарный объем; b) коли- чество деревянных кубиков с ребром 3 см и количество металлических куби- ков с ребром, большим 5 см.

3.Дан файл f, содержащий сведения о книгах. Сведения о каждой из книг это фамилия автора, название и год издания. Найти названия книг данного автора, изданных с 1960 г. Определить, имеется ли книга с названием Ин- форматика”. Если да, то сообщить фамилию автора и год издания. Если таких книг несколько, то сообщить имеющиеся сведения обо всех этих книгах.

Файлы

167

 

 

Вариант 27

1.Создать файл из 55 целых чисел, используя генератор случайных чисел. Переписать все четные числа из этого файла в другой. Вывести оба файла на экран. Найти в новом файле среднее арифметическое его элементов. Найти наибольший элемент в новом файле.

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

впоследней четверти. Выяснить, сколько учеников школы не имеют отметок ниже четырех. Собрать в файле g сведения о лучших учениках школы, т.е. об учениках, не имеющих отметок ниже четырех и по сумме баллов не усту- пающих другим ученикам своего и параллельных классов.

3.Дан файл f, содержащий сведения об игрушках: указывается название иг- рушки (например, кукла, кубики, мяч, конструктор и т.д.), ее стоимость в рублях и возрастные границы детей, для которых игрушка предназначена (например, для детей от двух до пяти лет). Получить следующие сведения: a) названия игрушек, цена которых не превышает 400 руб. и которые подходят детям 5 лет; b) цену самого дорогого конструктора, оформленную по образцу

... руб.; c) названия наиболее дорогих игрушек (цена которых отличается от цены самой дорогой игрушки не более чем на 100 руб.).

168

Лабораторная работа № 14

Модули

Модули в Turbo Pascal появились в связи с необходимостью упро- щения процесса разработки сложных программ. Модуль является независимо компилируемой частью программы и представляет со- бой мощный инструмент создания различных прикладных про- грамм. Компилятор Turbo Pascal размещает программный текст ка- ждого модуля в отдельном сегменте памяти. Хотя максимальная длина сегмента не может превышать 64 Кбайт, число одновременно открытых модулей ограничено лишь объемом доступной памяти, что позволяет создавать достаточно большие программы.

Структура модуля выглядит следующим образом:

Unit <имя>;

INTERFACE

<интерфейсная часть>

IMPLEMENTATION

<исполняемая часть> [ Begin

<инициирующая часть> ]

End.

Где

Unit служебное слово, начинающее заголовок модуля; <имя> имя модуля(правильный идентификатор); INTERFACE служебное слово, начинающее интерфейсную часть модуля;

IMPLEMENTATION служебное слово, начинающее исполняе- мую часть;

Begin служебное слово, начинающее инициирующую часть (квадратные скобки означают, что эта часть необязательна); End признак конца модуля.

Любая из перечисленных трех частей модуля может быть пустой.

Модули

169

 

 

Для правильной компиляции модуля его имя должно совпадать с именем файла на диске, в котором этот модуль будет храниться. Если, например, модуль определен заголовком

Unit Complex;

то его текст должен быть сохранен в файле с именем Complex.pas.

Имя модуля служит для его связи с другими модулями и основной программой. Эта связь осуществляется специальным предложением

USES <список модулей>;

где Uses служебное слово, <список модулей> – имена используе- мых модулей, перечисленные через запятую. Например:

USES CRT, Graph, Complex;

Если в программе используются модули, то слово Uses должно от-

крывать раздел описаний основной программы или следовать сразу за служебным словом Interface в модуле.

Интерфейсная часть. В этой части содержатся объявления всех глобальных объектов модуля (типов, констант, переменных и бло- ков), которые должны стать доступными основной программе и другим модулям. При объявлении процедур и функций в интер- фейсной части указывается только их заголовок, например:

Unit Vect; INTERFACE

Type vector = Record

x, y, z: real; end;

Var a, b, c : vector; i: real; Procedure Summa(var f,d,e: vector);

Procedure ProizvScal(var f,d: vector; var k: real); Procedure ProizvVect(var f,d,e: vector);

Если теперь в основной программе будетзаписана строка

USES Vect;

то в ней станут доступными тип Vector и процедуры Summa,

ProizvScal и ProizvVect.

Исполняемая часть. Содержит тела процедур и функций, объяв- ленных в интерфейсной части. Здесь же могут объявляться локаль- ные для модуля объекты вспомогательные типы, константы, пе-

170

Лабораторная работа № 14

 

 

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

Инициирующая часть. Она может отсутствовать вместе с начи- нающим ее словом Begin или быть пустой. В эту часть помещают исполняемые операторы, содержащие некоторый фрагмент про- граммы. Эти операторы исполняются до передачи управления ос- новной программе и обычно используются для подготовки ее рабо- ты. В инициирующей части, например, могут открываться необхо- димые файлы, устанавливаться значения переменных и т.д.

КОМПИЛЯЦИЯ МОДУЛЕЙ.

В Turbo Pascal определены три режима компиляции: COMPILE, MAKE и BUILD. Они отличаются только способом связи компили- руемого модуля или основной программы с другими модулями, объявленными в предложении USES.

При компиляции в режиме COMPILE все упоминающиеся в пред- ложении USES модули должны быть предварительно откомпилиро- ваны и результаты их компиляции помещены в одноименные фай- лы с расширением TPU. Например, если в программе (или модуле)

есть строка

USES Vect;

то на диске в каталоге, объявленном опцией UNIT DIRECTORIES, уже должен быть файл VECT.TPU. Такой файл создается в результа- те компиляции самого модуля.

В режиме MAKE компилятор проверяет наличие TPUфайлов для каждого объявленного модуля. Если какой-либо из файлов не обна- ружен, система пытается отыскать одноименный файл с расшире- нием PAS (то есть файл с исходным текстом модуля) и приступает к его компиляции. В этом режиме система следит за возможными изменениями исходного текста любого используемого модуля. Ес- ли внесены какие-либо изменения в исходный текст модуля, то, не-

Модули

171

 

 

зависимо от того, есть ли уже соответствующий TPU файл или нет, система осуществляет его компиляцию перед компиляцией основ- ной программы. Если внесены изменения в интерфейсную часть модуля, то будут перекомпилированы также и все другие модули, обращающиеся к нему.

В режиме BUILD существующие TPU файлы игнорируются, а сис- тема ищет и компилирует соответствующие PAS-файлы для каждо- го из объявленных модулей. После компиляции в этом режиме можно быть уверенным, что учтены все изменения, сделанные в любом из модулей.

Пример.

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

Unit Vect; INTERFACE

Type vector=Record x,y,z: real;

end;

Var a, b, c : vector; i: real; Procedure Summa(var f,d,e: vector);

Procedure ProizvScal(var f,d: vector; var k: real); Procedure ProizvVect(var f,d,e: vector); IMPLEMENTATION

Procedure Summa; Begin

e.x:=f.x+d.x;

e.y:=f.y+d.y;

e.z:=f.z+d.z;

End;

Procedure ProizvScal; Begin

k:= f.x*d.x+f.y*d.y+f.z*d.z; End;

Procedure ProizvVect; Begin

e.x:=f.y*d.z-f.z*d.y; e.y:=f.z*d.x-f.x*d.z;

e.z:=f.x*f.y-f.y*d.x; End;

172

Лабораторная работа № 14

 

 

END.

Текст этого модуля необходимо сохранить в файле с именем VECT.PAS. После этого можно написать такую, например, про- грамму:

Program PrimerModul; Uses Vect;

Var a,b,c: vector; BEGIN

Writeln('Введите координаты вектора а'); With a do

Readln(x,y,z);

Writeln('Введите координаты вектора b'); With b do

Readln(x,y,z);

Summa(a,b,c);

Writeln('Сумма векторов a и b равна', c.x: 2, c.y: 2, c.z: 2); ProizvScal(a,b,i);

Writeln('Скалярное произведение векторов a и b равно ', i: 2); ProizvVect(a,b,c);

Writeln('Векторное произведение векторов a и b равно ', c.x: 2, c.y: 2, c.z: 2);

readln;

END.

Стандартные модули. В Turbo Pascal имеется восемь стандартных модулей, в которых содержится большое число разнообразных ти- пов, констант, процедур и функций. Эти модули имеют имена

SYSTEM, DOS, CRT, PRINTER, GRAPH, OVERLAY, TURBO3 и GRAPH3. Модули GRAPH, TURBO3 и GRAPH3 содержатся в одно-

именных TPU-файлах, остальные входят в состав библиотеки TURBO.TPL. Модуль SYSTEM подключается ко всем паскалевским программам автоматические, остальные доступны лишь после их объявления в списке USES.

КОНТРОЛЬНЫЕ ЗАДАНИЯ.

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