Работа № 10. Строковые переменные

Работа № 9. Модули и файлы

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

Таблица №7.

№ п/п Работы № п/п Работы № п/п Работы
2,3,4 2,3,5 2,3,6
2,8,7 8,4,5 8,4,6
2,4,7 2,5,6 2,5,7
2,6,8 3,4,5 3,4,6
3,4,7 3,5,6 3,5,8
3,6,8 4,8,6 4,5,7
4,6,7 5,6,7 5,6,2
5,6,3 5,6,4 6,7,2
6,7,5 8,7,4 6,7,3
4,5,2 4,5,3 7,5,8

 

Пояснения. При подготовке данного задания необходимо использовать программы, полученные ранее в результате выполнения контрольных работ, перечисленных в табл. 7.

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

1. Оформить программы трех лабораторных работ, указанных в табл. 9, в виде трех подпрограмм. Свести все подпрограммы в один файл и оформить его в виде модуля с именем, явно соответствующим номеру выполняемого варианта, например Unit15 для пятнадцатого варианта. Модуль откомпилировать.

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

 

 

РАСЧЕТЫ

1. Работа № 1

2. Работа № 2

3. Работа № 3

4. Выход

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

4. Модифицировать программу так, чтобы все исходные данные, в том числе полученные в диалоге с пользователем, и все результаты вычислений в каждой подпрограмме записывались в текстовый файл, а вывод на экран остался без изменений. Операции записи информации в текстовые файлы реализовать внутри расчетных процедур каждой лабораторной работы. Имя каждого текстового файла задать с явным указанием на номер варианта и номер работы в подпрограмме. Например, R15_7.txt

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

1. Выполнение работы № 1 6. Результаты работы № 1

2. Выполнение работы № 2 7. Результаты работы № 2

3. Выполнение работы № 3 8. Результаты работы № 3

4. Текст главной программы 9. Выход

5. Текст модуля

6. При выводе текста, не умещающегося в окне вывода, предусмотреть постраничный вывод.

7.Окончательный вариант программы представить ведущему преподавателю.

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

1. Подсчитать количество открывающих и количество закрывающих круглых скобок во вводимом арифметическом выражении. Выдать сообщение об ошибке в случае их неравенства.

2. Подсчитать общее число символов +, -, *, / во вводимой с клавиатуры строке. Заменить знак операции обычного деления на целочисленное.

3. Во вводимой строке заменить все пробелы на знак подчеркивания «_» и выделить подстроку, которая содержится после первого символа точки с запятой.

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

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

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

7. Составить синтаксический анализатор для строки программы, содержащей описание простых односимвольных переменных целого или действительного типа.

8. Составить синтаксический анализатор для строки программы, содержащей описание переменных типа «строказаданной длины». Имена переменных состоят не более чем из одного символа.

