Сборник задач по структурному программированию 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Сборник задач по структурному программированию



СБОРНИК ЗАДАЧ ПО СТРУКТУРНОМУ ПРОГРАММИРОВАНИЮ

 

(С ПРИМЕРАМИ РЕШЕНИЙ)

И.Ф. БАБАЛОВА


Оглавление

Оглавление. 2

Аннотация. 3

Введение. 3

1. РАЗДЕЛ 1. 4

1.1. Работа с простыми типами данных. 4

ПРИМЕР 1.1.1. 6

ПРИМЕР 1.1.2. 7

1.2. Работа с символами, строками и текстом. 8

ПРИМЕР 1.2.1. 11

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

ПРИМЕР 1.3. 15

1.4. Работа с файлами разных типов. 17

ПРИМЕР 1.4. 20

1.5. Динамические структуры данных. Списки. 25

ПРИМЕР 1.5. 28

1.6. Решение графических задач. 35

ПРИМЕР 1_6. 39

2. РАЗДЕЛ 2. 41

2.1. Работа с графическими объектами. 41

ПРИМЕР 2.1. 44

2.2. Работа с объектами- векторами. 47

ПРИМЕР 2.2. 51

2.3. Работа с объектами - списками. 53

ПРИМЕР 2.3. 60

2.4. Разработка объектов- таблиц. 64

2.5. Работа со структурами данных типа дерево. 70

ПРИМЕР 2.5. 74

2.6. Разработка многомодульных задач. 79

Приложение. 87

Список литературы.. 96


Аннотация

Предлагаемый сборник задач содержит задачи по основным разделам курса ”Информатика и программирование” на базе любого объектно-ориентированного языка (Turbo Pascal, Object Pascal, C++ и т.п.). 681.3.121 И.Ф. Бабалова. Сборник задач по структурному программированию.

Издательство МИФИ., 2000 г.

Введение

Предлагаемые в сборнике задачи являются творчеством автора. При составлении задач использовались разделы математики, комбинаторики, дискретной математики и часто встречающиеся практические задачи. Некоторые из задач, несомненно, заимствованы или переформулированы из хороших изданных ранее задачников по программированию: С.А.Абрамов,Г.Г.Гнездилова, Е.Н.Капустина, М.Н.Селюн “Задачи по программированию”, издательство “Наука” 1988 г., и В.Н.Пильщиков

“ Сборник упражнений по Паскалю”, издательство “Наука”, 1989 года.

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


РАЗДЕЛ 1

Работа с простыми типами данных

Задачи этой темы позволяют рассмотреть способы обработки простых типов данных: целых или вещественных чисел. Число при решении предлагаемых задач в этом разделе -- это целое или вещественное со знаком.

 

1.1.1. Дано натуральное число n. Удалить из записи числа все нули и единицы. Подсчитать количество оставшихся цифр в изображении числа.

1.1.2. Дано поизвольное вещественное число. Определить порядок числа и количество цифр в изображении числа.

1.1.3. Дано целое число с количеством цифр в его записи < 10. Записать число в обратном порядке.

1.1.4. Дано целое число N. Разложить его на простые множители. Вывести на экран исходное число и полученные множители.

1.1.5. Часовая стрелка образует угол j с лучом, проходящим через центр и через точку, соответствующую 12 часам на циферблате: 0<j<2p. Определить значение угла для минутной стрелки для заданного величины j, а также количество полных часов и полных минут.

1.1.6. Дано 10- разрядное число, допустимой для записи целых чисел величины. Определить, является ли введенное число палиндромом. (Число, значение которого при чтении справа налево и слева направо одинаково, называется палиндромом).

1.1.7. Дано некоторое натуральное число. Определить сколько и каких цифр встречается в его записи. Результат обработки: <цифра> - <количество>.

1.1.8. Дано целое число. Найти произведение всех его цифр.

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

1.1.10. Даны два целых числа M и N. Найти все одинаковые цифры в каждом из чисел.

1.1.11. Даны N наборов чисел a, b, c. Определить возможность построения треугольника для каждого из наборов чисел. Результат вывести в форме

I a b c результат (можно/ нельзя)

