|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.06.2016, 17:21 | #1 |
Новичок
Джуниор
Регистрация: 29.06.2016
Сообщений: 4
|
Pascal ABC.NET Передача массива в модуль
Добрый день. Возникает ошибка при передаче массива в модуль (нельзя преобразовать тип array[1..10] of integer к array of integer)
Задача: Разработать модуль, содержащий подпрограмму суммирования элементов массива. Решал задачи для самопроверки, ничего не получалось. В итоге взял переписал пример из учебника. Та же ошибка. Учебник: Иванова Г.С. Основы программирования: Учебник для вузов. - 2-е изд., перераб. и доп. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2002. ~ 416 с Основная программа ___________________________________ __ PROGRAM EX; USES R1; VAR A:ARRAY[1..10] OF INTEGER; I,N:INTEGER; BEGIN READLN(N); FOR I:=1 TO N DO READ(A[I]); READLN; WRITELN('СУММА= ',SUM(A,N)); END. Модуль ___________________________________ __ UNIT R1; INTERFACE FUNCTION SUM (B:ARRAY OF INTEGER;N:INTEGER):INTEGER; IMPLEMENTATION FUNCTION SUM(B:ARRAY OF INTEGER;N:INTEGER):INTEGER; VAR S,I:INTEGER; BEGIN S:=0; FOR I:=1 TO N-1 DO S:=S+B[I]; SUM:=S; END; END. |
29.06.2016, 17:37 | #2 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
первое. Очень не рекомендую использовать этот мутант Pascal ABC (как и его родственника - Pascal ABC.NET)
используйте FreePascal (или delphi) второе. когда Вы пишете Цитата:
если не знаешь, что это и как это работает, то лучше этим не пользоваться. Лучше поступить так: описать свой тип данных и передавать в процедуры/функции именно его например, Код:
|
|
29.06.2016, 21:56 | #3 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,330
|
Позволю себе слегка подправить:
Код:
Поскольку параметры передаются через стек, то для массивов лучше использовать указанные модификаторы. Такие модификаторы позволяют передать в функцию ссылку на массив. Во втором случае элементы массива могут быть использованы только в правой части операторов (элементы массива можно прочитать, но нельзя изменить). Как-то так, ...
Как-то так, ...
|
30.06.2016, 08:52 | #4 |
Заблокирован
Регистрация: 17.06.2016
Сообщений: 62
|
А кто вам сказал, что в университетских книгах написано "как надо"??? Кто вам сказал, что эта программа вообще правильно написана? Программа жестко задает размер массива например 10, затем пользователь, который не знает какое ограничение у массива, задает какое-то число , например 15 и пытается записать в несуществующие ячейки свои числа! Где логика??? Это простой пример как в университетах дурят студентов, вместо того, чтоб давать им знания...
|
30.06.2016, 10:14 | #5 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|
30.06.2016, 12:01 | #6 |
Новичок
Джуниор
Регистрация: 29.06.2016
Сообщений: 4
|
Благодарю за проявленный интерес к теме и за ответы.
Serge_Bliznykov Я не студент, но хочу получить 2-ое высшее. Решил самостоятельно изучать основы программирования, взял за основу список литературы, предложенный на сайте ИТМО. Там в качестве основ рассматривается именно Pascal (не delphi или VBasic). Предложенный Вами вариант, и еще ряд других комбинаций, пробовал на PascalABC, так ничего и не заработало. О нем узнал так сказать первым и поэтому установил и начал работать. До этого был лишь один глюк, точно не смогу его описать, но он отказывался нормально выдавать результат. Установил FreePascal, работать неудобно, НО! все варианты, включая исходный на нем исправно работают! ur_naz Иных вариантов кроме как изучать по учебникам просто не существует. Образование сейчас дорогое, поэтому что бы получить его эффективно, желательно уже быть образованным, как бы странно это не звучало. |
30.06.2016, 13:41 | #7 | |
Заблокирован
Регистрация: 17.06.2016
Сообщений: 62
|
Цитата:
В твоем случае ты в одном месте выделяешь выделяешь память для 10 целых чисел, а в другом нет. Следовательно это задача компилятора выделять память автоматически или не выделять. FreePascal выделил тебе нужную память и программа вроде сработала, а АВС не выделил и программа не скомпилировалась ...у АВС другая философия и код на нем выглядит иначе, чем на турбопаскале и ли его преемнике фрипаскале. Насколько я знаю там связные списки доступны из коробки и многие другие вкусности .Net-платформы |
|
30.06.2016, 14:44 | #8 | |||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
Цитата:
Только сообщите подробности, какой именно у Вас Pascal ABC, какой код пытались компилировать и какие ошибки выдались. Хотя, с другой стороны, может быть, оно Вам и не надо?! Цитата:
Успехов в учёбе! |
|||
30.06.2016, 15:39 | #9 | |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
Цитата:
Хотя нет, не важно... при многопоточном приложении так делать неправильно )) |
|
30.06.2016, 16:14 | #10 |
Новичок
Джуниор
Регистрация: 29.06.2016
Сообщений: 4
|
Прошу прощения, но я также думал, что PascalABC и PascalABC.NET одно и тоже. Работаю с PascalABC.NET.
Изначально пользовался справкой с офф.сайта, но как то без успехов. На сторонних сайтах нашел полезную информацию. В общем разобрался. При работе с модулями в PascalABC.NET объявление типа переменной производится только в самом модуле. В основной программе просто объявляется переменная. Вариант для массива с определенными размерами: МОДУЛЬ: Код:
Код:
МОДУЛЬ: Код:
Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Pascal abc.net, нужно составить модуль | Pon4is | Помощь студентам | 0 | 17.12.2015 23:08 |
Pascal ABC.NET | gogomon93 | Помощь студентам | 4 | 01.12.2013 17:56 |
действительное число с плавающей точкой, его модуль и квадрат (pascal ABC) | программирование | Помощь студентам | 1 | 01.05.2013 22:15 |
Pascal ABC.NET | BuTaJI | Помощь студентам | 1 | 26.04.2011 20:10 |
Pascal ABC .NET | no4_sniper | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 17.10.2009 00:21 |