Diskuze: Příklad v Pacsalu


Dej to do kódu takhle je to strašně nepřehledné
Michal Haňáček:7.5.2017 8:05
No za prvé bych poprosil sem ten kód nevkládat takhle na prasáka, to se nedá číst, ale použít k tomu funkci vložit kód - není to složité...
A pak k tvému dotazu:
Co dělá tato část?
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);
V kažém z těchto tří řádků porovnáváš hodnotu pole na souřadnicích "i" a "j" se souřadnicemi svítidla. Těžko říct jestl je to záměr, protože komentáři "//mistnost reprezentovana matici realnych cisel" nerozumím. Jak jako matice reprezentuje mistnost? Opravdu chceš porovnavat "reprezentaci mistnosti" se souřadnicemi? A proč máš souřadnice jako reálné číslo - jednotky nejsou uvedeny (v zadání se pracuje s metry)?
No dál se mi do toho nechce koukat, dokud to nebude alespoň lépe naformátované, každopádně ten kód vypadá docela jednoduše ...
Tereza Burbová:7.5.2017 12:50
Děkuji za odpovědi, omlouvám se, zde je zdrojový kód:
program osvetleni_konkretni_uloha;
uses crt;
const
delka=12; //delka mistnosti v metrech
sirka=8; //sirka mistnosti v metrech
ctverec=0.1; //delka strany elementarni plochy v metrech
mx=round(delka/ctverec)-1; //maximalni pocer elementarnich ploch
my=round(sirka/ctverec)-1;
rx=4; //roztec mezi svitidly v metrech
ry=2; //vzdalenost mezi jednotlivymi radami v metrech
vx=2; //vzdálenost 1. svitidla od steny ve smeru osy x v metrech
vy=2; //vzdalenost 1. svitidla od steny ve smeru osy y v metrech
vs=3; //vzdálenost svetel od zeme v metrech
vstul=0.72; //vyska stolu
vs2=vs*vs; //kvadrat vzdalenosti svetla od zeme
vstul2=(vs-vstul)*(vs-vstul); //kvadtat vzdalenosti stolu od zeme
SvTok=2080; //minimalni svetelny tok zarovky o vykonu 200 W v lumenech lm
minOsv=400; //minimalni pripustne osvetleni mistnosti v luxech lx
minOsvs=500; //minimalni pripustne osvetleni stolu pri cteni/psani v luxech lx
var
Mistnost : array[0..mx,0..my] of real; //mistnost reprezentovana matici realnych cisel
Stul : array[0..mx,0..my] of real;
xs,ys,xss,yss : real; //souradnice svitidla
i,j,c,k,l,m : integer;
function na2(r : real) : real;
begin
na2:=r*r //funkce vytvoří kvadrát
end;
begin
writeln;
textbackground(white);
textcolor(red);
writeln('----------------------------------------------------------------------------');
writeln('----------------------------------------------------------------------------'); //zadni ulohy
writeln('Program pocita hodnotu maximalniho, minimalniho osvetleni a procentualni ');
writeln('podil nedosvetlenych ploch mistnosti o rozmerech 12x8 metru, ktera je ');
writeln('osvetlena svitidly ve trech radach po trech. Roztec mezi svitidly je 4 m, ');
writeln('vzdalenost mezi jednotlivymi radami je 2 metry, krajni svetlo je od obou ');
writeln('sten vzdaleno 2 metry a od zeme 3 metry. V kazdem svitidle je zarovka ');
writeln('o vykonu 200 W (minimalni svetelny tok teto zarovky je 2080 lumenu). ');
writeln('Minimalni pripustne osvetleni teto mistnosti je 400 luxu. ');
writeln('----------------------------------------------------------------------------');
writeln('----------------------------------------------------------------------------');
writeln;
writeln('----------------------------------------------------------------------------'); //zadni ulohy rozsirujici ulohy
writeln('Rozsireni ulohy - vypocet intenzity osvetleni na stole o vysce 72 cm. ');
writeln('----------------------------------------------------------------------------');
textbackground(black);
writeln;
writeln;
FillChar(Mistnost,SizeOf(Mistnost),0); //naplneni matice nulami
ys:=vy; //souradnici svitidla se priradi vzdalenost 1. svitidla od steny ve smeru osy y
repeat //zacatek cyklu
xs:=vx; //souradnici svitidla se priradi vzdalenost 1. svitidla od steny ve smeru osy x
repeat //zacatek vnoreneho
for i:=0 to mx do //pruchod radky matice
for j:=0 to my do //pruchod slouci matice
Mistnost[i,j]:=Mistnost[i,j]+SvTok/(vs2+na2(xs-iCtverec-Ctverec/2)+na2(ys-jCtverec-Ctverec/2)); //vynulovane matice reprezentující mistnost - se plni elementy E_(i,j) dle vzorce (3)
xs:=xs+Rx; //k x-ove souradnici svitidla se pricte rozptyl mezi svitidly
until xs>=Delka; //vnoreny cyklus probiha dokud je x-ova souradnice nedosahne delky mistnosti
ys:=ys+Ry; //k y-ove souradnici svitidla se pricte rozptyl mezi svitidly
until ys>=Sirka; //cyklus probiha dokud y-ova souradnice nedosahne sirky mistnosti
c:=0; //vynulovani c (elementární plocha)
for i:=0 to mx do //pruchod radky matice
for j:=0 to my do begin //pruchod slouci matice
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;
FillChar(Stul,SizeOf(Stul),0);
yss:=vy;
repeat
xss:=vx;
repeat
for k:=0 to mx do
for l:=0 to my do
Stul[k,l]:=Stul[k,l]+SvTok/(Vstul2+na2(xss-kCtverec-Ctverec/2)+na2(yss-lCtverec-Ctverec/2));
xss:=xss+Rx;
until xss>=Delka;
yss:=yss+Ry;
until yss>=Sirka;
m:=0;
for k:=0 to mx do
for l:=0 to my do begin
if Mistnost[k,l] > xss then xss:=Stul[k,l];
if Mistnost[k,l] < yss then yss:=Stul[k,l];
if Mistnost[k,l] < MinOsvs then Inc(m);
end;
textcolor(yellow);
writeln('VYSLEDKY VYSLEDKY - osvetleni na stole');
writeln; //vypsani vysledku
writeln('Nejvetsi osvetleni: ',xs:15:3,' lx',xss:14:3,' lx');
writeln('Nejmensi osvetleni: ',ys:12:3,' lx',yss:11:3,' lx');
writeln('Nedosvetleno: ',100c/((mx+1)(my+1)):15:3,' %',100m/((mx+1)(my+1)):12:3,' %');
readln;
end.
mkub:7.5.2017 15:56
uz je ten kod lepsi, o nieco prehladnejsi, ale skus sa naucit pri pisani kodu aj odsadzovat, napr:
program osvetleni_konkretni_uloha;
uses crt;
const
delka=12; //delka mistnosti v metrech
sirka=8; //sirka mistnosti v metrech
ctverec=0.1; //delka strany elementarni plochy v metrech
mx=round(delka/ctverec)-1; //maximalni pocer elementarnich ploch
my=round(sirka/ctverec)-1;
rx=4; //roztec mezi svitidly v metrech
ry=2; //vzdalenost mezi jednotlivymi radami v metrech
vx=2; //vzdálenost 1. svitidla od steny ve smeru osy x v metrech
vy=2; //vzdalenost 1. svitidla od steny ve smeru osy y v metrech
vs=3; //vzdálenost svetel od zeme v metrech
vstul=0.72; //vyska stolu
vs2=vs*vs; //kvadrat vzdalenosti svetla od zeme
vstul2=(vs-vstul)*(vs-vstul); //kvadtat vzdalenosti stolu od zeme
SvTok=2080; //minimalni svetelny tok zarovky o vykonu 200 W v lumenech lm
minOsv=400; //minimalni pripustne osvetleni mistnosti v luxech lx
minOsvs=500; //minimalni pripustne osvetleni stolu pri cteni/psani v luxech lx
var
Mistnost : array[0..mx,0..my] of real; //mistnost reprezentovana matici realnych cisel
Stul : array[0..mx,0..my] of real;
xs,ys,xss,yss : real; //souradnice svitidla
i,j,c,k,l,m : integer;
function na2(r : real) : real;
begin
na2:=r*r //funkce vytvoří kvadrát
end;
.
.
.
odsadeny kod je ovela prehladnejsi, nez neosadeny
Tereza Burbová:7.5.2017 16:35
Jojo, když to píšu, tak odsazuju tady se to dělá tabem nebo to jde
ještě nějak jinak?
Nevidíte prosím v čem je chyba? Minimální osvětlení na stole i na podlaze
vychází stejné, to je špatně, ne?
Děkuji
program osvetleni_konkretni_uloha;
uses crt;
const
delka=12; //delka mistnosti v metrech
sirka=8; //sirka mistnosti v metrech
ctverec=0.1; //delka strany elementarni plochy v metrech
mx=round(delka/ctverec)-1; //maximalni pocer elementarnich ploch
my=round(sirka/ctverec)-1;
rx=4; //roztec mezi svitidly v metrech
ry=2; //vzdalenost mezi jednotlivymi radami v metrech
vx=2; //vzdálenost 1. svitidla od steny ve smeru osy x v metrech
vy=2; //vzdalenost 1. svitidla od steny ve smeru osy y v metrech
vs=3; //vzdálenost svetel od zeme v metrech
vstul=0.72; //vyska stolu
vs2=vs*vs; //kvadrat vzdalenosti svetla od zeme
vstul2=(vs-vstul)*(vs-vstul); //kvadtat vzdalenosti stolu od zeme
SvTok=2080; //minimalni svetelny tok zarovky o vykonu 200 W v lumenech lm
minOsv=400; //minimalni pripustne osvetleni mistnosti v luxech lx
minOsvs=500; //minimalni pripustne osvetleni stolu pri cteni/psani v luxech lx
var
Mistnost : array[0..mx,0..my] of real; //mistnost reprezentovana matici realnych cisel
Stul : array[0..mx,0..my] of real;
xs,ys,xss,yss : real; //souradnice svitidla
i,j,c,k,l,m : integer;
function na2(r : real) : real;
begin
na2:=r*r //funkce vytvoří kvadrát
end;
begin
writeln;
textbackground(white);
textcolor(red);
writeln('----------------------------------------------------------------------------');
writeln('----------------------------------------------------------------------------'); //zadni ulohy
writeln('Program pocita hodnotu maximalniho, minimalniho osvetleni a procentualni ');
writeln('podil nedosvetlenych ploch mistnosti o rozmerech 12x8 metru, ktera je ');
writeln('osvetlena svitidly ve trech radach po trech. Roztec mezi svitidly je 4 m, ');
writeln('vzdalenost mezi jednotlivymi radami je 2 metry, krajni svetlo je od obou ');
writeln('sten vzdaleno 2 metry a od zeme 3 metry. V kazdem svitidle je zarovka ');
writeln('o vykonu 200 W (minimalni svetelny tok teto zarovky je 2080 lumenu). ');
writeln('Minimalni pripustne osvetleni teto mistnosti je 400 luxu. ');
writeln('----------------------------------------------------------------------------');
writeln('----------------------------------------------------------------------------');
writeln;
writeln('----------------------------------------------------------------------------'); //zadni ulohy rozsirujici ulohy
writeln('Rozsireni ulohy - vypocet intenzity osvetleni na stole o vysce 72 cm. ');
writeln('----------------------------------------------------------------------------');
textbackground(black);
writeln;
writeln;
FillChar(Mistnost,SizeOf(Mistnost),0); //naplneni matice nulami
ys:=vy; // souradnici svitidla se priradi vzdalenost 1. svitidla od steny ve smeru osy y
repeat //zacatek cyklu
xs:=vx; //souradnici svitidla se priradi vzdalenost 1. svitidla od steny ve smeru osy x
repeat //zacatek vnoreneho
for i:=0 to mx do //pruchod radky matice
for j:=0 to my do //pruchod slouci matice
Mistnost[i,j]:=Mistnost[i,j]+SvTok/(vs2+na2(xs-iCtverec-Ctverec/2)+na2(ys-jCtverec-Ctverec/2)); //vynulovane matice reprezentující mistnost - se plni elementy E_(i,j) dle vzorce (3)
xs:=xs+Rx; //k x-ove souradnici svitidla se pricte rozptyl mezi svitidly
until xs>=Delka; //vnoreny cyklus probiha dokud je x-ova souradnice nedosahne delky mistnosti
ys:=ys+Ry; //k y-ove souradnici svitidla se pricte rozptyl mezi svitidly
until ys>=Sirka; //cyklus probiha dokud y-ova souradnice nedosahne sirky mistnosti
c:=0; //vynulovani c (elementární plocha)
for i:=0 to mx do //pruchod radky matice
for j:=0 to my do begin //pruchod slouci matice
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;
FillChar(Stul,SizeOf(Stul),0);
yss:=vy;
repeat
xss:=vx;
repeat
for k:=0 to mx do
for l:=0 to my do
Stul[k,l]:=Stul[k,l]+SvTok/(Vstul2+na2(xss-kCtverec-Ctverec/2)+na2(yss-lCtverec-Ctverec/2));
xss:=xss+Rx;
until xss>=Delka;
yss:=yss+Ry;
until yss>=Sirka;
m:=0;
for k:=0 to mx do
for l:=0 to my do begin
if Mistnost[k,l] > xss then xss:=Stul[k,l];
if Mistnost[k,l] < yss then yss:=Stul[k,l];
if Mistnost[k,l] < MinOsvs then Inc(m);
end;
textcolor(yellow);
writeln('VYSLEDKY VYSLEDKY - osvetleni na stole');
writeln; //vypsani vysledku
writeln('Nejvetsi osvetleni: ',xs:15:3,' lx',xss:14:3,' lx');
writeln('Nejmensi osvetleni: ',ys:12:3,' lx',yss:11:3,' lx');
writeln('Nedosvetleno: ',100c/((mx+1)(my+1)):15:3,' %',100m/((mx+1)(my+1)):12:3,' %');
readln;
end.
Zobrazeno 7 zpráv z 7.