9. Составить программу, которая читает построчно текст вводимой с клавиатуры программы на Паскале, отыскивает оператор цикла вида FOR i:=in TO ik DO и производит его синтаксический контроль (для языка С++ соответственно - FOR(i=in;i<ik;i++).

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

Контрольное задание № 10.Составить программу обработки символьной информации в соответствии с вариантом, заданным преподавателем.

 

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

2. Дана строка символов, состоящая из нулей, единиц и пробелов. Группы нулей и единиц, не содержащих пробелов внутри себя, будем называть словами. Требуется определить количество слов в строке. Рассматривая слова как числа, определить количество слов, кратных пяти (делящихся на 5 без остатка), и переместить эти слова в начало строки.

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

4. В операционной системе MS-DOS текущее время вводится в виде строки ЧЧ:ММ:SS.CC, содержащей четыре двухразрядных числа (число: месяц: секунды. сотые_доли_секунды). Разработать программу, анализирующую правильность вводимого времени по форме и по фактическому значению его составляющих.

5. В операционной системе MS-DOS дата вводится в виде строки: ДД-MM-ГГГГ, содержащей два двухразрядных числа (день-месяц) и одно – четырехразрядное (год). Разработать программу, анализирующую правильность вводимой даты по форме и по фактическому значению ее составляющих.

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

Число/Месяц_римскими_цифрами Год

и переводящую ее в форму с тремя двузначными числами через точку: Число.Месяц.Год,

например, запись 1/XII 2001 соответствует 01.12.03.

 

 

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

Число.Месяц.Год

и перевода ее в обычную форму записи:

Число Месяц_словом Год,

например, записи 01.12.03 соответствует: 1 декабря 2003 года.

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

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

мантиссаEпоказатель_степени,

где мантисса – целое или действительное число со знаком или без знака, показатель_степени – целое число со знаком или без знака.

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

Имя_переменной[Индекс]

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

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

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

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

 

 

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

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

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

17. Дана строка символов, содержащая некоторый текст. Разработать программу разбиения этого текста на строки размером не более 30 символов и выравнивания полученного текста по правой границе путем равномерной вставки между отдельными словами нужного количества пробелов.

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

19. Разработать программу, которая в массиве строк отыскивает фрагменты текста, заключенные в круглые или квадратные скобки, вырезает их, удаляя остающиеся лишние пробелы, и размещает в отдельном списке. При наличии непарных скобок выдавать соответствующие сообщения.

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

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

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

23. Разработать программу шифровки текста с использованием шифра Цезаря. Его смысл заключается в замене каждой i-й буквы алфавита на (i+2), при этом предпоследняя буква алфавита заменяется на первую, а последняя на вторую. Знаки препинания и другие символы можно не шифровать. Например, русская пословица КОНЧИЛ ДЕЛО, ГУЛЯЙ СМЕЛО будет зашифрована так МРПЩКН ЕЖНР, ЕХНБЛ УОЖНР.

24. В текстовом файле программы на языке Паскаль подсчитать количество операторных скобок begin и endи определить их соответствие (для языка С++ - { и }). В случае ошибок следования скобок выдавать соответствующие сообщения.

25. В текстовом файле программы на языке Паскаль отыскивать все циклы вида while – do, выделять у них тело цикла и печатать его (для языка С++ - while).

26. В текстовом файле программы на языке Паскаль определить соответствие служебных слов при организации циклов вида repeat – until и while – do для всего текста программы (для языка С++ - do – while и while). В случае ошибок, например при «пересечении» циклов, выдавать соответствующие сообщения.

27. В текстовом файле программы на языке Паскаль отыскивать все циклы вида for – to (downto) – do, выделять у них тело цикла и печатать его (для языка С++ - for( - ; - ; - ))..

28. Составить программу, которая читает построчно текст исходной программы на языке Паскаль, обнаруживает комментарии и выводит их на печать. Учесть, что имеется два типа комментариев: текст между фигурными скобками {…} и текст между парными символами (для языка С++ - //… и /*…*/), и возможны ситуации попадания одного типа комментариев внутрь другого.

 

 

29. Дана строка символов, состоящая из нулей, единиц и пробелов. Каждая группа нулей и единиц, не содержащая пробелов внутри себя, интерпретируется как целое двоичное число без знака. Разработать программу, заменяющую двоичное представление имеющихся значений в шестнадцатеричную систему счисления, используя для этого кодировку шестнадцатеричных цифр по двоичным тетрадам: 0 – 0000, 1 – 0001, 2 – 0010, 3 – 0011, 4 – 0100, 5 – 0101, 6 – 0110, 7 – 0111, 8 – 1000, 9 – 1001, A – 1010, B – 1011, C- 1100, D – 1101, E – 1110, F - 1111. Перекодировку производить без использования промежуточных строк (массивов).

30. Дана строка, содержащая наборы символов, каждый из которых может рассматриваться как целое шестнадцатеричное число без знака. Разработать программу преобразования пред­ставления строки из наборов в шестнадцатеричной системе счисления в двоичную, используя для этого кодировку шестнадцатеричных цифр по двоичным тетрадам из предыдущего задания №29. Перекодировку производить без использования промежуточных строк (массивов).

Приложение. Типовые операции в циклических программах

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

1) подготовительный – заключается в задании начальных зна­чений рабочих переменных, используемых в процессе реализации операции, и выполняется при подготовке цикла, то есть до начала цикла.

2) рабочий – заключается в многократном по­вторении некоторых действий по отысканию необходимого резуль­тата непосредственно внутри тела цикла.

Все действия по реализации рассматриваемых операций сведены в нижеследующую табл. П.1.

Таблица П.1

Типовая операция Подготовка Рабочая часть
1. Вычисление количества K (организация счетчика) K=0 K=K + 1
2. Вычисление суммы S некоторых значений Y S=0 S=S + Y
3.Вычисление произведения P некоторых значений Y P=1 P=P • Y
4. Отыскание максимума Ymax среди значений Y Ymax=-1020 Если Y > Ymax, то Ymax = Y
5. Отыскание минимума Ymin среди значений Y Ymin =1020 Если Y < Ymin, то Ymin = Y
6. Формирование массива R из значений Y, где K – индекс массива YM   K=0 K=K+1 YMK=Y

 

Примечание. Начальные значения Ymax и Ymin целесообразно прини­мать исходя из максимально возможного значения числовых констант для используемого типа вычислительных машин.

 

Содержание

 

Введение
Работа №1. Прямые программы
Работа № 2. Разветвляющиеся программы
Работа № 3. Арифметические циклы с простой переменной
Работа № 4. Арифметические циклы с индексной переменной
Работа № 5. Итерационные циклы
Работа № 6. Сложные циклы
Работа № 7. Работа с двумерными массивами
Работа № 8. Функции и подпрограммы
Работа № 9. Модули и файлы
Работа № 10. Строковые переменные