|
[ Đole @ 04.07.2005. 22:57 ] @
| U pitanju je pascal, naravno. Interesuje me da li promenljiva moze da proizvoljno uzme vrednost iz skupa nekih brojeva i kako se to moze izvesti.
Na primer, imam promenljivu x koja treba da uzme neku vrednost, bilo koju, u rasponu od 1 do 10! Kako?
Hvala...
[Ovu poruku je menjao Đole dana 05.07.2005. u 15:32 GMT+1] |
[ _v!rus_ @ 04.07.2005. 23:19 ] @
Prvo na pocetak programa stavis jedno [Randomize;], pa onda koristis f-je [Succ(Random(10))]
off-topic:
Mada, ne postoji pojam "bilo koji broj", ne samo u racunarskom svetu, nego u svetu uopste, cak i brojevi koji tebi padnu na pamet su necim uzrokovani, pa nisu "bilo koji" ;)
[Ovu poruku je menjao _v!rus_ dana 05.07.2005. u 00:20 GMT+1]
[ Đole @ 05.07.2005. 14:28 ] @
Hvala na brzom odgovoru!
Da ne bih otvarao novu temu postavicu jos jedno pitanje ovde:
Naime, kako da na kraju ciklusa sa naredbama repeat i until, promenljive resetuju odnosno 'izgube' vrednosti koje su primile u tom istom ciklusu?
[ Passwd @ 05.07.2005. 15:05 ] @
Pa stavis x:=0;
[ Passwd @ 05.07.2005. 15:07 ] @
Il bolje postavi cijeli kod pa cemo tamo..
[ Đole @ 05.07.2005. 22:02 ] @
Dakle, znam nesto pascala iz skole, sto smo sad radili u trecog godini pa sam odlucio da nastavim dalje. Uzeo sam malo da se igram, i pala mi na pamet igra u kojoj trebas da pogodis broj iz tri pokusaja. Evo i kod-a, ako ima nekih gluposti nemojte mi se smejati. Pomoc je dobrodosla i ocekujem je!
Code: Program Pogodi_broj;
var tezina,odgovor,S,i,x,p:integer;
Pokusaj:array[1..3] of integer;
kraj:boolean;
Procedure Odabir_tezine;
begin
writeln('Izaberi nivo tezine');
writeln('1. Lako');
writeln('2. Umereno');
writeln('3. Tesko');
repeat
readln(Tezina);
if Tezina=1 then S:=5; // ove brojeve treba da bira
if Tezina=2 then S:=25; // nasumicno, ali sada stoji ovako
if Tezina=3 then S:=50; // radi lakseg testiranja!
if Tezina>3 then writeln('Aj biraj ponovo!');
until (Tezina=1) or (Tezina=2) or (Tezina=3);
end;
begin
kraj:=false;
repeat
Odabir_tezine;
writeln('Pogadjaj!');
while(i<3) do
for i:=1 to 3 do
begin
readln(Pokusaj[i]);
p:=i;
if Pokusaj[i]<S then writeln('Veci je');
if Pokusaj[i]>S then writeln('Manji je');
if Pokusaj[i]=S then i:=3;
if Pokusaj[i]=S then writeln('Bravo');
end;
if (Pokusaj[1]=S) or (Pokusaj[2]=S) or (Pokusaj[3]=S) then writeln('Bravo, to je trazeni broj!');
if p=3 then writeln('Nemate vise pokusaja');
writeln('Zelite li jos jednu partiju?');
readln(odgovor);
if odgovor=1 then Kraj:=false;
if odgovor=2 then Kraj:=true;
until Kraj=true;
readln(x);
end.
[ Srki_82 @ 05.07.2005. 22:11 ] @
Lepo... mozda bi mogao to da uradis uz pomoc Turbo Vision-a (rad sa prozorima, misem, dialozima, dugmicima... u Pascalu... verujem da Passwd zna o cemu pricam  ). Jeste da ces morati da se malo pomucis, ali ce vredeti
BTW: Ovo je najkraci moguci program (Turbo Vision) u TP 7
Code: program TVProba;
uses
App;
var
A: TApplication;
begin
A.Init;
A.Run;
A.Done;
end.
Ima podrsku za misa (klikom na donji levi ugao u kojem pise Alt + X ce izaci iz programa, ima podrsku za Accelerator keys... skoro sve kao Windows, ali se sve iscrtava obicnim karakterima).
[Ovu poruku je menjao Srki_82 dana 05.07.2005. u 23:15 GMT+1]
[ Đole @ 05.07.2005. 22:19 ] @
Khmmm, ovaj, cini mi se da je odgovor od malo pre zalutao:)!
[ Srki_82 @ 05.07.2005. 22:22 ] @
Citat: Đole: Khmmm, ovaj, cini mi se da je odgovor od malo pre zalutao  !
Veruj mi da nije 
[ Đole @ 05.07.2005. 22:31 ] @
Citat: Srki_82:...verujem da Passwd zna o cemu pricam...
Citat: Srki_82: Veruj mi da nije ;)
Moze maaaalo jasnije?
[ peromalosutra @ 05.07.2005. 23:10 ] @
Evo ti slican program koji sam ja prije radio. Na pocetku mozes da odaberes procenat laznih odgovora (bilo bi prelako kad bi ti program stalno govorio istinu). Kod i nije nesto uredan (to mi nije jaca strana), ali radi.
PS: probaj za procenat laznih unjeti 100 :-)
Code:
Program Pogadjanje;
Uses WinCrt; {ili stav vec}
const brojeva=1000;
Var prlaznih,broj,pokusaj,odabir,br:integer;
Procedure pocetak;
Begin
Randomize;
Broj:=Random(brojeva); {bira broj koji ces da pogadjas}
Write ('Unesi procenat laznih odgovora: ');
Readln (Prlaznih);
Clrscr;
End;
Procedure istina;
Begin
If pokusaj<broj then writeln ('Broj je veci.')
else if pokusaj>broj then writeln ('Broj je manji.')
else writeln ('Pogodio si!');
End;
Procedure laz;
var t:integer;
Begin
t:=random (2); {odlucuje da li ce reci da je veci ili manji}
If t=0 then writeln ('Broj je veci.')
else writeln ('Broj je manji.');
End;
Begin
pocetak;
Repeat
Write ('>');
Readln (pokusaj); {odlucuje da li ce da slaze ili kaze istinu}
odabir:=random (100);
if odabir>prlaznih then istina
else laz;
inc (br);
writeln;
Until pokusaj=broj;
ClrScr;
Writeln ('Procenat laznih odgovora: ',prlaznih);
Writeln ('Br. pogodjen iz ',br,'. pokusaja.');
end.
[ Đole @ 06.07.2005. 00:32 ] @
Hmmm... Ovaj prosli kod mi bas i nije pomogao, nazalost!
Mene u stvari interesuje kako da promenljive 'izgube' vrednost, znaci, da budu kao na samom pocetku izvrsavanja programa... Da li je to moguce uraditi nekako?
[ Toyo @ 06.07.2005. 02:26 ] @
Pa to ti bas tako nece proci.
1. Izbegavaj da u for petlji menjas vrednost i (to tako ne bi smelo da se radi)
2. s ti predstavlja samo nivo tezine do kojeg se bira broj a ti moras da uvedes novu promenljivu r naprimer koja ce da generise broj izmedju tog intervala.
3. taj niz u koji smestas prethosne odgovore nije potreban
Evo ja sam prepravio nesto pa mozda ce da radi, samo sto je pokusaj integer (a ne niz) i uvedene su varijable r: integer, nadjen: boolean koje treba da dopises.
Znaci samo glavni program:
Code:
begin
kraj:=false;
repeat
Odabir_tezine;
writeln('Pogadjaj brojeve izmedju 0 - !', S);
nadjen := false;
r := random(S)+1;
i := 0;
while(i<3) and not nadjen do
begin
inc(i);
readln(Pokusaj);
if Pokusaj<r then writeln('Veci je')
else if Pokusaj>r then writeln('Manji je')
else nadjen := true;
end;
if nadjen then writeln('Bravo') else writeln('Ne ne ne. Gotov si.');
writeln('Zelite li jos jednu partiju?');
readln(odgovor);
until (odgovor =2);
readln;
end.
[Ovu poruku je menjao Toyo dana 06.07.2005. u 03:28 GMT+1]
[ peromalosutra @ 06.07.2005. 11:13 ] @
Pa moj kompajler inicijalizuje vrijednost "brojnih" (integer,longint,real..) varijabli na 0, logickih (boolean) na true, a za char nisam siguran, ali je lako provjeriti. Dakle ako hoces da ti varijeble budu kao na pocetku programa samo navedes, npr. s:=0; ili b:=true; (iako neki kompajleri drugacije inicijalizuju varijable, na primjer na minint i slicno).
Iako nisam siguran bas zasto ti to treba...
[ Đole @ 07.07.2005. 20:14 ] @
Code: Program Pogodi_broj;
var tezina,Pokusaj,odgovor,S,i:integer;
kraj,pogodjen:boolean;
Procedure Odabir_tezine;
begin
writeln('Izaberi nivo tezine');
writeln('1. Lako');
writeln('2. Umereno');
writeln('3. Tesko');
repeat
randomize;
readln(Tezina);
if Tezina=1 then S:=Random(10);
if Tezina=2 then S:=Random(50);
if Tezina=3 then S:=Random(100);
if (Tezina<1) or (Tezina>3) then writeln('Aj biraj ponovo!');
until (Tezina=1) or (Tezina=2) or (Tezina=3);
end;
begin
repeat
Odabir_tezine;
case Tezina of
1:writeln('Broj koji trebas da pogodis se nalazi u intervalu od 1-10');
2:writeln('Broj koji trebas da pogodis se nalazi u intervalu od 1-50');
3:writeln('Broj koji trebas da pogodis se nalazi u intervalu od 1-100');
end;
kraj:=false; pogodjen:=false; Pokusaj:=0;
i:=0;
writeln('Pogadjaj');
while (i<3) and (pogodjen=false) do
begin
i:=i+1;
readln(Pokusaj);
if Pokusaj<S then writeln('Veci je');
if Pokusaj>S then writeln('Manji je');
if Pokusaj=S then pogodjen:=true;
end;
if (Pokusaj<>S) then writeln('Nemate vise pokusaja');
if pogodjen=true then writeln('Svaka cast, ',S,' je trazeni broj!');
writeln('Zelite li jos jednu partiju?');
repeat
readln(odgovor);
if odgovor=1 then Kraj:=false
else if odgovor=2 then Kraj:=true
else writeln(' DA(1) ili NE(2)? ');
until (odgovor=1) or (odgovor=2);
until Kraj=true;
writeln('Tresni ENTER za izlazak.');
readln;
end.
Jeeeeee, radi! Hvala vam svima na pomoci!
Jedino sto mi nije jasno je:
Code: while (i<3) and (pogodjen=false) do
...zasto ide and umesto or?
[ Toyo @ 07.07.2005. 21:05 ] @
Pa zamisli da pogodis iz prve:
tada je i=1 a pogodjen =true
(i<3) or (pogodjen=false) bi dalo tacan izraz i program bi ponovo usao u while.
Evo malo logike: A and B <-> not (not A or not B)
znaci ako bas insistiras sa OR, mogao bi da pises: while not ((i>=3) or (pogodjen=true)), to bi doslo na isto.
Pozdrav.
[ Đole @ 07.07.2005. 21:29 ] @
A zasto bi ponovo usao u while kada je... eto, da uzmem tvoj prime i=1 a pogodjen =true. Dakle on ce vrsiti ono sto se nalazi u ciklusu dok se jedan od uslova ne porusi. U ovom slucaju pogodjen=true i on bi trebao da preskoci ciklus... Zar ne! Bar meni tako zvuci logicno, ali koliko vidim, ja sam nesto pogresno shvatio... Valjda ce mi se razjasniti?:)
[ Srki_82 @ 07.07.2005. 22:06 ] @
While (while = dok je) se izvrsava sve dok je izraz tacan, a Repeat Until (until = sve dok ne bude) sve dok je izraz netacan... mozda ce ti sad biti lakse.
[ Đole @ 07.07.2005. 22:38 ] @
Mislim da mi je sad jasno! Nego... sad kad sam ovo ukapirao sa čime da nastavim, u Pascalu, naravno?
[ Srki_82 @ 07.07.2005. 23:07 ] @
Pocni da ucis Turbo Vision u Pascalu. Ako imas TP7 onda imas i Turbo Vision. To su objekti za rad sa misem, prozorima i slicno. Ako budem imao vremena napisacu ovaj tvoj program koristeci Turbo Vision pa ces videti kako to izgleda.
[ Passwd @ 08.07.2005. 19:40 ] @
Evo sto Srki_82 i ja napravise recimo za 3 minute
http://free-zg.t-com.hr/Passwd/
Skini igra.exe!
Sad mozda dobijes poticaj za turbo vision (tj. mozda shvatis o cem ti Srki_82 prica)!!!
Sad razmisli kolika je razlika izmedju tvoje dos igrice i ove win32 
A usporedi i kodove
Code:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure btnbrojeviclick(Sender: TObject);
end;
var
Form1: TForm1;
n:integer;
implementation
{$R *.dfm}
procedure TForm1.btnbrojeviclick(Sender: TObject);
var br1:integer;
begin
br1:=TButton(Sender).Tag;
if br1=n then showmessage('Bravo') else
if br1<n then showmessage('Treba veci broj')
else showmessage('Treba manji broj');
end;
procedure TForm1.FormCreate(Sender: TObject);
var btn:TButton;
x,y:integer;
begin
for x:=0 to 9 do
for y:=0 to 9 do
begin
btn:=Tbutton.Create(self);;
btn.Parent:=self;
btn.Top:=50+y*30;
btn.Left:=50+x*30;
btn.Width:=25;
btn.height:=25;
btn.Caption:=inttostr((X + 1) + (Y * 10));
btn.Tag := (X + 1) + (Y * 10);
btn.OnClick:=btnbrojeviclick;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
n:=0;
randomize;
n:=random(101);
end;
end.
p.s:Prije pocetka igre stisni "nova igra"!!
[ Srki_82 @ 08.07.2005. 19:44 ] @
Turbo Vision ti dpzvoljava da pravis programe koji izgledaju bas kao Turbo Pascal 7... znaci imas Clipboard, imas prozore, imas dialoge, imas editboxove, dugmice, scroll bar, combobox... i jos svasta... mnogo lepse izgleda nego da imas red teksta koji ti kaze Unesi broj:
Sa Turbo Visionom mozes da uradis ovu igru slicno kao Passwd u Delphiu... jedino sto ces morati da pises mnooooogo vise koda 
[ Srki_82 @ 09.07.2005. 12:05 ] @
Samo za Đoleta
Ovo je aplikacija radjena sa Turbo Visionom koja radi isto sto i tvoja igra. Imas i source i exe (za slucaj da nemas sve potrebne unite sa pascalom). Ako vec planiras da radis u pascalu, a ne u delphiu onda nauci Turbo Vision
Da li izgleda lepse od standardnog programa?
P.S. Ne zaboravi da koristis misa 
[ Đole @ 09.07.2005. 22:46 ] @
Ko je rekao da ne planiram da se prebacim na Delphi? Stvar je što smatram da bi bilo bolje da još malo radim u pascalu i da učim pošto stvarno malo stvari znam u njemu. Posle je logično da ću se prebaciti na Delphi, a do tada me čeka mučenje u pascalu! Baš sam i našao neku zanimljivu literaturu, bar mi se tako čini, pa dok to ne prođem nema mi ni D od Delphia.
A što se tiče Turbo Visiona... Da, moram priznati da izgleda lepše:).
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|