Файл: Методичка к лабораторным и практическим.doc

ВУЗ: Не указан

Категория: Методичка

Дисциплина: Программирование

Добавлен: 15.11.2018

Просмотров: 5595

Скачиваний: 36

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

24. Найти сумму всех чисел, используемых в тексте.

25. Ввести текст в виде символьной строки. Определить, сколько раз в этом тексте встретился каждый из знаков препинания: запятая, точка, тире, двоеточие.


Задачи II уровня


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

2. Определить, правильно ли в тексте расставлены круглые скобки, т.е. находится ли справа от каждой открывающейся скобки соответствующая ей закрывающаяся скобка, а слева от каждой закрывающейся – соответствующая ей открывающаяся.

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

4. Во введенном в символьную переменную тексте переместить первые десять символов, расположив их после первой встреченной запятой. Если данный перенос возможен, вывести на экран изме­ненный текст, а если он невозможен, вывести соответствующее со­общение.

5. Во введенном в символьную переменную тексте зашифро­вать каждое слово путем переписывания символов в порядке, обрат­ном их следованию в слове. Слова текста разделены одним пробе­лом. Вывести на экран преобразованный текст.

6. Ввести текст в виде символьной строки, в которой слова разделены пробелами. Напечатать слова текста, начинающиеся с буквы "А".

7. Во введенном в символьную переменную тексте поменять местами первое и последнее слово. Длина текста не превышает 254 символа, слова текста разделены одним пробелом.

8. Во введенном в символьную переменную тексте, слова кото­рого разделены одним и более пробелами, заменить окончание ING каждого слова, встречающегося в заданном предложении, на окон­чание ED. Вывести на экран исходный и отредактированный тек­сты.

9. Ввести текст в виде символьной строки, в котором слова разделены пробелами. Напечатать слова текста, заканчивающиеся буквой "А".

10. В массив размерности N (N – заданное число) вводятся слова. Вывести на экран эти слова в порядке их длины, а также определить количество самых длинных слов в массиве.

11. Определите число слов, заканчивающихся и начинающихся одной и той же буквой, в строке, введенной пользователем. Слова разделяются символом пробел.

12. Сформировать новую строку на основе строки, введенной пользователем, переставляя слова в обратном порядке (т.е. первое слово будет последним, второе – предпоследним и т.д.).

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

14. В массив размерности N (N - заданное число) ввести слова длиной не более 20 символов каждое. Вывести эти слова в порядке увеличения их длины с указанием количества букв “а” в каждом из них.


15. Задана строка символов, состоящая из слов, где слово — это любая последовательность символов, не содержащая внутри себя пробелов и разделенная с одной или с обеих сторон одним или несколькими пробелами. Распечатать самое короткое слово, в котором нет буквы "А". Если таких слов нет, то выдать соответствующее текстовое сообщение.


2.3. Записи


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

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

При описании записи задаются имя и тип каждого поля. Описание записи начинается со служебного слова RECORD и заканчивается служебным словом END. В качестве примера опишем тип Person для хранения информации о человеке и переменные Student и Complex типа запись

Type

Person = Record

Fio, Adres, Gruppa : String; {Фамилия, адрес, группа}

Sex : (m, w); {Пол}

Year : Integer; {Год рождения}

End;

Var

Student : Person;

Complex : Record

Re, Im : Real; {Действительная и мнимая части комплексного числа}

End;

Доступ к полям записи осуществляется с помощью составного имени, которое состоит из имени переменной типа запись и имени поля, записываемого через точку, например Student.Fio, Student.Year, Complex.Re и т.д.

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

Student . Fio := ‘Иванов И.И.’;

Student . Adres := ‘Владимир’;

Student . Gruppa := ‘ИСЕ-199’;

Student . Sex := m;

Student . Year := 1982;

Complex . Re := -17.4;

Complex . Im := Complex . Re;

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

WITH <список переменных-записей> DO <оператор>;

Например, фрагмент

With Student, Complex Do

Begin

Fio := ‘Иванов И.И.’;

Adres := ‘Владимир’;

Gruppa := ‘ИСЕ-199’;

Sex := m;

Year := 1982;

Re := -17.4;

Im := Re;

End;

эквивалентен фрагменту из предыдущего примера.

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

а) ввод данных

With Complex Do

Begin

Write(‘Введите действительную часть числа:’);

Readln(Re);

Write(‘Введите мнимую часть числа:’);

Readln(Im);

End;

б) вывод данных

With Student Do

Begin

Writeln(‘Студент ‘, Fio);

Writeln(Year, ‘ года рождения’);

Writeln(‘ Адрес - ’,Adres);

End;

Примеры решения задач на использование записей


Пример 2.17. Дан список, состоящий из 50 записей. Каждая запись содержит фамилию и адрес жителя. Написать программу, которая выводит на экран монитора фамилии двух жителей из списка, живущих в разных городах по одинаковому адресу.


Решение.

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


Один из вариантов программы.

Program Prim217;

Type

Person = Record

Fam, Town : String;

