Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Языки программирования. Практический сравнитель...doc
Скачиваний:
58
Добавлен:
09.09.2019
Размер:
3 Мб
Скачать
☆

13.6. Упражнения

1. Напишите главную программу на языке С, которая вызывает внешнюю функцию f с целочисленным параметром; в другом файле напишите функцию f с параметром с плавающей точкой, который она печатает. Откомпилируйте, скомпонуйте и выполните программу. Что она печата­ет? Попытайтесь откомпилировать, скомпоновать и выполнить ту же самую программу на языке C++ .

2. Напишите программу, реализующую абстрактный тип данных для оче­реди, и главную программу, которая объявляет и использует несколько очередей. Очередь должна быть реализована как массив, который объяв­лен в закрытой части пакета языка Ada или класса C++. Затем измените реализацию на связанный список; главная программа должна выпол­няться без изменений.

3. Что происходит, если вы пытаетесь присвоить одну очередь другой? Ре­шите проблему, используя ограниченный приватный тип в языке Ada или конструктор копий (copy-constructor) в C++.

4. В языках С и C++ в объявлении подпрограммы имена параметров не обязательны:

C

int func(int, float, char*);

Почему это так? Будут ли так или иначе использоваться имена парамет­ров? Почему в языке Ada требуется, чтобы в спецификации пакета при­сутствовали имена параметров?

5. В языке Ada есть конструкция для раздельной компиляции, которая не зависит от конструкции пакета:

Ada


procedure Main is

Global: Integer;

procedure R is separate; -- Раздельно компилируемая процедура

end Main;

separate(Main) --Другой файл

procedure R is

begin

Global := 4; -- Обычные правила области действия

end R:

Факт раздельной компиляции локального пакета или тела процедуры не влияет на область действия и видимость. Как это может быть реализова­но? Требуют ли изменения в раздельно компилируемой единице пере­компиляции родительской единицы? Почему? Обратный вопрос: как из­менения в родителе воздействуют на раздельно компилируемую единицу?

6. Раздельно компилируемая единица может содержать конструкцию, задающую контекст:

with Text_IO;

Ada

separate(Main)

procedure R is

…

end R;

Как это можно использовать?

7. Следующая программа на языке Ada не компилируется; почему?

package P is

type T is (А, В, С, D);

end Р;

Ada

with P;

procedure Main is

X: Р.Т;

begin

if X = P. A then ...end if;

end Main;

Существуют четыре способа решить проблему; каковы преимущества и недостатки каждого из них: а) use-конструкция, б) префиксная запись, в) renames (переименование), г) конструкция use type в языке Ada 95?