KENO 10 v Pascale - odmena

Programovacie jazyky, rady, poradňa...
atomiq
Amateur
Amateur
Príspevky: 11
Registrovaný: 12 máj 2007, 22:15
Bydlisko: Bánovce nad Bebravou
Kontaktovať používateľa:

KENO 10 v Pascale - odmena

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

Zostavte algoritmus a program, ktorý bude generovať čísla hry KENO10 – Výpis 20 rôznych čísel z intervalu <1, 80> v poradí akom boli generované v tvare matice 4 x 5 a zoskupené vzostupne v tvare matice 5 x 4

Zadanie vypracujte nasledovne:

1. Vykonajte analýzu všetkých potrebných vstupných a výstupných premenných. Stanovte ich dátový typ.

2. Zostavte štruktogram.

3. Zostrojte program v Pascale.

Prosim o pomoc,potrebujem to najneskor do pondelku 14.5.2007, pascal vobec nepoznam,prosim pomozte,odmena 500 Sk
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

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

Kód: Vybrať všetko

program keno;

var cisla:array[1..20]of integer;
  i,cislo:integer;

function over(cislo:integer):boolean;
var I:integer;
begin
  for I:=1 to 20 do if cisla[i]=cislo then begin
    over:=true;
    exit;
    end;
  over:=false;
end;

procedure vypis;
begin
  for I:=1 to 20 do begin
    write(cisla[i]:4);
    if i mod 4 = 0 then writeln;
  end;
end;

procedure vypiszoradene;
begin
  for I:=1 to 20 do begin
    for cislo:=I+1 to 20 do begin
      if cisla[i]>cisla[cislo] then begin
        cisla[i]:=cisla[i]+cisla[cislo];
        cisla[cislo]:=cisla[i]-cisla[cislo];
        cisla[i]:=cisla[i]-cisla[cislo];
      end;
    end;
  end;
  for I:=1 to 20 do begin
    write(cisla[i]:4);
    if i mod 5 = 0 then writeln;
  end;
end;

begin
  randomize;
  for I:=1 to 20 do begin
    repeat cislo:=random(80)+1 until not over(cislo);
    cisla[i]:=cislo;
  end;
  vypis;
  writeln;
  writeln;
  vypiszoradene;
  readln;
end.
analýza:
vstupné premenné:
cisla (globálna, celočíselné pole)
i,cislo (globálne, celé číslo)
i (lokálna, celé číslo)
atomiq
Amateur
Amateur
Príspevky: 11
Registrovaný: 12 máj 2007, 22:15
Bydlisko: Bánovce nad Bebravou
Kontaktovať používateľa:

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

kamos mi poslal toto, myslis ze to bude tiez dobre?

program KENO10;

uses Crt;

var cisla: array [1..20] of byte;
i, j, temp: byte;

begin
randomize;
for i := 1 to 20 do begin
cisla := random(80) + 1;
write(cisla:3);
if (i mod 4) = 0 then writeln;
end;

for i:=1 to 19 do
for j:=1 to 20-i do
if cisla[j]>cisla[j+1] then begin
temp := cisla[j];
cisla[j] := cisla[j+1];
cisla[j+1] := temp;
end;

writeln;
writeln;

for i := 1 to 20 do begin
write(cisla:3);
if (i mod 5) = 0 then writeln;
end;
end.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

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

píše sa v zadaní že má vygenerovať 20 rôznych čísel. Šak ako by to vyzeralo keby sa v keno opakujú čísla? Haluz :lol:
Môj algoritmus to ošetruje: generuje až kým nenájde číslo aké sa ešte v poli nenachádza. Tvoj kamarát na také niečo zjavne zabudol.

a zbytočne tam inicializuje CRT keď v programe nepoužil žiaden jej príkaz
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

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

audiotrack napísal:Môj algoritmus to ošetruje: generuje až kým nenájde číslo aké sa ešte v poli nenachádza. Tvoj kamarát na také niečo zjavne zabudol.
Ten tvoj algoritmus na vygenerovanie neopakujúcich sa čísel je kvalitou takmer ako bogo-sort. :)
Pri veľkom počte čísel (vlastne aj pri tých 20) to môže trvať veľmi dlho, kým to vygeneruje všetky čísla. Určite by si to vedel urobiť aj lepšie. :smt024
atomiq
Amateur
Amateur
Príspevky: 11
Registrovaný: 12 máj 2007, 22:15
Bydlisko: Bánovce nad Bebravou
Kontaktovať používateľa:

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

hlavne to musi vyzerat ze to robil amater,ziadne vycackavanie :) ked sa ma opyta co ktory prikaz znamena bude zabava
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

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

Ten audiotrackov program robí to čo potrebuješ. Ten druhý negeneruje správne čísla (ale to už písal audiotrack).
atomiq
Amateur
Amateur
Príspevky: 11
Registrovaný: 12 máj 2007, 22:15
Bydlisko: Bánovce nad Bebravou
Kontaktovať používateľa:

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

ozaj a ako mam analyzovat tie premenne? vstupne si poslal a vystupne su ktore?
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Re: KENO 10 v Pascale - odmena

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

atomiq napísal:vobec nepoznam,prosim pomozte
Mozes mi povedat ze kde(?skola?praca?) davaju take ulohy ked nepoznate programovaci jazyk?
spero
Amateur
Amateur
Používateľov profilový obrázok
Príspevky: 11
Registrovaný: 11 máj 2007, 10:49

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

predpokladam, ze to ma zadane (tak ako ja vid. predosla tema) ako seminarku zo zakladov informatiky II na MTF v Trnave :).
atomiq
Amateur
Amateur
Príspevky: 11
Registrovaný: 12 máj 2007, 22:15
Bydlisko: Bánovce nad Bebravou
Kontaktovať používateľa:

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

hej,presne tak,zadanie do skoly. Pekna hlupost davat pascal ked 99% studentov o pascale nema ani len potuchy. Na strednej som mal nejake zaklady C++ a Assembler ale ked to clovek nepouziva zabudne..
Spero ako analyzujes tie premenne? :)
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

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

Keďže som včera mierne skritizoval audiotrackovu metódu generovania náhodných čísel, prikladám iné riešenie:

Kód: Vybrať všetko

var
	cisla: array[1..80] of Integer;
	i, j, t: Integer;

begin
	Randomize;
	
	{ vytvoríme zotriedené pole }
	for i := 1 to 80 do cisla[i] := i;
	
	{ prvky náhodne poprehadzujeme, čím dostaneme náhodne zoradené pole }
	for i := 1 to 79 do
	begin
		j := Random(80) + 1;
		
		t := cisla[i];
		cisla[i] := cisla[j];
		cisla[j] := t;
	end;
	
	{ kedže potrebujeme 20 cisel, budeme pouzivat prvych 20 prvkov pola }
end.
atomiq
Amateur
Amateur
Príspevky: 11
Registrovaný: 12 máj 2007, 22:15
Bydlisko: Bánovce nad Bebravou
Kontaktovať používateľa:

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

hosi diky moc teraz by ma zaujimal ten struktogram,vie niekto z vas ako sa to robi? please help me :cry:
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

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

chrono: rýchlosť na úkor pamäte :wink:
atomiq
Amateur
Amateur
Príspevky: 11
Registrovaný: 12 máj 2007, 22:15
Bydlisko: Bánovce nad Bebravou
Kontaktovať používateľa:

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

audiotrack - si ma zachranil,dakujem za tvoju pomoc a tvoj cas a aj vsetkym za prispevky,dobre duse este nevymreli :) thanx
spero
Amateur
Amateur
Používateľov profilový obrázok
Príspevky: 11
Registrovaný: 11 máj 2007, 10:49

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

Pomozte aj mne v teme "Pascal - praca s datumami - pomoze niekto ? pls - do 14.5.". Dik
KViki
Light Expert
Light Expert
Príspevky: 74
Registrovaný: 06 dec 2008, 3:25
Kontaktovať používateľa:

Delphi7

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

S mojim kódom asi nebudú spokojný tý čo sa tomu venujú..
ale snazil som sa :D
Bol by som rad keby to niekto dokazal zjednodusti,.

Treba povedat ze to neni Pascal,. ale delphi //hehe

Kód: Vybrať všetko

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons, CustomizeDlg;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    ListBox1: TListBox;
    Memo1: TMemo;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Button2: TButton;
    StaticText1: TStaticText;
    Bevel1: TBevel;
    Bevel2: TBevel;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  g:integer;
  b:boolean;
  keno,keno1,keno2,keno3,keno4,keno5,keno6:string;



implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var a:array[1..80] of integer;
    PoleTyp:array[1..10] of integer;
    typ,i,j,c,pocetvyskytov:integer;
    s,los,cislo,typo:string;
begin
listbox1.clear;
randomize;
for i:=1 to 80 do a[i]:=i;
 for j:=80 downto 2 do begin
  i:=random(j)+1;
  c:=a[i];
  a[i]:=a[j];
  a[j]:=c;
 end;
s:='';
pocetvyskytov:=0;
for i:=1 to 20 do
 begin
  s:=s+'   '+inttostr(a[i]);
  listbox1.Items.add(inttostr(a[i]));
 end;
label1.caption:=s;
 for i:=1 to 10 do
 begin
 trystrtoint(memo1.lines[i-1],poletyp[i]);
   typ:=PoleTyp[i];
  for j:=1 to 20 do begin
  los:=(listbox1.items[j-1]);
 if strtoint(los)=typ then
 begin
  inc(pocetvyskytov);
 cislo:=cislo+' '+los;
 end;
 if typ<80 then
 begin
 label2.caption:='Zhoda : '+inttostr(pocetvyskytov);
 label3.Caption:='Zhoda v cislach : '+cislo;
 end;
 end;
 end;
 for i:=1 to 10 do
 begin
 typo:=typo+'   '+inttostr(poletyp[i]);
 label7.Caption:=typo;
 end;
 end;

