Exitcode 201

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Mary
незнакомец
Сообщения: 2
Зарегистрирован: 15.10.2020 17:38:50

Exitcode 201

Сообщение Mary »

Задание: построить фрактал - множество Жюлиа(z^2+c). Проблема, видимо, в функции RGB. Выдает Exitcode 201. Что исправить?

Код: Выделить всё

Program Zhulia;
uses graph;
Type TComplex = record
                 x,y:double;
                end;
const iter = 50;
      Tmax = 16;
Var z,t,c: TComplex;
    x,y,n,gd,gm: integer;
    mx,my:integer;

function RGB(R,G,B:byte):longint;
 var temp:  record
            R,G,B,Dummy: byte;
            end;
 begin
  temp.R := R;
  temp.G := G;
  temp.B := B;
  temp.Dummy := 0;
  RGB := longint(temp);
 end;

begin
 gd:=detect;
 InitGraph(gd,gm,'');
 Randomize;
 Mx:= GetMaxX div 2;
 My:= GetMaxY div 2;
 For y:= -my to my do
  For x:= -mx  to mx do begin
   n:=0;
   z.x := x*0.005;
   z.y := y*0.005;
   c.x := 0.11;
   c.y := -0.66;
   While (sqr(z.x) + sqr(z.y) < Tmax) and (n < iter) do begin
    t:=z;
    z.x:= sqr(t.x) - sqr(t.y) + c.x;
    z.y:= 2*t.x*t.y + c.y;
    inc(n);
    end;
    if n < iter then PutPixel(mx + x, my + y, 7)
     else PutPixel(mx + x, my + y, RGB(10*(16 - n mod 16), 60*(16 - n mod 16), 140*(16 - n mod 16)));
   end;
  end.
readln;
end.
Seenkao
энтузиаст
Сообщения: 563
Зарегистрирован: 01.04.2020 02:37:12
Контактная информация:

Re: Exitcode 201

Сообщение Seenkao »

Mary, вы не можете (я про функцию) отправлять обратно LongInt, если объявили структуру. И, как раз пытаетесь структуры отправить как LongInt. Эту же структуру вы должны отправлять обратно или ссылку на неё.
Последний раз редактировалось Seenkao 16.10.2020 05:08:07, всего редактировалось 1 раз.
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Re: Exitcode 201

Сообщение jsa »

Это не подойдет?
Можно использовать функцию из модуля Windows:
function RGB(r, g, b: Byte): COLORREF;

Пример использования:
Form1.Color := RGB(50, 200, 50);

Можно написать функцию вручную (не используя модуль Windows):
function RGBToColor(R, G, B: Byte): TColor;
begin
Result := B shl 16 or G shl 8 or R;
end;

http://delphidevelop.ru/publ/31-1-0-144/

И что за параметр "кукла" ?
Seenkao
энтузиаст
Сообщения: 563
Зарегистрирован: 01.04.2020 02:37:12
Контактная информация:

Re: Exitcode 201

Сообщение Seenkao »

jsa, человек данную функцию сделал более-менее правильно.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Re: Exitcode 201

Сообщение скалогрыз »

Mary писал(а):Задание: ... Выдает Exitcode 201. Что исправить?

Два способа. (можно выбрать любой)
Способ №1, добавить одну строчку:

Код: Выделить всё

Program Zhulia;
{$RANGECHECKS OFF}
uses graph;


Способ №2, ну или забить на RGB.

Код: Выделить всё

Program Zhulia;
uses graph;
Type TComplex = record
                 x,y:double;
                end;
const iter = 50;
      Tmax = 16;
Var z,t,c: TComplex;
    x,y,n,gd,gm: integer;
    mx,my:integer;

begin
gd:=detect;
InitGraph(gd,gm,'');
Randomize;
Mx:= GetMaxX div 2;
My:= GetMaxY div 2;
For y:= -my to my do
  For x:= -mx  to mx do begin
   n:=0;
   z.x := x*0.005;
   z.y := y*0.005;
   c.x := 0.11;
   c.y := -0.66;
   While (sqr(z.x) + sqr(z.y) < Tmax) and (n < iter) do begin
    t:=z;
    z.x:= sqr(t.x) - sqr(t.y) + c.x;
    z.y:= 2*t.x*t.y + c.y;
    inc(n);
    end;
    if n < iter then PutPixel(mx + x, my + y, 7)
     else PutPixel(mx + x, my + y, 0);
   end;
  end.
readln;
end.

(второй предпочительнее, потому что чище)

Добавлено спустя 26 минут 28 секунд:
НО, если хочется красивостей, то я вот такое могу предложить:

Код: Выделить всё

Program Zhulia;
uses graph;
Type TComplex = record
                 x,y:double;
                end;
const iter = 50;
      Tmax = 16;
Var z,t,c: TComplex;
    x,y,n,gd,gm: integer;
    mx,my:integer;

var
  maxN : integer;
begin
gd:=detect;
gm:=0;
InitGraph(gd,gm,'');
Randomize;
Mx:= GetMaxX div 2;
My:= GetMaxY div 2;
SetRGBPalette(16, 0, 050, 0);
SetRGBPalette(17, 0, 100, 0);
SetRGBPalette(18, 0, 150, 0);
SetRGBPalette(19, 0, 200, 0);
SetRGBPalette(20, 0, 255, 0);
For y:= -my to my do
  For x:= -mx  to mx do begin
   n:=0;
   z.x := x*0.005;
   z.y := y*0.005;
   c.x := 0.11;
   c.y := -0.66;
   While (sqr(z.x) + sqr(z.y) < Tmax) and (n < iter) do begin
    t:=z;
    z.x:= sqr(t.x) - sqr(t.y) + c.x;
    z.y:= 2*t.x*t.y + c.y;
    inc(n);
    end;
    if n = iter then PutPixel(mx + x, my + y, 20)
    else if n >= iter - 5  then PutPixel(mx + x, my + y, 19)
    else if n >= iter - 10  then PutPixel(mx + x, my + y, 18)
    else if n >= iter - 15  then PutPixel(mx + x, my + y, 17)
    else if n >= iter - 20  then PutPixel(mx + x, my + y, 16)
    else  PutPixel(mx + x, my + y, 7)
   end;
  end.
readln;
end.

кислота... демо-сцена xD

ну или такого, галактического

Код: Выделить всё

Program Zhulia;
uses graph;
Type TComplex = record
                 x,y:double;
                end;
const iter = 50;
      Tmax = 16;
Var z,t,c: TComplex;
    x,y,n,gd,gm: integer;
    mx,my:integer;

var
  maxN : integer;
begin
gd:=detect;
gm:=0;
InitGraph(gd,gm,'');
Randomize;
Mx:= GetMaxX div 2;
My:= GetMaxY div 2;
SetRGBPalette(16, 050, 050, 255);
SetRGBPalette(17, 100, 100, 255);
SetRGBPalette(18, 150, 150, 255);
SetRGBPalette(19, 200, 200, 255);
SetRGBPalette(20, 255, 255, 255);
For y:= -my to my do
  For x:= -mx  to mx do begin
   n:=0;
   z.x := x*0.005;
   z.y := y*0.005;
   c.x := 0.11;
   c.y := -0.66;
   While (sqr(z.x) + sqr(z.y) < Tmax) and (n < iter) do begin
    t:=z;
    z.x:= sqr(t.x) - sqr(t.y) + c.x;
    z.y:= 2*t.x*t.y + c.y;
    inc(n);
    end;
    if n = iter then PutPixel(mx + x, my + y, 20)
    else if n >= iter - 5  then PutPixel(mx + x, my + y, 19)
    else if n >= iter - 10  then PutPixel(mx + x, my + y, 18)
    else if n >= iter - 15  then PutPixel(mx + x, my + y, 17)
    else if n >= iter - 20  then PutPixel(mx + x, my + y, 16)
    else  PutPixel(mx + x, my + y, 0)
   end;
  end.
readln;
end.
Alex2013
долгожитель
Сообщения: 3211
Зарегистрирован: 03.04.2013 11:59:44

Re: Exitcode 201

Сообщение Alex2013 »

Для 24бит ...

Код: Выделить всё

function RGB(R,G,B:byte):longint;
begin
  Result:=b shl 16 or g shl 8 or r;
end;

Зы
Иногда бывает нужно поменять местами "B" и "R". (Например в ТВitmap реальный бинарный формат не RGB, a BGR и если нужно записывать данные напрямую в память то нужно это учитывать. )
Mary
незнакомец
Сообщения: 2
Зарегистрирован: 15.10.2020 17:38:50

Re: Exitcode 201

Сообщение Mary »

скалогрыз
Спасибо :D
Ответить