Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_pascal.doc
Скачиваний:
10
Добавлен:
27.09.2019
Размер:
1.43 Mб
Скачать

Федеральное агентство по образованию

Государственное общеобразовательное учреждение

Высшего профессионального образования

“Ижевский государственный технический университет”

ПРАКТИКУМ ПО ПРОГРАММИРОВАНИЮ НА ЯЗЫКЕ PASCAL

учебное пособие для студентов направления

230200.62 – «Информационные системы»

Ижевск 2007

УДК

Составители: докт. физ.-мат. наук, проф. М.М. Горохов,

канд. физ.-мат. наук, доц. А.В. Корепанов

Рецензент: докт. физ.-мат. наук, проф. В.А. Тененев

Учебное пособие к выполнению лабораторных работ по программированию на языке Pascal. – Ижевск: Изд-во ИжГТУ, 2007. – 100 с.

Учебное пособие содержит необходимые теоретические сведения, задания к лабораторным работам и контрольные вопросы по программированию на языке Pascal. Пособие предназначено для студентов направления 230200.62 – «Информационные системы»

Рекомендовано к изданию на заседании кафедры «Информационные системы» факультета «Прикладная математика» 19.10.2006 г.

© Горохов М.М., составление, 2006

© Корепанов А.В., составление, 2006

© Издательство ИжГТУ, 2006

Оглавление

  1. Лабораторная работа №1. «Программа линейной структуры» 4

  2. Лабораторная работа №2. «Операторы цикла» 10

  3. Лабораторная работа №3. «Массивы» 16

  4. Лабораторная работа №4. «Процедуры и функции» 22

  5. Лабораторная работа №5. «Модули» 30

  6. Лабораторная работа №6. «Строки» 33

  7. Лабораторная работа №7. «Файловая система» 37

  8. Лабораторная работа №8. «Графика» 47

  9. Лабораторная работа №9. «Множества и записи» 55

  10. Лабораторная работа №10. «Динамические переменные» 61

  11. Лабораторная работа №11. «Динамические структуры» 65

  12. Лабораторная работа №12. «Объекты» 68

  13. Лабораторная работа №13. «Иерархии объектов» 71

  14. Лабораторная работа №14. «Динамические объекты» 75

  15. Лабораторная работа №15. «Типы данных, определяемые пользователем. Классы. Инкапсуляция» 78

  16. Лабораторная работа №16. «Типы данных, определяемые пользователем. Классы. Наследование. Полиморфизм» 84

  17. Лабораторная работа №17. «Динамические структуры данных. Списки: основные виды и способы реализации» 88

  18. Лабораторная работа №18. «Программирование рекурсивных алгоритмов» 92

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

Тема: «Программа линейной структуры»

Целью работы является освоение:

 среды программирования;

 объявления скалярных переменных целого и вещественного типов;

 основных характеристик переменных целого и вещественного типов;

 арифметических выражений.

Задание на выполнение лабораторной работы

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

Программа должна включать:

 объявление переменных целых и вещественных типов;

 ввод исходных данных;

 вычисление значения выражений в соответствии с вариантом задания;

 вывод результатов выполнения программы.

Средства и оборудование

Персональная ЭВМ, среда программирования Borland Pascal.

Теоретические основы

Алфавит языка

1. Латинские строчные и прописные символы: A, B, …, Z и a, b, …, z. Различий между строчными и прописными символами нет.

2. Арабские цифры от 0 до 9.

3. Символы подчеркивания _ и пробел.

4. Специальные символы: + – * / = < > ( ) [ ] { } . , : ; ^ @ $ #

5. Идентификаторы – имена, определяемые пользователем посредством латинских символов, символа подчеркивания и арабских цифр. Максимальный размер – 64 символа. Начинаться с цифры не могут.

6. Зарезервированные (служебные) слова: определены в стандарте языка. Не могут использоваться в качестве идентификаторов.

7. Операторы – действия, связанные с реализацией алгоритма.

Числовые типы языка

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

Byte – короткое целое без знака (0…255);

ShortInt – короткое целое со знаком (–128…+127);

Word – целое без знака (0…65535);

Integer – целое со знаком (–32768…+32767);

LongInt – длинное целое со знаком (–2147483648…+2147483648);

Real – вещественное , 11 знаков после запятой;

Single – вещественное с единичной точностью , 7 знаков после запятой;

Double – вещественное с двойной точностью , 15 знаков после запятой;

Extended – вещественное с повышенной точностью , 19 знаков после запятой.

Структура программы

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

Program Имя_программы; {заголовок}

{Раздел описаний}

const

Описание констант;

var

Описание переменных;

begin

Основной блок программы {тело программы}

end.

Директива Program определяет имя программы, которое является идентификатором. Директива может отсутствовать.

Директива const открывает раздел описания констант. Раздел может отсутствовать. Разделов может быть несколько.

Константа – это идентификатор, отмечающий значение, которое не может изменяться.

const

A=10;

B=25;

Директива var открывает раздел описания переменных. Раздел может отсутствовать. Разделов может быть несколько.

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

var

x: Real;

y, z: Doudle;

i, j, k: Integer;

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

const

C:Integer=10;

D:Real=25.5;

Основной блок (тело программы) служит для реализации последовательности операторов.

begin

x:= 27.5;

y:= 30.067;

z:= (x+y)*A–(C–D)*B;

C:= zx;

D:=C+y;

end.

Варианты заданий

  1. Даны катеты прямоугольного треугольника. Вычислить его гипотенузу, периметр и площадь.

  2. Даны три действительных числа. Вычислить среднее арифметическое этих чисел и среднее геометрическое их модулей.

  3. Даны три действительных числа. Вычислить их сумму, разность и произведение.

  4. Смешано V1 литров воды температуры T1 с V2 литрами воды температуры T2. Вычислить объем и температуру образовавшейся смеси.

  5. Вычислить периметр и площадь правильного n-угольника, описанного около окружности радиуса R.

  6. Даны гипотенуза и катет прямоугольного треугольника. Вычислить второй катет и радиус вписанной окружности.

  7. Дана сторона равностороннего треугольника. Вычислить площадь этого треугольника.

  8. Известна длина окружности. Вычислить площадь круга, ограниченного этой окружностью.

  9. Треугольник задан величинами своих углов и радиусом описанной окружности. Вычислить стороны треугольника.

  10. Вычислить площадь равнобочной трапеции с основаниями a и b и  углом α при большем основании a.

  11. Треугольник задан длинами сторон (a, b, c). Вычислить:

а) длины высот, медиан, биссектрис;

б) радиусы вписанной и описанной окружностей;

в) углы треугольника.

  1. Треугольник задан координатами своих вершин. Вычислить периметр и площадь треугольника.

  2. Вычислить дробную и целую часть среднего геометрического трех заданных положительных чисел.

  3. Вычислить длину окружности, площадь круга и объем шара одного и того же радиуса.

  4. Вычислить периметр и площадь прямоугольного треугольника по известной длине одного катета и гипотенузы.

  5. По длинам двух сторон треугольника и углу (в град.) между ними найти длину третьей стороны и площадь этого треугольника.

  6. Найти произведение и сумму цифр заданного четырехзначного числа.

  7. Вычислить объем полого цилиндра и его поверхность (радиус цилиндра и отверстия, высота цилиндра известны).

  8. Вычислить объем и поверхность параллелепипеда (необходимые размеры известны).

  9. Вычислить стоимость покупки трех различных товаров: тетрадей, карандашей и авторучек (штучная стоимость товара и его количество известны).

  10. Вычислить стоимость поездки на автомобиле до определенного пункта и обратно. Исходными данными являются: расстояние до пункта, км, расход бензина на 100 км пробега, цена одного литра бензина.

  11. Вычислить величину дохода по вкладу. Годовая процентная ставка и время хранения (в днях) задаются во время работы программы.

  12. Произвести пересчет величины временного интервала, заданного в минутах, в величину, выраженную в часах и минутах.

  13. Разработать программу определения стоимости разговора по телефону с учетом скидки 20% по субботам и воскресеньям.

  14. Разработать программу, которая вычисляет оптимальный вес пользователя. Оптимальный вес вычисляется по формуле: рост (в сантиметрах) – 100.

Вычислить:

а)  где = 3.981, = –1.625, = 0.512;

б)  где = –6.251, = 0.827, = 25.001;

в)  где = 3.251, = 0.325, = 0.466;

г)  где = –0.622, = 3.325, = 5.541;

д)  где = 17.421, = 10.400, = 0.828;

е)  где x = 1.625, = –15.400,

= 0.252;

ж)  где x = 2.444, = 0.869, = –0.166;

з)  , , где = 0.335, = 0.25, = 32.05;

и)  , , где = 3.258, = 4.005, = –0.666;

к)  , где x = 0.100, = –8.750, = 0.765;

л)  , , где = 1.542, = –3.261, = 80.005.

Контрольные вопросы

  1. Назовите основные характеристики данных следующих типов: целых, вещественных.

  2. Что такое именованная (неименованная) константа?

  3. Как определяется тип именованной константы?

  4. Какие разделы могут входить в состав программы?

  5. Каково назначение оператора program?

  6. Поясните объявления констант и переменных программы.

  7. Каковы основные характеристики данных типа real?

  8. Поясните назначение и форму оператора присваивания.

  9. Какие вы знаете типы выражений?

  10. Каково назначение выражений?

  11. Каково назначение арифметического выражения?

  12. Из каких элементов формируются выражения?

  13. Поясните правила выполнения выражений.

  14. Что может быть операндом арифметического выражения?

  15. Назовите арифметические операции в порядке убывания их приоритета.

  16. В какой последовательности выполняются операции арифметического выражения.

  17. В каких конструкциях языка Pascal можно использовать арифметические выражения?

  18. Назовите примеры функций, которые можно использовать в арифметических выражениях.

  19. Назовите математические функции языка Pascal?

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

Тема: «Операторы цикла»

Целью работы является:

 освоение использования операторов цикла с параметром (for...do), с предусловием (while...do), с постусловием (repeat...until);

 изучение основных характеристик операторов цикла;

 получение навыков программирования с простыми и вложенными циклами.

Задание на выполнение лабораторной работы

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

Программа должна включать:

 объявление переменных целых и вещественных типов;

 ввод исходных данных;

 вычисление значения выражений в соответствии с вариантом задания;

 вывод результатов выполнения программы.

Средства и оборудование

Персональная ЭВМ, среда программирования Borland Pascal.

Теоретические основы

Оператор цикла задает многократное выполнение определенных операторов. Если число повторений заранее известно, то подходящей конструкций является оператор цикла с параметром (for). В противном случае следует использовать операторы цикла с предусловием (while) или постусловием (repeat).

Синтаксис оформления цикла с параметром следующий:

for параметр := first to last do оператор;

или

for параметр := first downto last do оператор;

Оператор for вызывает повторение оператора, стоящего после do каждый раз, пока значение будет проходить диапазон от first до last. Управляющая переменная (параметр), начальное (first) и конечное (last) значения должны быть перечисляемого типа. При использовании to значение управляющей переменной увеличивается при каждом выполнении цикла, при использовании downto – уменьшается.

Примеры использования оператора цикла с параметром.

Вычислить . Вычисление проведем с использованием простого цикла.

var

k, n: Integer;

S: Real; {сумма}

p: Real; {результат }

x: Real;

begin

x:= 5; n:= 10;

S:= 0; p:=1; {начальные значения суммы и }

for k:= 1 to n do

begin

p:= p*x; {вычисляем }

S:= S+x;

end;

{вывод результата}

end.

Вычислить . Вычисление проведем с использованием вложенного цикла.

var

i, j: Integer;

S: Real;

begin

S:= 0;

for i:= 1 to 100 do

for j:= 1 to 50 do

S:= S+1/(i+j);

{вывод результата}

end.

Синтаксис оформления цикла с предусловием следующий:

while expression do оператор

Оператор, стоящий после do, циклически выполняется до тех пор, пока логическое выражение (expression) имеет значение истина (true). Выражение (expression) вычисляется перед выполнением оператора, т.е. если оно примет значение ложь (false) в самом начале, оператор не будет выполнен ни разу.

Пример использования оператора цикла с предусловием.

Вычислить 10!

var

factorial: Longint;{факториал}

n: Integer; {условие цикла}

begin

n:= 1; {начальное значение для условия цикла}

factorial:= 1; {начальное значение для факториала= 0!}

while n<=10 do

begin

factorial:= factorial*n; {вычисляем n!}

n:= n+1;

end; {while}

{вывод результата}

end.

Синтаксис оформления цикла с постусловием следующий:

repeat

оператор;

оператор;

...

оператор;

until expression;

Операторы между repeat и until последовательно выполняются, пока логическое выражение (expression) имеет значение ложь в конце выполняемой последовательности. Последовательность выполняется как минимум один раз.

Пример использования оператора цикла с постусловием.

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

var

Aold, Anew: Real; { соответственно}

n: Integer;

x, eps: Real;

begin

x:= 5; n:= 1; Anew:=x; {начальные значения}

eps:=1E-3;

repeat

n:=n+1;{переходим к следующему значению n}

Aold:=Anew; {определяем }

Anew:=sqrt(abs(4*sqr(Aold)–2*x)); {вычисляем }

until (abs(Aold-Anew)<eps) or n>1E+4;

{вывод результата}

end.

Варианты заданий

  1. Дано натуральное число n. Вычислить:

а) ; б) ;

в) ; г) .

  1. Вычислить

а) ; б) ;

в) ; г) .

  1. Даны натуральное число n, действительное число x. Вычислить:

а) ; б) ;

в) ; г) .

  1. Даны действительные числа x, ε (x ≠ 0, ε > 0). Вычислить с точностью ε:

а) ; б) ;

в) ; г) ;

д) ; е) ;

ж) ; з) .

  1. Даны действительные числа x, a, ε ( , ε > 0). Вычислить с точностью ε значение .

  2. Даны целое число n, действительные числа x, ε ( , ε > 0). Вычислить с точностью ε значение .

  3. Дано действительное число x. Вычислить с точностью 10-6:

а) ; б) ;

в) ; г) ;

д) ; е) ;

ж) ; з) .

  1. Даны натуральное число k, действительное число а (а > 0). Последовательность x0, x1, … образована по закону

, i=1, 2,…

Найти первое значение xn, для которого .

  1. Дано действительное число x. Последовательность a1, a2, … образована по следующему закону:

а) ; б) ;

в) ; г) .

Получить a1+…+ak, где k – наименьшее целое число, удовлетворяющее двум условиям: k >10 и .

  1. Дано действительное число ε (ε > 0). Последовательность a1, a2, … образована по следующему закону:

а) ;

б) ;

в) ;

г) .

Найти первый член аn ( ), для которого выполнено условие .

  1. Даны действительные числа x, ε (ε > 0). Последовательность a1, a2, … образована по следующему закону: a1 = x; далее для n = 2, 3, … выполнено:

а) ; б) ;

в) ; г) .

Найти первый член аn ( ), для которого выполнено условие (ограничиться рассмотрением первых 104 членов).

Контрольные вопросы

  1. Поясните назначение операторов цикла?

  2. Поясните структуру и параметры операторов цикла?

  3. Какой тип должен иметь параметр в операторе for?

  4. При каком условии будут выполняться операторы while, repeat?

  5. C какой целью могут быть использованы вложенные циклы?

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

Тема: «Массивы»

Целью работы является:

 освоение объявления массивов целых и вещественных типов;

 овладение навыками алгоритмизации и программирования структур типа массив;

 изучение основных характеристик массивов данных;

 получение навыков использования программирования с вложенными циклами.

Задание на выполнение лабораторной работы

Разработать схему алгоритма и программу обработки массива в соответствии с вариантом задания.

Программа должна включать:

 объявление массивов целых и вещественных типов;

 ввод исходных данных;

 обработку числовых значений массива в соответствии с вариантом задания;

 вывод результатов выполнения программы.

Средства и оборудование

Персональная ЭВМ, среда программирования Borland Pascal.

Теоретические основы

Массив – это совокупность однотипных элементов. В массивы могут быть объединены данные любого типа. Данные объединяются в массив в случае, если необходимо выполнить одни и те же действия над определенным количеством однотипных значений. Массивы отображают следующие математические понятия:

 вектор с элементами для – одномерный массив;

 матрица с элементами – двумерный массив;

 пространство n-мерный массив, где n – количество его измерений (индексов).

Объявление массива определяет атрибуты, размерность и размер:

 размерность определяет количество индексов при обращении к элементу массива;

 размер массива определяет количество его элементов с учетом всех его измерений.

Массивы можно объявить в разделах type или var. Форма объявления массива:

type( var)

T = array [T1] of T2;

где T – идентификатор типа массива (идентификатор массива);

T1 – тип индексов массива в виде списка типов, по одному для каждого измерения (как правило тип индексов диапазонный);

T2 – тип элементов массива.

Примеры объявления массивов:

type

Vector=array[0..10] of Real;

Matrix= array[0..10,0..10] of Real;

Matrix1=array[0..10] of Vector;

var

f: Vector;

A: Matrix;

f1: array[0..10] of Integer;

A1: array[0..10,0..10] of Integer;

B: array[0..10,0..20,0..30 ] of Extended;

При объявлении массива границы изменения значений индексов массива можно определить как константы. Например:

const

m=10;

n=20;

A2: array[0..m,0..n] of Real;

Обращение к массиву можно производить только поэлементно. Например:

