pascal

Programovacie jazyky, rady, poradňa...
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: pascal

Príspevok od používateľa audiotrack »

skôr som myslel niečo ako roundto
ferdo93
Amateur
Amateur
Príspevky: 21
Registrovaný: 27 feb 2011, 12:00

Re: pascal

Príspevok od používateľa ferdo93 »

dakujem vam za odpovede, ale nefunguje to :smt017
BX skusal som obidva tvoje prispevky, ale neulozi mi to tam...
pls poradte este... termin odovzdania sa blizi. program napisany je, ale pocita odveci....
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: pascal

Príspevok od používateľa BX »

Daj celý kód aj s tým ako si to skúšal.
ferdo93
Amateur
Amateur
Príspevky: 21
Registrovaný: 27 feb 2011, 12:00

Re: pascal

Príspevok od používateľa ferdo93 »

ok

oba programy vypisu: 0.00000000e+000

Kód: Vybrať všetko

uses crt;
var N0,n,pocitadlo,i,p: integer;
    d: real;
begin
 clrscr;
 writeln ('zadaj N0');
 readln (n0);
 writeln ('zadaj n');
 readln (n);
 writeln ('zadaj p');
 readln (p);
 d:=p/100;
 d:=(d+0.005)*100;
 d:=trunc(d);
 d:=d/100;
 for i:=1 to n do
  d:=pocitadlo*d;
 d:=d*N0;
 writeln ('cislo ',d );
 readln;
end.

Kód: Vybrať všetko

uses crt;
var N0,n,pocitadlo,i,p: integer;
    d: real;
begin
 clrscr;
 writeln ('zadaj N0');
 readln (n0);
 writeln ('zadaj n');
 readln (n);
 writeln ('zadaj p');
 readln (p);
 d:=p/100;
 d:=round(d*100)/100;
 for i:=1 to n do
  d:=pocitadlo*d;
 d:=d*N0;
 writeln ('cislo ',d );
 readln;
end.
toto je zdrojovy kod na ktorom to skusam. mam sem dat aj zdrojovy kod toho programu?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: pascal

Príspevok od používateľa audiotrack »

a aké vstupy tam zadávaš?
ferdo93
Amateur
Amateur
Príspevky: 21
Registrovaný: 27 feb 2011, 12:00

Re: pascal

Príspevok od používateľa ferdo93 »

ok chcel som tu pridat obrazok, ale to je zakazane tak som nahral ako prilohu. su tam vstupy a vystup.
Prílohy
Pascal
Pascal
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: pascal

Príspevok od používateľa audiotrack »

ani v jednom prípade nemáš inicializované počítadlo na počiatočnú hodnotu, takže to d násobíš v cykle nulou a po opustení cyklu bude teda nulové. Z toho dôvodu tá nula
ferdo93
Amateur
Amateur
Príspevky: 21
Registrovaný: 27 feb 2011, 12:00

Re: pascal

Príspevok od používateľa ferdo93 »

mas pravdu. na to som zabudol :oops:
ale aj tak pri pouziti d:=round(d*100)/100; vyslo toto:
Prílohy
Bez názvu 2.png
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: pascal

Príspevok od používateľa audiotrack »

určite si ten vzorec zase nedovrzal?
http://www.hojko.com/post1601639.html#p1601639
ferdo93
Amateur
Amateur
Príspevky: 21
Registrovaný: 27 feb 2011, 12:00

Re: pascal

Príspevok od používateľa ferdo93 »

ano vzorec dodrziavam a aj tak to nejde :nono:
skusal som to este s dalsiou premennou:

Kód: Vybrať všetko

uses crt;
var N0,n,i,p: integer;
    d,pocitadlo,c: real;
begin
 writeln ('zadaj N0');
 readln (n0);
 writeln ('zadaj n');
 readln (n);
 writeln ('zadaj p');
 readln (p);
 d:=1;
 c:=p/100;
 c:=round(d*100)/100;
 pocitadlo:=1+c;
 for i:=1 to n do
  d:=pocitadlo*d;
 d:=d*N0;
 writeln ('cislo ',d );
 readln;