1.1.12. Даны целые положительные числа К и N. Найти P=(K)N!. Определить диапазон допустимых N. Учитывать при решении задачи допустимую величину целого числа.

1.1.13. Дано целое число N. Определить число цифр в записи числа и найти сумму цифр числа.

1.1.14. Дано целое число N, определяющее возраст человека. Для этого числа определить наименование: год, года, лет. Например, 31 год, 32 года, 25 лет.

1.1.15. Даны целые числа m, N. Определить сумму любых m цифр числа N.

1.1.16. Дано целое число K, имеющее значения в диапазоне 1..365. Определить номер дня недели (1..7), на который приходится введенное число для невисокосного года (високосным считается год, который делится на 4, но не 100 и т.п.). Считаем, что первый день года,1 января, это понедельник.

1.1.17. Определить значение угла в градусах между положением часовой стрелки в начале суток и ее положением в H часов, M минут и S секунд (0<=H<=11, 0<=M<=59,0<= S<=59).

1.1.18. Дано вещественное число. Определить первую цифру дробной части числа.

1.1.19. Дано целое число N. Выделить из числа все четные цифры.

1.1.20. Найти наибольший общий делитель двух натуральных чисел.

1.1.21. Дано целое число. Определить количество нулей в записи числа.

1.1.22. Из вводимого набора целых чисел найти числа, для которых квадрат заданного трехраазрядного целого числа равен кубу суммы его цифр.

1.1.23. Дано многоразрядное целое число. Определить равна ли сумма двух первых цифр числа сумме двух последних цифр.

1.1.24. Дано вещественное число. Определить порядок числа для записи его в форме: +-a.bE1+-x, где 1<=а<=9, b - дробная часть в записи числа, x- степень основания системы счисления.

1.1.25. Дано целое число. Определить количество и сумму цифр, стоящих на нечетных местах в записи числа.

1.1.26. Дано целое число. Поменять порядок цифр в записи числа на обратный.

1.1.27. Дано целое N-разрядное число. Поменять местами первую и последнюю цифры в записи числа.

1.1.28. Дано N-разрядное целое десятичное число. Преобразовать его в запись числа в восьмеричной системе счисления.

1.1.29. Дано N-разрядное целое десятичное число. Преобразовать его в запись числа в двоичной системе счисления.

1.1.30. Из заданного набора чисел найти числа, не имеющие общих делителей.

1.1.31. Дано некоторое целое число. Все нули в изображении числа заменить единицами.

1.1.32. Задано вещественное число. Определить порядок числа и количество цифр в изображении дробной части числа.

1.1.33. Написать программу, позволяющую получить все перестановки из К различных элементов и напечатать все перестановки.

1.1.34. Дано натуральное число N. Из записи числа удалить все единицы и нули. Порядок следования остальных цифр оставить без изменения.

1.1.35. Дано произвольное число N. Получить все цифры числа N!. Считать факториал только в диапазоне допустимой величины целого числа.

ПРИМЕР 1.1.1

Идет N-ая секунда суток. Определить полное количество часов и минут в заданный момент времени, считая от начала суток.

program Number_1_1;

var hour,minute,n:longint;

{Количество секунд в полных сутках равно 86 400, что требует

рассмотрения решения задачи только с длинными целыми}

ch:char;

Begin

writeln(' Работа первой программы');

Repeat

writeln('Ведите значение секунд');

readln(n);

hour:=n div 3600;

minute:= n div 60 -hour*60;

writeln('Получено часов= ',hour,' минут= ',minute);

writeln('Еще хотите проверить время?- y or n');

readln(ch);

until ch='n';

End.

Вычисление рядов.

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

 


1.1.31.

1.1.32.

1.1.33.

1.1.34.

1.1.35.

1.1.36.

1.1.37.

1.1.38.

1.1.39.

1.1.40.

1.1.41.

1.1.42.

1.1.43.

1.1.44.

1.1.45.

1.1.46.

1.1.47.

1.1.48.

1.1.49.

1.1.50.


ПРИМЕР 1.1.2.

Дан ряд . Найти сумму ряда для любого заданного количества членов ряда n и значения X.

program Number_1_2;

