A2 & Oberon GOOGLE trans to English      Помощь      Поиск      Пользователи  Файловый архив


 Страниц (1): [1]   

> Без описания
BohdanT Администратор
Отправлено: 10 Января, 2009 - 15:55:32
Post Id



Super Member


Покинул форум
Сообщений всего: 606
Дата рег-ции: Июль 2008  
Откуда: Киев, Украина
Репутация: 2




MODULE Untitled;
CONST
test=[[1,2,3],[5,6,7],[8,9,10]];
VAR
b:LONGINT;
BEGIN
b:=test[1,2];
END Untitled.~

Повоюем!
 
 Top
sage Администратор
Отправлено: 10 Января, 2009 - 17:03:42
Post Id


Full Member


Покинул форум
Сообщений всего: 218
Дата рег-ции: Июнь 2008  
Откуда: Киев, Украина
Репутация: 0




BohdanT пишет:
CONST
test=[[1,2,3],[5,6,7],[8,9,10]];
А-а-а!!! Шикарно!!! Закатив глазки
 
 Top
lit-uriy Супермодератор
Отправлено: 10 Января, 2009 - 17:49:49
Post Id


Advanced Member


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2008  
Откуда: Тюмень / Новосибирск
Репутация: 0




что-то я из этой записи ничего не понял Недовольство, огорчение
где тут конструктор масива?
 
 Top
sage Администратор
Отправлено: 13 Января, 2009 - 12:17:35
Post Id


Full Member


Покинул форум
Сообщений всего: 218
Дата рег-ции: Июнь 2008  
Откуда: Киев, Украина
Репутация: 0




Ещё как вариант можо воспользоваться математическими расширениями компилятора.
Достаточно при объявлении типа массива использовать квадратные скобки:
VAR
a: ARRAY [*, *] OF INTEGER;
и тогда возможна такая инициализация массива в коде одной строчкой:
a := [[1, 2, 3], [5, 6, 7], [8, 9, 10]];
 
 Top
BohdanT Администратор
Отправлено: 19 Января, 2009 - 13:54:52
Post Id



Super Member


Покинул форум
Сообщений всего: 606
Дата рег-ции: Июль 2008  
Откуда: Киев, Украина
Репутация: 2




во проверил так, на всякий случай Улыбка :

MODULE Untitled;

PROCEDURE aa(p:ARRAY [*] OF LONGINT);
BEGIN
END aa;
BEGIN
aa([12,3,4,66]);
END Untitled.~
 
 Top
BohdanT Администратор
Отправлено: 19 Января, 2009 - 16:09:16
Post Id



Super Member


Покинул форум
Сообщений всего: 606
Дата рег-ции: Июль 2008  
Откуда: Киев, Украина
Репутация: 2




Мы тут с Ярославом немного подумали и пришли к интересной конструкции, которую можно применять на практике:
MODULE Untitled;
IMPORT Utilities;
TYPE
String=Utilities.String;
PROCEDURE "+"(CONST s:ARRAY OF CHAR):String;
BEGIN
RETURN Utilities.NewString(s);
END "+";
PROCEDURE aa(p:ARRAY [*] OF String);
BEGIN
END aa;
BEGIN
aa([+"qewr",+"fwfewf"]);
END Untitled.~
 
 Top
lit-uriy Супермодератор
Отправлено: 19 Января, 2009 - 19:07:21
Post Id


Advanced Member


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2008  
Откуда: Тюмень / Новосибирск
Репутация: 0




BohdanT, прокоментируй код пожалуйста, строчка за строчкой.
 
 Top
BohdanT Администратор
Отправлено: 19 Января, 2009 - 20:28:53
Post Id



Super Member


Покинул форум
Сообщений всего: 606
Дата рег-ции: Июль 2008  
Откуда: Киев, Украина
Репутация: 2




MODULE Untitled;
IMPORT Utilities; (*Подключаем модуль, нам он понадобится для работы со строками*)
TYPE
String=Utilities.String; (*делаем алиас, для удобства*)

(*переопределяем оператор "унитарный плюс" с права выражение массив сиволов, на выходе строка(указатель на массив символов) *)
PROCEDURE "+"(CONST s:ARRAY OF CHAR):String;
BEGIN
RETURN Utilities.NewString(s); (*выделяем память для строки *)
END "+";

(*тестовая процедура, на входе массив (не знаю как правильно называется тип массива) .
Ничего не делает :) *)
PROCEDURE aa(p:ARRAY [*] OF String);
BEGIN
END aa;
BEGIN
aa([+"qewr",+"fwfewf"]);(* вызываем тестовую функцию, в качестве параметра передаем массив.
[] - конструктор массива, т.е. массив создаем при вызове.
+ - это наш перегруженный оператор.
Если бы мы не перегружали оператор пришлось бы писать:
aa([Utilities.NewString("qewr"),Utilities.NewString("fwfewf")]);
С другой стороны мы не можем сделать что бы массив сосотоял из ARRAY OF CHAR,
т.к. нету фиксированного размера элементов в таком случае
*)
END Untitled.~
 
 Top
lit-uriy Супермодератор
Отправлено: 20 Января, 2009 - 08:47:08
Post Id


Advanced Member


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2008  
Откуда: Тюмень / Новосибирск
Репутация: 0




BohdanT пишет:
"унитарный плюс"
вот это для меня больше всего непонятно!
как, где и для чего он применяется?

и еще вот это непонятно:
BohdanT пишет:
из ARRAY OF CHAR, т.к. нету фиксированного размера элементов в таком случае
я так понимаю: нету, потому что неуказан размер. А что если бы мы применили запись:
Цитата:
ARRAY [ * ] OF CHAR
(по аналогии с твоим примером, но вместо символа строка)

(Отредактировано автором: 20 Января, 2009 - 08:47:50)

 
 Top
BohdanT Администратор
Отправлено: 20 Января, 2009 - 09:51:46
Post Id



Super Member


Покинул форум
Сообщений всего: 606
Дата рег-ции: Июль 2008  
Откуда: Киев, Украина
Репутация: 2




lit-uriy пишет:
вот это для меня больше всего непонятно!
как, где и для чего он применяется?

Наверное нигде Улыбка я тоже не знаю, наверное просто технично так получилось.
lit-uriy пишет:
А что если бы мы применили запись

Компиллер не воспринимает, сейчас по крайней мере.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0, скрытых: 0)
« ActiveOberon »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Locations of visitors to this page
[Valid RSS]

RSS

Valid CSS!


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0098]     [ Gzipped ]