for i:= 0 to 10 do

f[i]:= …;

for i:= 0 to 10 do

for j:= 0 to 10 do

a[i, j]:=…;

Варианты заданий

1. Даны натуральное число n, действительные числа a1, …, an:

а) определить количество положительных и отрицательных членов последовательности;

б) определить min и max значения;

в) наименьшее (наибольшее) из четных чисел, входящих в последовательность;

г) наименьшее (наибольшее) из нечетных и количество четных чисел, входящих в последовательность;

д) отсортировать последовательность по возрастанию (убыванию) значений элементов;

е) определить ;

ж) получить все значения j ( ), для которых ;

2. Даны целые числа a1, …, a50. Получить последовательность b1, ..., b50, которая отличается от исходной тем, что все нечетные члены удвоены.

3. Вычислить , где

4. Дано

Получить .

5. Дано

Получить .

6. Дано

Среди a1, …, an найти все положительные значения, среди положительных a1, …, an выбрать наименьшее число.

7. Дано . Найти сумму квадратов тех чисел a1, …, a100, которые не превосходят двух.

8. Даны натуральное число n, действительные числа x1, ..., x3n. Вычислить сумму чисел из xn+1, …, x3n, которые превосходят по величине все числа x1, …, xn.

9. Даны действительные числа a, b (a < b), натуральное число n, функция у = f(x), определенная на отрезке [а, b]. Для значений аргумента xi = a+ih (i = 0, 1, ..., n), h=(b – а)/n вычислить значения функции yi=f(xi) (= 0, 1, ..., n). Вывести хi и уi (i = 0, 1, ..., n) в виде таблицы из двух колонок. В i-ю строку таблицы заносятся соответствующие значения хi и уi. Рассмотреть следующие функции:

а) у = sinх + cos2х, а = –, b=, n=50;

б) у = sin + соsх, а = 0, b = 2, n=50;

в) у = , а = –3, b = 5, n = 40;

г) у = , а = –1, b = 2, n = 30;

д) у = xex, а = –1, b = 3, n = 40.

10. Рассматривается последовательность a1, …, a1000. Требуется определить, сколько членов последовательности с номерами 1, 2, 4, 8, 16, ... имеют значение, меньшее, чем 0.25. При этом считать, что

а) ak = sin2(3k+5) – cos(k2 – 15), k=1, 2, ..., 1000;

б)  ;

в) a1, …, a1000 – заданные действительные числа;

г)  .

Дана матрица размером .

  1. Найти сумму элементов каждого столбца.

  2. Найти сумму элементов каждой строки.

  3. Найти сумму элементов каждого четного столбца.

  4. Найти сумму элементов каждой четной строки.

  5. Найти сумму элементов каждого нечетного столбца.

  6. Найти сумму элементов каждой нечетной строки.

  7. Найти сумму элементов матрицы.

  8. Найти элемент, имеющий наибольшее значение.

  9. Найти элемент, имеющий наименьшее значение.

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

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

Дана квадратная матрица порядка N

  1. Просуммировать элементы главной диагонали.

  2. Просуммировать элементы побочной диагонали.

  3. Просуммировать элементы, расположенные над побочной диагональю.

  4. Просуммировать элементы, расположенные под главной диагональю.

  5. Просуммировать элементы, расположенные под побочной диагональю.

  6. Заполнить квадратную матрицу таким образом, чтобы значения элементов главной диагонали были равны единице.

  7. Заполнить квадратную матрицу таким образом, чтобы элементы побочной диагонали были равны единице.

  8. Определить, является ли матрица симметричной относительно главной диагонали.

  9. Определить, является ли матрица симметричной относительно побочной диагонали.

  10. Найти сумму элементов первой строки и последнего столбца.

  11. Найти сумму элементов первого столбца и последней строки.

  12. Найти наибольшее из значений элементов первой строки и последнего столбца.

  13. Найти наибольшее из значений элементов главной диагонали.

  14. Найти наибольшее из значений элементов побочной диагонали.

  15. Найти наибольшее из значений элементов, находящихся над главной диагональю.

  16. Найти наибольшее из значений элементов, находящихся под главной диагональю.

  17. Найти наибольшее из значений элементов, находящихся над побочной диагональю.

  18. Найти наибольшее из значений элементов, находящихся под побочной диагональю.

  19. Значения элементов главной диагонали заменить нулем и просуммировать элементы, расположенные под главной диагональю.

  20. Значения элементов главной диагонали заменить нулями и просуммировать элементы, расположенные под побочной диагональю.

  21. Дана матрица порядка n. Найти наибольшее из значений элементов, расположенных в заштрихованной части матрицы:

  1. Заполнить квадратную матрицу порядка n и вывести на экран:

a) ; б) ; в) ;

г) ; д) ; е) ;

  1. Даны квадратная матрица А порядка n и вектор b с n элементами. Вычислить:

a) ;

б) ;

в) , где E – единичная матрица порядка n.

  1. Дана квадратная матрица A порядка n. Получить вектор , где b – вектор, элементы которого вычисляются по формуле:

а) , (i=1, …, n);

б) (i=1, …, n).

  1. Дано х  R. Получить квадратную матрицу порядка 10:

, середина заполняется нулями.

Контрольные вопросы

  1. Что такое массив? Как обратиться к элементу в массиве?

  2. Особенности расположения элементов массива в памяти ЭВМ. Особенности расположения в памяти многомерных массивов.

  3. Каким образом задается описание массива, что в нем указывается?

  4. Общие и отличительные черты одномерных, двумерных и n-мерных массивов.

  5. В каких операциях могут участвовать массивы, и какие к ним при этом предъявляются требования?

  6. Что называется сортировкой массива? Какие методы сортировки вы знаете?

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

Тема: «Процедуры и функции»