Adres : Record

Strit, House : String;

Flat : Word;

End;

End;

Var

List : Array [1..50] Of Person;

I, J, K : Byte;

Begin

Writeln('Введите список жителей');

For I:=1 To 50 Do

With List[I], Adres Do

Begin

Writeln('Сведения о ', I:2,' жителе');

Write('Фамилия');

Readln(Fam);

Write('Город');

Readln(Town);

Write('Улица');

Readln(Strit);

Write('Дом');

Readln(House);

Write('Квартира');

Readln(Flat);

End;

K:=0;

For I:=1 To 49 Do

For J:=I+1 To 50 Do

If (List[I].Town<>List[J].Town) And

(List[I].Adres.Strit=List[J].Adres.Strit) And

(List[I].Adres.House=List[J].Adres.House) And

(List[I].Adres.Flat=List[J].Adres.Flat) Then

Begin

Writeln(List[I].Fam, ' ',List[J].Fam);

K:=1;

Break

End;

If K=0 Then

Writeln('Нет жителей, живущих в разных городах по одному адресу')

End.


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

Решение.

Возможный вариант программы:

Program Prim218;

Type

Data = Record

Day : 1..31;

Month : 1..12;

Year : 1900..2100;

End;

Anketa = Record

FIO : String;

Sex : Char;

DayR : Data;

End;

Gruppa = Array [1..25] Of Anketa;

Var

Gr : Gruppa;

Buk : Char;

N, I : Integer;

Begin

Write('Введите количество человек в группе (<=25): ');

Readln(N);

Writeln('Введите анкетные данные на каждого человека в группе ');

For I:=1 To N Do

With Gr[I], DayR Do

Begin

Write('ФИО ');

Readln(FIO);

Write('Пол ');

Readln(Sex);

Write('Дата рождения (ДД ММ ГГГГ) ');

Readln(Day, Month, Year);

End;

Write('Символ, по которому производится отбор фамилий ');

Readln(Buk);

Writeln('Список фамилий, начинающихся на букву ',Buk);

For I:=1 To N Do

With Gr[I], DayR Do

If FIO[1] = Buk Then

Writeln(FIO, Day:4,'.',Month:2,'.',Year:4);

End.


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

Решение.

Программа

Program Prim3;

Const N=7; {Число типов деталей}

Type

Zap = Record

TypeDet : String; {Тип детали}

SizePart : Integer; {Размер партии}

End;

Var

Tab : Array [1..N] Of Zap;

Kol, I : Integer;

Det : String;

Begin

Writeln('Введите таблицу Tab');

For I:=1 To N Do

With Tab[I] Do

Begin

Write('Введите тип детали ');

Readln(TypeDet);

Write('Введите размер партии ');

Readln(SizePart);

End;


Write('Введите начальные символы, с которых начинается тип детали ');

Readln(Det);

{Определение количества Kol деталей типа Det }

Kol := 0;

For I:=1 To N Do

With Tab[I] Do

If Copy(TypeDet,1,Length(Det)) = Det

Then Kol := Kol + SizePart;

Writeln('Количество деталей, тип котрых начинается на  ', Det,' = ',Kol);

End.


Пример 2.20. Дана ведомость абитуриентов, сдававших три вступительных экзамена в университет. Определить количество абитуриентов, набравших больше двенадцати баллов.

Решение.

Возможный вариант программы:

Program Prim220;

Var

Ab : Record

FIO : String; {ФИО абитуриента}

Ocen : Array [1..3] Of Byte; {Массив оценок}

End;

N, I, J, Kol : Integer;

Bal : Real;

Begin

Write('Введите количество абитуриентов ');

Readln(N);

Kol := 0;

{Ввод ведомости}

For I:=1 To N Do

With Ab Do

Begin

Write('ФИО ');

Readln(FIO);

Write('Введите три оценки ');

Readln(Ocen[1],Ocen[2],Ocen[3]);

Bal := Ocen[1]+Ocen[2]+Ocen[3];


If Bal>12 Then

Kol := Kol + 1;

End;

Writeln('Количество абитуриентов = ',Kol);

End.


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


  1. Какой тип характеризует объекты, называемые записями?

  2. Как описывается комбинированный тип?

  3. Могут ли компоненты записи быть различных типов?

  4. Какие операции определены над записями?

  5. Как осуществляется доступ к полям записи?

6. С какой целью в Турбо Паскале используется оператор With?


