Zdravím mám takový problém potřeboval bych nějak srozumitelně a stručně vysvětlit tento program...jeho úkolem bylo naplnit matici znaky tak, aby vznikl kruh o průměru 1 ( s programu je to pochopitelné ). Autorem programu však nejsem já ale potřebuji ho vysvětlit tak kdyby byl někdo ochotný prosím? =)
program ukol_47;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
pole = array[1..25,-34..35] of char;
var
S:pole;
procedure napln(var S:pole);
var
i,j:integer;
begin
for i := 1 to 25 do
for j := -34 to 35 do S[i,j] := '.';
for i := 1 to 25 do S[i,-30] := '|';
for j := -34 to 35 do S[1,j] := '=';
for j := -34 to 35 do S[13,j] := '-';
for i := 2 to 12 do begin
S[i,-34] := '+';
S[i,-33] := char(ord('0') + (13 -i) div 10);
S[i,-32] := ',';
S[i,-31] := char(ord('0') + (13 -i) mod 10);
end;
for i := 14 to 24 do begin
S[i,-34] := '-';
S[i,-33] := char(ord('0') + (i-13) div 10);
S[i,-32] := ',';
S[i,-31] := char(ord('0') + (i-13) mod 10);
end;
for j := -34 to 35 do begin
if j >= 0 then
if j mod 10 = 0 then begin
S[25,j-1] := char(ord('0') + j div 20);
S[25,j] := ',';
S[25,j+1] := char(ord('0') + (j mod 20) div 2);
end;
if j < 0 then
if j mod 10 = 0 then begin
S[25,j-2] := '-';
S[25,j-1] := char(ord('0') - j div 20);
S[25,j] := ',';
S[25,j+1] := char(ord('0') - (j mod 20) div 2);
end;
end;
for i := 1 to 25 do
for j := -20 to 20 do
if round(sqr(j/2)+sqr(i-13)) <= 100 then
S[i,j]:='+';
end;
procedure tisk(var S:pole);
var
i,j:integer;
begin
for i := 1 to 25 do begin
for j := -34 to 35 do
write(S[i,j]);
writeln
end;
end;
begin
napln(S);
tisk(S);
readln;
end.
Fórum › Delphi
Vysvětlení programu
Srozumitelně a stručně?
for i := 1 to 25 do
for j := -34 to 35 do S[i,j] := '.';
všude se nachystají tečky
for i := 1 to 25 do
for j := -20 to 20 do
if round(sqr(j/2)+sqr(i-13)) <= 100 then
S[i,j]:='+';
do těch bodů, jejichž souřadnice jsou od středu kružnice vzdáleny méně než 10 (podle pythagorovy věty) se uloží plusy.
no a to všechno ostatní jsou jen velmi pracně a nepřehledně rozmísťované popisy (číselných "os")
JoDiK napsal:
Srozumitelně a stručně?
for i := 1 to 25 do
for j := -34 to 35 do S[i,j] := '.';
všude se nachystají tečky
for i := 1 to 25 do
for j := -20 to 20 do
if round(sqr(j/2)+sqr(i-13)) <= 100 then
S[i,j]:='+';
do těch bodů, jejichž souřadnice jsou od středu kružnice vzdáleny méně než 10 (podle pythagorovy věty) se uloží plusy.
no a to všechno ostatní jsou jen velmi pracně a nepřehledně rozmísťované popisy (číselných "os")
děkuji =) mohl bych ještě poprosit vysvětlit char(ord('0').....? co tyto funkce vůbec znamenají a proč jsou zde použity?
No vzhledem, k tomu, že už jde o vyšší dívčí tak ti to teda vysvětlím...
ord je ještě v pohodě - je to funkce, která vrací pořadové (ordinální) číslo nějaké hodnoty, v tomto případě (u typu znak) je to zároveň ascii kód znaku "0".
char - to už je horší - jde o přetypování ale je možné že se autor jenom spletl a ani neví, že přetypovává, totiž totéž udělá i funkce chr - která převádí číslo na znak.
Představ si, že chceš do řetězce s (string) na pozici například 7 uložit hodnotu z proměnné c (integer) třeba 4.
Zápis s[7]:=c; ti neprojde kvůli nekompatibilitě typů. Vlevo je znak, vpravo celé číslo.
zápis s[7]:=chr(c); je sice typově v pořádku, ale uloží se tam znak s ascii kódem 4 (#4 řídící kód) a ne číslice '4'.
Takže musíš nějak zjistit ascii kód znaku '4' - ten je přesně o 4 větší, než ascii kód '0'.
Proto chr(ord('0')+c) vrátí číslo 0-9 převedené na číslici (znak). Je-li číslo větší jak 9, musí se samozřejmě rozdělit na jednotlivé cifry.
To Seth1113 :
No jestlis na to ještě nepřišel, tak nakoukni sem - snad to z toho už pochopíš...
http://www.spsemoh.cz/vyuka/pascal/jtd.htm#vycet
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Vysvětlení části programu — založil Petey
Vysvetleni syntaxe — založil radecek88
Vysvětlení pojmů — založil Venca
Vysvětlení kodu — založil Mutagen
Vysvětlení backtrace — založil Tassadar