[ Đ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:).