Целью работы является:

 изучение строения подпрограмм (процедур и функций);

 освоение назначения и состава формальных и фактических параметров;

 изучение правил записи и согласования формальных и фактических параметров;

 изучение правил вызова подпрограмм;

 изучение приемов отладки подпрограмм;

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

 получение навыков программирования с подпрограммами.

Задание на выполнение лабораторной работы

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

Программа должна включать:

 объявление процедур и функций;

 ввод исходных данных;

 обработку данных и проведение вычислений в соответствии с вариантом задания;

вывод результатов выполнения программы.

Средства и оборудование

Персональная ЭВМ, среда программирования Borland Pascal.

Теоретические основы

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

 интерфейс подпрограммы, то есть информацию, необходимую для ее вызова;

 локальный контекст подпрограммы – совокупность описаний констант и переменных, с которыми осуществляются действия;

 операторы, выполняющие действия, определенные для подпрограммы.

В языке Pascal существует два вида подпрограмм: процедуры и функции.

Процедура – оператор, выполняющий обработку данных. Функция производит обработку данных и возвращает результат в виде значения определенного типа.

Синтаксис оформления процедур (функций):

Имя процедуры (список формальных параметров);

Имя функции (список формальных параметров):тип результата;

label

перечисление меток внутри процедуры;

const

описание локальных типов;

var

описание локальных переменных;

begin

тело процедуры (функции)

end;

Для формирования результата выполнения функции в теле функции должен быть оператор присвоения имени функции результата в виде:

имя функции: = выражение.

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

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

Синтаксис оформления имеет вид:

Имя процедуры ( параметр значение: тип параметра);

Имя функции (параметр значение: тип параметра): тип результата;

Формальные параметры-переменные используются для передачи в вызывающую программу (подпрограмму) результата выполнения процедуры. Синтаксис оформления имеет вид:

Имя процедуры( var параметр значение: тип параметра);

Пример 1. Описать функцию вычисления n!.

Program Ex1;

function f(n:Integer):Longint;

var

i: Integer; {параметр для организации цикла}

Result: Longint; {вспомогательная переменная, используемая как результат вычислений}

begin

Result:=1; {0!=1}

for i:= 1 to n do

Result: = Result*i;

f:= Result; {формирование результата выполнения функции}

end;

var

у:Longint;

begin

y: = f(5); {вызов функции}

{вывод результата}

end.

Пример 2. Описать рекурсивную функцию вычисления n!.

function f(n:Integer):Longint;

begin

if n=0 then f:=1 {0!=1}

else f: = n*f(n – 1);

end;

Пример 3. Описать процедуру возведения действительного числа x в целую степень n.

Program Ex3;

procedure Pwer(x:Real; n:Integer; var Result: Extended):Longint;

var

i:Integer; {параметр для организации цикла}

begin

Result:=1; { =1}

for i:= 1 to abs(n) do

Result:= Result*x; {вычисление }

If n > 0 then Result:= 1/Result; {для отрицательных степеней}

end;

var

у:Extended; {результат вычислений}

begin

Power(10.47, 7, y); {вызов процедуры}

{вывод результата}

end.

Варианты заданий

  1. Даны действительные числа s, t. Получить

,

где .

  1. Даны действительные числа s, t. Получить

,

где .

  1. Дано действительное число у. Получить , где .

  2. Даны действительные числа а, b, с. Получить

.

  1. Даны действительные числа а, b и натуральное n. Получить

6. Даны натуральные числа n, m, целые числа . Получить

7. Даны натуральные числа k, l, m, действительные числа . Получить

8. Даны действительные числа s, t. Получить

,

где .

9. Даны действительные числа . Получить для t=1, 2, 3, 4 значения , где .

10. Дано натуральное число n и действительные числа s, t, . Получить ,

где .

11. Даны натуральное число n, действительное число x. Вычислить:

а) ; б) ;

в) ; г) .

12. Даны действительные числа x, ε (x ≠ 0, ε > 0). Вычислить с точностью ε:

а) ; e) ;

б) ; ж) ;

в) ; з) ;

г) ; и) .

13. Дано действительное число x и натуральное n. Описать функции:

1)  ;

2)  ;

3)  ;

4)  ;

5)  ;

6)  ;

7)  ;

8)  ;

9)  ;

10)  ;

11)  ;

12)  ;

13)  ;

14)  ;

15)  ;

16)  ;

17)  ;

18)  ;

19)  ;

20)  ;

21)  ;

22)  ;

23)  ;

24)  ;

25)  ;

26)  ;

27)  ;

28)  .

Контрольные вопросы

  1. В каком месте программы объявляются процедуры (функции)?

  2. Поясните структуру процедуры (функции).

  3. Что такое глобальные и локальные переменные?

  4. Что такое формальные и фактические параметры?

  5. Какие типы данных могут быть использованы при определении параметров подпрограмм?

  6. Что такое параметры-значения и параметры-переменные?

  7. Как определить параметры-значения и параметры-переменные?

  8. В каких случаях следует использовать параметры-значения и параметры-переменные?

  9. Как производится вызов процедуры (функции)?

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

Тема: «Модули»

Целью работы является:

 изучение построения и подключения модулей;

 получение навыков программирования с использованием модулей.

Задание на выполнение лабораторной работы

Создать библиотеку подпрограмм в соответствии с вариантом задания.

Программа должна включать:

 вычисление значений выражений в соответствии с вариантом задания;

 вывод результатов выполнения программы.

Средства и оборудование

Персональная ЭВМ, среда программирования Borland Pascal.

Теоретические основы

Модуль (unit) в языке Pascal – это специальным образом оформленная библиотека определений типов, констант, переменных, а также процедур и функций. Модуль не может быть отправлен на выполнение самостоятельно: он может только участвовать в построении программы или другого модуля. Для того чтобы подключить модуль к программе (или другому модулю), необходимо и достаточно указать его идентификатор в директиве uses.

Program Pr1;

uses Идентификатор модуля;

...

