[PASCAL] program-sklep problem z powrotem do poczatku

program sklep;


uses crt;


var

wybor,znak,wybor_poczatkowy,wybor_admin,czy_poczatek:char;

haslo:string;

cena,ile:real;

do_zaplaty,utarg:real;

ilosc:integer;


begin

clrscr;


repeat

writeln('Wybierz tryb:');

writeln('Klient ');

writeln('Administracja sklepu ');

readln(wybor_poczatkowy);

wybor_poczatkowy:=upcase(wybor_poczatkowy);

IF wybor_poczatkowy='K' then

begin

clrscr;

{gdy uzyje zmiennej double - wyskakuje blad}

gotoxy(15,1);

writeln('Witaj w naszym sklepie! Chcesz cos kupic? t/n');

writeln;

readln(wybor);

wybor:=upcase(wybor);


IF wybor='N' then

begin

writeln('Zapraszamy ponownie!');

end

else

ilosc:=0;

utarg:=0;

repeat

utarg:=utarg+do_zaplaty;

     ilosc:=ilosc+1;

     writeln('Wybrales kupowanie. podaj ilosc');

     readln(ile);

     writeln('Podaj cene artykulu');

     readln(cena);

     do_zaplaty:=do_zaplaty+(cena*ile);

     writeln('Czy chcesz kupowac dalej? t/n');

     readln(znak);

     znak:=upcase(znak);

until znak='N';


writeln('Dziekujemy! Kupiles ',ilosc,' Prodkt(ow), Nalezy sie ',do_zaplaty:2:2,' zl');


writeln('Chcesz powrocic do poczatku? t/n');

readln(czy_poczatek);

czy_poczatek:=upcase(czy_poczatek);

until czy_poczatek='t';

end;



IF wybor_poczatkowy='A' then

begin

clrscr;

writeln('Wybrales Panel Administracyjny');



write('Podaj haslo: ');

writeln('Pamieta, masz tylko jedna probe!');

read(haslo);


{Haslo to: sklep}

IF haslo='sklep' then

begin

clrscr;

writeln('Dostep przyznano.');

writeln;


writeln('Co chcesz zrobic?');

writeln('Dzienny utarg ');

writeln('Koniec ');

readln(wybor_admin);

wybor_admin:=upcase(wybor_admin);


IF wybor_admin='D' then

begin

     writeln(utarg);

     readln;

end;

end;

end;

readln;

end.

na poczatek proponuje sobie go wklepac do jakiegos kompilatora zeby zobaczyc jak działa (w sumie po kodzie mozna zrozumiec conieco)

jest to program torszke prymitywny ale nie o to idzie.

program na samym poczatku ma wybor:

klient

admin

stworzylem to po to aby mozna bylo wyswietlic dzienny utarg z wszystkich zakupow.

czyli do_zaplaty kazdego klienta wzucilem do jednego koszyczka czyli utarg.

i teraz dziala to troche nieudolnie, bo jak wybiore klient, zrobie zakupy to koniec programu, a mi chodzi o to, aby po kazdych zakonczonych zakupach program zapytal czy powrocic do samego poczatku (wybor klient-admin)

i w tym prymitywnym panelu admina wyswietliła sie wartosc wszystkich zakupow czyli zmiennej utarg bądź tez jak widac zakonczenie działania bez wyswietlania tej zmiennej. proszę o pomoc

probowalem to upiąc w pętelke repeat ale coś mi nie idzie ;s

jesli dobrze cie zrozumialem to:

zrob to w petelce i bez zadnego zapytania na koncu tylko niech na poczatku pyta czy chce klient robic zakupy… jesli tak to idzie program, skonczy sie i powrot i to samo. jesli nie to end programu, sprobuj czyms takim…

mam nadzieje ze zrozumiale napisalem xD :stuck_out_tongue: :stuck_out_tongue:

tak mi sie wydaje ze powinno to pojsc xD

Spróbuj na while

Twój program w ogóle mi się nie kompiluje, ponieważ w 56. linijce jest until , podczas gdy nie skończyłeś jeszcza if a z 21. linijki. Trzeba zamienić linijki 56 i 57. Do utargu kwotę do zapłaty powinieneś dodać dopiero po zakończeniu zakupów. Poza tym możliwość zakończenia programu powinna być dostępna z poziomu głównego menu, a nie z poziomu klienta. Ja bym proponował taką łatkę (jak chcesz dokładnie zobaczyć, jak się spacje tam układają, to daj “Cytuj” na mój post):

--- Luksiks.pas.orig	2010-01-09 13:41:28.273924373 +0100

+++ Luksiks.pas	2010-01-09 13:42:43.388501957 +0100

@@ -3,19 +3,21 @@

 uses crt;


 var

-wybor,znak,wybor_poczatkowy,wybor_admin,czy_poczatek:char;

+wybor,znak,wybor_poczatkowy,wybor_admin:char;

 haslo:string;

 cena,ile:real;

 do_zaplaty,utarg:real;

 ilosc:integer;


 begin

+utarg:=0;

+while true do

+begin

 clrscr;

-

-repeat

 writeln('Wybierz tryb:');

 writeln('Klient ');

 writeln('Administracja sklepu ');

+writeln('Koniec ');

 readln(wybor_poczatkowy);

 wybor_poczatkowy:=upcase(wybor_poczatkowy);

 IF wybor_poczatkowy='K' then

