Stránka: 1 z 1
| [ Príspevkov: 13 ] | |
Autor | Správa |
---|
Registrovaný: 23.12.10 Prihlásený: 10.09.22 Príspevky: 1056 Témy: 157 | 157 Bydlisko: KK/PP/BA |
Cawte. robim jednu ulohu do skoly. Uz dost dlho sa trapim a nemozem najst chybu. Zadanie:
Citácia: Úloha: Vytvorte program pre hru dvoch hráčov. Program simuluje 15 náhodných hodov hracou kockou a zisťuje víťaza. Prvý hráč pod menom Párny vyhráva, keď padne viackrát párne číslo ako nepárne číslo. Druhý hráč pod menom Nepárny vyhráva, keď padne viackrát nepárne číslo ako párne číslo. Program vypisuje generované čísla. Výstupné údaje sú, kto vyhral a s akým počtom hodov.
Moj zdrojak:
Kód: uses crt; var i,b,x,k,y,o,u,m,n: integer; a,c: array [1..100] of integer; begin clrscr; m:=0; n:=0; writeln ('Hadze hrac parny'); writeln ('Cisla su: '); for i:=1 to 15 do begin randomize; x:=random(100)+1; write (x,','); delay(100); k:= x mod 2; if k=0 then begin a[i]:=x; m:=m+1; end; end; writeln; writeln ('Hadze hrac neparny'); writeln ('Cisla su: '); for b:=1 to 15 do begin u:=random(100)+1; write (u,','); delay(100); k:= u mod 2; if k>0 then begin c[b]:=u; n:=n+1; end; end; writeln; writeln ('Hrac menom parny ma parne cisla: '); for y:=1 to m do write (a[y],','); writeln; writeln ('Hrac menom neparny ma neparne cisla: '); for o:=1 to n do write (c[o],','); writeln; if m>n then writeln ('Vyhral hrac menom PARNY'); if m<n then writeln ('Vyhral hrac menom NEPARNY'); if m=n then writeln ('Nastala remiza'); readln; end.
Pri vystupe vyjdu niekedy dobre cisla, ale casto sa stava, ze vyjde 0. Pri com 0 nemam vygenerovanu.
Trochu sa ospravedlnujem za neprehladnost kodu, a plno zbytocnych premennych. Skusal som rozne moznosti, ale na nic som neprisiel. Vdaka za radu.
|
|
Registrovaný: 19.09.09 Prihlásený: 12.09.13 Príspevky: 359 Témy: 55 | 55 Bydlisko: Rohožník |
V prvom rade by som namiesto casti opakovaneho kodu pouzil funkciu, bolo by to aj prehladnejsie.
Co sa tyka funkcionality, tak jednak som to ani neskusal a v Pascalovi dost dlhe roky neprogramoval, no ty chces nakonci vypisat konkretne cisla, ktoré daný hrác (napr. hracParny a parne cisla), lenze ty v tom for cykle ukladas tie cisla do pola nie porade za sebou, ale s medzerami, ak bolo hodene neparne.
Na konci to vypisujes hned za sebou, takze aspon podla toho co vidim, aj tam ti to musi vypisovat hluposti
Skus nepouzivat premennu z for cykla pre poziciu v poli, ale skor to "pocitadlo", tj. nie a(i), ale a(m)
|
|
Registrovaný: 27.12.08 Prihlásený: 13.12.22 Príspevky: 1874 Témy: 96 | 96 Bydlisko: Bratislava,... |
mack0 má pravdu, síce prvky ukladáš aj vyberáš z poľa, ale ukladáš ich na iné miesto ako to, z ktorého vyberáš (a[2] v tvojom prípade nie je druhé párne číslo, ale 0, pokiaľ druhé vylosované číslo bolo nepárne, a druhé vylosované číslo, pokiaľ bolo párne)
okrem toho: si si istý, že si dobre pochopil zadanie? "Program simuluje 15 náhodných hodov hracou kockou" píšu 15 hodov, minimálne ja by som to chápal tak, že dokopy sa hádže 15-krát, a pokiaľ padne viac párnych tak vyhráva párny, pokiaľ padne viac nepárnych vyhráva nepárny (v takomto prípade nemôže nastať remíza, o ktorej sa zadanie tak isto nezmieňuje), okrem toho, na hracej kocke môžu padnúť čísla od 1 do 6, nie od 1 do 100..
a k tým premenným, si si vedomý toho, že stačí použiť jedno pole a b,y,o,u sú nadbytočné premenné že?
_________________ ~Listen to your brain, not your heart~ NB1: Lenovo Y500: CPU: Intel Core i7-3630QM; GPU: nVidia GT650M 2GB SLi; RAM: 16GB DDR3; HDD: 1TB + 256GB SSD (m4); LCD: 15,6" 1920x1080; OS: Win8.1 64-bit + Arch Linux 64-bit (UEFI Powered DualBoot) NB2: Asus K53SJ-SX093: CPU: Intel Core i3-2310M; GPU: Intel HD3000 / nVidia GT520M 1GB Optimus; RAM: 8GB DDR3; SSD: 128GB 840Evo; LCD: 15,6" 1366x768; OS: Win 8.1 Pro 64-bit (UEFI) |
|
Registrovaný: 23.12.10 Prihlásený: 10.09.22 Príspevky: 1056 Témy: 157 | 157 Bydlisko: KK/PP/BA |
Dakujem. Mas pravdu zle som pochopil zadanie
novy kod je tu:
Kód: uses crt; var i,j,k,l,d,x: integer; a,b: array [1..100] of integer; begin clrscr; randomize; i:=1; j:=1; writeln ('Hod kockou'); for i:=1 to 15 do begin x:=random(6)+1; d:=x mod 2; if d=0 then begin a[i]:=x; i:=i+1; end; if d>0 then begin b[j]:=x; j:=j+1; end; end; writeln ('Hrac parny ma tieto cisla: '); for k:=1 to i-1 do write (a[k]); writeln; writeln ('Hrac menom neparny ma tieto cisla: '); for l:=1 to j-1 do write (b[l]); readln; end.
Ale nechapem to s tym polom. Program robi to iste, ako ten prvy. Uklada tam nuly a hociake somariny.
|
|
Registrovaný: 19.09.09 Prihlásený: 12.09.13 Príspevky: 359 Témy: 55 | 55 Bydlisko: Rohožník |
A zasa tam mas hluposti...
Asi moc dobre nechapes praci s polom, lebo zasa ti to uklada hocikde len nie za sebou (vo vseobecnosti).
Skus toto (som to len z hlavy napisal):
Kód: uses crt; var i,p,n,d,x: integer; a,b: array [1..100] of integer; begin clrscr; randomize; i:=1; p:=1; // zmena tu v premennych n:=1;
writeln ('Hod kockou'); for i:=1 to 15 do begin x:=random(6)+1; d:=x mod 2; if d=0 then begin a[p]:=x; // zmena tu a pod tymto p:=p+1; end; if d>0 then begin b[n]:=x; // zmena tu a pod tymto n:=n+1; end; end; writeln ('Hrac parny ma tieto cisla: '); for i:=1 to p-1 do write (a[i]); // zmena tu writeln; writeln ('Hrac menom neparny ma tieto cisla: '); for i:=1 to n-1 do write (b[i]); // zmena tu
if p>n then write (´Vyhral hrac parny´); // + dalsie 2 podmienky
readln; end.
Ako som pisal, je to z hlavy, no malo by ti to teraz slapat ...
|
|
Registrovaný: 23.12.10 Prihlásený: 10.09.22 Príspevky: 1056 Témy: 157 | 157 Bydlisko: KK/PP/BA |
ahaa uz chapem dakujem funguje to.
_________________ HP ProBook 4530s Intel® Core™ i5-2430M (2.4GHz, 3MB, 2 jadrá)*4GB 1333MHz DDR3*ATI Mobility Radeon HD 6490 1GB + Intel HD Graphics 3000*640GB SATA 5400RPM *Windows 7 Home Premium 64 bitová verzia Lenovo IdeaPad Z50-70 Intel Core i5 4210 Haswell* NVIDIA GeForce GT 840M 4GB + Intel HD Graphics 4000*SSHD 1TB 5400 otáčok + 8GB cache*RAM 4GB* Full HD (1920 × 1080)*Windows 10 pro
Boh je reálny, pokial nebol deklarovaný ako integer |
|
Registrovaný: 23.12.10 Prihlásený: 10.09.22 Príspevky: 1056 Témy: 157 | 157 Bydlisko: KK/PP/BA |
Sorry za double post, ale mam este jenu vec a nechcem tu zakladat X tem, preto to pisem do tejto. Potreboval by som retazce znakov spojit/zlepit spolu. Ako na to? Hladal som na googli, a nasiel som to cez funkciu insert. Ale tomu moc nechapem. Vedel by niekto o inom sposobe? (samozrejme lachsom ) Ak nie ten insert budem musiet nastudovat...
_________________ HP ProBook 4530s Intel® Core™ i5-2430M (2.4GHz, 3MB, 2 jadrá)*4GB 1333MHz DDR3*ATI Mobility Radeon HD 6490 1GB + Intel HD Graphics 3000*640GB SATA 5400RPM *Windows 7 Home Premium 64 bitová verzia Lenovo IdeaPad Z50-70 Intel Core i5 4210 Haswell* NVIDIA GeForce GT 840M 4GB + Intel HD Graphics 4000*SSHD 1TB 5400 otáčok + 8GB cache*RAM 4GB* Full HD (1920 × 1080)*Windows 10 pro
Boh je reálny, pokial nebol deklarovaný ako integer |
|
Registrovaný: 14.03.11 Prihlásený: 04.07.24 Príspevky: 815 Témy: 23 | 23 Bydlisko: Bratislava |
ferdo93 píše: Sorry za double post, ale mam este jenu vec a nechcem tu zakladat X tem, preto to pisem do tejto. Potreboval by som retazce znakov spojit/zlepit spolu. Ako na to? Hladal som na googli, a nasiel som to cez funkciu insert. Ale tomu moc nechapem. Vedel by niekto o inom sposobe? (samozrejme lachsom ) Ak nie ten insert budem musiet nastudovat...
Pascal nepoznám, ale nebude to concat()?
google, "pascal string operators"
|
|
Registrovaný: 23.12.10 Prihlásený: 10.09.22 Príspevky: 1056 Témy: 157 | 157 Bydlisko: KK/PP/BA |
marian_r píše: Pascal nepoznám, ale nebude to concat()?
google, "pascal string operators"
Conctact myslim v pascale nieje, ale na to sa pouziva funkcia insert. Ale problem vyrieseny. Robil som program, ktory prelozi vetu do dvojkovej sustavy. Vyriesil som to tak, ze v cykle pre kazdy znak vypisem to binarne cislo.
Dalsia uloha. Teraz si robim programik, ktory z cisla v dvojkovej sustave prevedie na desiatkovu.
Zdrojak:
Kód: uses crt; var x: string; j,d,n,k,p: integer; begin clrscr; writeln ('Zadaj cislo v dvojkovej sustave'); readln (x); d:=length(x); for j:=(d-1) downto 0 do begin n:=x[j]*2; for k:=1 to j do n:=n*n; p:=p+n; end; writeln ('Cislo je v desiatkovej sustave: ',p); readln; end.
Program mi ani nespustilo, takze este nieje odladeny a mozu sa tam nachadzat syntaticke a logicke chyby. Chyba, pre ktoru sa mi program nespusti je n:=x[j]*2;, Nacitavam to do stringu, cize si mysli, ze su to znaky a potom to nechce ulozit do premennej, ktora je typu integer. Ja viem, ze to takto nepojde. Ako by sa to dalo inak vyriesit? Nic ine ma teraz nenapada.
Ak to cele pojde, Tak by som chcel este, aby vetu z dvojkovej sustavy previedlo na desiatkovu a cez cislo v ASCII tabulke vypisalo znak. Princip by som vedel,ale nemam ani sajnu ako zisti z dlheho cisla v dvojkovej sustave, ake z toho bude cislo v 10 sustave a nasledne aky znak v ASCII tabulke. Mam na mysli nieco taketo: 1 0001000111000100101010010101010101010010101001011001010 cital som nieco, ze kazdy znak ma 8 cisel v dvojkovej sustave, alebo ako to je.
_________________ HP ProBook 4530s Intel® Core™ i5-2430M (2.4GHz, 3MB, 2 jadrá)*4GB 1333MHz DDR3*ATI Mobility Radeon HD 6490 1GB + Intel HD Graphics 3000*640GB SATA 5400RPM *Windows 7 Home Premium 64 bitová verzia Lenovo IdeaPad Z50-70 Intel Core i5 4210 Haswell* NVIDIA GeForce GT 840M 4GB + Intel HD Graphics 4000*SSHD 1TB 5400 otáčok + 8GB cache*RAM 4GB* Full HD (1920 × 1080)*Windows 10 pro
Boh je reálny, pokial nebol deklarovaný ako integer |
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Nenapisal si, aku chybu ti to hodi, ale v Pascale sa indexuje od 1.
|
|
Registrovaný: 23.12.10 Prihlásený: 10.09.22 Príspevky: 1056 Témy: 157 | 157 Bydlisko: KK/PP/BA |
Incompatible types: got "Char" expected "SmallInt" a dava kurzor k riadku, ktory som popisal.
Vdaka, pozriem na to. Robil som to podla tabulky.
// vsimol som si dalsiu chybu. V tom druhom cykle ked umocnujem, je to napisane zle, chcelo by to dalsiu premennu. Takze prosim na tuto chybu neupozornovat
_________________ HP ProBook 4530s Intel® Core™ i5-2430M (2.4GHz, 3MB, 2 jadrá)*4GB 1333MHz DDR3*ATI Mobility Radeon HD 6490 1GB + Intel HD Graphics 3000*640GB SATA 5400RPM *Windows 7 Home Premium 64 bitová verzia Lenovo IdeaPad Z50-70 Intel Core i5 4210 Haswell* NVIDIA GeForce GT 840M 4GB + Intel HD Graphics 4000*SSHD 1TB 5400 otáčok + 8GB cache*RAM 4GB* Full HD (1920 × 1080)*Windows 10 pro
Boh je reálny, pokial nebol deklarovaný ako integer |
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Aha, tak to je jasne. String je pole charov, cize v x[j] je stale char, aj ked ma ciselnu hodnotu. Pouzi fciu ord(), ktora vrati ordinalne cislo daneho znaku v ASCII tabulke (48 pre '0' - 57 pre '9') a od tejto hodnoty odcitaj 48, tak dany znak prevedies na prislusne cislo.
|
|
Registrovaný: 23.12.10 Prihlásený: 10.09.22 Príspevky: 1056 Témy: 157 | 157 Bydlisko: KK/PP/BA |
Dakujem duri Toto ma nenapadlo. Este by som potreboval pomoct s tou druhou otazkou, asi to nebude az take lahke ako som si myslel
_________________ HP ProBook 4530s Intel® Core™ i5-2430M (2.4GHz, 3MB, 2 jadrá)*4GB 1333MHz DDR3*ATI Mobility Radeon HD 6490 1GB + Intel HD Graphics 3000*640GB SATA 5400RPM *Windows 7 Home Premium 64 bitová verzia Lenovo IdeaPad Z50-70 Intel Core i5 4210 Haswell* NVIDIA GeForce GT 840M 4GB + Intel HD Graphics 4000*SSHD 1TB 5400 otáčok + 8GB cache*RAM 4GB* Full HD (1920 × 1080)*Windows 10 pro
Boh je reálny, pokial nebol deklarovaný ako integer |
|
Stránka: 1 z 1
| [ Príspevkov: 13 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v Assembler, C, C++, Pascal, Java | 1 | 659 | 11.11.2009 16:23 feromakovi | | v Assembler, C, C++, Pascal, Java | 6 | 532 | 03.05.2010 7:42 coldak | | v Assembler, C, C++, Pascal, Java | 0 | 434 | 19.12.2014 13:18 Styracoz | | v Assembler, C, C++, Pascal, Java | 8 | 416 | 28.04.2021 8:36 shiro | | v Technológia .NET | 4 | 721 | 02.12.2014 13:25 hatto13 | | v Vzdelanie, štúdium, škola | 28 | 2300 | 23.05.2008 20:03 Svolo | | v Assembler, C, C++, Pascal, Java | 0 | 829 | 02.02.2008 7:37 HT | | v Krčma | 13 | 3507 | 24.11.2011 0:12 Jeffo | | v Databázy | 8 | 677 | 27.11.2011 17:00 coldak | | v Assembler, C, C++, Pascal, Java | 2 | 938 | 22.10.2007 15:04 programator | | v Assembler, C, C++, Pascal, Java | 3 | 479 | 01.12.2012 11:42 C0lder | | v Ostatné programy | 1 | 394 | 25.05.2013 19:59 IT-Academy | | v Kôš | 3 | 36 | 27.05.2020 16:04 werwest | | v Assembler, C, C++, Pascal, Java | 14 | 532 | 06.04.2014 22:43 Grims | | v Perl, Python, Ruby, CGI | 5 | 1015 | 08.06.2020 14:50 ux | | v Assembler, C, C++, Pascal, Java | 2 | 1064 | 25.10.2009 12:30 hlodavec |
|