//najdi zhody









procedure TForm1.Button2Click(Sender: TObject);
var cislo,cislo2,i,j:integer;
    s:string;
begin
b:=true;
if b=true then begin

if memo1.lines.count > 10 then
  begin
   for i:=memo1.lines.count downto 10 do memo1.Lines[i]:='';
   b:=false;
  end
  else if memo1.lines.count < 10 then
  begin
  b:=false;
  end;
if memo1.Lines.count = 10 then
begin
b:=true;
 end;

 for i:=1 to 10 do if b=true then
begin

trystrtoint(memo1.lines[i-1],cislo);
if cislo < 81  then
begin
b:=true;
end
else
begin
b:=false;
end;
if b = true then
 begin
 button1.Enabled:=true;
 label5.caption:='Môžete spustiť losovnie čísel.'
 end
else
begin
 button1.Enabled:=false;
 label5.caption:='Vaše zadané čisla niesú platné'
end;
end;
end
else label5.caption:='nezadali ste vsetky polia'
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
b:=true;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
keno6:='KENO10';
keno:='KENO 10 je číselná lotéria kenového typu, pri ktorej tipujúci tipuje 1 až 10 čísel z osemdesiatich čísel číselného radu od 1 do 80.';
keno1:='Pri každom žrebovaní je vyžrebovaných 20 výherných čísel. Číselnú lotériu KENO 10 je možné hrať bez stávky na KENO PLUS alebo so stávkou na KENO PLUS.';
keno2:='Pri stávke na KENO PLUS hráč tipuje na to, že jedno z jeho tipovaných čísel bude vyžrebované ako posledné v poradí žrebovaných výherných čísel.';
keno3:='V číselnej lotérií KENO 10 vzniká výhra, ak zo zvoleného počtu tipovaných čísel hráč uhádne stanovený počet výherných čísel podľa tabuľky výhier.';
keno4:='Pri stávke na KENO PLUS výhra vzniká vtedy, ak medzi uhádnutými číslami sa nachádza aj posledné vyžrebované výherné číslo stávkového obdobia.';
keno5:='Vklad hry číselnej lotérie KENO 10 je voliteľný hráčom.';
ShowMessage(Keno6+#13+#13+keno+#13+keno1+#13+keno2+#13+keno3+#13+keno4+#13+keno5);
end;

end.

:D :D :D
Prílohy
Generator cisel., [keno] 3verze.rar
Keno10-- ale este nemam osetrene vsetky vstupy.
(251.3 KiB) 59 stiahnutí
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

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

tvoj program absolútne nerobí to, čo od neho očakávaš. Pozrel som kod, ale nech som akokolvek dobrý, nedokázal som pochopiť tým veciam čo sa dejú po stlačení na druhé tlačidlo. Posledné dve chyby som nevyvolal aj keď by nastať mali (logicky, nie podla logiky tvojho programu lebo z kodu je jasné že prečo nenastali). Dokonca mi ani nikdy nenapísalo tú správu že môžem spustiť hlasovanie. Celé je to písané neprehladné, plné logických nezmyslov, z ktorých ma najviac pobavili veci ako:

Kód: Vybrať všetko

b:=true;
if b=true then begin
(takáto podmienka je zbytočná, keď bude vždy splnená)

Kód: Vybrať všetko

if cislo < 81  then
begin
b:=true;
end
else
begin
b:=false;
end;
if b = true then
celé je to v cykle a overuje (asi to malo tak slúžiť) čísla či sú dobre zadané. Keďže pri prvom zlom čísle procedúru neukončíš, teoreticky mi stačí zadať správne posledné číslo a tých 9 môže byť písmen. Po prejdení cyklom bude b=true lebo desiate číslo je správne a spokojne zabúdaš na predošlých 9 chýb :)

Kód: Vybrať všetko

trystrtoint(memo1.lines[i-1],cislo);
if cislo < 81  then
toto overovanie tam ani nemusí byť. Keby si pozreš aké návratové hodnoty vracia daná funkcia pred tým ako ju použiješ, tak by si zistil že sa podmienka vykoná tiež, nech zadám čokolvek. trystrtoint vracia boolean či sa podarilo alebo nepodarilo prekonvertovať string na číslo. Ak sa ale nepodarí, do premennej cislo ti uloží 0 a vráti false (ktoré nikde nekontroluješ) ale konrtoluješ či je táto nula menšia ako 81

a hlúposti je tam ďaleko viac, ale tieto ma najviac pobavili
3NeoNeko
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 242
Registrovaný: 03 apr 2006, 17:36
Bydlisko: Trnava

Príspevok od používateľa 3NeoNeko »

Zdravím,, viem je ta téma už stará... ale aj tak sa opítam... mam tento príklad spraviť a nedarí sa mi vývojový diagram... viete ho niekto prosím spraviť alebo štruktrogram...dakujem velmi pekne...
Napísať odpoveď