1.18. Упражнения1

1. Дайте определения следующих терминов: а) вводные комментарии, б) оглавление, в) пояснительные комментарии и г) отступы, j

2. Почему программы должны быть удобочитаемыми?

3. Как часто следует давать комментарии?

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

5. В каждой программе должны быть некоторые общие комментарии. Какие элементы должны включать эти вводные комментарии? ч

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

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

8. Что следует учитывать при наименовании файлов?

9. Каковы преимущества использования стандартных сокращений?

10. Когда целесообразно пропускать строки?

11. Почему не следует экономить место при размещении операторов?

12. Зачем надо пробивать на картах имя программы?

13. Почему нумерация операторов должна быть с некоторым приращением?

14. Почему не рекомендуется располагать несколько операторов на одной строке?

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

16. Найдите несколько примеров в какой-либо программе, где скобки улучшают ее читаемость.

17. Введите отступы в одну из ваших программ. Улучшило ли это читаемость?

18. Можете ли вы предложить какие-либо другие приемы улучшения читаемости программ?

19. Имеется ли в вашем языке программирования оператор, который делает пропуск строк в исходном листинге?

ЗАДАНИЯ

20. Как работает следующая программа? Проанализируйте ее с точки зрения стиля и затем перепишите.

45 ИЕАО(5,32)Х, У

1Р(Х.ат.40)ОО ТОЮ 32 Р01*МАТ(2Р8.2)

вО Т021 10 1*=У*40+У*1.5*(Х— 40)

1 \^1ТЕ(6,32)1* йО Т045 21 И=У*Х йО Т01 ЕШ

21. Для чего служит следующая программа? ФОРТРАН:

00 51= I, N БО 5 Л = 1, N 5 ХМАТ(1, 3) = (1/3) * (3/1)

Выяснив назначение этого фрагмента программы, предложите свой, более понятный вариант записи. Замечание: I и J — целые переменные, результат действий над которыми всегда приводится к целому значению путем отбрасывания дробной части.

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

22. Если в вашем языке программирования не резервируются слова (как, например, в ФОРТРАНе или ПЛ/1), напишите небольшую программу, в которой служебные слова используются как имена переменных. Выясните, может ли кто-нибудь еще разобраться в вашей программе?

23. Попытайтесь прочесть несколько программ. Вы можете взять их из библиотеки программ, у друзей или из мусорной корзины. Классифицируйте их (от А до F) по стилю и удобочитаемости. Научились ли вы ^ему-нибудь, читая эти программы?

24. Является программирование для вычислительных машин искусством или наукой? Одни считают^ что это всегда будет искусством; другие полагают, что это наука. Попробуйте написать реферат с доводами всех "за" и "против". Вначале уясните, в чем состоит различие между искусством и наукой. При исследовании этого вопроса полезно обратиться к статье Кнута "Программирование как искусство"1).

ПРОГРАММЫ2)

25. Выберите любое задание из гл. 6.

а) Напишите программу для данного задания наихудшим образом в смысле стиля.

б) Напишите аналогичную программу наилучшим образом.

в) Попытайтесь избежать использования оператора GO ТО.

26. Составьте программу, которая читает число N, затем N чисел, расставляет числа в порядке возрастания и печатает их.

27. Какие положительные целые числа, меньшие 20, удовлетворяют следующему равенству:

28. Напишите программу, входными данными которой является возраст ста человек. Программа подсчитывает число людей, возраст которых находится в интервале 10 лет, а именно:

0—9 лет 10—19 лет 20—29 лет и т. д.

*> Knuth D., Computer Programming as an Art, Communications of the ACM (December 1974).

2> Наилучший способ работы над программами состоит в том, чтобы несколько человек писали программы для одной задачи. Затем результаты сравнивают и оценивают стиль написания программ.

Напечатайте результаты ваших расчетов в удобочитаемой форме.

29. Напишите программу для следующих числовых задач:

а) Используйте цифры от 1 до 9 в различных комбинациях и операции сложения и вычитания, чтобы получить в сумме 100. Найдите некоторые решения, не прибегая к помощи ЭВМ.

б) Выполните п. а) при условии, что цифры появляются в возрастающем или убывающем порядке. Ниже даны два примера:.

123 + 4—5+67—89 = 100 9—8+ 76—5 + 4 + 3 + 21 = 100

в) Выполните п. б) с шестнадцатеричными цифрами (123... ...ЕР), получив при этом число 100 в шестнадцатиричном представлении.

