čtvrdletní práce prosím pomoc – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

čtvrdletní práce prosím pomoc – Pascal – Fórum – Programujte.comčtvrdletní práce prosím pomoc – Pascal – Fórum – Programujte.com

 

Systém
~ Anonymní uživatel
61 příspěvků
14. 2. 2007   #1
-
0
-

ahoj, prosímvás, potřeboval bych poradit, dostali jsme ve škole čtvrdletní práce z deseti programů jsem osm již udělal, ale jsou tu dvě, s kterýma nemůžu hnout, a tak bych vás chtěl požídat o pomoc

1. Prvočísla
Vytvořte program na hledání prvočísel. Zadáté číslo X a úkolem programu je: najít nejmenší prvočíslo, které je větší než zadané číslo X.

2. Bludiště
Napište program, který vytvoří náhodné bludiště a uloží ho do souboru. Na vstupu program dostane rozměry bludiště a minimální délku nejkratší cesty. Program by měl vhodně umísit start, cíl a zdi, aby bludiště mělo řešení a vyhovovalo zadání. Ve výstupním souboru S značí start, C cíl, x značí zeď a 0 volné pole(cestu). Program musí generovat různá bludiště i pro stejné vstupní hodnoty.
Příklad bludiště pro rozměry 5x3 a minimální délkou cesty 6:
S00xx
xx0xC
xx000

za každou pomoc děkuji

Nahlásit jako SPAM
IP: ...–
Mircosoft
~ Anonymní uživatel
585 příspěvků
15. 2. 2007   #2
-
0
-

ad 1: zkus vygooglit Erastotenovo síto.
ad 2: o generování náhodného bludiště je článek na http://int21h.ic.cz/engine/article.php?id=35 a o hledání nejkratší cesty bludištěm na http://soul-draco.mysteria.cz/blog/algoritmy.htm .

Nahlásit jako SPAM
IP: ...–
dalaman0
Věrný člen
15. 2. 2007   #3
-
0
-

Ten prvy:

uses crt;

var a,x:integer;
jePrvocislo:boolean;
begin
clrscr;
readln(x);

repeat
inc(x);
jePrvocislo:=true;
for a:=2 to x-1 do
if x mod a = 0 then
begin
jePrvocislo:=false;
a:=x-1;
end;
until jePrvocislo;

write(x);
readln;
end.


A ta druha je uz na dlhsie.
Rozhadzes si najskor do pola stringov vsetko ako ma byt a potom rekurziou najdes najkratsiu cestu.

Nahlásit jako SPAM
IP: ...–
Lepšie je mať psa na saláme ako salámu pod psom !!!
Systém
~ Anonymní uživatel
61 příspěvků
15. 2. 2007   #4
-
0
-

děkuji za ty prvočísla, ale z toho bludiště nejsem moudrej

Nahlásit jako SPAM
IP: ...–
Mircosoft
~ Anonymní uživatel
585 příspěvků
18. 2. 2007   #5
-
0
-

Co přesně není jasné?

Předpokládám, že dvourozměrná pole (např. array[y1..y2,x1..x2] of byte) umíš projít políčko po políčku (for y:=y1 to y2 do for x:=x1 to x2 do begin ...pole[y,x]... end;) a cestou počítat políčka s nějakou hodnotou nebo se dívat do jejich nejbližšího okolí (...pole[x+1,y]... ...pole[x,y-1]... atd.).

Jestli se ti nelíbí slovo fronta v popisu algoritmu na hledání cesty, můžeš ho vynechat a použít pomocné dvojrozměrné pole stejně velké jako bludiště, do kterého budeš ukládat počty "kroků" pro cestu na odpovídající políčko v bludišti (ten kód ber s rezervou, píšu ho z hlavy a netuším, jak moc bude fungovat):



for y:=1 to VyskaBludiste do
for x:=1 to SirkaBludiste do if PomocnePole[y,x]=nevim
then begin
pom1:=bludiste[y,x-1];
pom2:=bludiste[y,x+1];
if (pom1=zed)or((pom2<>zed)and(pom2<pom1)) then pom1:=pom2;
pom2:=bludiste[y-1,x];
if (pom1=zed)or((pom2<>zed)and(pom2<pom1)) then pom1:=pom2;
pom2:=bludiste[y+1,x];
if (pom1=zed)or((pom2<>zed)and(pom2<pom1)) then pom1:=pom2;
pomocnepole[y,x]:=pom1;
end;


