Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: Pascal Program PESEL problem

13.05.2012 13:20
1
zanonimizowany812345
4
Legionista

Pascal Program PESEL problem

Napisałem program który wyciąga informacje z NR PESEL i mam z nim problem po dopisaniu procedury sprawdzanie...
Nie mam pojęcia co z nim nie tak. Proszę o pomoc w jego poprawnieniu. Z góry dzięki za pomoc ;)

kod programu:

program PESEL;
uses crt;

procedure sprawdzanie;
var a,b,c,x,d,e,f,g,h,i,j,k,l,m,n,o:integer;
tab:array[1..11] of char;
begin
writeln('PROGRAM: Turbo czyt PESEL version 0.01c');
writeln('[--------------------------------------------------------------------]');
writeln('[ Podaj pesel: ]');
writeln('[ <<<<a nastepnie wcisnij ENTER>>>> ]');
writeln('[kolejno dla kazdej z infoemacji>1.data,2.plec,3.nr ident,4.l.kontrolna]');
writeln('[ Otrzymane dane personalne: ]');
writeln('[--------------------------------------------------------------------]');
readln(n);
for o:=1 to n do
begin
for l:=1 to 11 do
begin
read(tab[l]);
end;
a:=ord(tab[1]);
b:=ord(tab[2]);
c:=ord(tab[3]);
d:=ord(tab[4]);
e:=ord(tab[5]);
f:=ord(tab[6]);
g:=ord(tab[7]);
h:=ord(tab[8]);
i:=ord(tab[9]);
j:=ord(tab[10]);
k:=ord(tab[11]);
b:=b*3;
c:=c*7;
d:=d*9;
f:=f*3;
g:=g*7;
h:=h*9;
j:=j*3;
m:=a+b+c+d+e+f+g+h+i+j+k;
x:=m mod 10;
if x=0 then writeln('Wprowadzony NR PESEL jest poprawny')
else writeln('Wprowadzony NR PESEL jest nie poprawny');
end;

procedure rozpoznawanie1;
var pesel1:string[11];
var z,x:char;
begin
readln(pesel1);
writeln('1. rok urodzenia: 19',pesel1[1],pesel1[2]);
z:=pesel1[3];
x:=pesel1[4];
if (z='0')and(x='1')then writeln('miesiac: Styczen');
if (z='0')and(x='2')then writeln('miesiac: Luty');
if (z='0')and(x='3')then writeln('miesiac: Marzec');
if (z='0')and(x='4')then writeln('miesiac: Kwiecien');
if (z='0')and(x='5')then writeln('miesiac: Maj');
if (z='0')and(x='6')then writeln('miesiac: Czerwiec');
if (z='0')and(x='7')then writeln('miesiac: Lipiec');
if (z='0')and(x='8')then writeln('miesiac: Sierpien');
if (z='0')and(x='9')then writeln('miesiac: Wrzesien');
if (z='1')and(x='0')then writeln('miesiac: Pazdziernik');
if (z='1')and(x='1')then writeln('miesiac: Listopad');
if (z='1')and(x='2')then writeln('miesiac: Grudzien');
writeln('dzien urodzenia: ', pesel1[5],pesel1[6]);
readln;
end;
procedure plec;
var pesel1:string[11];
var i:char;
begin
readln(pesel1);
i:=pesel1[10];
if (i='5')or(i='3')or(i='1')or(i='9')then writeln('2.Plec meska')
else writeln('2.Plec zenska');
end;
procedure numeridentyfikacji;
var pesel1:string[11];
s,z,y:char;
begin
readln(pesel1);
s:=(pesel1[7]);
z:=(pesel1[8]);
y:=(pesel1[9]);
writeln('3.Numer identyfikacji : ');
writeln(s,z,y);
end;
procedure kontrolna;
var pesel1:string[11];
var i:char;
begin
readln(pesel1);
i:=(pesel1[11]);
writeln('4.Liczba kontrolna wynosi' ,(i));
end;
begin
sprawdzanie;
rozpoznawanie1;
plec;
numeridentyfikacji;
kontrolna;
repeat until keypressed;
end.

