Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
Pascal строки https://www.cyberforum.ru/ pascal/ thread698899.html
Ввести строку S1 с помощью оператора readln. Определить количество гласных в ней. В строку S2 вводить информацию посимвольно с помощью readkey, конец ввода - знак препинания. Ввести строку S3. Обьединить все строки. Удалить строку S3 из обьедененной строки. получилось только это, и то не полностью работает ( не вводится строка s2) uses crt; const g: set of char=; const l: set of char=;...
Найти сумму,и кол-во элементов массива>1,найти кол-во элементов массива,равных == 3 и 5 Pascal
Найти сумму,и кол-во элементов массива >1 (используя for) Найти кол-во элементов массива,равных == 3 и 5(используя for)
Pascal Проблемы с оператором if и else https://www.cyberforum.ru/ pascal/ thread698851.html
Program N; uses crt; var x1, {Первый корень} x2, {Второй корень} D, {Дискриминант} a, {Значение a} b, {Значение b} c {Значение c} : real;
Pascal Написать программу для подсчета произведения последовательных натуральных чисел в диапазоне от 5 до 10 https://www.cyberforum.ru/ pascal/ thread698819.html
1.Написать программу для подсчета произведения последовательных натуральных чисел в диапазоне от 5 до 10. 2.Написать программу для вывода на экран таблицы умножения на 9.
Pascal Дан символьный файл f. Определить, являются ли два последних символа файла цифрами
Дан символьный файл f. Определить, являются ли два последних символа файла цифрами. Если да, то установить, является ли число, образованое этими цифрами четным или же нечетным.
Pascal Нужно вывести в случайном порядке чётные до 10, и нечётные до 11 https://www.cyberforum.ru/ pascal/ thread698727.html
Нужна программа, в которой можно вывести числа до 10 четные(2, 4, 6, 8, 10), и до 11 не четные(1, 3, 5, 7, 9, 11) в случайном порядке. Заранее спасибо.
Pascal Каждый элемент в двумерном массиве больший 7 домножить на результат целочисленного деления этого элемента на 7 Ввести двумерный массив A (NxM) . Каждый элемент в массиве больший 7 домножить на результат целочисленного деления этого элемента на 7. Массив вывести до и после преобразования. https://www.cyberforum.ru/ pascal/ thread698720.html Найти во введенном предложении количество слов, у которых совпадают первая и последняя буква Pascal
у меня есть такая задачка, её надо переделать под такое условие: составить программу поиска во введенном предложении количества слов, у которых совпадают первая и последняя буква. b:=0 for i:=1 to dlina do {перебор от 1 до последнего символа начальной строки, ту которую вводим} begin j:=j+1; {счётчик символов до пробела} k:=k+1;{счётчик всех символов} if ord(s)=32 then {если...
Pascal Составить программу ввода значений и вычисления длины этого вектора Дан вектор {z1},i=1,...,50. Составить программу ввода значений и вычисления длины этого вектора по формуле L=корень из z12+z22+...+z502 https://www.cyberforum.ru/ pascal/ thread698654.html Pascal номер наименьшего элемента массива Помогите пожалуйста написать программу в паскале: Составить* программу для вычисления S - сумма элементов массива с нечетными номерами; T - произведение всех элементов массива; U - номер наименьшего элемента массива. https://www.cyberforum.ru/ pascal/ thread698622.html
Pascal Задать случайным образом одномерный массив из 18 целочисленных элементов, принадлежащих отрезку [-14;14]. Найти сумму элементов массива, кратных пяти.
Помогите пожалуйста написать прогу в паскале: задать случайным образом одномерный массив из 18 целочисленных элементов, принадлежащих отрезку . Найти сумму элементов массива, кратных пяти. Закрасить указанные элементы.
Pascal Расчет пути и расстояния между двумя точками координат Здравствуйте. Даны координаты точек А и Б на земном шаре. Как рассчитать между ними путь по земле и прямую дистанцию. Помогите пожалуйста формулой. Не могу найти что то. Или может быть кто-нибудь сможет вывести ее сам через интеграл. Заранее спасибо. p.s. код программы не нужен. Программирую вообще на яве. Тему открыл здесь так, как на форуме явы мало людей, да и меня не код интересует... https://www.cyberforum.ru/ pascal/ thread698276.html
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,432
Записей в блоге: 8
18.04.2015, 12:10 0

Подключаемые модули - Pascal - Ответ 7495607

18.04.2015, 12:10. Показов 73760. Ответов 1
Метки (Все метки)

Ответ

Существует еще несколько особенностей работы с модулями.


1. Описание в нескольких модулях одинакового идентификатора
2. Циклическая зависимость модулей (circular unit reference)


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

Первый модуль:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
unit u1;
 
interface
 
type 
  TestType = array[1 .. 10] of integer;
  
procedure TestProc;
 
implementation
 
procedure TestProc;
begin
  writeln('TestProc from u1');
end;
 
end.
Второй модуль:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
unit u2;
 
interface
 
type
  TestType = integer;
  
procedure TestProc;
 
implementation
 
procedure TestProc;
begin
  writeln('TestProc from u2');
end;
 
end.
Основная программа:
Pascal
1
2
3
4
5
uses u1, u2;
 
begin
  TestProc; { Вывод: "TestProc from u2" }
end.
При сборке программы не будет никаких проблем, несмотря на одинаковые идентификаторы, а вот при запуске отработает та процедура, которая описана в модуле u2 (поскольку он подключен позже, чем u1). Если поменять порядок подключения модулей:
Pascal
1
2
3
4
5
uses u2, u1;
 
begin
  TestProc; { Вывод: "TestProc from u1" }
end.
, и пересобрать программу, то теперь отработает TestProc из модуля u1.

Для того, чтобы использовать идентификатор из модуля, подключенного НЕ последним, нужно указать, в каком именно модуле он описан:
Pascal
1
2
3
4
5
uses u2, u1;
 
begin
  u2.TestProc; { Теперь будет  вызвана процедура из u2, независимо от порядка подключения }
end.
Но если с подобной процедурой программа хотя бы будет компилироваться, то при попытке использовать другой тип (массив вместо скалярного типа, например), будут большие проблемы:

Pascal
1
2
3
4
5
6
7
8
uses u1, u2;
 
var 
  i : integer;
  a : TestType;
begin
  for i := 1 to 10 do a[i] := i; { Ошибка, нелегальный квалификатор (Illegal Qualifier) }
end.
, хотя казалось бы, модуль подключен к программе, и все должно работать. Незнание этой особенности очень часто приводит к недоразумениям, особенно при использовании VCL/LCL или других библиотек совместно с модулем Windows. Например, как вот тут: Создать объект Bitmap для загрузки изображения
Решение - точно такое же, как и в предыдущем случае. Либо поменять местами названия модулей в списке uses, либо использовать полное имя типа:
Pascal
1
a : u1.TestType;

Еще одна особенность - подключение первого модуля ко второму, а второго - к первому. Так называемая циклическая зависимость (circular unit reference). Вот пример (он, правда, синтетический, но основная идея понятна. При работе с теми же VCL/LCL тоже довольно часто встречается подобная ошибка, когда нужно связать две формы между собой) :

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
unit u1;
 
interface
uses u2;
 
procedure PrintFirst;
procedure PrintFirstSecond;
 
implementation
 
procedure PrintFirst;
begin
  writeln('Print first');
end;
procedure PrintFirstSecond;
begin
  writeln('Print first');
  PrintSecond;
end;
 
end.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
unit u2;
 
interface
uses u1;
 
procedure PrintSecond;
procedure PrintSecondFirst;
 
implementation
 
procedure PrintSecond;
begin
  writeln('Print Second');
end;
procedure PrintSecondFirst;
begin
  writeln('Print Second');
  PrintFirst;
end;
 
end.
Основная программа
Pascal
1
2
3
4
5
uses u1, u2;
 
begin
  PrintFirstSecond;
end.
Этот проект компилироваться не будет, потому что присутствует циклическая зависимости: первый модуль ссылается на второй, а второй - на первый. Для того, чтобы решить проблему, достаточно перенести раздел Uses в любом из модулей (либо в обоих) из секции Interface в секцию Implementation:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
unit u1;
 
interface
 
procedure PrintFirst;
procedure PrintFirstSecond;
 
implementation
uses u2; { <--- Раньше было в Interface }
 
procedure PrintFirst;
begin
  writeln('Print first');
end;
procedure PrintFirstSecond;
begin
  writeln('Print first');
  PrintSecond;
end;
 
end.
, и проблема будет решена, программа компилируется и запускается. Когда хотя бы один из ссылающихся друг на друга модулей подключается в разделе Implementation, компилятор умеет разруливать такую зависимость.

Это связано с тем, что для возможности использования модуля компилятор должен откомпилировать его хотя бы частично, только Interface-часть, чтобы знать, какие сущности, объявленные в этом модуле, могут быть использованы извне, и если хотя бы один из модулей частично откомпилирован (в приведенном выше примере это будет u1, в его интерфейсной части теперь нет никаких недомолвок и еще неизвестных модулей), то другой также прекрасно соберется.

Вернуться к обсуждению:
Подключаемые модули Pascal
3
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.04.2015, 12:10
Готовые ответы и решения:

Компилируются ли подключаемые модули?
Здравствуйте, у меня 2 вопроса: 1) подключаемые модули в паскале вообще компилируются? 2) как...

Модули.
Задание в вордовском документе. Срок выполнения до субботы. Заранее большое спасибо!

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

Модули
Дана задача: Написать подпрограмму (процедуру или функцию) для вычисления суммы , когда вид...

1
18.04.2015, 12:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2015, 12:10
Помогаю со студенческими работами здесь

Модули
Помогите!!Не врубаюсь в тему модули!Надо решить... Разработать модуль, реализующий функции...

Модули
составить модуль работы с комплексными числами:сложения, вычитания, умножения, деления, модуль...

Модули
Доброго времени суток. Ребят решил задачу ща с выложу код! Мне учитель сказал сделать ее по...

Модули. КР
Создать модуль для работы с векторами и матрицами (ввод, вывод, сложение, произведение,...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru