OberonCore https://forum.oberoncore.ru/ |
|
Ошибка при возврате моего массивного типа https://forum.oberoncore.ru/viewtopic.php?f=35&t=4944 |
Страница 1 из 1 |
Автор: | bill [ Суббота, 18 Январь, 2014 15:34 ] |
Заголовок сообщения: | Ошибка при возврате моего массивного типа |
Код: MODULE XmatemGaus0;
IMPORT StdLog; TYPE STRING = ARRAY 256 OF CHAR; massiv_type = ARRAY 4 OF REAL; PROCEDURE massiv_umnojenie(a:massiv_type; n:REAL) : massiv_type ;(*вот тут ошибка*) VAR stroka_1:massiv_type; BEGIN stroka_1[0]:=a[0]*n; stroka_1[1]:=a[1]*n; stroka_1[2]:=a[2]*n; stroka_1[3]:=a[3]*n; RETURN:=stroka_1; end; (*....*) END XmatemGaus0. |
Автор: | Пётр Кушнир [ Суббота, 18 Январь, 2014 15:49 ] |
Заголовок сообщения: | Re: Ошибка при возврате моего массивного типа |
Используй параметры IN, OUT вместо возврата результата. |
Автор: | bill [ Воскресенье, 19 Январь, 2014 10:11 ] |
Заголовок сообщения: | Re: Ошибка при возврате моего массивного типа |
Не смог разобраться в IN и OUT, |
Автор: | Jordan [ Воскресенье, 19 Январь, 2014 11:32 ] |
Заголовок сообщения: | Re: Ошибка при возврате моего массивного типа |
Код: MODULE XmatemGaus0; IMPORT StdLog; TYPE STRING = ARRAY 256 OF CHAR; massiv_type = ARRAY 4 OF REAL; PROCEDURE massiv_umnojenie(a:massiv_type; n:REAL; OUT v:massiv_type) ; VAR stroka_1:massiv_type; BEGIN stroka_1[0]:=a[0]*n; stroka_1[1]:=a[1]*n; stroka_1[2]:=a[2]*n; stroka_1[3]:=a[3]*n; v := stroka_1; END massiv_umnojenie; END XmatemGaus0. И попробуйте заменить OUT, VAR'ом. |
Автор: | Jordan [ Воскресенье, 19 Январь, 2014 11:44 ] |
Заголовок сообщения: | Re: Ошибка при возврате моего массивного типа |
Пример на паскале. Код: {$mode objfpc}
PROGRAM main; TYPE MType = ARRAY [0..4] OF INTEGER; PROCEDURE MMul(A: MType; N: INTEGER; VAR V: MType); VAR S: MType; BEGIN S[0]:=a[0]*n; S[1]:=a[1]*n; S[2]:=a[2]*n; S[3]:=a[3]*n; V := S; END; VAR M: MType; A: MType; BEGIN A[0]:= 3; A[1]:= 4; A[2]:= 9; A[3]:= 11; MMul(A, 5, M); WriteLn(M[0]); WriteLn(M[1]); WriteLn(M[2]); WriteLn(M[3]); END. |
Автор: | Jordan [ Воскресенье, 19 Январь, 2014 11:54 ] |
Заголовок сообщения: | Re: Ошибка при возврате моего массивного типа |
Ещё бы я умножал в цикле. И заменил тип, на Mtype: POINTER ARRAY OF REAL. Тогда не будет ограничения на размер массива. |
Автор: | bill [ Воскресенье, 19 Январь, 2014 12:43 ] |
Заголовок сообщения: | Re: Ошибка при возврате моего массивного типа |
опять ошибка я хотел вывести результаты своей функции, я делаю так как привык в FPC, вызываю функцию а тут ошибка Код: MODULE XmatemGaus0;
IMPORT StdLog; TYPE STRING = ARRAY 256 OF CHAR; massiv_type = ARRAY 4 OF REAL; PROCEDURE massiv_umnojenie(a:massiv_type; n:REAL; OUT v:massiv_type) ; VAR stroka_1:massiv_type; BEGIN stroka_1[0]:=a[0]*n; stroka_1[1]:=a[1]*n; stroka_1[2]:=a[2]*n; stroka_1[3]:=a[3]*n; v := stroka_1; END massiv_umnojenie; PROCEDURE Do ; VAR stroka_1:massiv_type; a:massiv_type; BEGIN a[0]:=1; a[1]:=1; a[2]:=1; a[3]:=1; stroka_1:=massiv_umnojenie(a,3);(*ошибка тут*) StdLog.Ln; StdLog.Real(stroka_1[0]); StdLog.Ln; StdLog.Real(stroka_1[1]); END Do; END XmatemGaus0. |
Автор: | Jordan [ Воскресенье, 19 Январь, 2014 12:51 ] |
Заголовок сообщения: | Re: Ошибка при возврате моего массивного типа |
bill писал(а): stroka_1:=massiv_umnojenie(a,3);(*ошибка тут*) Правильно так. massiv_umnojenie(a,3, stroka_1); У нас процедура, а не функция. |
Автор: | Jordan [ Воскресенье, 19 Январь, 2014 13:01 ] |
Заголовок сообщения: | Re: Ошибка при возврате моего массивного типа |
Код: MODULE XmatemGaus0; IMPORT StdLog; TYPE STRING = ARRAY 256 OF CHAR; massiv_type = ARRAY 4 OF REAL; VAR stroka_1:massiv_type; a:massiv_type; PROCEDURE massiv_umnojenie(a:massiv_type; n:REAL; OUT v:massiv_type) ; VAR stroka_1:massiv_type; BEGIN stroka_1[0]:=a[0]*n; stroka_1[1]:=a[1]*n; stroka_1[2]:=a[2]*n; stroka_1[3]:=a[3]*n; v := stroka_1; END massiv_umnojenie; BEGIN a[0]:=1; a[1]:=1; a[2]:=1; a[3]:=1; massiv_umnojenie(a,3, stroka_1); StdLog.Ln; StdLog.Real(stroka_1[0]); StdLog.Ln; StdLog.Real(stroka_1[1]); END XmatemGaus0. Вы не знаете как вывести в лог информацию? Я компилирую ctrl+k, куда потом жать, что бы запустить программу. Вроде, как в delphi, compile and run. |
Автор: | bill [ Воскресенье, 19 Январь, 2014 14:06 ] |
Заголовок сообщения: | Re: Ошибка при возврате моего массивного типа |
Jordan, Меню-> Contrors-> New Form, далее вводим имя программы(XmatemGaus0), форма создается автоматически, за лог отвечает модуль StdLog |
Автор: | Jordan [ Вторник, 21 Январь, 2014 15:30 ] |
Заголовок сообщения: | Re: Ошибка при возврате моего массивного типа |
У меня ББ, не выводит сообщения в лог. Даже простой StdLog.String("Hello World!"), не работает. Так как получилось, работает? Писать результат можно в сам массив, без создания переменной. PROCEDURE massiv_umnojenie(VAR A:massiv_type; N:REAL) ; VAR I: INTEGER; BEGIN FOR I := 0 TO LEN(A)-1 DO A[I] := A[I] * N; END; END massiv_umnojenie; Вызов massiv_umnojenie(a,3); |
Автор: | bill [ Вторник, 21 Январь, 2014 16:00 ] |
Заголовок сообщения: | Re: Ошибка при возврате моего массивного типа |
вот этот пример попробуйте Код: MODULE ObxHello0;
IMPORT StdLog; PROCEDURE Do*; BEGIN StdLog.String("Hello World"); StdLog.Ln (* вывод в рабочий журнал (Log) цепочки литер и 0DX (переход на новую строку) *) END Do; END ObxHello0. |
Автор: | Jordan [ Вторник, 21 Январь, 2014 16:03 ] |
Заголовок сообщения: | Re: Ошибка при возврате моего массивного типа |
В лог пишет только "compiling "ObxHello0" 32 0". |
Автор: | Димыч [ Вторник, 21 Январь, 2014 16:55 ] |
Заголовок сообщения: | Re: Ошибка при возврате моего массивного типа |
Потом ставите курсор в конец файла, нажимаете Ctrl-Q и печатаете ObxHello0.Do После этого жмете на восклицательный знак и наблюдаете. |
Автор: | bill [ Вторник, 21 Январь, 2014 17:02 ] |
Заголовок сообщения: | Re: Ошибка при возврате моего массивного типа |
Jordan, или Contrors-> New Form, далее вводим имя программы(ObxHello0), генерируется кнопка Do , нажимаем на нее |
Автор: | Jordan [ Вторник, 21 Январь, 2014 21:31 ] |
Заголовок сообщения: | Re: Ошибка при возврате моего массивного типа |
Работает, спасибо. Теперь я написал первый, рабочий hello world на КП. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |