Помощь - Поиск - Пользователи - Календарь
Полная версия: random процедур
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
SkyBoy
как сделать random процедур??
klem4
Ты о чем ? О паскалевской функции Random ? Посмотри в хелпе или поищи по форуму, конкретно по этому же разделу ...
Чужак
Цитата(SkyBoy @ 1.07.2007 15:34) *

как сделать random процедур??

Что есть "random процедур"?
Если можно в Паскале написать программу, которая допустим, решает три
варианта задачи, по одной процедуре для каждого варианта,
а в основном теле программы задается вопрос "выберите номер варианта",
вводишь номер, и в зависимости от значения введенной переменной
идет выбор одной процедуры, (соответственно решается один вариант),
то можно сделать и так: номер не вводится пользователем с клавиатуры,
а задается рандомом.
Если речь о чем-то другом - уточни вопрос...

SkyBoy
...
procedure one;
..
..
end;
procedure second;
..
..
end;
procedure third;
..
..
end;

{end}

writeln (random (one,second,third));
----------
не правильно, но мысль поняли? как её воплотить?
klem4
Хм, в жизни ничего подобного не делал, но вышло занятно.

uses crt;
type
TProcType = Procedure();

procedure A(); begin writeln('A') end;
procedure B(); begin writeln('B') end;

var
procs: Array [0..1] of Pointer = (@A, @B);
i: Integer;
begin
Randomize;
for i := 1 to 10 do TProcType(procs[Random(2)])();
end.

volvo
Можно не заморачиваться с указателями:

uses crt;
type
TProcType = Procedure;

procedure A; far;
begin writeln('A') end;
procedure B; far;
begin writeln('B') end;

const
procs: Array [0..1] of TProcType = (A, B);
var
i: Integer;
begin
Randomize;
for i := 1 to 10 do
procs[Random(2)];
end.

klem4
Я пробовал так... У тебя FPC это нормально компилирует ?
volvo
Я не компилирую ЗДЕСЬ в FPC - это не раздел про 32-битные компиляторы... А как ты думаешь, твою программу TP вообще откомпилирует?

Добавлено через 2 мин.
Кстати, да... Во всех режимах, кроме ObjFPC все прекрасно работает...
klem4
Да, мой косяк ... надо было проверить в TP. А в FPC код без указателей не компилится ... вот лог ошибок:

Цитата
test.pas(11,39) Error: Incompatible types: got "A" expected "<procedure variable type of procedure;Register>"
test.pas(11,42) Error: Incompatible types: got "B" expected "<procedure variable type of procedure;Register>"


Но вот это помогает

Цитата
const
procs: Array [0..1] of TProcType = (TProcType(A), TProcType(B));
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.