Személyi szám ffi vagy nő? Turbo pascalban
csak az a baj nem tudom, h kell 11 számjegyet bekérni
program identity;
uses crt;
var a: array [1..11] of integer;
b: integer;
begin
begin
clrscr;
writeln('Szemelyi szam');
writeln;
writeln('Adja meg a programnak a szemelyi szamot majd megadja a program, hogy ferfi vagy no a tulajdonosa.');
writeln;
write('Kerem a szemelyi szamot:'); read(a);
case a of
1: write('A szemelyi szam tulajdonosa ferfi');
2: write('A szemelyi szam tulajdonosa no');
3: write('A szemelyi szam tulajdonosa ferfi');
4: write('A szemelyi szam tulajdonosa no');
5: write('A szemelyi szam tulajdonosa ferfi');
6: write('A szemelyi szam tulajdonosa no');
7: write('A szemelyi szam tulajdonosa ferfi');
8: write('A szemelyi szam tulajdonosa no');
end;
readln;
end;
readln;
eddig jutottam
end.
var szemelyiszam:string;
...
readln(szemelyiszam);
...
case szemelyiszam[1] of {az első karakterét vizsgáljuk a string-nek}
...
Tessék, az alábbi kódot Free Pascal alatt fordítva kiírja neked, hogy Férfi-e, vagy Nő az illető a személyi szám alapján. Sőt, mielőtt ezt megtenné, leellenőrzi, hogy helyes-e a megadott személyi szám.
program szemelyiszam;
{$mode objfpc}{$M+}
uses Sysutils, DateUtils;
type
str11=string[11];
function isFerfi(c:char):boolean;
begin
case c of
'1','3','5','7' : Result:=True;
else Result:=False;
end;
end;
function isKorrekt(szam :str11):boolean;
var
year: word;
day: word;
month: word;
x,i: byte;
tmp: string;
begin
tmp:='';
x:=0;
if StrToInt(szam[1]) in [1..8] then
begin
tmp:=copy(szam,2,2);
year:=StrToInt(tmp);
tmp:='';
tmp:=copy(szam,4,2);
month:=StrToInt(tmp);
tmp:='';
tmp:=copy(szam,6,2);
day:=StrToInt(tmp);
tmp:='';
if StrToInt(szam[1]) in [1,2,5,6] then Year:=Year+1900;
if StrToInt(szam[1]) in [3,4] then Year:=Year+2000; //ebben az esetben az 1800-as években is születhetett de azt moost nem vesszük figyelembe!
if StrToInt(szam[1]) in [7,8] then Year:=Year+1800;
if isValidDate(Year,Month,Day) then
begin
if Year<1997 then
begin
for i:=1 to 10 do
x:=x+(StrToInt(szam[i])*i);
x:=x mod 11;
end
else
begin
for i:=1 to 10 do
x:=x+(StrToInt(szam[i])*(11-i));
x:=x mod 11;
end;
if x=StrToInt(szam[11]) then Result:=True
else Result:=False;
end
else Result:=False;
end
else Result:=False;
end;
var
szemszam: str11;
begin
repeat
writeln('---');
write('Kérem a személyi számot: ');
readln(szemszam);
if not isKorrekt(szemszam) then writeln('Hibás személyi számot adott meg!');
until isKorrekt(szemszam);
if isFerfi(szemszam[1]) then writeln('Az illető Férfi.')
else writeln('Az illető Nő.');
end.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!