13.05.2012 13:34
Raistand
2
odpowiedz
Raistand
178
Legend

A co z osobami urodzonymi w roku 2000 i później?

13.05.2012 13:52
3
odpowiedz
zanonimizowany812345
4
Legionista

To także wezmę pod uwagę. Ale na razie proszę o pomoc w tej wersji...

13.05.2012 14:46
Mipari
4
odpowiedz
Mipari
55
Senator

Napisz co jest dokładnie nie tak, bo mało kto trzyma jeszcze kompilator pascal'a na dysku

13.05.2012 14:51
Promyk
5
odpowiedz
Promyk
149
nikczemny

7 brakuje przy typowaniu płci męskiej i zamiast 5 porównań - lepsze będzie chyba 1 dzielenie modulo przez 2.

I jak wyżej - co jest nie tak? Pascala nie dotykałem już lata.

13.05.2012 14:56
Raistand
6
odpowiedz
Raistand
178
Legend

no własnie jakiś kompilator ściągnałem ale mi krzyczy o błedach na dysku F: więc nie chce mi się bawić. ;)
Rozumiem, że coś ze sprawdzanie ci nie działa?

Te pętle
"for o:=1 to n do
begin
for l:=1 to 11 do
(...)"
to co mają robić?

13.05.2012 15:23
7
odpowiedz
DEXiu
151
Senator

