Witam, mam problem z pętlą gdy odpalam ten program (jest to program sprawdzający poprawność numeru PESEL) po wpisaniu błędnego numeru, chciałbym żeby zapytał mnie czy wpisać go ponownie, ale to nie działa
screeny z kodu
http://scr.hu/0e0id/4bicz
http://scr.hu/0e0id/s55n0
screen z programu
http://scr.hu/0e0id/ww732
- Rejestracja:ponad 7 lat
- Ostatnio:ponad 7 lat
- Postów:4

Normalnie – otwórz plik źródłowy w zwykłym notatniku i przekopiuj tekst.
Poza tym, nie ma żadnego dobrego powodu aby dziś korzystać z tego pseudo-środowiska, więc zainstaluj Lazarusa i programuj jak człowiek.
- Rejestracja:ponad 7 lat
- Ostatnio:ponad 7 lat
- Postów:4
program pesel;
uses crt;
var a, b, c, d, e, f, g, h, i, j, k, l, m, n, p:integer;
var r:char;
begin
repeat
Writeln('Podawaj po kolei cyfry z numeru PESEL: ');
read(a);
read(b);
read(c);
read(d);
read(e);
read(f);
read(g);
read(h);
read(i);
read(j);
read(k);
clrscr;
l:=(1*a+3*b+7*c+9*d+1*e+3*f+7*g+9*h+1*i+3*j);
m:=l mod 10;
n:=10-m;
p:=n mod 10;
if p=k then
writeln('Numer PESEL prawidowy');
if p<>k then
writeln('Numer PESEL nie prawidlowy, czy chcesz wpisac go ponownie ? (T/N): ');
readln(r);
until r='n';
readln;
end.
Pętlę masz źle napisaną, bo bez względu na to czy użytkownik podał prawidłowy numer czy błędny, program i tak sprawdza oba warunki oraz oczekuje na podanie r
z klawiatury. W skrócie, zacznij od takiego kodu:
uses
Crt;
var
PESEL: String;
Correct: Boolean;
begin
repeat
Write('Podaj numer PESEL: ');
ReadLn(PESEL);
// tu sprawdź poprawność numeru i ustaw flagę "Correct"
until Correct or UpCase(ReadKey()) = 'N';
end.
- Rejestracja:ponad 14 lat
- Ostatnio:2 minuty
Sformatuj kod i wtedy szybko zobaczysz gdzie jest błąd.
Prawidłowo i czytelnie sformatowany kod pozwala na szybkie ogarnięcie algorytmu realizowanego przez kod.
@furious programming wskazał gdzie masz błędy
A Twój kod, niezależnie od wyniku walidacji PESEL'u, zawsze czeka na decyzję użytkownika.
Do tego bardzo dziwne wprowadzanie samego numeru, znak po znaku.
program pesel;
uses crt;
var
a, b, c, d, e, f, g, h, i, j, k, l, m, n, p: integer;
var
r: char;
begin
repeat
Writeln('Podawaj po kolei cyfry z numeru PESEL: ');
read(a);
read(b);
read(c);
read(d);
read(e);
read(f);
read(g);
read(h);
read(i);
read(j);
read(k);
clrscr;
l := (1 * a + 3 * b + 7 * c + 9 * d + 1 * e + 3 * f + 7 * g + 9 * h + 1 * i + 3 * j);
m := l mod 10;
n := 10 - m;
p := n mod 10;
if p = k then
Writeln('Numer PESEL prawidowy');
if p <> k then
Writeln('Numer PESEL nie prawidlowy, czy chcesz wpisac go ponownie ? (T/N): ');
readln(r);
until r = 'n';
readln;
end.
spróbuj tak:
begin
repeat
Writeln('Podawaj po kolei cyfry z numeru PESEL: ');
read(a);
read(b);
read(c);
read(d);
read(e);
read(f);
read(g);
read(h);
read(i);
read(j);
read(k);
clrscr;
l := (1 * a + 3 * b + 7 * c + 9 * d + 1 * e + 3 * f + 7 * g + 9 * h + 1 * i + 3 * j);
m := l mod 10;
n := 10 - m;
p := n mod 10;
if p = k then
begin
Writeln('Numer PESEL prawidowy');
break;
end
else
begin
Writeln('Numer PESEL nie prawidlowy, czy chcesz wpisac go ponownie ? (T/N): ');
readln(r);
end;
until uppercase(r) = 'N';
readln;
end.
BTW. kod pisany z palca