Exitcode 201

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

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

Exitcode 201

Сообщение Mary » 15.10.2020 18:48:03

Задание: построить фрактал - множество Жюлиа(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.
Mary
незнакомец
 
Сообщения: 2
Зарегистрирован: 15.10.2020 18:38:50

Re: Exitcode 201

Сообщение Seenkao » 16.10.2020 05:51:47

Mary, вы не можете (я про функцию) отправлять обратно LongInt, если объявили структуру. И, как раз пытаетесь структуры отправить как LongInt. Эту же структуру вы должны отправлять обратно или ссылку на неё.
Последний раз редактировалось Seenkao 16.10.2020 06:08:07, всего редактировалось 1 раз.
Seenkao
энтузиаст
 
Сообщения: 502
Зарегистрирован: 01.04.2020 03:37:12

Re: Exitcode 201

Сообщение jsa » 16.10.2020 05:54:31

Это не подойдет?
Можно использовать функцию из модуля 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/

И что за параметр "кукла" ?
jsa
постоялец
 
Сообщения: 261
Зарегистрирован: 28.11.2017 13:46:04

Re: Exitcode 201

Сообщение Seenkao » 16.10.2020 06:09:49

jsa, человек данную функцию сделал более-менее правильно.
Seenkao
энтузиаст
 
Сообщения: 502
Зарегистрирован: 01.04.2020 03:37:12

Re: Exitcode 201

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

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.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Exitcode 201

Сообщение Alex2013 » 16.10.2020 16:31:19

Для 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 и если нужно записывать данные напрямую в память то нужно это учитывать. )
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Exitcode 201

Сообщение Mary » 17.10.2020 01:06:13

скалогрыз
Спасибо :D
Mary
незнакомец
 
Сообщения: 2
Зарегистрирован: 15.10.2020 18:38:50


Вернуться в Free Pascal Compiler

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

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

Рейтинг@Mail.ru