Wątek przeniesiony 2017-10-30 18:36 z Delphi i Pascal przez furious programming.

Problem z pętlą w programie sprawdzającym poprawność numeru pesel

0

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

0

Pętla działa w ten sposób że ponawia program zawsze, a ja chciałbym żeby pytał się o to (jeżeli pesel był zły) i dopiero po odpowiedzi uruchamiał się od początku.

0

@Juniorex: żarty sobie robisz? Wklej kod do posta.

0

No właśnie nie wiem jak to skopiować z FreePascala

0

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.

0
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.

1

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.
1

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1