Nevim = hodnota, kterou si zvolíš pro označení políček v pomocném poli, která jsi ještě neohodnotil (na začátku všechna kromě těch, které polohou odpovídají zdem v bludišti - tam vlož co největší čísla, a kromě startovního políčka - tam vlož něco malého)
Pom1, Pom2 = pomocné proměnné
Zed = hodnota políčka v bludišti, kterou sis zvolil pro označení zdi

Těmi čachry s Pom1 a Pom2 jsem našel nejmenší platnou hodnotu z okolních čtyř políček.
Je potřeba nějak ošetřit okraje bludiště (abys nekontroloval hodnoty mimo pole), nejlépe tak, že okraj ohraničíš zdí a průchody po jednotlivých souřadnicích z každé strany o políčko zúžíš.

Výše uvedený cyklus necháš běžet tolikrát, dokud neohodnotí všechna políčka (nezbyde žádné s hodnotou Nevim). Pak se postavíš na cílové políčko, přečteš si jeho hodnotu a dál pokračuješ tak, že přejdeš vždy na to ze čtyř sousedních políček, které má hodnotu o 1 menší než to, na kterém zrovna stojíš. Podle souřadnic těchto políček třeba nějak označuj políčka v původním bludišti, to je ta nejkratší cesta. Její délku spočítáš jako počet takto označených políček. Jestli je kratší než minimální zadaná, všechno vynuluj a nech vygenerovat nové bludiště, jednou to snad vyjde. A kdyby ne (už bys to zkoušel mockrát a pořád nic), tak nech program skončit a řekni, že takhle dlouhou cestu do takhle malého bludiště nelze vecpat a úloha nemá řešení (doufám, že jsem pochopil to tvoje zadání).

Už je to lepší?

Nahlásit jako SPAM
IP: ...–
Systém
~ Anonymní uživatel
61 příspěvků
18. 2. 2007   #6
-
0
-

ne, absolutně nechápu to s těma pomocnejma proměnnejma

Nahlásit jako SPAM
IP: ...–
Mircosoft
~ Anonymní uživatel
585 příspěvků
19. 2. 2007   #7
-
0
-

Dobrá.
Mám jedno políčko v bludišti. Chci na něj zapsat číslo, které je o 1 větší než číslo na políčkách vlevo, vpravo, nahoře a dole od něj. To znamená, že nejdřív musím to nejmenší číslo z těch čtyř políček najít.

Hledání nejmenší hodnoty z nějaké skupiny čísel se dělá tak, že skupinu projdu a v nějaké pomocné proměnné (zde Pom1) uchovávám nejmenší hodnotu, na jakou jsem zatím narazil. Na začátku do Pom1 prostě vložím hodnotu prvního čísla. Pak ji porovnávám s dalšími čísly a pokud najdu nějaké menší, nahradím jím hodnotu v Pom1.
Proměnnou Pom2 jsem si zavedl jenom proto, abych si zkrátil zápis a nemusel v každém řádku několikrát rozepisovat bludiste[y+...,x+...].

Hodnotu Zed zvol třeba 254 a hodnotu Nevim 255 (pro políčka typu byte), aby byly zaručeně vždy větší než jakákoli možná hodnota v políčku (hodnota v políčku znamená vzdálenost od počátečního políčka). Pak se ti podmínky zjednoduší:

for y:=1 to VyskaBludiste do

for x:=1 to SirkaBludiste do
if PomocnePole[y,x]=nevim
then begin
pom1:=bludiste[y,x-1]; {promenna, do ktere se snazime dostat nejmensi hodnotu z okolnich policek}
pom2:=bludiste[y,x+1];
if pom2<pom1 then pom1:=pom2;
pom2:=bludiste[y-1,x];
if pom2<pom1 then pom1:=pom2;
pom2:=bludiste[y+1,x];
if pom2<pom1 then pom1:=pom2;
pomocnepole[y,x]:=pom1; {nejmensi hodnotu jsme nasli, ted ji do toho pole ulozime}
end;

