NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Tereza Burbová:7.5.2017 13:36

Ahoj, mohla bych poprosit o vysvětlení grafického znázornění příkladu (zadání viz příloha)? Co prosím dělá funkce

function CdoR(r:real;m,d : integer) : string;
var s : string;
  begin
    Str(r:m:d,s);
    CdoR:=s;
    end;

?
Děkuji

program osvetlenigraficky;
uses Graph;

const
  delka=12;
  sirka=8;
  ctverec=0.1;
  mx=round(Delka/Ctverec)-1;
  my=round(Sirka/Ctverec)-1;
  Rx=4;
  Ry=2;
  Vx=2;
  Vy=2;
  Vs=3;
  Vs2=Vs*Vs;
  SvTok=2080;
  MinOsv=400;

  var
    Mistnost : array[0..mx,0..my] of real;
    xs,ys : real;
    c,c1,c2 : integer;
    i,j : smallint;
    function na2(r : real) : real;
    begin
      na2:= r*r
    end;
function CdoR(r:real;m,d : integer) : string;
var s : string;
  begin
    Str(r:m:d,s);
    CdoR:=s;
    end;

begin
  FillChar(Mistnost,SizeOf(Mistnost),0);
  ys:=Vy;
  repeat
    xs:=Vx;
    repeat
      for i:=0 to mx do
      for j:=0 to my do
      Mistnost[i,j]:=Mistnost[i,j]+(SvTok/(Vs2+na2(xs-i*Ctverec-Ctverec/2)+na2(ys-j*Ctverec-Ctverec/2)));
      xs:=xs+Rx;
    until xs >= Delka;
    ys:= ys+Ry;
  until ys >= Sirka;
  c:=0;
  for i:=0 to mx do
  for j:=0 to my do begin
    if Mistnost[i,j] > xs then xs:=Mistnost[i,j];
    if Mistnost[i,j] < ys then ys:=Mistnost[i,j];
    if Mistnost[i,j] < MinOsv then Inc(c);
    end;
detectGraph(i,j); InitGraph(i,j,'');
OutTextXY(0,12,'Nejvetsi osvetleni: '+CdoR(xs,7,2)+' lx');
OutTextXY(0,24,'Nejmensi osvetleni: '+CdoR(ys,7,2)+' ln');
OutTextXY(0,36,'Nedosvetleno:'+CdoR(c/((mx+1)*(my+1))*100,14,2)+' %');
c1:=100;
for j:=0 to my do begin
  c:=0;
  for i:=0 to mx do begin
    c2:=trunc(Mistnost[i,j]/xs*15);
    PutPixel(c,c1,c2); PutPixel(c+1,c1,c2); Inc(c,2);
    end;
  c:=0;
  for i:=0 to mx do begin
    c2:=trunc(Mistnost[i,j]/xs*15);
    PutPixel(c,c+1,c2); PutPixel(c+1,c1+1,c2); Inc(c,2);
    end;
  Inc(c1,2);
end;
readln;
CloseGraph;
end.
 
Odpovědět
7.5.2017 13:36
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Tereza Burbová
Martin Dráb:7.5.2017 15:01

Pokud ti jde o funkci cdoR, tak podle http://www.delphibasics.co.uk/RTL.asp?… převádí zadané reálné číslo r do řetězcové podoby, přičemž parametr m udává celkovou velikost výsledného řetězce (ve znacích) a d určuje počet desetinných míst. Pokud je výsledný řetězec kratší než m znaků, dolplňuje se zleva mezerami.

Nahoru Odpovědět
7.5.2017 15:01
2 + 2 = 5 for extremely large values of 2
Avatar
Tereza Burbová:7.5.2017 15:31

Mockrát děkuji. A tohle prosím? Proč je tam 15 a jak se to prosím vykresluje?

c1:=100;
for j:=0 to my do begin
  c:=0;
  for i:=0 to mx do begin
    c2:=trunc(Mistnost[i,j]/xs*15);                                //prevod na celociselny typ
    PutPixel(c,c1,c2); PutPixel(c+1,c1,c2); Inc(c,2);              //vykreslení bodu
    end;
  c:=0;
  for i:=0 to mx do begin
    c2:=trunc(Mistnost[i,j]/xs*15);
    PutPixel(c,c+1,c2); PutPixel(c+1,c1+1,c2); Inc(c,2);
    end;
  Inc(c1,2);
end;
readln;
CloseGraph;                                                         //ukonceni grafickeho rezimu
 
Nahoru Odpovědět
7.5.2017 15:31
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.