Модуль в своем составе имеет четыре раздела:

 заголовок;

 раздел объявлений (интерфейс);

 раздел реализации;

 раздел инициализации.

Заголовок модуля состоит из зарезервированного слова Unit, за которым следует идентификатор модуля. Модуль должен быть помещен в файл, имя которого совпадает с идентификатором модуля (в случае если идентификатор модуля состоит более чем из 8 символов, то имя файла, содержащего модуль, должно соответствовать первым 8 символам идентификатора модуля).

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

Раздел реализации модуля включает описание подпрограмм, в том числе заголовки, которые содержатся в разделе объявлений, локальных константы, типов и переменных. В программе, подключающей модуль, объявленные в разделе реализации структуры использоваться не могут. Раздел реализации начинается с зарезервированного слова Implementation.

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

Пример. Описать модуль, содержащий функцию вычисления n!.

unit MyUnit;

interface {раздел объявлений}

function f(n:Integer):Longint;

implementation {раздел реализации}

function f(n: Word): Longint;

var

i: Integer; {параметр для организации цикла}

Result: Longint; {вспомогательная переменная используемая как результат вычислений}

begin

Result:=1; {0!=1}

for i:= 1 to n do

Result:= Result*i;

f:= Result; {формирование результата выполнения функции}

end;

begin {раздел инициализации}

end.{конец модуля}

Варианты заданий

Провести вычисления в соответствии с заданием на лабораторную работу №4. Необходимые для вычислений функции (факториал, возведение в степень и т.д.) описать в модуле.

Контрольные вопросы

1. Назовите разделы модуля.

2. Как оформляется заголовок модуля?

3. Что включает в себя интерфейс модуля?

4. Что содержится в разделе реализации модуля?

5. В каком разделе объявляются локальные переменные модуля?

6. С какой целью может быть использован раздел инициализации модуля?

7. В какой части программы (модуля) происходит подключение модуля?

8. Назовите стандартные модули?

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

Тема: «Строки»

Целью работы является:

 освоение объявления переменных символьного и строкового типа;

 изучение основных характеристик символьного и строкового типов;

 освоение стандартных процедур и функция для работы с символами и строками.

 получение навыков программирования с использованием символов и строк.

Задание на выполнение лабораторной работы:

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

Программа должна включать:

 объявление переменных символьного и строкового типов;

 ввод исходных данных;

 выполнение действий над символьными и строковыми переменными в соответствии с вариантом задания;

 вывод результатов выполнения программы.

Средства и оборудование

Персональная ЭВМ, среда программирования Borland Pascal.

Теоретические основы

Символьный тип Char определяет полный набор ASCII-символов. Строка символов – это последовательность любого количества символов из набора ASCII, расположенных на одной строке и заключенных в апострофы. Строка, состоящая из одного символа, называется символьной константой. Если между апострофами нет ни одного символа, то такая строка называется нулевой строкой. Для включения в строку неотображаемых символов используется их ASCII-код с # перед ним. Строку можно рассматривать как массив символов, однако в связи с широким использованием строк они выделены в отдельный тип данных – тип String.

Например: проверить, является ли введенная совокупность символов названием месяца.

const

Instance:array[1..12] of string = (‘January’, ‘February’, ‘March’, ‘April’, ‘May’ ‘June’ ‘July’ ‘August’, ‘September’, ‘October’, ‘November’, ‘December’); {массив, содержащий названия месяцев}

Month: Boolean = False;

var

Str: String; {переменная для записи введенной совокупности символов}

i: Integer; {параметр для организации цикла}

begin

WriteLn(‘Input the string: ’); {приглашение к вводу строки}

ReadLn(Str); {считывание совокупности символов в переменную Str}

for i:= 1 to 12 do

if Str = Instance[i] then {проверка, является ли строка названием месяца}

Month := true;

{вывод результата}

if Month then

WriteLn(‘String - name of month’)

else

WriteLn(‘String - not name of month’);

end.

Варианты заданий

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

2. Указать, сколько раз в строке встречается заданное сочетание заданных символов.

3. Упорядочить слова заданного предложения в соответствии с ростом их длины.

4. Указать, сколько раз заданное слово встречается в строке.

5. Найти «симметричные» слова в предложении.

6. Удалить из предложения указанное словосочетание.

7. Указать, сколько раз в строке встречается указанный символ.

8. В предложении заменить окончание ING каждого слова на ED.

9. Удалить из строки слова, состоящие не более чем из двух букв.

10. Описать функцию digits без параметров, которая подсчитывает количество цифр в строке.

11. Описать функцию summ без параметров, которая находит сумму цифр в строке.

12. Подсчитать количество цифр в исходной символьной строке.

13. Дан текст; найти наибольшее количество цифр, идущих в нем подряд.

14. Дан текст; определить, содержит ли он символы, отличные от букв и пробела.

15. Дан текст.

а) Если в тексте нет символа +, то оставить этот текст без изменения, иначе каждую из малых латинских букв, предшествующих первому вхождению символа, заменить на цифру 3.

б) Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа + заменить символом #.

16. Дан текст; если в нем нет малых латинских букв, то оставить его без изменения, иначе каждый из символов, следующих за первой группой малых латинских букв, заме­нить точкой.

17. Дан текст; выяснить, является ли этот текст

а) идентификатором;

б) десятичной записью целого числа.

18. Дан текст. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами.

а) Для каждого из слов указать, сколько раз оно встречается среди всех слов, образованных символами данного текста;

б) Найти все слова, содержащие наибольшее количество гласных латинских букв (а, е, i, о, и);

в) Найти все слова, в которых доля букв а, b максимальна;

г) В тех словах, которые оканчиваются сочетанием букв мв, заменить это окончание на ей.

19. Дано натуральное число n (n<1000). Записать это число русскими словами (семнадцать, двести пятьдесят три, тысяча и т. д.).

