Vysvětlení programu – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vysvětlení programu – Delphi – Fórum – Programujte.comVysvětlení programu – Delphi – Fórum – Programujte.com

 

Seth11130
Duch
6. 6. 2011   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 147.228.209.–
JoDiK
~ Anonymní uživatel
987 příspěvků
6. 6. 2011   #2
-
0
-

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")

Nahlásit jako SPAM
IP: 88.103.236.–
Seth11130
Duch
6. 6. 2011   #3
-
0
-

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?

Nahlásit jako SPAM
IP: 147.228.209.–
KIIV
~ Moderátor
+43
God of flame
6. 6. 2011   #4
-
0
-

trochu snahy ne? mame google

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
JoDiK
~ Anonymní uživatel
987 příspěvků
6. 6. 2011   #5
-
0
-

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.

Nahlásit jako SPAM
IP: 88.103.233.–
Seth11130
Duch
9. 6. 2011   #6
-
0
-

jsem totiž hodně začátečník a mám pořád velké mezery...=)
ale nějak nemohu pořád pochopit funkci ORD ani z vysvětlení na těchto stránkách =( jak to vysvětlit nějak co nejvíce laicky?

Nahlásit jako SPAM
IP: 92.62.224.–
nervak0
Věrný člen
9. 6. 2011   #7
-
0
-

EDIT: Nic, JoDik to napsal dost jasně.

Nahlásit jako SPAM
IP: 213.211.51.–
JoDiK
~ Anonymní uživatel
987 příspěvků
11. 6. 2011   #8
-
0
-
Nahlásit jako SPAM
IP: 88.100.43.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 26 hostů

Podobná vlákna

Vysvetleni syntaxe — založil radecek88

Vysvětlení pojmů — založil Venca

Vysvětlení kodu — založil Mutagen

Vysvětlení backtrace — založil Tassadar

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý