-
Notifications
You must be signed in to change notification settings - Fork 0
/
pascal.html
93 lines (73 loc) · 2.11 KB
/
pascal.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<h1>Validar RUT!<br>Pascal</h1>
<pre>
Program DigitoVerificador;
Uses Crt;
Var s, d: String;
elFactor, i, a, digito, dummy: Integer;
PROCEDURE Input(mensaje: String; VAR numero: String);
VAR s: String; ch: Char;
ready: Boolean;
BEGIN
s:='';
ready:=FALSE;
Write(mensaje);
REPEAT
ch:=ReadKey;
CASE ch OF
'0': IF s='' THEN BEGIN
s:=ch;
Write(ch);
END ELSE IF (s<>'0') THEN BEGIN
s:=Concat(s,ch);
Write(ch);
END;
'1'..'9': IF (s='0') THEN BEGIN
s:=ch;
Write(#8, s);
END ELSE BEGIN
s:=Concat(s,ch);
Write(ch);
END;
#8: IF s<>'' THEN BEGIN { backspace elimina el último }
s:=Copy(s,1,Length(s)-1); { caracter del string
(siempre }
Write(#8,' ',#8); { que éste no sea vacío) }
END;
#13: IF (s='') THEN Write(#7) ELSE ready:=TRUE;
{ ENTER: listo para transformar a }
{ número, pero no acepta uno nulo }
ELSE ; { no hacer caso a ninguna otra tecla }
END; {case}
UNTIL ready;
Writeln;
numero:=s; { retornar el valor ingresado }
END;
FUNCTION Factor: Integer;
BEGIN
if ((elFactor<2) or (elFactor>7)) THEN BEGIN
writeln('ERROR EN LA EJECUCION DEL PROGRAMA - MEJOR ABORTO.');
Halt(1);
END ELSE BEGIN
elFactor:=elFactor+1;
IF (elFactor=8) THEN elFactor:=2;
END;
Factor:=elFactor;
END;
BEGIN
Writeln('Para finalizar, ingrese el RUT 0');
Writeln;
REPEAT
elFactor:=7; a:=0;
Input('Ingrese el RUT sin guión ni dígito verificador :', s);
FOR i:=Length(s) DOWNTO 1 DO BEGIN
d:=Copy(s,i,1);
Val(d,digito,dummy);
a:=a+digito*Factor;
END;
a:=11-(a MOD 11); IF (a=11) THEN a:=0;
write('El RUT ingresado es: ', s, '. El dígito verificador es: ');
IF (a<>10) THEN writeln(a) ELSE writeln('K');
writeln;
UNTIL (s='0');
END.
</pre>