Dělám program, který by měl vyhledávat číslo z pole, splňující zadané podmínky. Jenže podmínky jsou zadány slovně a je neurčitý jejich počet, tudíž netušim jak to udělat. Kdybyste někdo věděl jak na to, napište prosíím. Předem díky
Fórum › Pascal
Prosím pomozte s paskalem
Jak ty podmínky vypadají?
Moje stránka.
ok......vstup je zhruba takovejto:
4 pocet podminek
vetsi
1 hledany cislo x je vetsi nez 1
mensi
10 hledany cislo je mensi nez 10
deli
100 hledany cislo x muze celocislene delit 100
nasobek
2 hledany cislo jenasobkem dvojky
...........................................
s tim ze u jinejch vstupu muze byt i nedeli tzn. ze x celocislene nedeli napr.100-podle toho co tam je zo jo :-)
.............................
tudiz hledame x, ktere by splnovalo tydle podminky jo a x je cislo z pole[1..500]
Aha.
Takže nejdřív si přečteš počet podmínek. Kolik podmínek je, tolikrát potom přečteš dvojici řádků - první text podmínky, druhý číslo. Předpokládám, že sada podmínek je daná, takže si můžeš předem nadefinovat seznam (pole) řetězců ('deli','nasobek' atd.), se kterými pak budeš načtenou podmínku porovnávat (procházej ten seznam a koukej, kdy narazíš na stejný text jako ten přečtený; samozřejmě je dobré z něj napřed ořezat případné mezery a jiné neplatné znaky a převést ho na stejnou velikost písmen, jakou máš v tom seznamu). Tím si v podstatě text podmínky přetransformuješ na číslo (kolikátá podmínka v tom seznamu to byla), které použiješ pro rozvětvení pomocí příkazu Case, ve kterém budeš mít připraveno vyhodnocení jednotlivých podmínek.
Na to vyhodnocení mě napadá použít množinu (typ Set). Na začátku ji naplníš všemi čísly od 1 do 500 a pak postupně, jak budeš načítat a zpracovávat jednotlivé podmínky, budeš z té množiny vyhazovat ta čísla, která je nesplňují (tj. třeba přečteš "větší než 200", tak vyhodíš všechno, co je <= 200). Po vyhodnocení všech podmínek ti v množině zůstanou všechna čísla, která je splňují (takže můžeš ošetřit i případy, kdy bude víc řešení). Protože se ale do standardní množiny vejde jenom 256 prvků, budeš muset buď použít množiny dvě, čímž se to trochu zkomplikuje (první třeba pro čísla od 0 do 250 a druhou od 251 do 500), nebo si napsat vlastní implementaci množiny a nebo použít nějakou už hotovou (např. http://mircosoft.ic.cz/download/NFSUP.PAS).
Moje stránka.
...anebo se na množiny vykašlat a řešit to přes druhé pole. Tedy že budeš mít pole kandidati s rozsahem 1..max kde budou všechna čísla, která budeš prověřovat a pole vyhovuji, které bude mít stejný rozsah a kde budou ta čísla, která vyhovují podmínkám.
Pole Vyhovuji bude ze začátku prázdné a budeš do něj postupně přidávat vyhovující prvky.
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
Pomozte mi prosim... — založil Robo
PROSÍM, POMOZTE — založil Jakub Chábek
Prosim pomozte — založil Screpheep
Země podle IP pomozte prosím — založil tonez
Příkazový řádek prosím pomozte — založil heh
Moderátoři diskuze