@@ -28,15 +30,15 @@

 readln(wybor);

 wybor:=upcase(wybor);


-IF wybor='N' then

+IF wybor<>'T' then

 begin

 writeln('Zapraszamy ponownie!');

 end

 else

+begin

 ilosc:=0;

-utarg:=0;

+do_zaplaty:=0;

 repeat

-utarg:=utarg+do_zaplaty;

      ilosc:=ilosc+1;

      writeln('Wybrales kupowanie. podaj ilosc');

      readln(ile);

@@ -46,18 +48,14 @@

      writeln('Czy chcesz kupowac dalej? t/n');

      readln(znak);

      znak:=upcase(znak);

-until znak='N';

+until znak<>'T';

+utarg:=utarg+do_zaplaty;


 writeln('Dziekujemy! Kupiles ',ilosc,' Prodkt(ow), Nalezy sie ',do_zaplaty:2:2,' zl');

-

-writeln('Chcesz powrocic do poczatku? t/n');

-readln(czy_poczatek);

-czy_poczatek:=upcase(czy_poczatek);

-until czy_poczatek='t';

+readln;

 end;

-

-

-IF wybor_poczatkowy='A' then

+end

+else IF wybor_poczatkowy='A' then

 begin

 clrscr;

 writeln('Wybrales Panel Administracyjny');

@@ -65,7 +63,7 @@


 write('Podaj haslo: ');

 writeln('Pamieta, masz tylko jedna probe!');

-read(haslo);

+readln(haslo);


 {Haslo to: sklep}

 IF haslo='sklep' then

@@ -82,10 +80,14 @@


 IF wybor_admin='D' then

 begin

- writeln(utarg);

+ writeln(utarg:2:2,' zl');

      readln;

 end;

 end;

+end

+else

+begin

+break;

+end;

 end;

-readln;

 end.

Powodem Twoich błędów jest bardzo niedbałe pisanie kodu. Rób wcięcia.

program sklep;


uses crt;


var

	wybor,znak,wybor_poczatkowy,wybor_admin:char;

	haslo:string;

	cena,ile:real;

	do_zaplaty,utarg:real;

	ilosc:integer;


begin

	utarg:=0;

	while true do

	begin

		clrscr;

		writeln('Wybierz tryb:');

		writeln('Klient ');

		writeln('Administracja sklepu ');

		writeln('Koniec ');

		readln(wybor_poczatkowy);

		wybor_poczatkowy:=upcase(wybor_poczatkowy);

		IF wybor_poczatkowy='K' then

		begin

			clrscr;

			{gdy uzyje zmiennej double - wyskakuje blad}

			gotoxy(15,1);

			writeln('Witaj w naszym sklepie! Chcesz cos kupic? t/n');

			writeln;

			readln(wybor);

			wybor:=upcase(wybor);


			IF wybor<>'T' then

			begin

				writeln('Zapraszamy ponownie!');

			end

			else

			begin

				ilosc:=0;

				do_zaplaty:=0;

				repeat

					ilosc:=ilosc+1;

					writeln('Wybrales kupowanie. podaj ilosc');

					readln(ile);

					writeln('Podaj cene artykulu');

					readln(cena);

					do_zaplaty:=do_zaplaty+(cena*ile);

					writeln('Czy chcesz kupowac dalej? t/n');

					readln(znak);

					znak:=upcase(znak);

				until znak<>'T';

				utarg:=utarg+do_zaplaty;


				writeln('Dziekujemy! Kupiles ',ilosc,' Prodkt(ow), Nalezy sie ',do_zaplaty:2:2,' zl');

				readln;

			end;

		end

		else IF wybor_poczatkowy='A' then

		begin

			clrscr;

			writeln('Wybrales Panel Administracyjny');



			write('Podaj haslo: ');

			writeln('Pamieta, masz tylko jedna probe!');

			readln(haslo);


			{Haslo to: sklep}

			IF haslo='sklep' then

			begin

				clrscr;

				writeln('Dostep przyznano.');

				writeln;


				writeln('Co chcesz zrobic?');

				writeln('Dzienny utarg ');

				writeln('Koniec ');

				readln(wybor_admin);

				wybor_admin:=upcase(wybor_admin);


				IF wybor_admin='D' then

				begin

					writeln(utarg:2:2,' zl');

					readln;

				end;

			end;

		end

		else

		begin

			break;

		end;

	end;

end.

O, i jeszcze jedno:

Co to znaczy? Dlaczego chciałbyś tam double wsadzać, skoro współrzędne są liczbami całkowitymi?

Doradzono mi, że do ceny trzeba użyć zmiennej double żeby wpisywać ceny typu 2,10 , a nie tylko liczby całkowite.

Co do opcji zakończenia programu po prostu o niej zapomniałem.

To dlaczego ten komentarz jest w okolicy gotoxy()? Zresztą ceny masz zmiennoprzecinkowe i działa Ci to, więc o jakim błędzie mówisz?

Tak w ogóle to wypadałoby podziękować, jeśli dostałeś 3 odpowiedzi, które - jak się domyślam - sporo Ci pomogły.

@down: Spoko, myślałem, że temat już zakończony.

Nie chcę żebyś uważał mnie za niewdzięcznika, ale chciałem podziękować dopiero jak wszystko będę miał jasne i nie chwalić dnia przed zachodem słońca :wink:

tak więc Dziekuję za poświęcony czas i pomoc.