20. Дано натуральное число п, равное выраженной в копейках цене некоторого товара, например 317, 5005, 100 и т. д. Выразить цену в рублях и копейках, например 3 руб. 17 коп., 50 руб. 05 коп., 1 руб. 00 коп. и т. д. (число копеек записывается всегда двумя цифрами).

21. Дан текст, каждый символ которого может быть малой буквой, цифрой или одним из знаков +, /, *. Группой букв будем называть такую совокупность последовательно расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует буква. Аналогично определим группу цифр и группу знаков.

а) Выяснить, встречается ли в данном тексте группа букв опе;

б) Выяснить, верно ли, что в данном тексте больше групп букв, чем групп знаков;

в) Если в данном тексте имеется не менее двух групп букв, то каждый знак +, встречающийся между двумя первыми по порядку группами букв, заменить цифрой 1, знак / заменить цифрой 2, а знак * – цифрой 3. Иначе оставить текст без изменений;

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

д) Найти число таких групп букв, которые начинаются и кончаются одной и той же буквой;

е) Найти все такие группы букв, в которые буква а входит не менее двух раз;

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

22. Дан текст. Если первый символ текста не является малой латинской буквой, то оставить его без изменения. Если же это – малая латинская буква, но за начальной группой малых латинских букв не следует цифра, то также оставить текст без изменения. Иначе каждую цифру, принадлежащую группе цифр, следующей за начальной группой малых латинских букв, заменить символом #.

23. Дан текст.

а) Найти номер первой по порядку группы цифр, начинающейся цифрой 2;

б) Найти число тех групп букв, которые заканчиваются той же буквой, что и первая группа букв.

в) Если в данном тексте есть группа знаков, начинающаяся знаком *, то взять первую по порядку из них и в следующей группе знаков (если таковая имеется) заменить каждый из знаков знаком +.

Контрольные вопросы

1. Как определить текущую длину строки?

2. Какой может быть максимальная длина строки?

3. Какие операции допустимы над строковыми данными?

4. Как можно обратиться к отдельным символам строки?

5. Назовите процедуры и функции для обработки данных строкового типа.

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

Тема: «Файловая система»

Целью работы является освоение:

 основных приемов и подпрограмм для работы с типизированными файлами:

 объявления файлов различных типов;

 процедур для открытия и закрытия файлов;

 стандартных процедур и функция для работы с файлами;

 процессов обработки данных: создания, дополнения, чтения, модификации, поиска данных файла;

 методов удаления данных из файлов.

Задание на выполнение лабораторной работы

Разработать схему алгоритма и программу для решения поставленной задачи.

Программа должна включать:

 объявление переменных файлового типа;

 стандартные процедуры и функции для работы с файлами;

 вывод результатов выполнения программы.

Средства и оборудование

Персональная ЭВМ, среда программирования Borland Pascal.

Теоретические основы

Pascal поддерживает три файловых типа:

 текстовые (тип Text);

 компонентные или типизированные файлы (тип File of …);

 бестиповые файлы (тип File).

Текстовые файлы – это файлы, состоящие из ASCII кодов.

Типизированные – это файлы, состоящие из машинного представления компонент определенного типа.

Бестиповые – это файлы, состоящие из машинного представления компонент различных типов.

Для файлов всех типов необходимо предварительное связывание их логических обозначений (файловых переменных) с физическими файлами.

Файловые переменные, описанные в программе, не могут участвовать в операциях присваивания

Пример объявления файловых переменных:

var

F1 = file of Integer; {типизированный файл целых чисел}

F2: Text; {текстовый файл}

F3: file; {бестиповый файл}

Pascal вводит ряд стандартных процедур и функций для работы с файлами:

procedure Assign(var F; FileName: String) – связывает файловую переменную F с именем физического файла FileName;

Reset(var F) – открывает файл с логическим именем F для чтения;

Rewritet(var F) – открывает файл с логическим именем F для записи;

Close(var F) –закрывает файл с логическим именем F;

Eof(var F): boolean; возвращает True, если достигнут конец файла f.

Ввод и вывод символьной и числовой информации для текстовых файлов осуществляется операторами: Write, WriteLn, Read, ReadLn. Например: прочитать текст из файла text1.txt и записать в файл text2.txt.

var

F1, F2: Text;

St: String; {промежуточная переменная используемая для чтения строк из файла}

begin

Assign(F1, text1.txt’); {связываем файловую переменную F1 с физическим файлом text1.txt}

Reset(F1}; {открываем файл для чтения}

Assign(F2, ‘text2.txt’); {связываем файловую переменную F2 с физическим файлом text2.txt}

Rewrite(F2}; {открываем файл для записи}

while not eof(F1) do {выполняем цикл до тех пор пока не будет достигнут конец файла text1.txt}

begin

ReadLn(F1, St); {читаем строку из файла в переменную St}

WriteLn(F2, St);{записываем строку St в файл}

end;

Close(F1); {закрываем файл}

Close(F2);

end.

Ввод и вывод данных для типизированных файлов осуществляется операторами: Write, Read. Например: в файле Vector.dat расположен одномерный массив, состоящий из 100 элементов типа Real. Прочитать массив из файла.

var

F1: Text;

b: array[1..100] of Real;

begin

Assign(F1, ‘Vector.dat’);

Reset(F1);

i:=1;

while not eof(F1) do

begin

Read(F1, b[i]); {читаем элементы массива из файла}

i:=i+1; {переходим к следующему элементу массива b}

end;

Close(F1);

end.

Преимущество типизированных файлов заключается в том, что они позволяют считывать и записывать «громоздкие» структуры одной командой, например: массив размерности 100  50 прочитать (сохранить) в типизированном файле.

type

Matrix: array[1..100, 1..50] of Real;

var

F1, F2: File of Matrix;

A: Matrix;

begin

Assign(F1, ‘Matrix1.dat’);

Reset(F1);

Assign(F2, ‘Matrix2.dat’);

Rewrite(F2);

Read(F1, A); {считываем массив за одно обращение к файлу}

Write(F2, A); {записываем массив за одно обращение к файлу }

Close(F1);

Close(F2);

end.

Ввод и вывод данных для бестиповых файлов осуществляется операторами:

BlockWriet(var F: File; var Source; Count: Word);

BlockRead(var F: File; var Destin; Count: Word);

Эти процедуры осуществляют запись в переменную Source и чтение в переменную Destin блоков, состоящих из количества байт, которое определено для буфера файла F. Если Count больше 1, то за одно обращение будет считано Count емкостей буфера. Например: массив размерности 100  50 прочитать (сохранить) в типизированном файле.

type

Matrix: array[1..100, 1..50] of Real;

var

F1, F2: File;

A: Matrix;

begin

Assign(F1, ‘Matrix1.dat’);

Reset(F1, SizeOf(Matrix)); {открываем файл с размером буфера вывода SizeOf(Matrix)}

Assign(F2, ‘Matrix2.dat’);

Rewrite(F2, SizeOf(Matrix)); {открываем файл с размером буфера ввода SizeOf(Matrix)}

BlockRead(F1, A, 1); {считываем массив за одно обращение к файлу}

BlockWrite(F2, A, 1); {записываем массив за одно обращение к файлу}

Close(F1);

Close(F2);

end.

Варианты заданий

1. Дан файл f, компоненты которого являются действительными числами. Найти:

а) сумму компонент файла f; произведение компонент файла f;

б) сумму квадратов компонент файла f;

в) модуль суммы и квадрат произведения компонент файла f;

г) последнюю компоненту файла.

2. Дан файл f, компоненты которого являются действительными числами. Найти:

а) наибольшее из значений компонент;

б) наименьшее из значений компонент с четными номерами;

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

г) сумму наибольшего и наименьшего из значений компонент;

разность первой и последней компонент файла.

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

а) количество четных чисел среди компонент;

б) количество удвоенных нечетных чисел среди компонент;

в) количество квадратов нечетных чисел среди компонент.

4. Последовательность x1, x2, … образована по закону (i=1, 2, …). Дано действительное  > 0. Записать в файл h члены последовательности x1x2, …, остановившись после первого члена, для которого выполнено .

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

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

7. Даны файлы f1, f2, f3, f4, f5, компоненты которых являются действительными числами. Организовать обмен компонентами между файлами в соответствии со следующей схемой:

т. е. компоненты файла f1 переписываются в файл f3, компоненты файла f2 – в файл f4 и т.д. Разрешается использовать только один вспомогательный файл h.

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

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

а) являющиеся четными числами;

б) делящиеся на 3 и не делящиеся на 7.

10. Дан символьный файл f. Получить файл g, образованный из файла f заменой всех его прописных (больших) букв одноименными строчными (малыми).

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

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

13. Даны символьные файлы f и g. Записать в файл h сначала компоненты файла f, затем компоненты файла g с сохранением порядка.

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

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

а) не было двух соседних чисел с одним знаком;

б) сначала шли положительные, потом отрицательные числа;

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

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

а) пять положительных, пять отрицательных, пять положительных, пять отрицательных и т.д.;

б) двадцать положительных, двадцать отрицательных, двадцать положительных, двадцать отрицательных и т.д. (предполагается, что число компонент файла f делится на 40).

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

18. Из условия предыдущей задачи удаляется предположение о том, что число компонент файла f делится на 100. Если в последней группе окажется менее ста компонент, то последняя компонента файла g должна быть равна наибольшей из компонент файла f, образующих последнюю (неполную) группу.

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

20. Дан символьный файл f.

а) Подсчитать число вхождений в файл сочетания ab.

б) Определить, входит ли в файл сочетание abcdefgh.

21. Подсчитать число вхождений в файл каждой из букв а, b, с, d, e, f.

22. Даны символьные файлы f и g. Определить, совпадают ли компоненты файла f с компонентами файла g. Если нет, то получить номер первой компоненты, в которой файлы f и g отличаются между собой. В случае когда один из файлов имеет n компонент ( ) и повторяет начало другого (более длинного) файла, ответом должно быть число n+1.

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

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

а) которым в этом файле предшествует символ а;

б) вслед за которыми в этом файле идет символ а.

25. Дан символьный файл f. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Удалить из файла все однобуквенные слова и лишние пробелы. Результат записать в файл g.

26. Дан символьный файл f. Найти самое длинное слово (см. предыдущую задачу) среди слов, вторая буква которых есть е; если слов с наибольшей длиной несколько, то найти последнее. Если таких слов нет вообще, то сообщить об этом. Решить эту задачу:

а) полагая, что слова состоят не более чем из 10 символов;

б) без ограничения на число символов в слове.

27. Дан символьный файл f. Считая, что количество символов в слове не превосходит 20:

а) определить, сколько в файле f имеется слов, состоящих из одного, двух, трех и т.д. символов;

б) определить количество слов в файле f.

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

а) фамилия, имя, отчество;

б) имя, отчество, фамилия.

29. Дан символьный файл f, содержащий произвольный текст «длиной» более 5000 слов. Слова в тексте разделены пробелами и знаками препинания. Получить 100 наиболее часто встречающихся слов и число их появлений. Решить задачу:

а) без ограничения на длины слов;

б) предполагая, что любое слово текста состоит не более чем из 16 букв.

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

а) найти багаж, cредний вес одной вещи в котором отличается не более чем на 0,3 кг от общего среднего веса вещи;

б) найти число пассажиров, имеющих более двух вещей, и число пассажиров, количество вещей которых превосходит среднее число вещей;

в) определить, имеются ли два пассажира, багажи которых совпадают по числу вещей и различаются по весу не более чем на 0,5 кг;

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

д) выяснить, имеется ли пассажир, багаж которого состоит из одной вещи весом не менее 30 кг;

е) дать сведения о багаже, число вещей в котором не меньше чем в любом другом багаже, а вес вещей не больше чем в любом другом багаже с этим же числом вещей.