2023(e)ko martxoaren 26(a), igandea

10. astea | NAN baten letra kalkulatu



NAN batek zortzi zifra eta letra bat dauzka. Letra kalkulatzeko algoritmoa jarraian deskribatzen den hau da:




  1. NAN-aren zenbaki zati 23 egiten da hondarra eskuratzeko
  2. Zatiketa osoaren hondarra taula honetara ekarriz letra lortzen da: 




























































HONDARRA  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22
LETRA T R W A G M Y F P D X B N J Z S Q V H L C K E



Adibidez, NAN-aren zenbakia 12345678 bada, zati 23 eginez zatiketa osoa egin ondoren ateratzen hondarra 14 da, horregatik dagokion letra Z da.



Ariketaren balizko emaitza ikusi, non karaktereen array konstante bat erabiltzen den:



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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
{-------------------------------------------------------------
 NAN baten zifrak teklatuaren bitartez jaso kate batean eta
 programak letra kalkulatu ondoren, NAN osoa pantailaratuko du
 -------------------------------------------------------------}
 
program NANrenLetra ;
 
const
   iZATITZAILEA = 23 ;
    
type
   tsKate9 = string[9] ;
   tacNANarenLetra = array[0..iZATITZAILEA-1] of char ;
 
const
   acNANarenLetra: tacNANarenLetra = ( 'T',    (*  0 *)
                                        'R',    (*  1 *)
                                        'W',    (*  2 *)
                                        'A',    (*  3 *)
                                        'G',    (*  4 *)
                                        'M',    (*  5 *)
                                        'Y',    (*  6 *)
                                        'F',    (*  7 *)
                                        'P',    (*  8 *)
                                        'D',    (*  9 *)
                                        'X',    (* 10 *)
                                        'B',    (* 11 *)
                                        'H',    (* 12 *)
                                        'J',    (* 13 *)
                                        'Z',    (* 14 *)
                                        'S',    (* 15 *)
                                        'Q',    (* 16 *)
                                        'V',    (* 17 *)
                                        'H',    (* 18 *)
                                        'L',    (* 19 *)
                                        'C',    (* 20 *)
                                        'K',    (* 21 *)
                                        'E') ;  (* 22 *)
 
 
function fnboDenakZifrak(sZifrak: tsKate9): boolean ;
var
   boOndoDago: boolean ;
   k: integer ;
begin
   if length(sZifrak)=8 then
   begin
      boOndoDago := TRUE ;
      for k:=1 to 8 do
      begin
         if (sZifrak[k] < '0') or (sZifrak[k] > '9') then
         begin
            boOndoDago := FALSE ;
            writeln('Datuaren ':13, k, '. karakterea ez da zifra bat') ;
         end ;
   end ;
   end
   else
   begin
      boOndoDago := FALSE ;
      writeln('Zortzi zifra izan behar dira':32) ;
   end  ;
 
   fnboDenakZifrak := boOndoDago ;
end ;
 
 
function fncLetraLortu(sZifrak: tsKate9): char ;
var
   liNANzenbakia: longint ;
       iHondarra: integer ;
begin
   val(sZifrak, liNANzenbakia) ;
   //write('liNAN = ':12, liNANzenbakia) ;
    
   iHondarra := liNANzenbakia mod iZATITZAILEA ;
   //write('iHond. = ':13, iHondarra:2) ;
   
   fncLetraLortu := acNANarenLetra[iHondarra] ;
end ;
 
(* -------------------------------------------------- *)
 
var
   sZifrak: tsKate9 ;
     sNANa: tsKate9 ;
    cLetra: char ;
begin
   writeln ;
   repeat
      writeln ;
      write('NANren zortzi zifrak eman: ':31) ;
      readln(sZifrak) ;
   until fnboDenakZifrak(sZifrak) ;
 
   //write('sZifrak = |':14, sZifrak, '|') ;
    
   cLetra := fncLetraLortu(sZifrak) ;
 
   sNANa := sZifrak + cLetra ;
 
   writeln('NAN = ':10, sNANa) ;
 
   writeln ;
   write('ENTER sakatu exekuzioa amaitzeko... ') ;
   readln ;
end.

iruzkinik ez:

Argitaratu iruzkina