Nahlásit jako SPAM
IP: ...–
systém
~ Anonymní uživatel
61 příspěvků
19. 2. 2007   #8
-
0
-

no, děkuji za snahu, ale myslím, že to nemá cenu, já ty pole prostě nedokážu pochopit

Nahlásit jako SPAM
IP: ...–
Mircosoft
~ Anonymní uživatel
585 příspěvků
21. 2. 2007   #9
-
0
-

Nechápeš pole obecně nebo jejich aplikaci pro to bludiště?

Nahlásit jako SPAM
IP: ...–
systém
~ Anonymní uživatel
61 příspěvků
21. 2. 2007   #10
-
0
-

nechápu obecně vícerozměrné pole a tím pádem ani aplikaci do bludiště

Nahlásit jako SPAM
IP: ...–
Laaca
~ Anonymní uživatel
225 příspěvků
22. 2. 2007   #11
-
0
-

Takže ti nezbývá než otevřít učebnici a jak říkal Lenin: "Učit se, učit se, učit se." :-)

Nahlásit jako SPAM
IP: ...–
systém
~ Anonymní uživatel
61 příspěvků
23. 2. 2007   #12
-
0
-

tak, už to začínám trochu chápat, ale nerozumim tomuto

pom1:=bludiste[y,x-1];
pom2:=bludiste[y,x+1];

Nahlásit jako SPAM
IP: ...–
Mircosoft
~ Anonymní uživatel
585 příspěvků
24. 2. 2007   #13
-
0
-

Tam odkazuji na prvek pole na souřadnicích y,x-1 (tedy vlevo od políčka y,x) a y,x+1 (vpravo od něj). Hodnotu z tohoto políčka ukládám do proměnných Pom1 a Pom2.

BTW, array[1..10,1..20] of byte je to samé jako array[1..10] of array[1..20] of byte. Tedy dvojrozměrné pole = jednorozměrné pole jednorozměrných polí. Ale to celkem není potřeba vědět, 2D pole si prostě představ jako čtvercovou síť o příslušných rozměrech a indexy jako souřadnice na šachovnici (počítají se obvykle od levého horního rohu a rostou dolů a doprava).

Nahlásit jako SPAM
IP: ...–
Jan Šlégr0
Newbie
26. 2. 2007   #14
-
0
-

Matice jste brali? Je to totéž...

Nahlásit jako SPAM
IP: ...–
systém
~ Anonymní uživatel
61 příspěvků
27. 2. 2007   #15
-
0
-

nene, matice jsme nebrali

Nahlásit jako SPAM
IP: ...–
F
~ Anonymní uživatel
4 příspěvky
5. 3. 2007   #16
-
0
-

Tak přesně tyhle úlohy jsou v domácím kole v letošním okresním kole soutěže v programování v Táboře. Dvě úlohy ze tří.

Moc pěkný... Doufám, že se takhle nesnažíš dosáhnout řešení. Moc ti nevěřím, pole jsou dost základní věc a nemohl jsi bez nich udělat 8 z 10 úloh. A jestli jo, tak by mě zajímalo, jak ty úlohy vypadají.

Nahlásit jako SPAM
IP: ...–
systém
~ Anonymní uživatel
61 příspěvků
7. 3. 2007   #17
-
0
-

hm, o žádném okresním kole nic nevím, asi taky proto, že nejsem z okresu tábor

a ty úlohy byly na základní věci, jako jsou cykly, funkce a procedury, programování mám prvním rokem

Nahlásit jako SPAM
IP: ...–
Mircosoft+1
Věrný člen
11. 3. 2007   #18
-
0
-

Tak dobře.
http://mircosoft.webpark.cz/navody.htm -> Základy programování v Pascalu, kapitola Datové typy, podkapitola Pole. Tam jsou pole vysvětlená a nic lepšího ze mě nedostaneš.

Nahlásit jako SPAM
IP: ...–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
system
~ Anonymní uživatel
61 příspěvků
12. 3. 2007   #19
-
0
-

aha, tak uz se mi to tu zacina rysovat, takze mockrat dekuji

Nahlásit jako SPAM
IP: ...–
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, 9 hostů

Moderátoři diskuze

 

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