end.
zakazdym mi vychadzaju ine cisla. z toho mi vyslo: 1.04857600000000E+010

pravdupovedziac nerozumiem tomu, co mi toto spravi:

Kód: Vybrať všetko

d:=round(d*100)/100;
//autoeditácia príspevku (07 Mar 2011, 16:43)
ok aj tak uz na to asi nikto nepride. dal som to cez X:0:2 na zobrazenie. zubrazuje od veci, ale uz to nevadi.
mozete toto vlaknu locknut, alebo zaujmalo by ma ako sa to da spravit cez case of. Cize ak by mal niekto cas a chut, mohol by sem upnut zdrojovy kod za karmu.
audiotrack a BX mate dalsie K+ :)
Spixy
Professional
Professional
Používateľov profilový obrázok
Príspevky: 1334
Registrovaný: 24 okt 2010, 12:52

Re: pascal

Príspevok od používateľa Spixy »

ešte k tomu X:0:2 -> myslím si že to 1. číslo musí byť >= ako 2. , vyskúšaj X:2:2 alebo X:2:0 ak tam nechceš mať desatinné čísla
ferdo93
Amateur
Amateur
Príspevky: 21
Registrovaný: 27 feb 2011, 12:00

Re: pascal

Príspevok od používateľa ferdo93 »

cawte. sorry ze zas otravujem, ale zase si neviem pomoct :)
teraz programujem hru Black Jack hrac proti PC. zdrojovy kod:

Kód: Vybrať všetko

uses crt;
var d,a,pocitadlo,e: integer;
    p,u,z: char;
    x: array [1..100] of char;
begin
randomize;
 clrscr;
 d:=0;
 writeln ('Black Jack. Hrac proti pocitacu');
 writeln;
 writeln ('zadaj svoje meno');
 readln (x);
 writeln ('stlacenim pismena Z zrusis');
 z:=readkey;
 writeln ('stlacenim pismena K dostanes dalsiu kartu kartu');
 readln (p);
 repeat
 a:=random (11)+1;
 if p='k' then begin
               writeln ('karta cislo ',a);
               d:=d+a;
               writeln ('sucet vsetkych kariet je ',d);
               readln;
               end
 else begin
      clrscr;
      writeln ('INFORMACIE O HRE!');
      writeln ('...');
      end;
 until (z='z') or (d > 22);
 readln;
 writeln ('karty ',d);
 readln;
 writeln ('pocitac');
 pocitadlo:=0;
 repeat
 randomize;
 e:=random (11)+1;
 if pocitadlo < 16 then begin
                        writeln ('karta cislo ',e);
                        pocitadlo:=pocitadlo+e;
                        writeln ('sucet vsetkych kariet je: ',pocitadlo);
                        end;
 until (pocitadlo>16);
 readln;
 writeln ('vysledky: ');
 if (d > pocitadlo) and (d < 22) then writeln ('gratulujem vyhral/a si ',x);
 if (pocitadlo > d) and (pocitadlo < 22) then writeln ('vyhral pocitac!');
 if (d=pocitadlo) then writeln ('smola! nastla remiza, skus to este raz.');
 readln;
end.
v tomto programe som si nasiel par logickych chyb.
program funguje, ale:
1, neskonci ak to uzivatel zada, ale pokracuje, pokial cislo nieje vetsie ako 22.
2, ak namiesto klavesy k stisnem inu klavesu, napise informacie o hre, ale stale sa to opakuje a nejde to vypnut. ak to else vymazem, tak program pri stlaceni inej klavesy zamrzne.
3, na konci iba vypise slovo vysledky, ale neporovnava to.
chcem este do toho napisat black jack hrac proti hracovy, ale najskor musi toto fungovat.
dufam, ze ten zdrojak sa da citat :)
vopred dakujem.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: pascal

Príspevok od používateľa BX »

Tak som to tak narýchlo pomenil a prišiel som na pár vecí:
1.) Nepoužívaj toľko krát prázdny readln; Zbytočne to mýli.
2.) Skús začat používať procedúry a funkcie. Uľahčí ti to prácu a zjednoduší kód.
3.) randomize stačí volať raz v programe
4.) Tie informácie som vymazal, neviem čo si nimi myslel, ale sú tam na nič. Ak ich tam chceš, popíš čo to má byť.
5.) Toto nie je C, že si idem načítavať reťazec do poľa znakov. Pascal má na toto typ string. (BP mi to ani neskompiloval)

Kód: Vybrať všetko

uses crt;
var d,a,pocitadlo,e: integer;
    p,u,z: char;
    x: string;
begin
randomize;
clrscr;
d:=0;
writeln ('Black Jack. Hrac proti pocitacu');
writeln;
write ('zadaj svoje meno: ');
readln (x);

writeln ('stlacenim pismena Z zrusis');
writeln ('stlacenim pismena K dostanes dalsiu kartu kartu');

repeat
readln(p);

a:=random (11)+1;
if p='k' then begin
               writeln ('karta cislo ',a);
               d:=d+a;
               writeln ('sucet vsetkych kariet je ',d);
               end;

until (p='z') or (d > 22);

writeln ('tvoj sucet ',d,' | Stlac enter');
readln;
writeln ('pocitac');
pocitadlo:=0;
repeat
e:=random (11)+1;
if pocitadlo < 16 then begin
                        writeln ('karta cislo ',e);
                        pocitadlo:=pocitadlo+e;
                        writeln ('sucet vsetkych kariet je: ',pocitadlo);
                        end;
until (pocitadlo>16);

writeln ('vysledky: ');
if (d > pocitadlo) and (d < 22) then writeln ('gratulujem vyhral/a si ',x);
if (pocitadlo > d) and (pocitadlo < 22) then writeln ('vyhral pocitac!');
if (d=pocitadlo) then writeln ('smola! nastala remiza, skus to este raz.');
readln;
end.
ferdo93
Amateur
Amateur
Príspevky: 21
Registrovaný: 27 feb 2011, 12:00

Re: pascal

Príspevok od používateľa ferdo93 »

dakujem ti. mas dalsiu :plus:
program je omnoho efektivnejsi, ako ten moj.
v com som mal chybu?? mohol to robit ten readln? alebo pole?
tie informacie som tam ani nechcel, ale dal som ich preto, lebo ked som zadal inu klavesu ako K tak program zamrzol.

//autoeditácia príspevku (13 Mar 2011, 19:51)
este by ma zaujmalo, co si spravil s tymi podmienkami na konci :) mne to vobec nechcelo porovnat a program skoncil
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: pascal

Príspevok od používateľa BX »

Logiku zadávania si mal úplne zlú. Najprv si vypýtal z, potom p a až potom si šiel do cyklu. To bola najväčšia chyba. Ty chceš predsa opakovane odchytávať a porovnávať p, takže ho musíš odchytávať v cykle. To z tam je totálne zbytočne, pretože zadám ho pred cyklom a potom od neho závisí, či cyklus skončí, pričom v cykle s ním nič nerobím. Z toho vyplýva, že ak dám do z písmeno 'z', tak cyklus skončí po prvom. Ak zadám niečo iné, podmienka sa nikdy nesplní.
Takže p musíš odchytávať v cykle a podľa toho sa riadiť, či skončiť, alebo dať kartu.
No a od tohoto sa odvíjajú aj výsledky, to už mohlo hociako zblbnúť.

Z tohoto sa dá pochopiť, že to else tam bolo úplne zle a nič si s ním nedosiahol.

Ešte som zabudol šiesty bod
6.) Používaj trochu zmysluplnejšie názvy pre premenné.
Gregi
Light Star
Light Star
Príspevky: 224
Registrovaný: 24 mar 2005, 11:34

Re: pascal

Príspevok od používateľa Gregi »

Tu je trosku upraveny vas kod. Je tam vsak jedna vec, ktora nie je doriesena (nechcelo sa mi). Je to konkretne pripad ked potiahne ktosi 2xESO. Je to sice 22, ale je to tzv. kralovske OKO. To uz by sa museli pridavat dalsie podmienky. Skus dopracovat este tuto vec a mas to hotove. 8) Inak ste tam nemali vobec osetreny vypis v pripade prekrocenia hracom 21.

Kód: Vybrať všetko

Program Black_Jack;
uses Crt;
var
  poradie,suma1,suma2,karta: Byte;
  meno: string;
  stl_kla: char;

BEGIN
  Randomize;
  ClrScr;
  WriteLn ('BLACK JACK');
  WriteLn;
  Write ('zadaj svoje meno: ');
  ReadLn (meno);
  WriteLn;
  WriteLn ('- stlacenim pismena ''z'' zrusis');
  WriteLn ('- stlacenim pismena ''k'' dostanes dalsiu kartu');
  WriteLn ('---------------------------------------------');
  poradie:=1;
  repeat
    stl_kla:=ReadKey;
    karta:=random (10)+2; {1 nie je, pretoze eso je za 11}
    if stl_kla='k' then begin
      WriteLn ('karta cislo ',poradie,'. = ',karta);
      suma1:=suma1+karta;
      inc(poradie);
      WriteLn ('sucet kariet je: ',suma1);
    end
  until (stl_kla='z') or (suma1>21);
  if suma1>21 then begin
    suma1:=0;
    WriteLn ('TROP');
  end;
  WriteLn ('---------------------------------------------');
  WriteLn ('Na rade je pocitac');
  poradie:=1;
  repeat
    karta:=random (10)+2;
    WriteLn ('karta cislo ',poradie,'. = ',karta);
    suma2:=suma2+karta;
    inc(poradie);
    WriteLn ('sucet kariet je: ',suma2);
  until (suma2>15);
  if suma2>21 then begin
    suma2:=0;
    WriteLn ('TROP');
  end;
  WriteLn ('---------------------------------------------');
  WriteLn ('VYSLEDKY');
  if (suma1>suma2) then WriteLn ('gratulujem, vyhral/a si ',meno,' s: ',suma1);
  if (suma2>suma1) then WriteLn ('vyhral pocitac!');
  if (suma1=suma2) then WriteLn ('smola! Nastla remiza, skus to este raz.');
  ReadLn;

END.
ferdo93
Amateur
Amateur
Príspevky: 21
Registrovaný: 27 feb 2011, 12:00

Re: pascal

Príspevok od používateľa ferdo93 »

dakujem BX za vysletlenie. uz som to pochopil :) ja viem s tymi premennymi, budem mat problem, lebo sa chystam nakodit kasino :D a skusim tam dat aj procedury a premenne.

GREGI
ja viem program som si uz osetril
1, namiesto:

Kód: Vybrať všetko

if (d > pocitadlo) and (d < 22) then writeln ('gratulujem vyhral/a si ',x);
som este dopisal

Kód: Vybrať všetko

if (d > pocitadlo) and (d < 22) or (pocitadlo > 22) then writeln ('gratulujem vyhral/a si ',x);
tak som spravil aj pre pocitac.
2, dopisal som: ak padla 21 tak pripisalo 2 body a oznamilo mu to, riesil som to cez dalsie podmienky. Na zlate oko som zabudol :oops:

3, program mi aj tak mrzol. zamrzol mi preto, lebo nevedel co ma urobit ak padne 16:

Kód: Vybrať všetko

until (pocitadlo>16);
stacilo dat =

Kód: Vybrať všetko

until (pocitadlo>=16);
ale dakujem aj tebe, ten zdrojak vyzera zaujmavo, a je dobre prepracovany :). mas :plus:
Napísať odpoveď