Добавлен: 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.
Контрольные вопросы
-
Какой тип характеризует объекты, называемые записями?
-
Как описывается комбинированный тип?
-
Могут ли компоненты записи быть различных типов?
-
Какие операции определены над записями?
-
Как осуществляется доступ к полям записи?
6. С какой целью в Турбо Паскале используется оператор With?
Задачи
-
Опишите тип записи информации о книгах в библиотеке со следующими полями: автор, название, издательство, год издания, взята книга или нет, номер полки. Напишите программу, которая выводит из массива информацию о тех книгах, которые находятся на руках и которые изданы до 1990 г.
-
На кинофестивале 35 стран представили свои фильмы. Общее число фильмов не превышает 100. Известны названия стран-участниц и фильмов, а также баллы, полученные каждым из фильмов. Определить фильм, завоевавший первый приз (максимальный балл), и страну, получившую наибольший средний балл за представленные фильмы. Считать, что фильмы в общем списке по странам неупорядочены, а фильм и страна, его представляющая, являются единственными победителями.
-
Имеются сведения об N студентах (N - заданное число): фамилия, символьный шифр группы и 4 экзаменационные оценки. Требуется определить наименьшую из средних экзаменационных оценок студентов, а затем для каждой группы получить пронумерованные списки студентов, имеющих такое же значение средней экзаменационной оценки, или выдать сообщение, что таких студентов нет.
-
Известны сведения о каждом из N рабочих (N - заданное число): фамилия, год рождения и номер бригады. Необходимо для каждой бригады получить два списка: самых молодых и самых старых рабочих. Предусмотреть, что нумерация бригад может быть несплошной.
-
Даны названия N различных спортивных обществ (N - заданное число), фигуристы которых участвовали в соревновании. У каждого фигуриста известны фамилия, название общества и 10 оценок за его выступление. Требуется для каждого спортивного общества определить фигуриста, показавшего наивысший результат, считая его единственным. Баллы, полученные спортсменом, подсчитываются следующим образом: максимальная и минимальная оценки отбрасываются, а из остальных формируется средняя. При вводе данных обеспечить уникальность наименований обществ и обязательную принадлежность фигуриста к одному из них.
-
Известна стоимость суточного проживания в каждом номере гостиницы из F этажей по К номеров на этаже. О проживающих известны следующие данные: гостиничный номер, фамилия, дни въезда и выезда. Необходимо напечатать для клиентов счета с указанием дней их выезда, фамилии, номера и этажа, дней въезда и выезда и суммы денег за время проживания. (F и К заданы, нумерация гостиничных номеров сплошная, днями въезда и выезда считать числа месяца от 1 до 30).
-
Имеются сведения об N студентах (N - заданное число): фамилия, символьный шифр группы и 4 экзаменационные оценки. Требуется определить максимальную из средних экзаменационных оценок студентов, а затем для каждой группы получить пронумерованные списки студентов, имеющих значение средней экзаменационной оценки, меньшее максимального, или выдать сообщение, что таких студентов нет.
-
В районном обществе автолюбителей имеются сведения об N автомобилях (N - заданное число). Для каждой машины известно: фамилия владельца, год выпуска и номер автостоянки. Необходимо для каждой из стоянок получить два списка: список самых новых и список самых старых машин с указанием их владельцев и года выпуска. Предусмотреть то, что нумерация стоянок может быть несплошной.
-
В гостинице проживает N постояльцев (N - задано). О каждом известны три характеристики: номер проживания, фамилия, заказанное на завтрак блюдо (или отсутствие заказа). Необходимо составить сводные (по наименованиям заказанных блюд) заявки на кухню с указанием гостиничных номеров и фамилий постояльцев.
-
В автохозяйстве имеется N автомашин (N - заданное число). Для каждого автомобиля заданы три характеристики: номер, марка машины, тип неисправности (или ее отсутствие). Необходимо составить сводные (по типам неисправностей) заявки на ремонт машин с указанием их номеров и марок.
-
Имеется N типов товаров (названия известны). Для каждого типа товара задано количество единиц этого товара, цена и вес единицы товара. Требуется загрузить контейнер (не превышая его известной грузоподъемности) товарами одного типа так, чтобы стоимость груза в контейнере была максимальной.
-
200 учеников шести школ города (номера школ заданы) принимают участие в тестировании по математике. Правильные численные ответы к пяти предложенным задачам даны. У каждого ученика известны: фамилия, номер школы и пять ответов на задачи. Сведения об учениках не имеют определенной упорядоченности. Составить списки учеников по школам, расположив в каждом списке фамилии учащихся в порядке убывания числа решенных ими задач. Предусмотреть возможный ответ "не решил".
-
Имеется список 60 зданий города, подлежащих реконструкции. Сведения о каждом здании содержат названия микрорайона, улицы, номер дома и год постройки. Определить самые старые здания из подлежащих реконструкции и вывести их списки, содержащие полные сведения о них, по микрорайонам. Если в микрорайоне таких домов нет, выдать соответствующее сообщение.
-
Список N рабочих цеха (N - заданное число) содержит следующие сведения о каждом рабочем: фамилия, числовой номер бригады, зарплата. Список не имеет определенной упорядоченности. Вывести на экран списки рабочих по бригадам, расположив в списках фамилии рабочих в порядке убывания их зарплаты. Определить среднюю зарплату по всем рабочим и подсчитать для каждой бригады количество рабочих, имеющих зарплату ниже средней. Бригады нумеруются подряд, начиная с первой.
-
На заводе имеется N станков (N - заданное число). Для каждого станка заданы три характеристики: инвентарный числовой номер, марка станка и тип неисправности (или ее отсутствие). Необходимо составить сводные (по типам неисправностей) заявки на ремонт станков с указанием их номеров и марок.
-
Даны названия N обществ, спортсмены которых участвовали в соревнованиях по лыжной гонке. О каждом участнике соревнований известны следующие данные: название общества, фамилия спортсмена и время прохождения трассы. Вывести на экран сведения о лучшем результате спортсмена каждого общества, считая, что нет одинаковых результатов.
-
Для каждого участника соревнований вводится фамилия, время старта (часы, минуты, секунды), время финиша. Вывести на экран фамилии участников, выполнивших заданный норматив.
-
Сформировать список из фамилий и размеров обуви, которую носит каждый студент. Используя сформированный список, вывести на экран фамилии студентов, начинающихся с “КА”, у которых размер обуви не менее 40.
-
Сформировать список, содержащий информацию о владельцах автомобилей: фамилия, марка, цвет, гос. номер. Используя сформированный список, вывести на экран всех владельцев автомобилей ВАЗ белого цвета.
-
Сформировать список, содержащий информацию о телевизорах: фирма-изготовитель, размер экрана в дюймах, стоимость. Используя сформированный список, вывести на экран информацию о телевизорах указанной стоимости.
21. Сформировать список, содержащий информацию о торговых точках вблизи вашего дома: название фирмы, ассортимент товаров (продукты питания, одежда, обувь, электроника, хозтовары, культтовары), адрес. Используя сформированный список, вывести на экран информацию о магазинах, торгующих одинаковыми товарами.
22. Сформировать расписание, содержащее информацию о поездах, отправляющихся с Киевского вокзала (номер поезда, станция назначения, время отправления, время в пути). Используя сформированное расписание, вывести на экран дисплея информацию о поездах, следующих в Киев и находящихся в пути менее 12 часов.
23. Сформировать список, содержащий данные о книгах по информатике (фамилия автора, его инициалы, название книги, название издательства, год издания). Используя сформированный список, вывести на экран дисплея фамилии авторов и названия книг, выпущенных издательством "Мир''.
Глава 3. ФАЙЛЫ
3.1. Основные процедуры и функции работы с файлами
Часто если программа или набор данных используется многократно, то их следует хранить в виде файлов. Файл – это поименованная область на диске, содержащая некоторые данные.
В ряде случаев под файлом подразумевается устройство, которое может выдавать или получать информацию, например принтер или клавиатура. Далее речь будет идти только о файлах данных.
По отношению к программе файлы могут быть внешними и внутренними. Внутренними файлами являются такие, которые создаются, используются и существуют только во время работы данной программы. Файлы, которые существуют вне программы, называются внешними файлами. Они могут быть подготовлены (заполнены данными) в одной программе, а использоваться (обрабатываться) - в другой.
С точки зрения работы с компонентами файлов во время исполнения программы различия между внешними и внутренними файлами нет. Это различие проявляется лишь после окончания выполнения программы: внутренние файлы прекращают свое существование, как прекращают свое существование все другие объекты программы, а внешние файлы сохраняются на внешних носителях данных, например магнитных дисках.
Каждый внешний файл должен иметь имя, которое состоит из двух частей: собственно имени и расширения. Имя от расширения отделяется точкой. В системе MS-DOS имя может содержать до восьми символов, расширение — до трех символов. Например, в имени файла File.Dat File — собственно имя, Dat — расширение (принято обычно для файлов данных). Но расширение может и отсутствовать.
Полное имя файла кроме этого содержит еще имя диска и имена директорий, в которых располагается файл. Например, D:\APPDOS\ File.Dat, где D: - имя жесткого диска ("винчестера"); APPDOS — имя директории, где располагается файл; символ "\" — разделитель.
В языке Турбо Паскаль для работы с файлами используется файловый тип. Значение файлового типа представляет собой набор элементов одного и того же типа, причем число элементов, называемое длиной файла, не фиксируется.