Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 90
Текст из файла (страница 90)
68. Рассмотрите распространенную ошибку набора, заключающуюся в перестановке соседних букв. Перепишите приведенный ниже фрагмент кода с использованием структуры цикла на следующих языках. 1О.1. Рааса!. 10.2. ГОКТКАХ 77. 10.3. Ада. 10.4. С, С++ или зата. )с:= (3 + 13) / 27 1оор: 1й й > 10 "Леп алого огас )с:= К+ 1 3 * й посо 1оор оос ". Предполагается, что все переменные являются целочисленными. Определите. какой язык для этого кода предоставляет наибольшую легкость написания программы, наилучшую читабельность и оптимальную комбинацию этих свойств.
упражнения 11. Решите заново упражнение 1О, только на этот раз предположите, что все переменные и константы представляют собой числа с плаваюшей точкой, и измените опе- ратор на 12. Перепишите приведенный фрагмент кода с использованием многовариантного оператора ветвления на следующих языках. 12 1. Рааса). 12.2. РОКТКАХ 90 (найдите описание этого языка в тексте). 12.3.
Ада. 12.4. С, С++ или Зача. Г)зеп 7:= 2 * )с - 1 'с)зеп 3: 3 * к+ 1 4*)с-1 ог (К = 8] СПеп 3 := Х вЂ” 2 11 (М=1) ог (Х=2) 1б (Х - 3) аг ()с = 5) 12 (Х - 4) С]зеп 3 1т (К = б] ог (К = 7) Предположите, что все переменные являются целочисленными. Рассмотрите относительные достоинства использования этих языков для данного конкретного кода. 13.
Рассмотрите следующий оператор йсг в стиле языка А).ОО(. 60: аког 1:= 3 + 1 всеР 1 * 3 ипкд1 3 * 3 с)о 3 := 3 + 1 Предположите, что начальное значение переменной 3 равно 1. Перечислите последовательность значений использованной переменной 1, предполагая следующую семантику. 13.1. Все выражения вычисляются по одному разу при каждом входе в цикл. 13.2. Все выражения вычисляются перед каждым повтором. 13.3. Выражения веер вычисляются один раз при входе в цикл, а выражения ипсз1 вычисляются перед каждым повтором. 13.4. Выражения ипсз1 вычисляются один раз при входе в цикл, а выражения втер вычисляются перед каждым повтором сразу после увеличения счетчика цикла.
саве 1пс)ех — 1 ок 2, 4: ечеп := ечеп + 1; 1, 3: ос)с):= ос(с) + 1; 0: кего := гого + 1; Глава 7. Структуры упровлвння на уровне операторов Все одновременно вычисляемые выражения вычисляются справа налево. Кроме того, присваивание всегда выполняется, как только оказывается вычисленной правая часть оператора присваивания. 14. Рассмотрите следующий оператор саве язык Рааса). Перепишите его, используя только лвухвариантные операторы ветвления.
е1ве еггог := скин ( ! е. Рассмотрите следующий фрагмент программы на языке С. Перепишите его, не ис-. пользуя операторы доео и Ькеа)с. = -3; йок (1=0; 1 < 3; 1++! ( визксЬ (3 + 2) ( саве 3: саве 2; 3-1 Ькеа1с) саве 0: 3 + 2; Ькеа!с; с(екаи1К: 3 = 0; 1 зй (д > 0) Ькеа)с) 3-1 В письме редактору журнала САСМ Рубин ()(ц(з(п, 1987) использует следующий сегмент кода в качестве доказательства того, что читабельность некоторых программ, содержащих операторы ло!о, лучше, чем читабельность аналогичных программ, не использующих операторы козе. Этот код находит первую строку матрицы целых чисел размером и х и с именем х, не содержащую ничего, кроме нулей.
кок 1:= 1 со и с(о Ьедка к'ок 3:- 1 Ко п с1о Их(1 3] <> 0 ЕЬеп доФо те3еск) нгзсе1и('Первая нулевая строка:', 1); Ькеа)с! =е-'есс: июне) Перепишите зтот код без использования операторов яо(о на одном из следующих языков: С, С++, Рааса!, Зача или Ада. Сравните читабельность вашего кода с читабельностью кода, приведенного выше. ! . Приведите аргументы "за" и "против" исключительного использования булевских выражений в управляющих операторах языка Зача (в отличие от языков С и С++, допускающих использование арифметических выражений в управляющих операторах). 343 ° чоажнения ' Дейнйс Рйтчй (Оепп~в йЫве) Деннис Ритчи из корпорации Вен Ьзьогвгопез был одним из основных рвзрвботчиков опервционное системы 0ЗГ1Х.
Его первая версия языки С затем была «спользоввнв при создании опервционное системы ОМ!Х для компьютеров РОР-11. 8.11. Доступ к нелокальным средам 8.12. Перегруженные операторы, определяемые пользователем 8.13. Сопрограммы одпрограммы — основные строительные блоки, из которых состоят програм- П мы — относятся к наиболее важным понятиям в области разработки языков программирования. В этой главе мы исследуем вопросы разработки подпрограмм, включая методы передачи параметров, локальные и глобальные среды ссылок, перегруженные и обобщенные подпрограммы, раздельную и независимую компиляцию, а также совмещение имен и проблемы, связанные с побочными эффектами, присущими подпрограммам.
Мы также кратко опишем сопрограммы, позволяющие создавать симметричные модули управления. Методы реализации подпрограмм будут обсуждаться в главе 9. 8.1. Введение Языки программирования могут содержать два возможных средства абстракции: абстракцию процессов и абстракцию данных. На заре истории языков программирования высокого уровня программисты признавали и включали в языки только абстракцию процессов, которая была основным понятием во всех языках программирования.
Однако в ! 980-х годах люди стали понимать, что абстракция данных не менее важна. Абстракция данных обсуждается в главе 10. Первый программируемый компьютер (аналитическая машина Бэббилжа), построенный в 1840-х годах, позволял при необходимости повторно использовать карточки с наборами команд. В 'современных языках программирования такой набор операторов записывается в виде подпрограммы. Повторное использование совокупностей операторов приводит к различным видам зкономии — от уменьшения объема памяти до сокращения времени программирования. Такое повторное использование представляет собой некую абстракцию, в которой детали вычислений, производимых подпрограммой, заменяются в программе оператором, вызывающим эту подпрограмму. Вместо того, чтобы объяснять, каким образом следует выполнять некие вычисления в некотором месте программы, это объяснение (набор операторов в подпрограмме) заменяется оператором вызова, что позволяет действительно абстрагироваться от деталей вычислений.
Это улучшает читабельность программы, позволяя выявить ее логическую структуру и скрывая подробности вычислений. 8.2. Основы подпрограмм $.2.1. Общив свойства подпрограмм Все подпрограммы, рассмотренные в этой главе, за исключением сопрограмм, описанных в разделе 8.13, имеют следующие свойства.
° Каждая подпрограмма имеет один вход. ° На время выполнения вызываемой подпрограммы выполнение вызывающего ее модуля откладывается. Это приводит к тому, что в каждый момент времени выполняется только одна подпрограмма. ° Управление после выполнения подпрограммы всегда возвращается в вызывающий модуль. Глава В. Подпрограммы Несмотря на то что подпрограммы в языке гОКТКАЫ могут иметь несколько входов, .: -'ретный вид входа является относительно неважным, поскольку он не обеспечивает ни ::-ой су шественно новой возможности.
В силу этих причин в этой главе мы будем игио.- тоаать возможность наличия нескольких входов в подпрограммы языка ГОКТКА1Ч. ~альтернативой указанным выше предположениям являются подпрограммы (раздел 8.13) и -зг допел ьные молули, рассматриваемые в разделе 8.12. '1етоды в объектно-ориентированных языках тесно связаны с подпрограммами, об. -.=аемыми в этой главе. Основное отличие методов от подпрограмм заключается в ;-::обе, которым они вызываются, а также в способе связи методов с классами и объек-т" н Несмотря на то что эти характеристики методов обсуждаются в главе 11, свойства, ие для них и подпрограмм (параметры и локальные переменные), рассматриваются в - д главе. 8.2.2. Основные опредвленив Определение полпрограммы (зцЬргойгаш оебп(((оп) описывает ее связь с вызываю- ".и модулем (т.е.
интерфейс) и действия, которые абстрагируются подпрограммой. Вы::в подпрограммы (зцЬргойаш са11) представляет собой явное требование выполнить -:=программу. Подпрограмма называется активной, если после получения вызова она -: -зла свое выполнение, но еше не закончила его. Две основные разновидности подпро—. зч ч — процедуры и функции — описываются в разделе 8.2.4. Заголовок подпрограммы (ьиЬргойгаш Ьеа()ег), являющийся первой строкой ее оп::=аления, преследует несколько целей. Во-первых, он указывает, что следующая за ним :"нтаксическая единица представляет собой определение подпрограммы некоего кон.гетного вида.
Это указание часто выполняется с помощью специального слова. Воз гзрых. заголовок определяет имя подпрограммы. В-третьих, он может, но необязатель- .. содержать список параметров. Эти параметры являются необязательной частью заго: вка. поскольку не все описания подпрограмм их имеют. Рассмотрим следующий пример заголовка: ЗКОРТ1ИЕ АРРЕК(параметры) .--.