Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Tereza Burbová:7.5.2017 7:47

Dobrý den, pomohli byste mi prosím prosím s tímto příkladem?
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);
Kde mám prosím chybu, že minimální osvětlení místnosti i stolu vychází stejně?

Mockrát děkuju

Zdrojový kód:

program osvetleni_kon­kretni_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/ctve­rec)-1; //maximalni pocer elementarnich ploch
my=round(sirka/ctve­rec)-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(whi­te);
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(blac­k);
writeln;
writeln;

FillChar(Mistnos­t,SizeOf(Mistnos­t),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]:=Mis­tnost[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]:=St­ul[k,l]+SvTok/(Vstul2+na­2(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('Nedos­vetleno: ',100c/((mx+1­)(my+1)):15:3,' %',100m/((mx+­1)(my+1)):12:3,' %');

readln;

end.

 
Odpovědět
7.5.2017 7:47
Avatar
Erik Bystroň:7.5.2017 7:54

Dej to do kódu takhle je to strašně nepřehledné ;-)

 
Nahoru Odpovědět
7.5.2017 7:54
Avatar
Odpovídá na Tereza Burbová
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 ...

Nahoru Odpovědět
7.5.2017 8:05
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Odpovídá na Michal Haňáček
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.
Editováno 7.5.2017 12:52
 
Nahoru Odpovědět
7.5.2017 12:50
Avatar
Tereza Burbová:7.5.2017 13:07

Tady je ještě způsob řešení

 
Nahoru Odpovědět
7.5.2017 13:07
Avatar
mkub
Tvůrce
Avatar
Odpovídá na Tereza Burbová
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

 
Nahoru Odpovědět
7.5.2017 15:56
Avatar
Odpovídá na mkub
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.
 
Nahoru Odpovědět
7.5.2017 16:35
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 7 zpráv z 7.