30. Напишите программу, которая читает исходную программу и перфорирует ее с последовательной нумерацией в позициях 73— 80. Программа должна уметь начинать нумерацию с любого заданного числа и обеспечивать любое заданное приращение.

31. Напишите программу, которая читает целое положительное число в десятичном представлении, а на выходе выдает это же число в десятичном представлении и на естественном языке. Например, если на вход поступает число 7 204 52 0, то на выходе появится сообщение:

ч

7 семь 204 двести четыре 52 пятьдесят два

Последнее число должно быть нулем, ни одно из чисел не должно превышать миллиард.

ПРОЕКТЫ

32. Разработайте набор директив для введения параграфов в текст, написанный на языке программирования, с которым вы работаете. Затем обсудите эти директивы и выясните, сколько человек за и сколько против. Модифицируйте директивы, пока не будет достигнуто полного единодушия.

33. Напишите программу, которая, получая на входе исходную программу, не разделенную на параграфы, выдает текст с выделенными параграфами (см. упр. 32). Это сделать нелегко, но возможно. Начните с выделения циклов.

34. Напишите программу, которая перенумеровывает операторы исходной программы на ФОРТРАНе или БЕИСИКе. Программа должна допускать любой начальный номер и любое приращение. Хорошим дополнительным свойством была бы возможность указывать начальный номер оператора для нескольких точек исходной программы. Таким образом, вы можете начать нумерацию программы с 10 и указать область программы, для которой нумерацию следует начать с 1000.

35. Напишите программу, которая будет читать исходную программу на КОБОЛе или ПЛ/1 и выдавать новую программу, где все параграфы и процедуры имеют численный суффикс.

36. Более простой и остроумный способ выполнения предыдущего упражнения — изменение порядка следования операторов. Затем проведите отладку программы, составьте документацию и сделайте программу общедоступной.

37. Найдите приятеля, который прочтет ваши программы, а вы в свою очередь прочтете его программы. Затем каждый из вас может сделать замечания и предложения^ по программе другого. Разработайте набор директив по чужой "программе, так чтобы сделанные замечания оказались полезными, но не обескураживающими. Одно традиционное предложение: читатель всегда должен найти в программе другого что-то положительное. (Изучите метод коллективного программирования по книге Вейнберга, которая упоминается в списке литературы к гл. 2.)

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

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

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

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

а) Сколько и какой процент операторов каждого типа: комментарии, GO ТО, IF, DO и т. д.

б) Какова длина имен переменных? Сколько одно-, двух-, трехсимвольных имен и т. д.

Можете ли вы применить эту информацию для выработки некоторого критерия определения хороших программ? Воспользуйтесь работой Кнута, посвященной практике программирования на ФОРТРАНе1).

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

*> Knuth D. Е., An Empirical Study of FORTRAN Programs, Software — Practice and Experience (April — June 1971).

ры некоторых последовательностей:

О

00 *

0100 *

0101 * 0102 01020

010200 * 010201

Звездочками отмечены недопустимые последовательности. Если для вас это затруднительно, то изящное решение этой задачи вы можете найти в книге У. Дала, Э. Дейкстры и К. Хоора1).

43. Палиндромы. Палиндром — это сочетания символов, которые читаются одинаково туда и обратно. Элементом палиндрома может быть буква (например, WOW или MOM), цифра (4884, 121) или слово (STRAP ON—(NO PARTS).

а) Найдите целые числа, которые при возведении в квадрат дают палиндромы, например 26 = 676.

б) Найдите целые числа — палиндромы, которые при возведении в квадрат также дают палиндромы (22=484).

в) Обобщите п. а) и б) на степени, большие 2.

г) Напишите программу-палиндром.

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

1.18. Упражнения1

Проверьте этот алгоритм для первых 100 целых чисел.

Замечание: 196 — первое число, для которого не известно, работает ли этот алгоритм. Для справок смотрите книги Г. Бергер-сона1) и М. Гарднера2).

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

а) ФОРТРАН в БЕЙСИК, в) АЛГОЛ в ФОРТРАН, б) БЕЙСИК в ФОРТРАН, г) ФОРТРАН в АЛГОЛ.

Можете по желанию реализовать только часть предложенного преобразования.

45. Напишите программу-стихотворение.

46. Напишите программу пятистопным ямбом.

1.17. Советы программисту1 || Оглавление || Литература1


Услуги