{Этот пример показывает простейшую алгоритмизацию

Begin

writeln('Работа второй программы');

Repeat

writeln('Ведите количество членов ряда');

readln(n);

writeln('Введите значение x');

readln(x);

s:=0;

p:=1;

for i:=1 to n do

Begin

p:=-p*x/i;

s:=s+p;

end;

writeln('Результат вычисления ряда S=',s:10:5);

writeln('Будете еще вычислять ряд?');

readln(ch);

until ch='n';

End.


ПРИМЕР 1.2.1

program Number_2;

{Дана строка, в которой слова

Begin

writeln('Работает программа- пример на использование строк');

Repeat

writeln('Введите исходную строку');

readln(s);

writeln('Исходная строка = ',s);

k:=length(s);{Определяем длину введенной строки}

i:=1;

while (i<=k-1) do

Begin

if s[i]=' ' then

Begin

Repeat

if s[i+1]=' ' then

Begin

delete(s,i,1);

k:=k-1;

b:=false;

End

else b:=true;

until b;

end;

i:=i+1;

end;

writeln('Результат преобразования = ',s);

writeln('Будете еще преобразовывать строки? ');

readln(ch);

until ch='n';

End.

 


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

 

1.3.1. Дана последовательность из букв латинского алфавита размерности N. Упорядочить последовательность по алфавиту с помощью процедуры. Вывести исходную и упорядоченную последовательности букв.

1.3.2. Ввести произвольную последовательность чисел. Упорядочить с помощью процедуры последовательность в порядке возрастания. Вывести результат упорядочивания и номера чисел в исходной последовательности.

1.3.3. Ввести последовательность слов, в каждом из которых от 2 до 6 латинских букв. Слова разделены запятыми. Последнее слово заканчивается точкой. Написать процедуру, определяющую одинаковых “соседей” (слова справа и слева — совпадают). Напечатать всех “соседей” и исходную последовательность слов.

1.3.4. Ввести последовательность из N элементов. Подсчитать количество элементов, равных 0. С помощью процедуры обеспечить удаление всех нулевых элементов последовательности и сжатие последовательности. Вывести исходную последовательность, количество нулей, результат сжатия последовательности и количество элементов в преобразованной последовательности.

1.3.5. Ввести неупорядоченную последовательность из 20 элементов. Написать процедуры упорядочивания последовательности и вставки К новых элементов на правильное место в упорядоченную последовательность. Вывести результаты всех обработок последовательности.

1.3.6. Ввести последовательность из N целых чисел. Упорядочить по возрастанию четные (по значению, а не по номеру) элементы последовательности. Нечетные элементы должны остаться на своих местах. Упорядочивание описывается процедурой.

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

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

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

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

1.3.11. Дана матрица действительных чисел размерности M*N. С помощью процедуры обеспечить получение сумм элементов матрицы по столбцам, строкам и диагоналям, параллельным главной диагонали. Вывести исходную матрицу и результаты вычислений в соответствующих строках и столбцах.

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

1.3.13. Задана последовательность из N слов. С помощью функции обеспечить выбор из последовательности всех одинаковых слов. Оставить в исходной последовательности одинаковые слова по одному разу. Вывести исходную последовательность, последовательность одинаковых слов и результат преобразования последовательности.

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

1.3.15. Определить с помощью функции симметричность матрицы размерности M*M относительно главной диагонали. Вывести исходную матрицу и сообщение о проверке.

1.3.16. Задана таблица из нулей и единиц размерности N*N. С помощью функции определить количество единиц в каждой строке и в каждом столбце матрицы. Результаты обработки вывести вместе с номерами соответствующих строк и столбцов таблицы.

1.3.17. Задана таблица размерности N*N. С помощью процедуры выполнить перестановку K-ого столбца таблицы на место L-ого столбца, а также перестановку K -ой и L-ой строк в соответствии с запросом на обработку таблицы. Вывести исходную таблицу и результат ее преобразования.

1.3.18. В заданной таблице размерности N*N с помощью функции обеспечить поиск строки или столбца с минимальным числом нулевых элементов. Вывести исходную таблицу и результат ее обработки с указанием номеров искомых столбца или строки.

1.3.19. Дана матрица действительных чисел размерности M*N. С помощью процедуры перестановки строк матрицы обеспечить преобразование матрицы:

ПРИМЕР 1.3.

program Number_1_3;

{Дана последовательность целых чисел

Begin

Begin

Begin

Repeat

Writeln('Введите количество элементов последовательности');

readln(m);

Begin

Del_el(aa,m,i);

writeln('Результат преобразования');

for i:=1 to m do

write(aa[i],' ');

writeln;

End

else writeln('Последовательность осталась неизменной');

writeln('Будете еще вводить последовательности? ');

readln(ch);

until ch='n';

End.

 


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

1.4.1. Багаж каждого пассажира характеризуется количеством вещей и их общим весом. В файл занести сведения о всех пассажирах некоторого рейса. Определить, есть ли пассажиры, багажи которых совпадают по весу и пассажиры, вес багажа которых отличается не более, чем на 0.5 кг. Создать упорядоченные последовательности всех категорий пассажиров. Признак упорядоченности выбирайте сами.

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

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

1.4.4. Сформировать файл из произвольного количества случайных чисел. Случайные числа получать по следующему алгоритму:

Ø Ввести некоторое целое число N и два числа I и J.

Ø Выполнить действие I = MOD(I*J32).

Ø Повторить п.1 N раз.

Сохранить в файле числа, прочитать по запросу их из файла и определить наличие периодичности в последовательности случайных чисел.

1.4.5. Числовая матрица задается в файле в следующем формате: I и J, номера столбца и строки ненулевого элемента матрицы, и само значение элемента А(I,J). Количество нулевых элементов неизвестно. Вывести матрицу на экран в обычной форме в виде последовательностей строк и столбцов. Обеспечить преобразование матрицы перестановкой P и Q строк матрицы. Переписать преобразованную матрицу в файл. Размерность матрицы M * N.

1.4.6. Создать файл F, содержащий M слов. Переписать всю последовательность слов в обратном порядке и записать ее в файл Q. Обеспечить вывод двух вариантов последовательностей слов.

1.4.7. Создать файл из целых чисел. Количество чисел должно быть кратно 10. Переписать компоненты исходного файла в другой файл следующим образом: в каждой десятке чисел сначала должны стоять отрицательные числа, а затем положительные. Обеспечить вывод на экран исходной и преобразованной последовательностей чисел.

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

1.4.9. В файл записать некоторый текст, заканчивающийся знаком “;”. Все слова текста упорядочить по количеству букв в словах в порядке возрастания длины слов. Вывести полученную последовательность слов. Для сравнения результатов обработки текста обязательно присутствие исходного текста на экране.

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

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

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

1.4.13. Создать два файла из произвольного количества чисел. Из каждого файла удалить числа большие 100 и сформировать один файл из оставшихся чисел. Все сравнения и преобразования выполнить в памяти. Результаты преобразования и исходные последовательности вывести на экран.

1.4.14. В N файлах создать сведения о студентах N групп. Формат сведений: N группы, порядковый номер, фамилия, имя, отчество. Выбрать всех однофамильцев из всех групп и сформировать из них последовательность. Обеспечить вывод сведений каждой группы и результата поисков.

1.4.15. В двух файлах записать последовательности чисел A и B. Создать новый файл, в котором содержатся только те числа, которые не содержатся одновременно в этих последовательностях. Вывести на экран исходные последовательности и результат преобразования.

1.4.16. Создать файл, содержащий сведения о расписании рейсов самолетов в формате: город вылета, город назначения, время вылета из аэропорта вылета и время полета. Выбрать из файла и напечатать все рейсы любого города назначения. Обеспечить вывод также всего файла расписания.

1.4.17. Прямая на плоскости задается уравнением ax+ by + c=, где a и b не равны нулю. Все коэффициенты - целые числа. В файле задается произвольное количество наборов коэффициентов прямых. Определить количество наборов коэффициентов, записанных в файле. Выбрать из файла коэффициенты тех прямых, которые параллельны первой или последней из заданных в файле прямых. Результаты обработки файла и исходные данные представить на экране.

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

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

1.4.20. В файле задать последовательность точек с координатами X иY. Количество наборов - любое. Вводится произвольная точка. Найти из заданного набора точек самую ближайшую точку к введенной. Обеспечить вывод на экран координат исходных точек и результат выбора.

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

1.4.22. Создать текстовый файл произвольной длины. Текст разбит на строки. Каждая строка заканчивается знаком “;”. В каждой строке между словами произвольное количество пробелов. Вывести на экран только те строки, в которых содержится не менее 30 символов, отличных от пробелов. Обеспечить также вывод на экран исходного варианта файла.

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

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

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

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

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

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

1.4.29. Создать текстовый файл из строк произвольной длины. Каждая строка заканчивается любым знаком-разделителем. Переформатировать файл таким образом, чтобы каждая строка содержала не более 40 литер, заканчивалась обязательно точкой и среди 40 литер не было бы ни одной точки. Записать новую версию текста в новый файл, вывести новую и старую версии записи текста.

1.4.30. Создать файл из сведений об абонентах телефонного узла. Формат сведений: фамилия, имя, отчество, адрес, номер счета. Обеспечить вывод из файла только последовательностей абонентов на запрашиваемую букву. После выбора конкретной фамилии должны выводиться все сведения об абоненте. Необходимо обеспечить редактирование, удаление, дополнение сведений. Все изменения должны заноситься в файл.

 

ПРИМЕР 1.4.

program Number_1_4;

uses Crt;

{Создать текстовый файл. С помощью созданного для решения этой задачи файла

Begin

str:='ttt.txt';

gotoxy(40,10);

writeln('Имя файла для хранения текста -ttt.txt');

assign(t,str);

rewrite(t);

Repeat

writeln('Вводите текст');

readln(si);{Вводим и записываем текст построчно}

writeln(t,si);

writeln('Текст весь введен?- y or n');

readln(k);

until k='y';

close(t); {Обязательное закрытие файла, чтобы сформировать признак конца файла и

иметь возможность его проверить при чтении файла}

end;

function test_file(var t:text):boolean;

Var

b:boolean;

Begin

test_file:=false;

gotoxy(40,10);

writeln('Проверяем всегда наличие файлов',#10#13, ' для работы');

ssign(t,'ttt.txt');

{$i-}

reset(t);

{$i+}

if ioresult<>0 then

Begin

writeln('Файл не найден с исходным текстом');

writeln('Необходимо создать или заполнить файл');

File_create(t);

b:=test_file(t);

exit;

End else

test_file:=true;

end;

procedure file_key;

var x:integer;

a:ss;

k:char;

Begin

assign(f,'key.txt');

rewrite(f);

Repeat

writeln('Введите последовательность ключевых слов '

,#10#13,' наличие которых хотите',#10#13,

' проверить в некотором тексте');

{Коды конца строк позволяют вывести текст более компактно }

readln(a);

write(f,a);

writeln('Все слова введены - y or n');

readln(k);

until k='y';

close(f);

end;

procedure key_load;

{Ключевые слова размещаем в памяти, чтобы обеспечить проверку исходного текст}

Var

sa:ss;

Begin

x:=1;

assign(f,'key.txt');

reset(f);

While not eof(f) do

Begin

read(f,sa); write(sa,'***');

stt[x].st:=sa;

stt[x].i:=0;

inc(x);{Количество слов будет на 1 меньше!!}

end;

writeln('Количество слов=', x-1);

close(f);

{Ключевые слова прочитаны из файла и сформирован шаблон для представления результатов обработки текста. Количество определенных ключевых слов будет заноситься в поле результата компоненты записи }

end;

procedure key_word_stat;

{Статистику по частоте появления ключевых слов в тексте соберем при чтении тестового файла}

var p:boolean;

t,j:integer;

f:text;

str:ss;

Begin

p:=test_file(f);

If p then

Begin

While not eof(f) do

Begin

readln(f,str);

writeln(str);

for j:=1 to x-1 do

Begin

t:=pos(stt[j].st,str);

while t<>0 do

Begin

inc(stt[j].i);

delete(str,t,length(stt[j].st));

{ удаляем те ключевые слова в строке, которые уже найдены }

t:= pos(stt[j].st,str);

end;

writeln('***',stt[j].st,stt[j].i);

{предложение только для контроля за решением задачи}

end;

end;

close(f);

readln;

End else

Begin

writeln('Файла еще нет');

test_file(f);

end;

end;

procedure stat_output;

var j:integer;

Begin

for j:=1 to x-1 do

if stt[j].i<>0 then

writeln('Количество слов=',stt[j].st,

' равно=',stt[j].i);

end;

var k,l:byte;

ch:char;

tf:text;

Begin

{Текст основной программы, обеспечивающий решение сформулированной задачи}

clrscr;

k:=50;

l:=18;

Repeat

gotoxy(k,l);

writeln('Выберите действие');

gotoxy(k,l+1);

writeln('1. Создание файла ключевых слов');

gotoxy(k,l+2);

writeln('2. Ввод текстового файла');

gotoxy(k,l+3);

writeln('3. Подсчет статистики');

gotoxy(k,l+4);

writeln('4. Вывод результатов');

gotoxy(k,l+5);

writeln('5. Конец работы');

gotoxy(1,1);

ch:=readkey;

Case ch of

'1': begin file_key; clrscr;end;

'2': begin file_create(tf);clrscr;end;

'3': begin

key_load;

key_word_stat;

end;

'4': stat_output;

end;

until ch='5';

End.


ПРИМЕР 1.5.

program Number_1_5;

uses Crt;

{Создать список студентов и найти среди них однофамильцев}

const {список альтернатив для работы меню}

alter:array[1..5] of string[30]=(

'1.Создать файл',

'2.Создать список',

'3.Сортировка ',

'4.Вывод однофамильцев',

'5.Выход из программы');

Type

list_d = record { Структура- запись }

Title: string[20]; { Фамилия }

Nm,Pt: string[15]; { Имя,отчество }

Number: integer; { Номер по порядку }

end;

ff=file of list_d;{список для сохранения исходных данных в файле, чтобы проще было отлаживать и проверять решение}

pEl_list = ^list; { Указатель на структуру - список }

list = record { Структура - список }

li: list_d;

next: pEl_list; {Ссылка на следующий элемент списка}

end;

var lp,pList,pStart: pEl_list;

f:ff;

li:list_d;

noswap: boolean;{Для проверки выполнения сортировки}

ch: char;{Для самого простого варианта чтения символов}

i,oi,kol: integer; {переменные для работы с меню}

procedure init;

Begin

pStart:=nil;

end;

procedure DeleteList;

{Уничтожаем список для того, чтобы освободить память при сохранении списка, допустим, в файле}

Begin

lp:=pStart;

while lp <> nil do begin

pList:=lp;

Dispose(pList); {Уничтожается очередной элемент списка}

lp:= lp^.Next; {Перемещаемся по списку}

end;

end; { DeleteList }

{-------------------------------}

procedure Insert_list(el: list_d);

begin { Элемент вставляется следующим в списке}

new(pList);

if pStart =nil then

Begin

with pList^ do

Begin

li.Title:=el.title;

li. Nm:=el.Nm;

li.Pt:=el.Pt;

li.Number:=el.Number;

next:=nil;

end;

pStart:=pList;{Запоминаем начало списка}

lp:=pList; {А это текущий элемент списка, при одном элементе в списке - это первый элемент списка}

End

Else

Begin

lp^.next:=pList;

with pList^ do

Begin

li.Title:=el.title;

li. Nm:=el.Nm;

li.Pt:=el.Pt;

li.Number:=el.Number;

next:=nil;

end;

lp:=pList;{Движение по списку обеспечено}

end;

end; { InsertEl }

{-------------------------------}

procedure SaveBase_in_file;

{ Сохранение введенных данных в файле позволяет не вводить одну и туже информацию}

Var

FileName: string[12];

k:char;

Begin

FileName:= 'Wnd.bas';

Assign(f, FileName);

Rewrite(f);

Repeat

With li do

Begin

write(' Вводите список: фамилия ');

Readln(title);

write(' Имя ');

readln(Nm);

write(' Отчество ');

readln(Pt);

write(' Номер ');

readln(Number);

end;

write(f,li);

writeln('Есть еще сведения для списка?');

readln(k);

until k='n';

Close(f);

Writeln('Данные сохранены. Нажмите любую клавишу...');

ReadKey;



Поделиться:


Последнее изменение этой страницы: 2016-07-16; просмотров: 971; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.221.98.71 (0.37 с.)