OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 16 Август, 2018 13:04

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 16 ] 
Автор Сообщение
СообщениеДобавлено: Суббота, 18 Январь, 2014 15:34 

Зарегистрирован: Четверг, 01 Август, 2013 16:39
Сообщения: 92
Откуда: Кыргызстан
Код:
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 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2516
Откуда: Россия, Ярославль
Используй параметры IN, OUT вместо возврата результата.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 19 Январь, 2014 10:11 

Зарегистрирован: Четверг, 01 Август, 2013 16:39
Сообщения: 92
Откуда: Кыргызстан
Не смог разобраться в IN и OUT,


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 19 Январь, 2014 11:32 

Зарегистрирован: Пятница, 26 Август, 2011 23:42
Сообщения: 338
Откуда: Россия, Самара
Код:
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'ом.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 19 Январь, 2014 11:44 

Зарегистрирован: Пятница, 26 Август, 2011 23:42
Сообщения: 338
Откуда: Россия, Самара
Пример на паскале.

Код:
{$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.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 19 Январь, 2014 11:54 

Зарегистрирован: Пятница, 26 Август, 2011 23:42
Сообщения: 338
Откуда: Россия, Самара
Ещё бы я умножал в цикле. И заменил тип, на Mtype: POINTER ARRAY OF REAL. Тогда не будет ограничения на размер массива.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 19 Январь, 2014 12:43 

Зарегистрирован: Четверг, 01 Август, 2013 16:39
Сообщения: 92
Откуда: Кыргызстан
опять ошибка я хотел вывести результаты своей функции, я делаю так как привык в 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.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 19 Январь, 2014 12:51 

Зарегистрирован: Пятница, 26 Август, 2011 23:42
Сообщения: 338
Откуда: Россия, Самара
bill писал(а):
stroka_1:=massiv_umnojenie(a,3);(*ошибка тут*)


Правильно так.

massiv_umnojenie(a,3, stroka_1);

У нас процедура, а не функция.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 19 Январь, 2014 13:01 

Зарегистрирован: Пятница, 26 Август, 2011 23:42
Сообщения: 338
Откуда: Россия, Самара
Код:
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.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 19 Январь, 2014 14:06 

Зарегистрирован: Четверг, 01 Август, 2013 16:39
Сообщения: 92
Откуда: Кыргызстан
Jordan, Меню-> Contrors-> New Form, далее вводим имя программы(XmatemGaus0), форма создается автоматически, за лог отвечает модуль StdLog


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2014 15:30 

Зарегистрирован: Пятница, 26 Август, 2011 23:42
Сообщения: 338
Откуда: Россия, Самара
У меня ББ, не выводит сообщения в лог. Даже простой 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);


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2014 16:00 

Зарегистрирован: Четверг, 01 Август, 2013 16:39
Сообщения: 92
Откуда: Кыргызстан
вот этот пример попробуйте
Код:
MODULE ObxHello0;

   IMPORT StdLog;

   PROCEDURE Do*;
   BEGIN
      StdLog.String("Hello World"); StdLog.Ln  (* вывод в рабочий журнал (Log) цепочки литер и 0DX (переход на новую строку) *)
   END Do;

END ObxHello0.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2014 16:03 

Зарегистрирован: Пятница, 26 Август, 2011 23:42
Сообщения: 338
Откуда: Россия, Самара
В лог пишет только "compiling "ObxHello0" 32 0".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2014 16:55 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 490
Потом ставите курсор в конец файла, нажимаете Ctrl-Q и печатаете ObxHello0.Do
После этого жмете на восклицательный знак и наблюдаете.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2014 17:02 

Зарегистрирован: Четверг, 01 Август, 2013 16:39
Сообщения: 92
Откуда: Кыргызстан
Jordan, или Contrors-> New Form, далее вводим имя программы(ObxHello0), генерируется кнопка Do , нажимаем на нее


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Январь, 2014 21:31 

Зарегистрирован: Пятница, 26 Август, 2011 23:42
Сообщения: 338
Откуда: Россия, Самара
Работает, спасибо. Теперь я написал первый, рабочий hello world на КП.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2018, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB