Poslao: 14 Maj 2007 20:41
|
offline
- LittleHacker
- Ugledni građanin
- Pridružio: 13 Apr 2007
- Poruke: 452
- Gde živiš: Beograd
|
Posto sam pre neki dan obarao system i nisam imo Cd sa D7, a imao sam D2005 na hardu instalirao sam njega....
Neznam da li sam ja pogresio ali evo koda.....Kompajler nece da izvrsi petlju u petlji
var x,y,k : integer;
procedure Button1Click
begin
y := StringToInt(Edit1.text);
repeat
x := x + 1;
repeat //da bi u jednoj liniji bilo vise zvezdica
k := k + 1;
Memo1.lines.strings[x] := Memo1.Lines.Strings[x] + '*';
until k = x;
until x = y;
Sad da objasnim...Na primer korisnik u Edit1 upise 5 i program u Memo1
napise
*
**
***
****
*****
ako stavi 7 dodace se jos dva reda, jedan sa 6 * a drugi sa 7 *
Kada stisnem Button1 stvori se samo 1 *....
Znaci da drugu petlju samo jednom uradi, uopste ne vrti dalje....
Probao sam i sa x := 0 to y .....isto
Verovatno sam ja negde pogresio, ali moguce da su i oni pogresili pri
pravljenju ovoliko vrsta applikacija
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
|
|
Poslao: 14 Maj 2007 23:06
|
offline
- bobby
- Administrator
- Pridružio: 04 Sep 2003
- Poruke: 24135
- Gde živiš: Wien
|
Kod while..do i repeat..until moras prvo varijablama koje koristis kao brojace zadati pocetne vrednosti, inace komp nece znati od kog broja treba da pocne da broji.
|
|
|
|
Poslao: 14 Maj 2007 23:17
|
offline
- Strog
- Stručni saradnik
Web programiranje
- Bojan Kopanja
- Web & Mobile developer @ ZeusSoftware
- Pridružio: 26 Jul 2003
- Poruke: 2597
- Gde živiš: Stara Pazova
|
To znaci da u ovom kodu koji si ovde dao nisi nigde postavio x, y i k promenljive na neku pocetnu vrednost. U stvari sad vidim da jesi postavio za y, ali za ove dve nisi. Takodje nemoj da koristis "x=x+1" vec koristi "Inc(x)", ne znam kako i zasto, ali na faxu smo ucili da se ovo drugo brze izvodi.
Takodje ovako na prvi pogled mi ove petlje nemaju previse smisla... Ti stavis recimo y na 5, a x na 0 i ta petlja ce se izvrsiti jednom, zatim se x uveca za 1 i onda se izlazi iz petlje posto je x sada 1, a to nije jednako sa 5...
Ovo ti vazi i za ovu drugu repeat petlju... Znaci obe petlje ca ti se izvrsisi max 2x i to u slucaju da se pogodi da ti je x za 1 manji od y, pa da se uveca za 1 i onda da bude jednak y.
Znaci nije problem do Delphija nego ti imas gresku u algoritmu, sto bi znacilo nazad na crtaci stol . ( znaci upravo zbog ovoga sto sam ti objasnio i dobijes samo jednu zvezdicu... )
Dopuna: 14 Maj 2007 23:17
bobby i ja pisali istovremeno
|
|
|
|
Poslao: 14 Maj 2007 23:23
|
offline
- LittleHacker
- Ugledni građanin
- Pridružio: 13 Apr 2007
- Poruke: 452
- Gde živiš: Beograd
|
Aha....pa treba da uvedu kad ja nestavim da on pocne on 0 ali nema veze, sad kapiram.....
Strog to cu da uradim sa for x := 0 to y i sve tako i reba da radi....
a mislim da moze i ovako.....zasto on nebi vrteo petlju dok x nebude = y
u until mu lepo pise da vrti dok x nebude = y
Mozes da mu napravis tako(valjda) da vrti petlju bez prestanka ako mu se x ne povecava
I nisam kopirao kod ali sam u Delphi-u pisao sa Inc(x);
|
|
|
|
Poslao: 14 Maj 2007 23:31
|
offline
- bobby
- Administrator
- Pridružio: 04 Sep 2003
- Poruke: 24135
- Gde živiš: Wien
|
Nece da pocne od nule ako nisi inicijalizovao.
Kada pokrenes svoj program, toj varijabli ce sistem da podeli neku lokaciju u memoriji, i pocetna vrednost tvoje varijable ce biti ono sto se naslo na toj lokaciji u memoriji. Sistem nece da obrise memorijski prostor koji ce tvoj program da zauzme kada se pokrene, vec ce tu da bude podataka koji su ostali nakon iskljucivanja drugih programa.
|
|
|
|
Poslao: 14 Maj 2007 23:56
|
offline
- LittleHacker
- Ugledni građanin
- Pridružio: 13 Apr 2007
- Poruke: 452
- Gde živiš: Beograd
|
Ok...sad razumem HVALA
Dopuna: 14 Maj 2007 23:47
I Strog kada sam citao knjigu za delphi pisalo je da treba koristiti Succ(x)...a ne Inc(x)
Dopuna: 14 Maj 2007 23:56
I cini mi se kao da mi petlje while repeat i for vracaju vrednost ili ja opet nesto nisam dobro uradio...(valjda vracanje vrednosti nema veze sa petljom nego sa funkcijom, procedurom i tim stvarima)
|
|
|
|
Poslao: 15 Maj 2007 00:12
|
offline
- Strog
- Stručni saradnik
Web programiranje
- Bojan Kopanja
- Web & Mobile developer @ ZeusSoftware
- Pridružio: 26 Jul 2003
- Poruke: 2597
- Gde živiš: Stara Pazova
|
Koliko sam procesljao help Succ ti vraca vrednost uvecanu za jedan, alo originalni objekat ostaje nepromenjen, a Inc ce ti povecati i vrednost u x-u, tako da koristi Inc!
http://www.delphibasics.co.uk/RTL.asp?Name=Succ
kaze: The Succ function increments an ordinal value, and returns this value.
http://www.delphibasics.co.uk/RTL.asp?Name=Inc
kaze: The Inc procedure increments the ordinal Variable parameter passed to it.
Tako lepo pise i primer... Recimo za Succ moras da uradis:
x:= Succ(x)
Dok kod Inc kazes samo:
Inc(x)
Takodje kod Inc mozes da menjas i korak povecanja pa tako mozes da napises:
Inc(x, 5)
pa ce ti se promenljiva x uvecati za 5, dok kod Succ toga nema... Znaci batali to sto pise u knjizi i slobodno koristi Inc!
|
|
|
|
Poslao: 15 Maj 2007 01:43
|
offline
- beli0135
- Executor
- Pridružio: 03 Jan 2005
- Poruke: 2990
- Gde živiš: Beograd
|
@litteHacker,
Ako stvarno zelis da naucis da programiras i da budes stvarno dobar programer, moraces da obrnes filozofiju.
Krenuo si od "jel ovo bug u delfiju", kao da je logicnije da 450 vukova programera propusti bug nego da si napravio gresku.
Pravilan pristup je "Gde sam pogresio".
Drugo pravilo:
Kad procedura ili funkcija ili modul uradi kako treba, prvo sto treba da pomislis je "proradilo je slucajno. Ne verujem da radi. Hajde da ponovim test 20-ak puta da sebi dokazem da nisam napravio bug"
I kad ponovis 20-ak puta, zovi nekog baksuza od druga, koji nema veze sa programiranjem, garantujem ti da ce u 50% slucajeva da nadje bag na prvom kliku.
|
|
|
|