Alex2003 wrote:
Я умею писать ТОЛЬКО НА ПАСКАЛЕ, а меня отправляют либо на Дельфи/Оберон, либо я не могу разобраться, как пользоваться Паскалем
А в чём проблема-то? Возьмём такой пример
http://rosettacode.org/wiki/Sierpinski_triangle#Pascal выводящий в консоль такую штуку:
Code:
*
* *
* *
* * * *
* *
* * * *
* * * *
* * * * * * * *
* *
* * * *
* * * *
* * * * * * * *
* * * *
* * * * * * * *
* * * * * * * *
* * * * * * * * * * * * * * * *
Вот изменённый код для
DelphiCode:
{$APPTYPE CONSOLE}
program Sierpinski;
function ipow(b, n : Integer) : Integer;
var
i : Integer;
begin
ipow := 1;
for i := 1 to n do
ipow := Result * b
end;
function truth(a : Char) : Boolean;
begin
if a = '*' then
truth := true
else
truth := false
end;
function rule_90(ev : String) : String;
var
l, i : Integer;
cp : String;
s : Array[0..1] of Boolean;
begin
l := length(ev);
cp := copy(ev, 1, l);
for i := 1 to l do begin
if (i-1) < 1 then
s[0] := false
else
s[0] := truth(ev[i-1]);
if (i+1) > l then
s[1] := false
else
s[1] := truth(ev[i+1]);
if ( (s[0] and not s[1]) or (s[1] and not s[0]) ) then
cp[i] := '*'
else
cp[i] := ' ';
end;
rule_90 := cp
end;
procedure triangle(n : Integer);
var
i, l : Integer;
b : String;
begin
l := ipow(2, n+1);
b := ' ';
for i := 1 to l do
b := concat(b, ' ');
b[round(l/2)] := '*';
writeln(b);
for i := 1 to (round(l/2)-1) do begin
b := rule_90(b);
writeln(b)
end
end;
begin
triangle(4);
end.
Было добавлено:
Code:
{$APPTYPE CONSOLE}
потому что по умолчанию создаются GUI-приложения. - Замена внутри функции ipow вместо ipow стало Result
Code:
ipow := Result * b
в справке по этому поводу вот:Quote:
When the function name appears on the left side of an assignment statement, the compiler assumes that it is being used (like Result) to track the return value; when the function name appears anywhere else in the statement block, the compiler interprets it as a recursive call to the function itself.
Что, сильно код отличается? Было бы желание...