Задачи


  1. Опишите тип записи информации о книгах в библиотеке со следующими полями: автор, название, издательство, год издания, взята книга или нет, номер полки. Напишите программу, которая выводит из массива информацию о тех книгах, которые находятся на руках и которые изданы до 1990 г.

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

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

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

  5. Даны названия N различных спортивных обществ (N - заданное число), фигуристы которых уча­ствовали в соревновании. У каждого фигуриста известны фамилия, название обще­ства и 10 оценок за его выступление. Требуется для каждого спортивного общества определить фигуриста, показавшего наивысший результат, считая его единствен­ным. Баллы, полученные спортсменом, подсчитываются следующим образом: макси­мальная и минимальная оценки отбрасываются, а из остальных формируется сред­няя. При вводе данных обеспечить уникальность наименований обществ и обяза­тельную принадлежность фигуриста к одному из них.

  6. Известна стоимость суточного проживания в каждом номере гостиницы из F эта­жей по К номеров на этаже. О проживающих известны следующие данные: гости­ничный номер, фамилия, дни въезда и выезда. Необходимо напечатать для клиентов счета с указанием дней их вы­езда, фамилии, номера и этажа, дней въезда и выезда и суммы денег за время проживания. (F и К заданы, нумерация гостиничных номеров сплошная, днями въезда и выезда считать числа месяца от 1 до 30).

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

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

  9. В гостинице проживает N постояльцев (N - задано). О каждом известны три харак­теристики: номер проживания, фамилия, заказанное на завтрак блюдо (или отсутст­вие заказа). Необходимо составить сводные (по наименованиям заказанных блюд) заявки на кухню с указанием гостиничных номеров и фамилий постояльцев.

  10. В автохозяйстве имеется N автомашин (N - заданное число). Для каждого автомо­биля заданы три характеристики: номер, марка машины, тип неисправности (или ее отсутствие). Необходимо составить сводные (по типам неисправностей) заявки на ремонт машин с указанием их номеров и марок.

  11. Имеется N типов товаров (названия известны). Для каждого типа товара задано количество единиц этого товара, цена и вес единицы товара. Требуется загрузить контейнер (не превышая его известной грузоподъемности) товарами одного типа так, чтобы стоимость груза в контейнере была максимальной.

  12. 200 учеников шести школ города (номера школ заданы) принимают участие в тес­тировании по математике. Правильные численные ответы к пяти предложенным за­дачам даны. У каждого ученика известны: фамилия, номер школы и пять ответов на задачи. Сведения об учениках не имеют определенной упорядоченности. Составить списки учеников по школам, расположив в каждом списке фамилии учащихся в порядке убы­вания числа решенных ими задач. Предусмотреть возможный ответ "не решил".

  13. Имеется список 60 зданий города, подлежащих реконструкции. Сведения о каж­дом здании содержат названия микрорайона, улицы, номер дома и год постройки. Определить самые старые здания из подлежащих реконструкции и вывести их спи­ски, содержащие полные сведения о них, по микрорайонам. Если в микрорайоне та­ких домов нет, выдать соответствующее сообщение.

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

  15. На заводе имеется N станков (N - заданное число). Для каждого станка заданы три характеристики: инвентарный числовой номер, марка станка и тип неисправности (или ее отсутствие). Необходимо составить сводные (по типам неисправностей) за­явки на ремонт станков с указанием их номеров и марок.

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

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

  18. Сформировать список из фамилий и разме­ров обуви, которую носит каждый студент. Используя сформиро­ванный список, вывести на экран фамилии студентов, начинающихся с “КА”, у которых размер обуви не менее 40.

  19. Сформировать список, содержащий информацию о владельцах автомобилей: фамилия, марка, цвет, гос. номер. Используя сформированный список, вывести на экран всех владельцев автомобилей ВАЗ белого цвета.

  20. Сформировать список, содержащий информацию о телевизорах: фирма-изготовитель, размер экрана в дюймах, стоимость. Используя сформированный список, вывести на экран информацию о телевизорах указанной стоимости.


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

22. Сформировать расписание, содержащее информацию о поездах, отправляющихся с Киевского вокзала (номер поезда, станция на­значения, время отправления, время в пути). Используя сформированное расписание, вывести на экран дисплея информацию о поез­дах, следующих в Киев и находящихся в пути менее 12 часов.

23. Сформировать список, содержащий данные о книгах по ин­форматике (фамилия автора, его инициалы, название книги, название издательства, год издания). Используя сформированный список, вывести на экран дисплея фамилии авторов и названия книг, выпущенных издательством "Мир''.




















Глава 3. ФАЙЛЫ



3.1. Основные процедуры и функции работы с файлами



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

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

По отношению к программе файлы могут быть внешними и внутренними. Внутренними файлами являются такие, которые создаются, используются и существуют только во время работы данной программы. Файлы, которые существуют вне программы, называются внешними файлами. Они могут быть подготовлены (заполнены данными) в одной программе, а использоваться (обрабатываться) - в другой.

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

Каждый внешний файл должен иметь имя, которое состоит из двух частей: собственно имени и расширения. Имя от расширения отделяется точкой. В системе MS-DOS имя может содержать до восьми символов, расширение — до трех символов. Например, в имени фай­ла File.Dat File — собственно имя, Dat — расширение (принято обычно для файлов данных). Но расширение может и отсутство­вать.

Полное имя файла кроме этого содержит еще имя диска и имена директорий, в которых располагается файл. Например, D:\APPDOS\ File.Dat, где D: - имя жесткого диска ("винчестера"); APPDOS — имя директории, где располагается файл; символ "\" — разделитель.

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