Przecież to się nawet nie skompiluje :/ Nie widzę zamknięcia ciała pętli for o:=1 to n do begin ... (i do czego ona miałaby niby służyć?). Poza tym tego typu instrukcje: a:=ord(tab[1]); i później działania na liczbach a, b, c, ... też zdaje się nie zadziałają (funkcja ord skonwertuje cyfry do ich kodów ASCII, a nie do wartości liczbowych tych cyfr. Poprawnie powinno być a:=ord(tab[1])-ord('0'); (i tak samo dla pozostałych).

13.05.2012 18:48
8
odpowiedz
zanonimizowany812345
4
Legionista

Gdy próbuje skompilowac program wyskakują mi następujące błędy:

44 / 11 pesel2.pas
Fatal: Syntax error, ; expected but identifier ROZPOZNAWANIE1 found

44 / 11 pesel2.pas
Error: Illegal expression
44 / 11 pesel2.pas
Error: Illegal expression

14.05.2012 09:09
9
odpowiedz
zanonimizowany812345
4
Legionista

up

14.05.2012 09:13
10
odpowiedz
DEXiu
151
Senator

Nic ci te błędy nie mówią? Bawiąc się w programowanie (czy to z własnej woli, czy jako zadanie domowe) warto umieć czytać i interpretować komunikaty, które dostajemy w czasie kompilacji i/lub wykonania.

14.05.2012 09:22
Raistand
11
odpowiedz
Raistand
178
Legend

Zamiast upować przeczytaj co napisał DEXiu

Przecież to się nawet nie skompiluje :/ Nie widzę zamknięcia ciała pętli for o:=1 to n do begin ...

"else writeln('Wprowadzony NR PESEL jest nie poprawny');
end;
end;

procedure rozpoznawanie1;
var pesel1:string[11];
var z,x:char;"

Teraz się skompiluje.
Przynajmniej mi się skompilowało.

20.05.2012 14:41
😐
12
odpowiedz
zanonimizowany812345
4
Legionista

Program kompiluje się ale nie działa...
Proszę o pomoc ;/
program PESEL;
uses crt;
procedure sprawdzanie;
var a,b,c,x,d,e,f,g,h,i,j,k,l,m,n,o:integer;
tab:array[1..11] of char;
begin
writeln('PROGRAM: Turbo czyt PESEL version 0.01c');
writeln('[--------------------------------------------------------------------]');
writeln('[ Podaj pesel: ]');
writeln('[ <<<<a nastepnie wcisnij ENTER>>>> ]');
writeln('[kolejno dla kazdej z infoemacji>1.data,2.plec,3.nr ident,4.l.kontrolna]');
writeln('[ Otrzymane dane personalne: ]');
writeln('[--------------------------------------------------------------------]');
readln(n);
for o:=1 to n do

for l:=1 to 11 do
begin
read(tab[l]);
end;
a:=ord(tab[l])-ord('0');
b:=ord(tab[l])-ord('0');
c:=ord(tab[l])-ord('0');
d:=ord(tab[l])-ord('0');
e:=ord(tab[l])-ord('0');
f:=ord(tab[l])-ord('0');
g:=ord(tab[l])-ord('0');
h:=ord(tab[l])-ord('0');
i:=ord(tab[l])-ord('0');
j:=ord(tab[l])-ord('0');
k:=ord(tab[l])-ord('0');
b:=b*3;
c:=c*7;
d:=d*9;
f:=f*3;
g:=g*7;
h:=h*9;
j:=j*3;
m:=a+b+c+d+e+f+g+h+i+j+k;
x:=m mod 10;
if x=0 then writeln('Wprowadzony NR PESEL jest poprawny')
else writeln('Wprowadzony NR PESEL jest nie poprawny');
end;

procedure rozpoznawanie1; ‹procedura wyciąga z numeru PESEL informacje na temat daty urodzenia›
var pesel1:string[11];
var z,x:char;
begin

writeln('PROGRAM: Turbo czyt PESEL version 0.01c');
writeln('[--------------------------------------------------------------------]');
writeln('[ <<<< wcisnij ENTER>>>> ]');
writeln('[kolejno dla kazdej z infoemacji>1.data,2.plec,3.nr ident,4.l.kontrolna]');
writeln('[ Otrzymane dane personalne: ]');
writeln('[--------------------------------------------------------------------]');
readln(pesel1);
writeln('1. rok urodzenia: 19',(pesel1[1]),(pesel1[2]));
z:=pesel1[3];
x:=pesel1[4];
if (z='0')and(x='1') then writeln('miesiac: Styczen');
if (z='0')and(x='2') then writeln('miesiac: Luty');
if (z='0')and(x='3')then writeln('miesiac: Marzec');
if (z='0')and(x='4')then writeln('miesiac: Kwiecien');
if (z='0')and(x='5')then writeln('miesiac: Maj');
if (z='0')and(x='6')then writeln('miesiac: Czerwiec');
if (z='0')and(x='7')then writeln('miesiac: Lipiec');
if (z='0')and(x='8')then writeln('miesiac: Sierpien');
if (z='0')and(x='9')then writeln('miesiac: Wrzesien');
if (z='1')and(x='0')then writeln('miesiac: Pazdziernik');
if (z='1')and(x='1')then writeln('miesiac: Listopad');
if (z='1')and(x='2')then writeln('miesiac: Grudzien');
writeln('dzien urodzenia: ', pesel1[5],pesel1[6]);
readln;
end;
procedure plec;
var pesel1:string[11];
var i:char;
begin
readln(pesel1);
i:=pesel1[10];
if (i='5')or(i='3')or(i='1')or(i='9')then writeln('2.Plec meska')
else writeln('2.Plec zenska');
end;
procedure numeridentyfikacji;
var pesel1:string[11];
s,z,y:char;
begin
readln(pesel1);
s:=(pesel1[7]);
z:=(pesel1[8]);
y:=(pesel1[9]);
writeln('3.Numer identyfikacji : ');
writeln(s,z,y);
end;
begin
sprawdzanie;
rozpoznawanie1;
plec;
numeridentyfikacji;
readln();
repeat until keypressed;
end.

20.05.2012 15:02
😐
13
odpowiedz
zanonimizowany812345
4
Legionista

up plz

Forum: Pascal Program PESEL problem