Sta sam pogresio

1

Sta sam pogresio

offline
  • 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.
offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

Nisi inicijalizovao varijable.



offline
  • Pridružio: 13 Apr 2007
  • Poruke: 452
  • Gde živiš: Beograd

Stvarno te nerazumem....

offline
  • 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.

offline
  • Strog  Male
  • 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 Very Happy. ( znaci upravo zbog ovoga sto sam ti objasnio i dobijes samo jednu zvezdicu... )

Dopuna: 14 Maj 2007 23:17

bobby i ja pisali istovremeno Very Happy

offline
  • 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);

offline
  • 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.

offline
  • 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)

offline
  • Strog  Male
  • 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!

offline
  • Emil Beli
  • 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.

15 Maj 2007 13:01 Strog Zaključavanje topica Razlog: Resen problem  
Ko je trenutno na forumu
 

Ukupno su 492 korisnika na forumu :: 3 registrovanih, 1 sakriven i 488 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: S1Mk3, sasa76, Shilok