Aplicações da Aritmética Modular
Paulo Jorge Pais Lourenço
ii
Aplicações da Aritmética Modular
Paulo Jorge Pais Lourenço
Relatório para a obtenção do Grau de Mestre em Ensino da Matemática
no 3º ciclo do Ensino Básico e no Ensino Secundário
iii
iv
Júri
Presidente: Professora Doutora Helena Maria Mamede Albuquerque
Orientadora: Professora Doutora Sandra Filipa Morais de Figueiredo Marques Pinto
Vogal: Professora Doutora Joana Maria da Silva Teles Correia
Julho de 2011
v
vi
Resumo
A aritmética modular é uma importante ferramenta da Teoria dos
Números. Pode ser encontrada em inúmeras aplicações no nosso dia-a-dia,
nomeadamente, nos sistemas de identificação utilizados nos números de
identificação pessoais e nos códigos de barras.
O objectivo primordial deste trabalho consiste em estudar alguns
sistemas de identificação modulares e apresentar, em contexto escolar, a
aritmética modular recorrendo a estes sistemas e à “aritmética do relógio”.
Para tal, foram desenvolvidas actividades lúdicas e interactivas com
aplicação directa no ensino básico e secundário.
vii
viii
Agradecimentos
Pretendo aqui manifestar o meu agradecimento a todos os que contribuíram para a
concretização deste trabalho, nomeadamente:
À Professora Doutora Sandra Filipa Morais de Figueiredo Marques Pinto, pelos desafios e
oportunidades de aprendizagem que me proporcionou, pelo empenho na discussão e revisão deste
trabalho e pela sua incansável disponibilidade.
Aos meus colegas e funcionários que desempenham funções no Agrupamento de Escolas de
Torre de Moncorvo, por todo o apoio e cooperação na divulgação e execução das actividades
aplicadas em contexto escolar.
Aos meus alunos do ano lectivo 2010/2011, nomeadamente do Agrupamento de Escolas de
Torre de Moncorvo e da Escola Superior de Tecnologia e Gestão do Instituto Politécnico da
Guarda, por toda a colaboração e pelas críticas e sugestões que permitiram aperfeiçoar as
actividades aplicadas e disponibilizadas na Internet.
Aos meus familiares, por tudo o que me ensinaram, pelos valores que me transmitiram e
por todo o apoio, incentivo e ajuda. Em particular, ao meu irmão, que sempre se mostrou
disponível e me auxiliou no esclarecimento de dúvidas que surgiram na implementação e no
aperfeiçoamento dos algoritmos nas diversas linguagens de programação utilizadas. À Célia por
me ter aconselhado a frequentar este Mestrado, pelas palavras infindáveis de motivação e
encorajamento, por todo o apoio incondicional e incessante, pela convicção e confiança, desde o
início, nas minhas capacidades e no meu valor e à Íris que na fase final da elaboração do trabalho
se revelou numa forte fonte de inspiração e me deu motivos para não desistir.
ix
x
Conteúdo
Introdução ........................................................................................................................ 3
Capítulo I – Pré-requisitos ............................................................................................... 4
Capítulo II – Números de Identificação ............................................................................ 6
§2.1 Noção de Números de Identificação ....................................................................... 6
§2.2 Tipos de Números de Identificação........................................................................ 6
§2.3 Tipos de erros mais comuns .................................................................................. 8
§2.4 Símbolos de Controlo ...........................................................................................10
Capítulo III – Sistemas de Identificação Modulares ........................................................ 12
§3.1 Análise geral dos Sistemas Modulares .................................................................. 12
§3.2 Limitações dos Sistemas Modulares...................................................................... 15
Capítulo IV – Exemplos de Sistemas de Identificação Modulares ................................... 17
§4.1 O Sistema EAN .................................................................................................... 17
§4.2 O Sistema ISBN ................................................................................................... 22
§4.3 Sistema utilizado nos números de série das notas de euro .................................... 28
§4.4 Sistema utilizado no NIB ..................................................................................... 31
Capítulo V – Elaboração de sítios na Internet ................................................................ 34
§5.1 Sistemas de Identificação ..................................................................................... 35
§5.2 Aritmética do Relógio .......................................................................................... 39
Capítulo VI – Actividades realizadas na Escola .............................................................. 44
§6.1 Aplicação em contexto de sala de aula .................................................................44
§6.2 Conferência: “Aplicações da Aritmética Modular” ............................................... 46
Conclusão ........................................................................................................................ 48
Bibliografia ...................................................................................................................... 50
Tecnografia ..................................................................................................................... 51
Anexos ............................................................................................................................ 53
Introdução
O assunto, além de ser intrinsecamente interessante,
tem a virtude de mesclar conceitos e técnicas importantes de Álgebra
com aplicações imediatas na vida real.
Abramo Hefez e Maria Villela
A aritmética modular é uma das ferramentas mais importantes ao serviço da álgebra e da
teoria dos números. Diariamente, todos nós, recorremos a esta aritmética de forma instintiva.
Um bom exemplo disso são as contas que efectuamos quando olhamos para o relógio analógico do
nosso pulso e averiguamos se ainda chegamos a tempo a um compromisso agendado ou calculamos as horas que decorreram desde uma determinada tarefa realizada. Existem muito mais aplicações, mas esta é sem dúvida uma das mais usadas e por nós utilizada desde muito cedo. Um
outro exemplo de aplicação surge nos números de identificação, cujo estudo ocupará os quatro
primeiros capítulos deste trabalho.
O presente documento está dividido em seis capítulos. O primeiro capítulo servirá para introduzir algumas definições e propriedades essenciais para a utilização da aritmética modular,
indispensáveis ao estudo dos sistemas de identificação que se desenrolará ao longo deste texto.
No segundo capítulo serão apresentados alguns exemplos e algumas definições fundamentais relativas aos números de identificação e sistemas associados. Serão também analisados os tipos de
erros mais comuns na transmissão deste tipo de números e a importância da utilização dos símbolos de controlo na detecção da ocorrência de erros. No terceiro capítulo iremos cingir-nos, essencialmente, ao estudo dos sistemas de identificação modulares que representam a maior fatia
dos sistemas de identificação. Neste capítulo serão discutidas as condições que garantem uma
melhor eficácia na detecção de erros por parte deste tipo de sistemas. No quarto capítulo deste
trabalho, apresentaremos alguns exemplos de sistemas de identificação modulares actualmente
em utilização. O quinto capítulo faz referência à implementação de um projecto de um sítio na
Internet, abordando esta temática, e que possibilita uma maior proximidade e acessibilidade a
todos os interessados no assunto. No sexto e último capítulo serão descritas as actividades desenvolvidas em contexto escolar e será efectuada uma reflexão sobre a sua aplicação. Será disponibilizada, também em anexo, toda a documentação inerente à construção dos sítios na Internet e às
actividades implementadas na escola. Espera-se que, com este trabalho, se consiga estimular a
curiosidade do leitor para este assunto e incutir uma maior sensibilidade perante as aplicações da
aritmética modular, que surgem inúmeras vezes no nosso quotidiano e se consiga averiguar a
receptividade da comunidade escolar a esta temática, bem como aperfeiçoar as estratégias de
divulgação e apresentação da aritmética modular no ensino básico e secundário.
3
Capítulo I
Capítulo I – Pré-requisitos
Uma verdade matemática não é simples
nem complicada por si mesma. É verdade.
Emile Lemoine
Apresentamos, de seguida, alguns conceitos e axiomas relacionados directamente com a
aritmética modular. Na elaboração destas compilações recorremos a [1], [13], [15] e [16], pelo que
na presença de dificuldades aconselhamos a sua consulta.
Definição 1.1 Sejam a e b dois elementos em  com a ¹ 0 , diz-se que a divide b se existir um
elemento c Î  tal que b = a ⋅ c .
Notação 1.2 Sejam dois elementos a, b Î  com a ¹ 0 , tem-se:
a) a | b lê-se “a divide b”;
b) a |b lê-se “a não divide b”;
c) b = a lê-se “b é múltiplo de a”;
d) b ¹ a lê-se “b não é múltiplo de a”.
Observação 1.3 Quando se escreve a | b pressupõe-se que a, b Î  com a ¹ 0 .
Propriedades 1.4 Quaisquer que sejam os inteiros não nulos a, b e c, tem-se:
a) a | 0 ;
b) a | a e -a | a ;
c) 1 | a ;
d) a | b é equivalente a -a | b e é equivalente a a | -b ;
e) Se a | b então a | bc , "c Î  ;
f)
Se a | b e b | c então a | c ;
g) a | b é equivalente a ma | mb , "m Î  \ {0} ;
h) Se a | b e b | a então a = b , (a = b ) ;
i)
Se a | b e b ¹ 0 então a £ b ;
j)
Se a | 1  a | 1, (a = 1) .
Observação 1.5 Um número inteiro não nulo, a, tem um número finito de divisores. Tem pelo
menos os divisores: 1 e  a .
4
Capítulo I
Teorema 1.6 Sejam dois elementos a, b Î  com a ¹ 0 . Existem inteiros q e r (q, r Î ) com
0 £ r < a , tais que b = qa + r .
Observação 1.7 Os inteiros q e r, designados, respectivamente, por quociente e resto da divi-
são de b por a, são unicamente determinados por a e b.
Definição 1.8 Seja m um número natural. Dois inteiros a e b dizem-se congruentes módulo m
se tiverem o mesmo resto na divisão por m. E escreve-se a º b (mod m ) .
Teorema 1.9 Para a, b Î  e m Î  , tem-se a º b (mod m ) se e só se m | (a - b ) .
Observação 1.10 Nas condições do Teorema anterior, para b = 0 tem-se a º 0 (mod m ) se e
só se m | a .
Observação 1.11 Para m Î  e a Î  , os números congruentes com a módulo m são os intei-
ros da forma a + km, k Î  .
Exemplo 1.12 a) Tem-se a º 0 (mod 2) se e só se a for um número par.
b) Tem-se a º 1 (mod 2) se e só se a for um número ímpar.
Propriedades 1.13 Seja m Î  . Quaisquer que sejam os inteiros a, b, c e d, tem-se:
a) a º a (mod m ) ;
b) Se a º b (mod m ) então b º a (mod m ) ;
c) Se a º b (mod m ) e b º c (mod m ) então a º c (mod m ) ;
d) Se a º b (mod m ) e c º d (mod m ) então a + c º b + d (mod m ) ;
e) Se a º b (mod m ) e c º d (mod m ) então ac º bd (mod m ) ;
f)
Se a º b (mod m ) e d | m então a º b (mod d ) .
Observação 1.14 Para m Î  e a Î  , a (mod m ) representa o resto da divisão de a por m.
Portanto, existe r Î  m tal que r = a (mod m ) .
Propriedades 1.15 Sejam a, b Î  e m Î  . Tem-se:
a)
b)
c)
(a + b ) (mod m ) = (a (mod m ) + b (mod m)) (mod m) ;
(a - b ) (mod m ) = (a (mod m) - b (mod m )) (mod m) ;
(a ⋅ b ) (mod m) = (a (mod m) ⋅ b (mod m )) (mod m) .
5
§2.1 Noção de Números de Identificação
Capítulo II
Capítulo II – Números de Identificação
It is important to ensure that identification numbers
are transmitted correctly and, in certain cases, not forged.
Joseph Kirtland
§2.1 Noção de Números de Identificação
No nosso dia-a-dia, lidamos constantemente com números de identificação. Estes são números que nos facilitam a vida, números que nos permitem identificar rapidamente um artigo,
uma propriedade, um livro, uma pessoa ou um animal. Actualmente estão presentes em quase
tudo. Se, por exemplo, investigarmos minuciosamente um automóvel, um electrodoméstico ou um
computador, chegamos à conclusão que todas ou quase todas as suas componentes têm um número de série, identificando a empresa produtora e o artigo em questão. Estes números permitem
agilizar a identificação das referidas componentes possibilitando maior eficácia em encomendas e
transacções comerciais. No entanto, essa eficiência dependerá da estrutura do número e da forma
como foi implementado.
§2.2 Tipos de Números de Identificação
Os números de identificação surgem, normalmente, na forma de uma cadeia de caracteres
(algarismos, letras e símbolos), podendo aparecer na forma numérica ou na forma alfanumérica,
constituindo assim dois grandes grupos de números de identificação. Um Número de Identificação Numérico pode surgir na forma de um número positivo ou de uma cadeia de algarismos se-
parados por espaços ou hífenes.
Exemplo 2.1 De seguida apresentam-se exemplos de números de identificação numéricos.
Figura 2.1: Exemplo de número de Bilhete de Identidade.
Figura 2.2: Exemplo de Número de Identificação Fiscal (NIF).
Figura 2.3: Exemplo de Carta de Condução.
Figura 2.4: Exemplo de UPC de um DVD.

6
§2.2 Tipos de Números de Identificação
Capítulo II
Um Número de Identificação Alfanumérico é constituído por uma cadeia de algarismos, letras e/ou outros símbolos.
Exemplo 2.2 Exemplos de números de identificação alfanuméricos.
Figura 2.5: Exemplo de ISBN-10 e de número de série de uma Nota de Euro.

Em todos os números de identificação é importante definir duas características fundamentais, o comprimento (ou o número total de caracteres) e a posição que ocupa cada um desses
caracteres. Utilizaremos a letra n para indicar o comprimento de um número de identificação e
podemos representar um número de comprimento n do seguinte modo, a1a2a 3 ...an , onde o índice
indica a ordem em que o caracter surge na cadeia.
Exemplo 2.3

O número de Bilhete de Identidade (BI) é um número de identificação constituído por nove
algarismos ( n = 9 ) que pode ser representado por a1a2a 3a 4a 5a 6a 7a 8a 9 . Para o caso da Figura
2.1, tem-se:
a1 = 1 ,
a5 = 7 ,
a2 = 1 ,
a6 = 9 ,
a3 = 5 ,
a7 = 3 ,
a4 = 0 ,
a8 = 8 ,
a9 = 6 .
Nota:
Sempre que um número de bilhete de identidade apresente menos de nove algarismos,
acrescentam-se os zeros necessários à esquerda do número até totalizar os nove algarismos.

O Número de Identificação Fiscal (NIF) é sempre um número composto por nove algarismos ( n = 9 ). Sendo portanto representável por a1a2a 3a 4a 5a 6a 7a 8a 9 . No caso particular da
Figura 2.2 tem-se:
a1 = 3 ,
a2 = 2 ,
a6 = 8 ,

a3 = 2 ,
a7 = 3 ,
a4 = 6 ,
a8 = 5 ,
a5 = 8 ,
a9 = 3 .
Os números de identificação do sistema International Standart Book Number (ISBN) de catalogação de livros têm dez ou treze caracteres cuja designação é ISBN-10 e ISBN-13, respectivamente. Os números deste sistema sofreram alterações em Janeiro de 2007, passando
de dez para treze caracteres. Destaquemos dois exemplos:
Exemplo de número no sistema ISBN-10.
ISBN-972-0-42074-X
a1 = 9 ,
a2 = 7 ,
a3 = 2 ,
a4 = 0 ,
a5 = 4 ,
a6 = 2 ,
a7 = 0 ,
a8 = 7 ,
a9 = 4 ,
a10 = X .
7
§2.2 Tipos de Números de Identificação
Capítulo II
Exemplo de número no sistema ISBN-13.
ISBN-978-972-0-42061-9
a1 = 9 ,
a2 = 7 ,
a8 = 4 ,
a3 = 8 ,
a9 = 2 ,
a4 = 9 ,
a10 = 0 ,
a5 = 7 ,
a11 = 6 ,
a6 = 2 ,
a12 = 1 ,
a7 = 0 ,
a13 = 9 .

§2.3 Tipos de erros mais comuns
Os números de identificação permitem maior eficácia e agilidade nos registos e transacções,
sendo actualmente utilizados em inúmeras situações. Como tal, estes números circulam por vários “canais” até desempenharem o seu objectivo. Hipoteticamente, um número de identificação
pode ser inicialmente comunicado via telefónica, sendo depois registado num papel com a intenção de ser posteriormente digitado e enviado via Internet. Ao longo deste processo, podem ocorrer erros.
A maioria dos erros que sucedem são cometidos pelo homem, podendo também ocorrer erros de leitura por parte de alguns equipamentos de leitura óptica. Devido à natureza dos erros,
foram feitos diversos estudos empíricos, destacando-se um elaborado nos finais da década de sessenta ([8] e [12]), que incide sobre os erros mais habituais.
Frequentemente é utilizada a seguinte terminologia para os diversos tipos de erros ocorridos na transmissão de um número de identificação.
Definição 2.4 Consideremos a1a2a 3 ...an um número de identificação de comprimento n.

Um erro singular acontece quando um dos caracteres do número é alterado para um diferente valor (...ai ...  ...ai¢... );

Referimo-nos a um erro de transposição de algarismos adjacentes quando existe uma troca
entre dois algarismos adjacentes ( ...aia j ...  ...a jai ... );

Designamos por erro de transposição intercalada, quando ocorre a troca entre dois algarismos que têm exactamente um a intercalá-los (...aiaka j ...  ...a jakai ... );

Os erros gémeos sucedem quando dois caracteres consecutivos iguais são mudados para um
outro par de caracteres iguais ( ...aa...  ...a ¢a ¢... );

Designam-se por erros gémeos intercalados quando sucede uma modificação de dois caracteres iguais, separados por um terceiro caracter, por um outro par de caracteres iguais
( ...aaka...  ...a ¢aka ¢... );

Existem também os erros gémeos generalizados que consistem na alteração de dois caracteres iguais por um outro par de caracteres iguais, independentemente da posição que ocupam ( ...a...a...  ...a ¢...a ¢... ).
Os restantes erros abrangidos pelas outras categorias podem ser agregados todos na classe dos
erros aleatórios.
8
§2.3 Tipos de erros mais comuns
Capítulo II
Observação 2.5 O estudo referido anteriormente destaca, ainda, um importante grupo de er-
ros designados por erros fonéticos que, evidentemente, dependem do idioma utilizado. Como o
estudo apenas se cingiu ao Alemão, Holandês e Inglês, não iremos dar muita importância e esta
classe de erros. Citemos apenas a título exemplificativo uma situação em que estes erros podem
ocorrer.
Exemplo 2.6 Os erros fonéticos sucedem quando uma comunicação oral não é efectuada nas
melhores condições. Um exemplo clássico para a língua inglesa pode surgir numa conversa telefónica quando, por exemplo, uma pessoa diz “40” em inglês, fourty e o ouvinte percebe fourteen
(14), ou vice-versa.

Exemplo 2.7 Exemplificação dos diversos tipos de erros partindo do exemplo do Número de
Identificação Fiscal (NIF-322688353), apresentado na Figura 2.2.
Tipo de Erro
Forma Inicial
Forma Transmitida
Singular
322688353
322688753
Transposição de algarismos adjacentes
322688353
322683853
Transposição intercalada
322688353
322685383
Gémeo
322688353
322677353
Gémeo intercalado
322688353
322688151
Tabela 2.1: Exemplos dos diversos tipos de erros.

Os erros mais comuns são os erros singulares, seguindo-se dos erros de transposições de algarismos adjacentes. A seguinte tabela indica as frequências relativas dos tipos de erros mais comuns.
Tipos de Erros
Forma
Frequência Relativa
...ai ...  ...ai¢...
79,1%
...aia j ...  ...a jai ...
10,2%
Transposições intercaladas
...aiaka j ...  ...a jakai ...
0,8%
Gémeos
...aa...  ...a ¢a ¢...
...aaka...  ...a ¢aka ¢...
0,5%
Singulares
Transposições de algarismos adjacentes
Gémeos intercalados
Aleatórios e Fonéticos
0,3%
9,1%
Tabela 2.2: Tipos de erros mais comuns.
Existem diversos métodos que possibilitam ao receptor de uma mensagem reconhecer se a
mensagem foi ou não correctamente transmitida e até corrigir possíveis erros. No caso dos números de identificação é importantíssimo afiançar que são transmitidos correctamente e até filtrar
possíveis irregularidades causadas com intuito criminoso. Por exemplo, seria muito constrangedor, alguém pagar na caixa registadora de um supermercado a quantia de 200 euros por um artigo de 20 euros, tudo isso devido a um erro de leitura óptica do código de barras. Imaginemos no
caso dos bancos, que operam diariamente com inúmeras transferências electrónicas de grandes
montantes, a ocorrência de um erro envolvendo a transferência entre contas erradas.
9
§2.3 Tipos de erros mais comuns
Capítulo II
Este tipo de erros realmente acontece, cada vez com menos frequência. Uma história representativa de um erro desses pode ser encontrada em [8], a qual relataremos de seguida.
Durante a década de oitenta, Lt. Col. Oliver North, de Iran-Contra Fame, entregou
ao assistente do Secretário de Estado Norte-americano, Elliot Abrams, um número incorrecto de uma conta bancária domiciliada num banco suíço com a intenção de se efectuar
um depósito de dez milhões de dólares. North comunicou a Abrams um número de conta
que iniciava com “368”, onde o número correcto seria “386”. Como é conhecido mundialmente o sigilo bancário, marca de qualidade dos bancos suíços, escusado será dizer que esse
dinheiro foi parar à conta de um felizardo desconhecido.
Para se detectar e evitar possíveis erros é comum utilizar-se alguma informação redundante
transmitida em simultâneo com a mensagem que se pretende comunicar. A essa informação designamos por símbolos de controlo. Sobre este tema podem ser consultados [4], [9], [11] e [14].
§2.4 Símbolos de Controlo
Os símbolos de controlo ou algarismos de teste estão na base da concepção da maioria dos
sistemas de identificação. Nestes sistemas não se pretende que o erro seja automaticamente corrigido mas, tão só, que o sistema alerte o utilizador da ocorrência de um erro e, consequentemente,
da necessidade de reintroduzir o número. Normalmente são acrescentados um ou mais caracteres,
designados por símbolos de controlo, no número de identificação, caracteres esses que, posteriormente, permitem a detecção de erros após a transmissão do referido número. Para melhor exemplificar um dos métodos possíveis, consideremos o seguinte cenário [8].
Exemplo 2.8 Uma determinada empresa, para identificar cada produto que vende, utiliza um
número de três algarismos, a1a2a 3 . De modo a garantir que esses números são correctamente
transmitidos, acrescentou-se um quarto algarismo (algarismo de teste) a 4 ao número de identificação de cada produto, obtendo um número de identificação de comprimento 4 da forma
a1a2a 3a 4 .
Esse algarismo é determinado à custa da soma dos três primeiros algarismos, a1 + a2 + a 3 ,
e ao algarismo de teste é atribuído o algarismo das unidades desta soma.
Para o artigo de número 863, a 4 = 7 , pois a1 + a2 + a 3 = 8 + 6 + 3 = 17 e portanto o número de identificação atribuído a este produto é 8637. O número 7030 é um número de identificação válido, uma vez que a1 + a2 + a 3 = 7 + 0 + 3 = 10 .
Da mesma forma, poderíamos concluir que o número 9312, não representa um número de identificação válido, pois a1 + a2 + a 3 = 9 + 3 + 1 = 13 , onde o algarismo das unidades é o número 3,
que é diferente de 2 (último algarismo do número 9312), logo o número 9312 não está correcto e
não pode representar nenhum artigo vendido pela referida empresa.
10

§2.4 Símbolos de Controlo
Capítulo II
Como é facilmente constatável, no exemplo anterior, o algarismo de teste não conseguiria
identificar um simples erro de transposição, um dos erros mais frequentes segundo o estudo apresentado na Tabela 2.2. Qualquer sistema de identificação que seja desenvolvido deverá conseguir,
pelo menos, detectar a ocorrência dos erros singulares e dos erros de transposições de algarismos
adjacentes, que representam 89,3% dos erros mais comuns (segundo a Tabela 2.2). Existem sistemas que conseguem detectar todos os erros mencionados na Tabela 2.2, sendo que, nalguns
casos essa eficácia exige um aumento de complexidade. Quantos mais erros o sistema de identificação conseguir detectar, mais delicada e elaborada será a sua implementação (mais informações
em [12]).
O algarismo ou algarismos de teste podem surgir em qualquer posição no número de identificação, mas na grande maioria dos sistemas surge no final do número. Nos sistemas de identificação que iremos abordar ao longo deste trabalho, vamos averiguar a eficiência do ou dos algarismos de teste utilizados.
Os sistemas de identificação mais utilizados são os que recorrem à aritmética modular, pois
detectam a maioria dos erros e mantêm alguma simplicidade na sua execução. Veremos no próximo capítulo o que caracteriza este tipo de sistemas.
11
§3.1 Análise geral dos Sistemas Modulares
Capítulo III
Capítulo III – Sistemas de Identificação Modulares
Se disser 11+22=9, todos aqui vão pensar:
Os matemáticos Belgas não sabem calcular!
Francis Borceux
Uma ferramenta que utilizamos diariamente é o relógio. Analógico ou digital, um relógio,
independentemente da sua fonte de energia e tecnologias associadas, tem o intuito de contar continuamente o tempo. E portanto, não é mais do que uma máquina de contar. Conta horas, minutos e até segundos, no entanto, existe algo de estranho no modo como o relógio conta, porque,
embora conte o tempo ininterruptamente, parece nunca atingir grandes números. Por exemplo,
no caso de um relógio analógico, quando o ponteiro das horas indica três horas em ponto, se
aguardarmos doze ou vinte e quatro horas, o relógio vai-nos indicar novamente as três horas. Na
contagem efectuada por um relógio, não vai interessar a quantidade de doze horas que já passaram, mas apenas o que sobra de cada doze horas. Tudo isto, apesar de ser tão familiar, parece-nos muito estranho. Esta “Aritmética do Relógio”, onde vislumbramos o tempo entre os múltiplos de doze, é um exemplo da aritmética modular, neste caso particular, de módulo doze. Recorrendo à Definição 1.8, podemos averiguar onde estaria o ponteiro das horas daqui a sete horas,
supondo que neste momento fossem dez horas em ponto. Procederíamos do seguinte modo:
10 + 7 = 17 e concluiríamos que 17 º 5 (mod12) , onde cinco é o resto da divisão de dezassete
por doze, obtido através do algoritmo da divisão. Logo constataríamos que o ponteiro apontaria
para o número cinco.
A maioria dos relógios conta também os minutos e os segundos e, mais uma vez, atribui
importância apenas aos restos, ignorando agora, os conjuntos de sessenta que já passaram. Situações como esta, de ignorar os múltiplos de um dado número quando fazemos cálculos, acontecem
frequentemente. Para saber mais sobre este tema, consultar [2] e [10].
No próximo parágrafo, vamos analisar os sistemas modulares que utilizam por base aritméticas semelhantes à “Aritmética do Relógio”. Os resultados que apresentaremos de seguida foram
maioritariamente extraídos de um artigo, inerente ao tema, de autoria do Professor Jorge Picado
[12].
§3.1 Análise geral dos Sistemas Modulares
Os sistemas de identificação que vamos examinar, possuem algumas semelhanças que nos
permitem uma análise global e sistematizada. Os números de identificação são constituídos por
algarismos, letras ou símbolos pertencentes a um “alfabeto”, o qual designamos por A. Geralmente, consideramos um alfabeto como sendo um corpo finito.
Definição 3.1 Sejam, A um conjunto de cardinal k, j uma bijecção definida de A em  k
( j : A   k ) e um n-uplo (p1, p2 , p3 ,..., pn ) constituído por inteiros não nulos.
12
§3.1 Análise geral dos Sistemas Modulares
Capítulo III
Designamos este n-uplo por vector de verificação de algarismos do sistema e aos seus elementos
pi , i = 1,..., n , por pesos.
Os números de identificação do sistema são palavras a1a2a 3 ...an definidas em A que verificam
(p , p , p ,..., p ) ⋅ (j (a ), j (a ), j (a ),..., j (a )) º 0 (mod k )
1
2
3
n
1
2
3
n
ou seja,
p1j (a1 ) + p2j (a2 ) + p3j (a 3 ) + ... + pn j (an ) º 0 (mod k ) .
Denominamos os sistemas deste tipo por sistemas de identificação módulo k e à soma
p1j (a1 ) + p2j (a2 ) + p3j (a 3 ) + ... + pn j (an ) por soma de controlo.
Observação 3.2
a) Usualmente é utilizado o zero nesta congruência, mas qualquer outro elemento de  k servi-
ria. O zero tem a vantagem de se poder recorrer ao facto de k ser um divisor daquela soma (Observação 1.10).
b) Para não sobrecarregar muito a notação, denotaremos j (ai ) apenas por ai . Nos exemplos
que veremos no capítulo seguinte, normalmente é utilizada a função identidade, a qual não deve
ser confundida com esta mudança de notação.
De seguida, vejamos quais os erros singulares e as transposições que estes sistemas conseguem
detectar.
Teorema 3.3 Consideremos a1a2a 3 ...an um número de comprimento n de um sistema de identi-
ficação módulo k, com vector de verificação de algarismos (p1, p2 , p3 ,..., pn ) .
a) Um erro singular (...ai ...  ...ai¢...) na i-ésima posição é detectável se e só se
pi (ai - ai ¢ ) º 0 (mod k ) .
b) Uma transposição dos algarismos ai e a j nas posições i e j é detectável se e só se
(p
i
- p j )(ai - a j ) º 0 (mod k ) .
Demonstração:
a)
Seja S a soma de controlo com os algarismos correctos. Sabemos, pela Definição 3.1, que
S º 0 (mod k ) . Designemos por S ¢ , a soma de controlo com a troca de um algarismo
(...ai ...  ...ai¢...) . Apesar de se tratar de uma soma incorrecta podemos ter S ¢ º 0 (mod k ) ou
S ¢ º 0 (mod k ) , casos em que o erro é ou não é detectado, respectivamente.
13
§3.1 Análise geral dos Sistemas Modulares
Capítulo III
Calculemos a diferença entre S e S ¢ ,
(
) (
S - S ¢ = p1a1 + p2a2 + p3a 3 + ... +¢ piai + ... + pnan - p1a1 + p2a2 + p3a 3 + ... + piai ¢ + ... + pnan
)
S - S ¢ = p1a1 + p2a2 + p3a 3 + ... + piai + ... + pnan - p1a1 - p2a2 - p3a 3 - ... - piai ¢ - ... - pnan
S - S ¢ = piai - piai ¢ = pi (ai - ai ¢ )
Logo, conclui-se que o erro só é detectável caso pi (ai - ai ¢ ) º 0 (mod k ) .
b)
Neste caso, a diferença entre a soma de teste do número correcto e do número errado é
S - S ¢ = (p1a1 + p2a2 + p3a 3 + ... + piai + ... + p ja j + ... + pnan )
S - - (p1a1 + p2a2 + p3a 3 + ... + pia j + ... + p jai + ... + pnan )
S - S ¢ = p1a1 + p2a2 + p3a 3 + ... + piai + ... + p ja j + ... + pnan
S - -p1a1 - p2a2 - p3a 3 - ... - pia j - ... - p jai - ... - pnan
S - S ¢ = piai + p ja j - pia j - p jai = piai - pia j + p ja j - p jai
S - S ¢ = pi (ai - a j ) + p j (a j - ai ) = pi (ai - a j ) - p j (ai - a j )
S - S ¢ = (pi - p j )(ai - a j )
Tal
como
na
demonstração
anterior,
só
será
detectado
o
erro
se
e
só
(pi - p j )(ai - a j ) º 0 (mod k ) .
se

Vamos de seguida, estabelecer as condições nos pesos pi , que garantem a detecção de todos
os erros singulares e de transposição.
Corolário 3.4 Um sistema de identificação módulo k, que tenha como vector de verificação de
algarismos (p1, p2 , p3 ,..., pn ) , detecta:
a) Todos os erros singulares na i-ésima posição se e só se m.d .c.(pi , k ) = 1 .
b) As transposições de algarismos nas posições i e j se e só se m.d .c.(pi - p j , k ) = 1 .
Demonstração:
a) Sejam ai , ai¢ Î {0,1,..., k - 1} com ai ¹ ai¢ , onde ai representa o algarismo correcto que foi
substituído por um algarismo errado, ai¢ , dando assim origem a um erro singular na posição i
( ...ai ...  ...ai¢... ). Como vimos na alínea a) do Teorema 3.3, o sistema detecta todos os erros
singulares
na
i-ésima
posição
se
e
só
se
ai , ai¢ Î {0,1,..., k - 1} com ai ¹ ai¢ .
pi (ai - ai ¢ ) º 0 (mod k ) ,
para
quaisquer
Verifiquemos que, de facto, pi (ai - ai ¢ ) º 0 (mod k ) é equivalente a m.d .c.(pi , k ) = 1 .
Provemos que se pi (ai - ai ¢ ) º 0 (mod k ) então m.d .c.(pi , k ) = 1 .
Suponhamos
d2 Î {1, 2,..., k - 1} .
que
m.d .c.(pi , k ) = d
com
14
d > 1.
Então
pi = dd1
e
k = dd2
com
§3.1 Análise geral dos Sistemas Modulares
Capítulo III
Fazendo ai = d2 e ai¢ = 0 , chegamos a um absurdo, pois
pi (ai - ai ¢ ) = pi (d2 - 0) = pid2 = dd1d2 = d1dd2 = d1k º 0 (mod k ) .
Portanto d = 1 , ou seja, m.d .c.(pi , k ) = 1 .
Provemos que se m.d .c.(pi , k ) = 1 então pi (ai - ai ¢ ) º 0 (mod k ) .
Suponhamos que m.d .c.(pi , k ) = 1 . Então não existe d ¹ 1 tal que d | pi e d | k .
Se existissem diferentes ai , ai¢ Î {0,1,..., k - 1} , tais que k | pi (ai - ai ¢ ) teríamos k | (ai - ai ¢ ) ,
k | pi
porque
(pois
m.d .c.(pi , k ) = 1 ),
o
que
é
também
um
absurdo
pois
ai - ai ¢ Î {1, 2,..., k - 1} .
Portanto pi (ai - ai ¢ ) º 0 (mod k ) .
b) Pela alínea b) do Teorema 3.3, sabemos que o sistema detecta todas as transposições dos
algarismos ai e a j nas posições i e j se e só se para quaisquer ai , a j Î {0,1,..., k - 1} , com ai ¹ a j
(p
se tem
(p
i
i
- p j )(ai - a j ) º 0 (mod k ) . Pela demonstração da alínea anterior, temos que
- p j )(ai - a j ) º 0 (mod k ) é equivalente a m.d .c.(pi - p j , k ) = 1 , pois o módulo da diferença
entre os algarismos ai e a j é um número pertencente a {1, 2,..., k - 1} .

Relativamente aos outros tipos de erros, foram efectuados estudos análogos. Os resultados
desses estudos podem ser observados na seguinte tabela (presente em [12]).
Tipos de Erros
Forma
Condições
...ai ...  ...ai¢...
m.d .c.(pi , k ) = 1
...ai ...a j ...  ...a j ...ai ...
m.d .c.(pi - p j , k ) = 1
m.d .c.(pi - pi +1, k ) = 1
Gémeos intercalados
...aa...  ...a ¢a ¢...
...aaia...  ...a ¢aia ¢...
Gémeos generalizados
...a...a...  ...a ¢...a ¢...
m.d .c.(pi + p j , k ) = 1
Singulares
Transposições
Gémeos
m.d .c.(pi - pi +2 , k ) = 1
Tabela 3.1: Condições para a detecção de erros.
Tendo em atenção estas condições, simplifica-se a construção de sistemas que detectem determinados tipos de erros, conforme as necessidades inerentes à sua aplicação.
Analisemos de seguida e muito sucintamente as principais limitações destes sistemas.
§3.2 Limitações dos Sistemas Modulares
Os sistemas módulo onze são os mais utilizados uma vez que é fácil encontrar pesos primos
com onze, usando apenas um caracter para algarismo de teste. Por outro lado, os sistemas que
utilizam k < 10 , são pouco usados, pois é impossível detectar todos os erros singulares e todas as
transposições se não garantirmos que os algarismos variem entre 0 e k - 1 , o que torna o sistema
pouco útil devido ao seu tamanho limitado.
15
§3.2 Limitações dos Sistemas Modulares
Capítulo III
A Tabela 3.1 permite-nos concluir que os sistemas módulo onze são melhores do que os sistemas módulo dez. Os sistemas módulo onze, quando bem implementados, podem detectar a
totalidade dos erros singulares, transposições e erros gémeos, no entanto a detecção de erros fonéticos é muito baixa e, devido a isso, existem diversas variantes destes sistemas de modo a aperfeiçoar a detecção desse tipo de erros.
No próximo capítulo serão abordados alguns destes sistemas, entre os quais, analisaremos
sistemas que utilizam k = 10 . Exemplos desses sistemas são o Universal Product Code (UPC) e o
European Article Number (EAN), que apesar de serem eficazes na detecção de erros singulares,
perdem eficiência na detecção de transposições.
Pode ser encontrado em [12] o exemplo de sistema de identificação utilizado pelos alemães
do Dresdner Bank, que recorrendo a um vector de verificação constituído pelos termos de uma
progressão geométrica, conseguem detectar todos os erros da Tabela 2.2.
Existem alguns sistemas em utilização onde k > 11 . Evidentemente que os melhores são
aqueles em que k é primo. Estes sistemas requerem a utilização de alfabetos maiores, que ultrapassam os dez algarismos {0,1,..., 9} , tendo que recorrer a caracteres não numéricos ou à utilização de mais do que um algarismo de teste, o que “acarreta alguns problemas técnicos e custos
mais elevados na concepção dos sistemas automáticos de leitura e escrita”. Mais alguns exemplos
destes sistemas, podem ser encontrados em [12].
16
§4.1 O Sistema EAN
Capítulo IV
Capítulo IV – Exemplos de Sistemas de Identificação Modulares
Cada problema que resolvi tornou-se numa regra,
que serviu para resolver outros problemas.
René Descartes
§4.1 O Sistema EAN
Em 1977, Albert Heijn, um grande empresário Holandês, juntamente com alguns produtores e distribuidores, motivados pela necessidade de uniformizar uma forma de codificar os produtos, criaram o EAN (European Article Number). O sistema foi oficialmente registado, sendo doze
os países fundadores (Alemanha, Áustria, Bélgica, Dinamarca, Finlândia, França, Holanda, Itália, Noruega, Suécia, Suíça e Reino Unido) e tendo Albert Heijn à frente da presidência. Sistemas
como este, tendo em vista a atribuição de um número único para cada artigo têm vindo a expandir-se mundialmente. O EAN é utilizado por países de todos os cantos do mundo e não apenas europeus, como foi o intuito dos seus fundadores [J]. O sistema EAN, actualmente, é gerido
pela organização de estandardização GS1 [H]. O EAN é um sistema de identificação constituído
por números de identificação numéricos de comprimento treze, onde os algarismos que o constituem são dispostos de uma das duas formas seguintes.
a1a2 - a 3a 4a 5a 6a 7 - a 8a 9a10a11a12 - a13 ou a1a2a 3 - a 4a 5a 6a 7 - a 8a 9a10a11a12 - a13
Os primeiros dois ou três algarismos identificam o país e o segundo grupo, constituído por
cinco ou quatro algarismos identificam o produtor. Os cinco algarismos que se seguem, constituem o número do produto atribuído internamente pela própria empresa produtora. O último algarismo, como seria de esperar, é o algarismo de teste.
Nos Estados Unidos e no Canadá existe, desde 1973, um sistema semelhante a este, mas
apenas com doze algarismos, mais conhecido por Universal Product Code (UPC) [I]. O mesmo
sucede no Japão, onde este sistema é conhecido por Japanese Article Number (JAN) [O]. Estes
três sistemas são regulados pelo Global Trade Item Numbers (GTIN) [G], que supervisiona a implementação dos códigos de barras, que normalmente surgem associados a este tipo de números.
Esses códigos de barras permitem a fácil leitura destes números, por parte de mecanismos especialmente construídos para esse efeito (para mais informações ver [D] e [S]). Vejamos um exemplo
de um número de identificação do sistema EAN, para melhor compreender a sua estrutura.
Exemplo 4.1 Consideremos o seguinte código de barras associado a um número de identificação
do sistema EAN.
Figura 4.1: Exemplo de EAN.
17
§4.1 O Sistema EAN
Capítulo IV
Verificamos que se trata de um número de identificação numérico de comprimento treze
( n = 13 ), constituído pelos seguintes algarismos:
a1 = 8 ,
a2 = 4 ,
a8 = 4 ,
a3 = 3 ,
a9 = 9 ,
a4 = 6 ,
a10 = 4
a5 = 0 ,
a11 = 1 ,
a6 = 0 ,
a12 = 5 ,
a7 = 7 ,
a13 = 3 .
O grupo a1a2a 3a 4a 5a 6a 7 = 8436007 representa o código do produtor, o grupo a 8a 9a10a11a12 = 49415
é o código do produto e por fim, a13 = 3 é o algarismo de controlo.

Vejamos como se distribuem os pesos neste sistema de identificação através da seguinte tabela.
Código da Empresa Produtora
Código do Produto
Algarismo de Controlo
EAN
a1
a2
a3
a4
a5
a6
a7
a8
a9
a10
a11
a12
a13
Pesos
1
3
1
3
1
3
1
3
1
3
1
3
1
Tabela 4.1 – Pesos no sistema EAN.
Seja S a soma de controlo (constituída pelos produtos dos algarismos pelos seus respectivos
pesos) escrita da seguinte forma.
S = (1, 3,1, 3,1, 3,1, 3,1, 3,1, 3,1) ⋅ (a1, a2 , a 3 , a 4 , a 5 , a 6 , a 7 , a 8 , a 9 , a10 , a11, a12 , a13 )
S = a1 + 3a2 + a 3 + 3a 4 + a 5 + 3a 6 + a 7 + 3a 8 + a 9 + 3a10 + a11 + 3a12 + a13
Esta soma de controlo surge do somatório da multiplicação dos algarismos com índice par
por três com o somatório dos algarismos com índice ímpar.
Ou seja,
S = 3 å ai +
i par
åa
i
.
i ímpar
A condição imposta a esta soma de controlo, para a verificação do número e para a determinação de a13 é ser divisível por dez. Estamos, portanto, perante um sistema de identificação
módulo dez.
Temos então que,
(1.1)
S º 0 (mod 10)
E consequentemente,
(
onde S *
)
(1.2)
a13 = éê10 - S * (mod 10) ùú (mod 10)
ë
û
representa a soma dos produtos dos primeiros doze algarismos do EAN pelos seus res-
pectivos pesos.
Exemplo 4.2 Análise de números de identificação do sistema EAN.

Verifiquemos se o número EAN-8436007494153 da Figura 4.1 está correcto.
Comecemos por determinar a soma de controlo S.
S = (1, 3,1, 3,1, 3,1, 3,1, 3,1, 3,1) ⋅ (8,4,3,6,0,0,7,4,9,4,1,5,3)
S = 1 ⋅ 8 + 3 ⋅ 4 + 1 ⋅ 3 + 3 ⋅ 6 + 1 ⋅ 0 + 3 ⋅ 0 + 1 ⋅ 7 + 3 ⋅ 4 + 1 ⋅ 9 + 3 ⋅ 4 + 1 ⋅ 1 + 3 ⋅ 5 + 1 ⋅ 3 = 100
Assim (1.1) é trivialmente verificado, já que 100 = 10 ´ 10 + 0 .
18
§4.1 O Sistema EAN
Capítulo IV

Vejamos o que se passa com o número EAN-4974019272495.
S = (1, 3,1, 3,1, 3,1, 3,1, 3,1, 3,1) ⋅ (4,9,7,4,0,1,9,2,7,2,4,9,5)
S = 1 ⋅ 4 + 3 ⋅ 9 + 1 ⋅ 7 + 3 ⋅ 4 + 1 ⋅ 0 + 3 ⋅ 1 + 1 ⋅ 9 + 3 ⋅ 2 + 1 ⋅ 7 + 3 ⋅ 2 + 1 ⋅ 4 + 3 ⋅ 9 + 1 ⋅ 5 = 117
Como 117 = 10 ´ 11 + 7 , não se verifica (1.1) e portanto podemos concluir que o número de
identificação considerado contém pelo menos um erro. Este sistema não nos permite identificar a posição onde ocorreu esse erro. Supondo que o erro ocorreu no último algarismo, ou
seja, no algarismo de controlo, nesse caso, podemos corrigi-lo recorrendo à expressão (1.2).
S * = (1, 3,1, 3,1, 3,1, 3,1, 3,1, 3) ⋅ (4,9,7,4,0,1,9,2,7,2,4,9)
S * = 1 ⋅ 4 + 3 ⋅ 9 + 1 ⋅ 7 + 3 ⋅ 4 + 1 ⋅ 0 + 3 ⋅ 1 + 1 ⋅ 9 + 3 ⋅ 2 + 1 ⋅ 7 + 3 ⋅ 2 + 1 ⋅ 4 + 3 ⋅ 9 = 112
Utilizando (1.2), temos
(
(
)
a13 = êé10 - S * (mod 10) ùú (mod 10)
ë
û
a13 = éê10 - 112 (mod 10) ùú (mod 10)
ë
û
a13 = (10 - 2)(mod 10)
)
a13 = 8 (mod 10)
a13 = 8
Portanto, o número correcto seria EAN-4974019272498 (Figura 4.2) e este número já verificaria (1.1).
Figura 4.2: Código de Barras EAN-4974019272498 .

Este sistema foi construído de modo a detectar os erros mais frequentes na leitura óptica
dos códigos de barras, que são os erros singulares. Vejamos o que se passa relativamente a este
tipo de erros.
Teorema 4.3 O sistema EAN detecta todos os erros singulares.
Demonstração:
Sejam a1, a2 , a 3 , a 4 , a 5 , a 6 , a 7 , a 8 , a 9 , a10 , a11, a12 e a13 os algarismos de um número de identificação do sistema EAN e S a soma de controlo (com os algarismos correctos). Assim (1.1) verificase. Designemos por S ¢ , a soma de controlo com a troca de um algarismo, digamos ai por ai¢
(...ai ...  ...ai¢...) .
Vamos efectuar a demonstração por redução ao absurdo.
Suponhamos que,
S ¢ º 0 (mod 10)
e calculemos a diferença entre S e S ¢ .
Separemos a demonstração em dois casos.
19
(1.3)
§4.1 O Sistema EAN
Capítulo IV

1º Caso [i é ímpar]. Nestas condições S - S ¢ = ai - ai ¢ .
Como tanto S como S ¢ satisfazem as condições de controlo [(1.1) e (1.3)], usando a alínea
d) das Propriedades 1.13 , temos S - S ¢ = ai - ai ¢ º 0 (mod 10) .
O que, obviamente, é uma contradição, pois ai e ai¢ são números distintos entre 0 e 9, cuja
diferença só seria congruente módulo dez com zero se ai = ai¢ .

(
Analogamente
(
)
2º Caso [i é par]. Nestas condições S - S ¢ = 3ai - 3ai ¢ = 3 ai - ai ¢ .
ao
efectuado
na
demonstração
do
1º
Caso,
concluímos
que
)
3 ai - ai ¢ º 0 (mod 10) .
Como 3 e 10 são primos entre si ( m.d .c.(3,10) = 1 ), então 10 teria que dividir ai - ai ¢ , ou
seja
(a - a ¢ ) º 0 (mod 10) , o que é um falso, pela mesma razão citada na demonstração
i
i
do 1ºCaso.
Portanto, concluímos que o sistema EAN detecta todos os erros singulares.

Exemplo 4.4 Consideremos o seguinte número de identificação do sistema EAN.
Figura 4.3: Exemplo de número de identificação do sistema EAN.
Suponhamos que ocorria um erro no primeiro algarismo do número de identificação representado na Figura 4.3. Digamos que, ao digitar o número, se trocava o cinco por três, obtendo o
número EAN-3601199003275. Vejamos o que sucede com a soma de controlo quando aplicada a
este número.
Determinemos a soma de controlo S.
S = (1, 3,1, 3,1, 3,1, 3,1, 3,1, 3,1) ⋅ (3,6,0,1,1,9,9,0,0,3,2,7,5) = 98
Como 98 = 10 ´ 9 + 8 , não se verifica (1.1) e assim concluímos que o sistema detecta a
ocorrência de erro na transmissão do número.

Como o sistema tem pesos distintos entre algarismos consecutivos, também vai detectar
muitos dos erros de transposições adjacentes. É claro que se os pesos fossem todos iguais, esses
erros não seriam detectáveis.
Teorema 4.5 O sistema EAN detecta os erros de transposições adjacentes se e só se o módulo
da diferença entre os correspondentes algarismos adjacentes for diferente de 5.
20
§4.1 O Sistema EAN
Capítulo IV
Demonstração:
Seja a1a2a 3a 4a 5a 6a 7a 8a 9a10a11a12a13 um número de identificação do sistema EAN. Suponhamos
que ocorreu uma troca entre os algarismos ai e ai +1 ( ...aiai +1 ...  ...ai +1ai ... ), com ai ¹ ai +1 . Designemos a soma de controlo com os algarismos ai e ai +1 trocados por S ¢ . Analogamente, à demonstração do teorema anterior, sabemos que (1.1) se verifica e vamos supor que (1.3) também
se verifica.
Separemos a demonstração em dois casos.

1º Caso [i é ímpar].
Determinemos a diferença entre S e S ¢ .
S - S ¢ = ai - ai +1 + 3 (ai +1 - ai ) = - (ai +1 - ai ) + 3 (ai +1 - ai ) = 2 (ai +1 - ai )
Como tanto S com S ¢ satisfazem as condições de controlo [(1.1) e (1.3)], usando a Propriedade 1.13 d), S - S ¢ º 0 (mod 10) isto é 2 (ai +1 - ai ) º 0 (mod 10) que é equivalente a 10
dividir 2 (ai +1 - ai ) (pela Observação 1.10). Como m.d .c.(10, 2) ¹ 1 (10 e 2 não são números primos entre si), ai e ai +1 são números distintos entre 0 e 9, então dez só divide o produto 2 (ai +1 - ai ) se e só se ai +1 - ai = 5 . Logo para ai e ai +1 tais que o módulo da diferença entre eles é 5, o sistema não conseguirá detectar a ocorrência de erro.

2º Caso [i é par].
Neste caso, a diferença entre S e S ¢ , será
S - S ¢ = 3 (ai - ai +1 ) + ai +1 - ai = 3 (ai - ai +1 ) - (ai - ai +1 ) = 2 (ai - ai +1 )
Procedendo de modo semelhante ao efectuado na demonstração do 1º Caso, concluímos que
o erro só será detectável se ai - ai +1 ¹ 5 .
Portanto, quando ocorre uma troca entre algarismos adjacentes cuja diferença é 5, a soma
de controlo vai continuar a verificar a divisibilidade por 10, não detectando a ocorrência de erro.
Em todos os restantes casos de transposições adjacentes o erro é detectado.

Como neste sistema os pesos são distintos para os índices pares e para os índices ímpares,
se ocorrer uma transposição entre um algarismo de uma posição par por um outro numa posição
ímpar, o sistema também não detectará o erro se o módulo da diferença entre os dois algarismos
for 5. É óbvio que este sistema não detecta nenhum erro de transposição intercalada ou de
transposições entre algarismos cuja ordem for da mesma paridade. O facto de o sistema não detectar este tipo de erros, não é grave, pois a ocorrência destes erros é pouco frequente, atendendo
à precisão dos leitores ópticos, garantida pelos seus construtores.
21
§4.1 O Sistema EAN
Capítulo IV
Exemplo 4.6 Observemos o que sucede ao número de identificação apresentado na Figura 4.3,
quando sujeito a uma transposição adjacente entre os algarismos a11 e a12 . Obteríamos então o
número, EAN-5601199003725.
Calculemos a soma de controlo associada a este número e vejamos se (1.3) ainda se verifica.
S ¢ = (1, 3,1, 3,1, 3,1, 3,1, 3,1, 3,1) ⋅ (5,6,0,1,1,9,9,0,0,3,7,2,5) = 90
. Assim (1.3) verifica-se, pois
90 = 9 ´ 10 + 0 .
Portanto o erro não era detectado e o número seria aceite pelo sistema. Realmente, se efectuássemos a diferença entre a soma do número original e a soma do número errado, obtínhamos
algo do tipo,
S - S ¢ = 2 (a12 - a11 ) = 2 (7 - 2) = 2 ´ 5 = 10 .
E como 10 º 0 (mod 10) o erro não era detectado. Situação que poderia ser averiguada se
determinássemos o valor absoluto da diferença entre os correspondentes algarismos adjacentes e
verificássemos que era igual a 5, o que pelo Teorema 4.5, nos permitiria concluir que o erro não
seria detectado.

Observação 4.7 Os algoritmos para os sistemas UPC e ISMN (International Standard Music
Number, ver [7] e [K]) seguem a mesma estrutura de formação que o sistema EAN, com as devidas adaptações ao comprimento de cada um dos números. Teoremas análogos a 4.3 e a 4.5 também são verificados nestes dois sistemas ([H] e [P]).
§4.2 O Sistema ISBN
A necessidade de um sistema internacional de numeração para os livros foi debatida pela
primeira vez, em Berlim, na terceira Conferência Internacional de Investigação do Mercado do
Livro e Racionalização do Comércio Livreiro, em Novembro de 1966. Nessa altura um grupo de
editores e distribuidores da Europa pretendia recorrer à utilização de computadores, nas vendas e
no controlo do inventário, e era evidente que uma exigência para o bom funcionamento de um
sistema como este, seria a utilização de um único e simples número de identificação para a mesma publicação, independentemente das barreiras linguísticas existentes (mais informações em [3],
[5], [6] e [T]).
Mais tarde, foi realizado um encontro em 1968, em Londres, com representantes da Dinamarca, Estados Unidos da América, França, Holanda, Irlanda, Reino Unido, República Federal
da Alemanha e um observador da UNESCO. Outros países contribuíram enviando sugestões e
demonstrando o seu interesse. Um relatório do encontro circulou por todos os países pertencentes
à International Standards Organization (ISO) [M]. Como resultado destas reuniões, em 1969,
surgiu a recomendação 2108 da ISO que estabeleceu os princípios e procedimentos para a numeração normalizada internacional do livro. Esta recomendação foi traduzida para português dando
lugar à Norma Portuguesa NP-2022 ([C] e [K]).
22
§4.2 O Sistema ISBN
Capítulo IV
Este sistema ficou conhecido por ISBN (International Standard Book Number) e desde então que as encomendas se tornaram mais simples e menos dispendiosas. Encomendar títulos em
línguas estrangeiras deixou de ser um problema. O ISBN é portanto, um sistema de identificação
de livros, cassetes de áudio (sons não musicais), mapas, software de computador, discos compactos e vídeos (essencialmente de carácter didáctico cujo objectivo principal é a utilização na
aprendizagem e/ou instrução).
O ISBN-10 é um número de identificação de dez algarismos ou caracteres, sendo estes caracteres divididos em quatro séries:

1ª Série - Identificador do Grupo - O primeiro número ou grupo de algarismos serve para
identificar o grupo nacional, geográfico linguístico ou outro similar indicando assim sem
margem para dúvidas onde o livro foi publicado (os números atribuídos a Portugal são 972
e 989).

2ª Série - Prefixo do Editor - O segundo número ou grupo de algarismos identifica um edi-
tor em concreto.

3ª Série - Identificador do Título - O terceiro número ou grupo de algarismos identifica um
título específico ou a edição de uma obra publicada por um editor.

4ª Série - Algarismo de Controlo
(para mais pormenores consultar [5], [6] e [T])
Normalmente estes números surgem acompanhados de um código de barras seguindo as
normas EAN (13 algarismos), e cujo primeiro grupo de três algarismos identifica a indústria livreira, que actualmente está associada ao número 978, estando prevista a utilização do prefixo
979, no caso deste se esgotar. Os seguintes nove algarismos, correspondem ao número associado
do ISBN-10, sendo o último algarismo o algarismo de teste calculado segundo o algoritmo apresentado no parágrafo anterior (Sistema EAN – ver Tabela 4.1).
Exemplo 4.8 Consideremos o seguinte código de barras associado a um número de identificação
do sistema ISBN-10.
Figura 4.4: Exemplo de ISBN-10.
Trata-se de um número de identificação alfanumérico de comprimento dez ( n = 10 ), constituído pelos seguintes algarismos:
a1 = 9 ,
a2 = 7 ,
a3 = 2 ,
a4 = 6 ,
a5 = 6 ,
a6 = 2 ,
a7 = 8 ,
a8 = 9 ,
a9 = 5 ,
a10 = 4 .

23
§4.2 O Sistema ISBN
Capítulo IV
Averiguemos como é determinado o último algarismo no caso do sistema ISBN-10. Observemos,
na tabela seguinte, como se distribuem os pesos neste sistema de identificação.
Número de identificação do sistema ISBN-10
Algarismo de Controlo
ISBN-10
a1
a2
a3
a4
a5
a6
a7
a8
a9
a10
Pesos
10
9
8
7
6
5
4
3
2
1
Tabela 4.2 – Pesos no sistema ISBN-10.
Denotemos a soma dos produtos dos algarismos pelos seus respectivos pesos por soma de
controlo S. Esta soma pode ser escrita do seguinte modo.
S = (10, 9, 8, 7, 6, 5, 4, 3, 2,1) ⋅ (a1, a2 , a 3 , a 4 , a 5 , a 6 , a 7 , a 8 , a 9 , a10 )
S = 10a1 + 9a2 + 8a 3 + 7a 4 + 6a 5 + 5a 6 + 4a 7 + 3a 8 + 2a 9 + a10
A soma de controlo pode ser representada da forma seguinte.
10
S = å (11 - i )ai .
i =1
A condição imposta a esta soma de controlo, para a verificação do número e para a determinação de a10 é a de ser divisível por onze. Estamos perante um sistema de identificação módulo onze. Assim,
(1.4)
S º 0 (mod 11)
e
(
)
(1.5)
a10 = éê11 - S * (mod 11) ùú (mod 11)
ë
û
onde S * representa a soma dos produtos dos primeiros nove algarismos do ISBN-10 pelos seus
respectivos pesos.
Existe aqui, outra diferença essencial relativamente ao sistema EAN. Como estamos a utilizar congruências módulo onze, não serão suficientes os algarismos de 0 a 9 para representar o
algarismo de teste. Devido a isso, convencionou-se que, sempre que, o número de controlo fosse
10, se representasse pelo “X” (dez em numeração romana).
Exemplo 4.9 Consideremos um código de barras, associado a um número de identificação do
sistema ISBN-10, cujo número de controlo é 10.
Figura 4.5: Exemplo de ISBN-10.
É um número de identificação alfanumérico de comprimento dez ( n = 10 ), constituído pelos seguintes algarismos:
a1 = 9 ,
a6 = 2 ,
a2 = 7 ,
a7 = 3 ,
a3 = 2 ,
a8 = 2 ,
24
a4 = 6 ,
a9 = 6 ,
a5 = 6 ,
a10 = X .
§4.2 O Sistema ISBN
Capítulo IV
Verifiquemos que este número está correcto.
Comecemos por determinar a soma de controlo S.
S = (10, 9, 8, 7, 6, 5, 4, 3, 2,1) ⋅ (9,7,2,6,6,2,3,2,6,10)
S = 10 ⋅ 9 + 9 ⋅ 7 + 8 ⋅ 2 + 7 ⋅ 6 + 6 ⋅ 6 + 5 ⋅ 2 + 4 ⋅ 3 + 3 ⋅ 2 + 2 ⋅ 6 + 1 ⋅ 10 = 297
Assim (1.4) é trivialmente verificado, uma vez que 297 = 11 ´ 27 + 0 .

Analisemos, de seguida, como se comporta este sistema no que diz respeito à detecção de erros.
Teorema 4.10 O sistema ISBN-10 detecta todos os erros singulares.
Demonstração:
Seja a1a2a 3a 4a 5a 6a 7a 8a 9a10 um número de identificação do sistema ISBN-10. Denotando por
S, a soma de controlo com os algarismos correctos, sabemos por definição deste sistema que (1.4)
se verifica. Designemos por S ¢ , a soma de controlo com a troca de um algarismo, digamos ai
pelo algarismo ai¢ (...ai ...  ...ai¢...) .
Efectuemos a demonstração por redução ao absurdo.
Suponhamos que
S ¢ º 0 (mod 11) .
(1.6)
(
)(
)
Calculando a diferença entre as duas somas (S e S ¢ ), obtemos S - S ¢ = 11 -¢ i ai - ai ¢ e
como S e S ¢ satisfazem as condições de controlo temos S - S ¢ º 0 (mod 11) .
(
)(
)
Assim, 11 -¢ i ai - ai ¢ º 0 (mod 11) . Como 11 -¢ i é um número entre 1 e 10, tem-se
(
)
m.d .c.(11 -¢ i,11) = 1 . Portanto ai - ai ¢ º 0 (mod 11) . O que é impossível, pois ai e ai¢ são nú-
meros distintos entre 0 e 10, cuja diferença só seria congruente módulo onze com zero se ai = ai¢ .
Portanto, concluímos que o sistema ISBN-10 consegue detectar todos os erros singulares.

De seguida iremos ver que o sistema ISBN-10, vai “mais longe” na detecção de erros,
quando comparado com o sistema utilizado no EAN.
Teorema 4.11 O sistema ISBN-10 permite a detecção de erros de transposição entre dois alga-
rismos (mesmo que não sejam adjacentes).
Demonstração:
Sejam a1, a2 , a 3 , a 4 , a 5 , a 6 , a 7 , a 8 , a 9 e a10 os caracteres de um número de identificação do sistema ISBN-10 e S a soma de controlo (com os caracteres correctos). Sabemos que (1.4) se verifica. Suponhamos que ocorre uma troca entre os algarismos ai e a j (...aia j ...  ...a jai ... ) e evidentemente só interessa considerar os casos em que ai ¹ a j .
25
§4.2 O Sistema ISBN
Capítulo IV
Denotemos por S ¢ a soma de controlo com os algarismos ai e a j trocados. Suponhamos,
por absurdo, que (1.6) se verifica.
Calculemos a diferença entre S e S ¢ .
S - S ¢ = (11 - i )ai + (11 - j )a j - éê(11 - i )a j + (11 - j )ai ùú
ë
û
S - S ¢ = (11 - i )ai + (11 - j )a j - (11 - i )a j - (11 - j )ai
S - S ¢ = 11ai - iai + 11a j - ja j - 11a j + ia j - 11ai + jai
S - S ¢ = -iai - ja j + ia j + jai = ( j - i ) (ai - a j )
Como tanto S como S ¢ satisfazem as condições de controlo [(1.4) e (1.6)], usando a Propriedade
1.13
( j - i )(a
i
(a
i
tem-se
que
S - S ¢ º 0 (mod 11) ,
entre
1
isto
significa
que
m.d .c.( j - i,11) = 1 .
Logo
- a j ) º 0 (mod 11) .
j -i
Como
d),
é
um
número
e
9,
tem-se
- a j ) º 0 (mod 11) , o que é um absurdo, pois o módulo da diferença entre os algarismos
ai e a j , é um número pertencente a {1, 2,...,10} .

Portanto, concluímos que o ISBN-10 é um sistema que consegue detectar muitos erros,
talvez seja um dos sistemas mais eficazes, “perdendo pontos” apenas no facto de recorrer à utilização de um caracter não numérico, o que provoca maior exigência na sua operacionalização.
Este sistema ainda tinha capacidade de se manter operacional por muitos e longos anos, no
entanto, devido à necessidade de uniformizar os sistemas de identificação e permitir a entrada de
novas regiões do globo que têm vindo a evoluir na indústria livreira, que à data da criação do
ISBN não tinham grande peso, decidiu-se implementar um novo sistema, o ISBN-13, que está em
vigor desde 1 de Janeiro de 2007 ([3], [5], [C] e [N]). Os números de identificação do ISBN-13,
consistem em 13 algarismos, cujo primeiro grupo de três algarismos identifica a indústria livreira,
que actualmente está associada ao número 978, estando prevista a utilização do prefixo 979, no
caso deste se esgotar (Norma ISO-3166). Os seguintes nove algarismos, seguem a construção do
“antigo” ISBN-10, sendo o último algarismo o algarismo de teste calculado segundo o algoritmo
do sistema EAN (Tabela 4.1). Consideremos a1a2a 3a 4a 5a 6a 7a 8a 9a10 , como sendo um número de
identificação do sistema ISBN-10 e b1, b2 , b3 , a1, a2 , a 3 , a 4 , a 5 , a 6 , a 7 , a 8 , a 9 e b13 os algarismos do número de identificação do sistema ISBN-13, correspondente, nas condições do sistema EAN. Analisemos a seguinte tabela que relaciona estes dois sistemas.
Número de identificação do sistema ISBN-13
Algarismo de Controlo
Prefixo
Número de identificação do sistema ISBN-10
ISBN-10
a1
a2
a3
a4
a5
a6
a7
a8
a9
a10
Pesos
10
9
8
7
6
5
4
3
2
1
ISBN-13
b1
b2
b3
a1
a2
a3
a4
a5
a6
a7
a8
a9
b13
Pesos
1
3
1
3
1
3
1
3
1
3
1
3
1
Tabela 4.3 – Relação entre o sistema ISBN-10 e o sistema ISBN-13.
26
§4.2 O Sistema ISBN
Capítulo IV
Para uma melhor compreensão desta transformação, observemos os seguintes exemplos.
Figura 4.6: Exemplos de ISBN de manuais do Ensino Secundário.
Exemplo 4.12
Se repararmos na Figura 4.6, a primeira imagem representa um número de
identificação no sistema ISBN-10, antes da implementação do novo sistema, onde surge o correspondente no EAN. A conversão efectuada entre o número do ISBN-10 e do EAN já seguia as
indicações ilustradas na Tabela 4.3. A segunda imagem é referente ao período de transição e por
último, a terceira imagem representa um número do sistema ISBN-13, actualmente em utilização
(onde o número do ISBN-10, simplesmente deixou de ser representado). Expliquemos esta transformação com os códigos presentes na segunda imagem.
Número de identificação no sistema ISBN-10.
ISBN-972-47-2078-0
a1 = 9 ,
a2 = 7 ,
a3 = 2 ,
a4 = 4 ,
a5 = 7 ,
a6 = 2 ,
a7 = 0 ,
a8 = 7 ,
a9 = 8 ,
a10 = 0 .
a2 = 7 ,
a3 = 2 ,
Correspondente no sistema ISBN-13 (e EAN).
ISBN-978-972-47-2078-4
b1 = 9 ,
b2 = 7 ,
a5 = 7 ,
b3 = 8 ,
a6 = 2 ,
a1 = 9 ,
a7 = 0 ,
a8 = 7 ,
a9 = 8 ,
a4 = 4 ,
b13 = 4 .
Rapidamente se depreende a relação entre um número no sistema ISBN-10 com o seu correspondente no sistema ISBN-13, que coincide exactamente com o número do EAN e o algarismo
de controlo segue o algoritmo do mesmo. Ou seja, neste exemplo, os três primeiros algarismos
( b1, b2 e b3 ) servem para o prefixo de identificação da indústria livreira (978 ou 979), os seguintes
nove algarismos ( a1, a2 , a 3 , a 4 , a 5 , a 6 , a 7 , a 8 , a 9 ), correspondem à 1ª, 2ª e 3ª série da estrutura do
ISBN-10 e o último algarismo, b13 , é determinado através do algoritmo utilizado no sistema
EAN.

Observação 4.13 Como já tínhamos visto anteriormente (Figura 4.5), o ISBN-10, na maioria
das vezes, já se fazia acompanhar do código de barras seguindo o sistema EAN. Assim esta modificação pouco veio a alterar, ficando apenas a angústia da “morte” anunciada e premeditada do
sistema usado no ISBN-10. Passando, agora, apenas a existir a numeração orientada pelo sistema
EAN. Pouco se ganhou com esta troca, apenas uma maior uniformização e facilidade na implementação para a leitura do número de identificação de um livro pelos leitores ópticos de código
27
§4.2 O Sistema ISBN
Capítulo IV
de barras, que até já existia. O ISBN-13, surge acompanhado por uma desilusão e por uma sensação de retrocesso no que diz respeito à eficácia na detecção de erros. Como verificámos, o sistema ISBN-10 é muito eficaz e pode ser encontrado, com as devidas adaptações noutros sistemas
actualmente em vigor. Um exemplo disso é o ISSN (International Standard Serial Number), (ver
[O] e [P]), que é utilizado para identificar o título de publicações periódicas (jornais, revistas,
anuários, relatórios, monografias, …) em qualquer idioma ou suporte físico utilizado (impresso,
online ou digital).
Observação 4.14 Outros dois números, com que estamos bem familiarizados são o número do
Bilhete de Identidade (BI) e o Número de Identificação Fiscal (NIF) [DL nº463/79]. Estes dois
números são geridos por um sistema, semelhante ao utilizado pelo ISBN-10, no entanto, ao contrário do que se passava quando o algarismo de teste era 10, onde se utilizava um símbolo não
numérico para representar este valor, nestes dois sistemas nacionais, decidiu-se utilizar o algarismo “0” para situações dessas. Porque, para além da dificuldade de implementar um sistema
que utilize caracteres não numéricos, “…o uso da letra X poderá ainda ser problemático pela
seguinte razão: para o titular de um dado número de BI ou de um dado número de conta bancária, ou para um paciente num banco de dados médico, a letra X poderá sugerir uma “marca especial”, deveras desagradável.” Obviamente, que esta manobra que os Ministérios da Justiça e
das Finanças fizeram de modo a evitar a utilização de um “X” nos seus números de identificação,
retiraram muita eficácia ao algoritmo.
De seguida, iremos analisar de forma sucinta, dois sistemas directamente ligados ao actual
sistema monetário, sendo que, o primeiro pode ser considerado como um dos sistemas de identificação mais fracos e o segundo, como um dos melhores e mais fiáveis sistemas modulares em utilização.
§4.3 Sistema utilizado nos números de série das notas de euro
Foi a 1 de Junho de 1998 que o Banco Central Europeu (BCE) foi instituído tornando-se, a
partir de 1 de Janeiro de 1999, no principal responsável pela condução da política monetária na
zona euro. O euro surgiu inicialmente a 1 de Janeiro de 1999, como moeda escritural e só passados três anos (1 de Janeiro de 2002) na forma de notas e moedas com que lidamos diariamente.
Actualmente, o euro é a moeda oficial de 17 dos 27 países que constituem a União Europeia,
estando previstas, pelo menos, mais oito novas adesões até 1 de Janeiro de 2014. Portanto, em
breve pertencerão à zona euro 25 estados membros da União Europeia, isto sem contar com alguns estados que, não estando na União Europeia, resolveram adoptar o euro como sua moeda
oficial (como é o caso de Andorra, Mónaco, São Marino, Vaticano, Montenegro e Kosovo).
28
§4.3 Sistema utilizado nos números de série das notas de euro
Capítulo IV
Estado membro
Letra
correspondente ( a1 )
Valor (v)
Ano da adesão à
zona euro
Ainda por atribuir
A
2
-----
Ainda por atribuir
B
3
-----
Ainda por atribuir
C
4
-----
Estónia
D
5
2011
Eslováquia
E
6
2009
Malta
F
7
2008
Chipre
G
8
2008
Eslovénia
H
9
2007
Não atribuído
I
1
-----
Reino Unido *
J
2
?
Suécia *
K
3
?
Finlândia
L
4
1999
Portugal
M
5
1999
Áustria
N
6
1999
Não atribuído
O
7
-----
Holanda
P
8
1999
Não atribuído
Q
9
-----
Luxemburgo
R
1
1999
Itália
S
2
1999
Irlanda
T
3
1999
França
U
4
1999
Espanha
V
5
1999
Dinamarca *
W
6
?
Alemanha
X
7
1999
Grécia
Y
8
2001
Bélgica
Z
9
1999
Tabela 4.4 – Correspondências nos números de série das notas de euro.
(*) Os estados membros assinalados, ainda não aderiram à zona euro, nem existe uma data prevista para a sua integração.
O euro pode surgir na forma de moedas, onde cada moeda tem uma face comum e uma face que varia de acordo com o país para que foi cunhada. E pode surgir na forma de notas, sendo
que estas apresentam diversos mecanismos tecnológicos de segurança, concebidos para dificultar
a contrafacção. Alguns desses mecanismos são propositadamente divulgados, de modo a poderem
ser verificados por qualquer utilizador, como por exemplo, a marca de água, o filete de seguran-
29
§4.3 Sistema utilizado nos números de série das notas de euro
Capítulo IV
ça, a imagem holográfica e a banda iridescente. Para além dos mecanismos referidos, existe o
número de série das notas que, talvez devido ao seu fracasso, nunca foi alvo de grande divulgação. No entanto, este número continua a ser muito utilizado pelos bancos. Trata-se de um mecanismo estritamente matemático que não envolve nenhum tipo de tecnologia gráfica e que, bem
aplicado, poderia revelar-se num instrumento poderosíssimo contra as fraudes.
De seguida, mostraremos como funciona o número de série das notas de euro. Na tabela da
página anterior podem ser observadas algumas características que servirão de base para o estudo
do sistema. É possível identificar-se a origem de uma nota de euro através da letra que inicia o
número de série de cada nota (ver Tabela 4.4).
Definamos, desde já, o formato do número de série das notas de euro. Este número de série
é um número de identificação alfanumérico de comprimento doze, onde o primeiro caracter identifica o país emissor (através de uma letra) e o último é o algarismo de controlo
( a1a2a 3a 4a 5a 6a 7a 8a 9a10a11a12 ). Como se pode averiguar, pela análise da Tabela 4.4, cada letra corresponde a um país e a um valor representado por um algarismo entre 1 e 9. Observemos o seguinte exemplo para melhor compreender esta estrutura.
Exemplo 4.15 Consideremos o número de série constante numa nota de 20 euros.
Figura 4.7: Nota de 20 euros.
Constatamos que se trata de um número de identificação alfanumérico de comprimento doze ( n = 12 ), constituído pelos seguintes caracteres:
a1 = M ,
a2 = 8 ,
a3 = 4 ,
a4 = 0 ,
a5 = 8 ,
a6 = 8 ,
a7 = 8 ,
a8 = 5 ,
a9 = 0 ,
a10 = 0
a11 = 9 ,
a12 = 8 .
O caracter a1 identifica Portugal como sendo o país emissor e o a12 é o algarismo de controlo. 
Neste sistema de identificação, a soma de controlo S é obtida através da soma do valor
correspondente à letra, que surge no caracter a1 , com os restantes onze algarismos, uma vez que
todos os pesos são iguais a um. Portanto a soma de controlo pode ser escrita do seguinte modo,
onde v designa o valor correspondente ao país de emissão.
12
S = v + å ai
i =2
S = v + a2 + a 3 + a 4 + a 5 + a 6 + a 7 + a 8 + a 9 + a10 + a11 + a12
30
§4.3 Sistema utilizado nos números de série das notas de euro
Capítulo IV
A condição imposta a esta soma de controlo para a verificação do número e para a determinação de a12 é a de ser divisível por nove. Estamos perante um sistema de identificação módulo nove, assim
(1.7)
S º 0 (mod 9)
e
(
onde
S*
representa
a
)
a12 = êé9 - S * (mod 9) ùú (mod 9)
ë
û
soma dos onze valores correspondentes
(1.8)
aos
caracteres
a1, a2 , a 3 , a 4 , a 5 , a 6 , a 7 , a 8 , a 9 , a10 e a11 .
Exemplo 4.16 Verifiquemos se o número de série da nota de 20 euros da Figura 4.7 está cor-
recto.
Comecemos por determinar a soma de controlo S.
S = 5 + 8 + 4 + 0 + 8 + 8 + 8 + 5 + 0 + 0 + 9 + 8 = 63
Assim (1.7) é trivialmente verificado, pois 63 = 7 ´ 9 + 0 .

Este sistema, por utilizar pesos iguais à unidade para todos os caracteres, apresenta um
baixo nível de sucesso na detecção de erros. Não detecta nenhum erro de transposição (de um ou
mais algarismos, consecutivos ou não) e falha na detecção de alguns erros singulares. Por exemplo, se trocarmos um zero por um nove, ou vice-versa, o algarismo de controlo mantém-se inalterado. Portanto este sistema não detecta os tipos de erros mais comuns, que de acordo com a Tabela 2.2 representam 90,1% dos erros, tornando-o num sistema bastante fraco.
Para além destas condicionantes inerentes ao próprio algoritmo, vejamos que o sistema actualmente já se encontra em ruptura. Neste caso, o “alfabeto” A que é utilizado pelo primeiro
caracter do número de série das notas de euro corresponde ao alfabeto usual com as 26 letras,
sendo que as letras O e Q não são usadas, de modo a evitar possíveis confusões com o número
zero, o mesmo sucedendo com a letra I que facilmente se confundiria com o número um. Restaram somente 23 letras, sendo que, actualmente já estão atribuídas 17, sobrando apenas 6 letras,
de entre as quais três já se encontram reservadas ao Reino Unido, Suécia e Dinamarca (países
assinalados com asterisco na Tabela 4.4), que embora ainda não pertençam à zona euro já têm
letra para quando, hipoteticamente, decidirem aderir. Portanto, com as novas entradas no sistema previstas até 2014 será necessário adaptá-lo ou reformulá-lo por completo. Como foi possível,
cometer tantos erros num sistema tão recente e de tamanha importância?
§4.4 Sistema utilizado no NIB
O Número de Identificação Bancária (NIB) é o número que identifica as contas bancárias e
é utilizado em todo o mundo. Os algarismos de controlo são apurados de acordo com o Módulo
97-10, constante da norma ISO-7064. O NIB é constituído por vinte e um algarismos, sendo os
quatro primeiros o código do banco no qual a conta está domiciliada, seguidos do código do bal-
31
§4.4 Sistema utilizado no NIB
Capítulo IV
cão ou agência (quatro algarismos que poderão ser zeros se o banco não utilizar esta referência),
do número de conta (onze algarismos) e de dois algarismos de controlo [R].
Exemplo 4.17 Representação de um Número de Identificação Bancária.
Figura 4.8: Exemplo de NIB.
Verificamos que se trata de um número de identificação numérico de comprimento vinte e
um ( n = 21 ), constituído pelos seguintes algarismos:
a1 = 0 ,
a2 = 0 ,
a3 = 3 ,
a4 = 5 ,
a5 = 0 ,
a6 = 3 ,
a7 = 6 ,
a8 = 0 ,
a9 = 0 ,
a10 = 0 ,
a11 = 0 ,
a12 = 2 ,
a13 = 6 ,
a14 = 6 ,
a15 = 7 ,
a16 = 9 ,
a17 = 8 ,
a18 = 0 ,
a19 = 0 ,
a20 = 1 ,
a21 = 7 .
Os algarismos 0035 representam o código do banco, 0360 representam o código do balcão ou
agência do referido banco, 00026679800 identificam o número de conta e por fim, 17 são os dois
algarismos de controlo, que constituem o número de controlo.

Analisemos, na tabela seguinte, como se distribuem os pesos neste sistema de identificação.
Número de
Número de Conta
Código do Banco
Código do Balcão
NIB
a1
a2
a3
a4
a5
a6
a7
a8
a9
a10 a11 a12 a13 a14 a15 a16 a17 a18 a19
c
Pesos
73
17
89
38
62
45
53
15
50
5
1
49
34
81
76
27
90
Controlo
9
30
3
Tabela 4.5 – Pesos no sistema NIB.
Designemos por S a soma de controlo, obtida através da adição dos produtos dos algarismos pelos seus respectivos pesos.
Seja c da forma c = (10a20 + a21 ) (mod 97) .
A condição imposta a esta soma de controlo, para a verificação do número e para a determinação de c é a de o resto da divisão da soma por 97 ser 1.
Ou seja,
S º 1 (mod 97)
(1.9)
Utilizando a Propriedade 1.13 d), tem-se,
(1.10)
c = éê98 - S * (mod 97 ) ùú (mod 97 )
ë
û
onde S * representa a soma dos produtos dos primeiros dezanove algarismos do NIB pelos seus
(
)
respectivos pesos. Os dois algarismos de controlo ( a20 e a21 ) que compõem este número de identificação são os algarismos das dezenas e das unidades de c, respectivamente. Quando c for constituído apenas por um algarismo considera-se a20 = 0 , ou seja se, por exemplo, c = 7 tem-se
a20 = 0 e a21 = 7 .
32
§4.4 Sistema utilizado no NIB
Capítulo IV
No que concerne à detecção de erros, este sistema detecta qualquer erro singular. Por
exemplo, o sistema não aceitará a transferência de dinheiro para uma conta que difira apenas
num algarismo de uma conta que realmente exista. Também vai detectar as transposições de
quaisquer dois algarismos, ou seja, qualquer transposição de dois algarismos altera os respectivos
algarismos de controlo. Uma vez que estes dois tipos de erro são os mais frequentes, tem-se que
este é um bom sistema de detecção de erros. Portanto, será pouco provável recebermos dinheiro
na nossa conta devido a equívocos na comunicação de números de identificação bancária.
De modo a conseguir uma maior proximidade e melhor constatação das dificuldades inerentes à implementação dos sistemas de identificação modulares estudados, foi elaborado, em paralelo com o presente trabalho e recorrendo a uma aplicação de folhas de cálculo, um documento
dinâmico onde estes sistemas de identificação podem ser testados.
33
§5.1 Sistemas de Identificação
Capítulo V
Capítulo V – Elaboração de sítios na Internet
A palavra “progresso” não terá qualquer sentido enquanto houver crianças infelizes.
Albert Einstein
A sociedade está, dia para dia, mais dependente da comunicação global disponibilizada pelas grandes redes informáticas. A Internet é, sem dúvida, a mais utilizada e alcançou, num período de pouco mais de vinte anos, uma enorme dimensão. Esta rede, nos últimos anos, para além
da sua grande expansão, tem vindo a apresentar uma substancial melhoria na qualidade dos conteúdos disponibilizados. Cada vez mais, surgem documentos e estudos científicos de grande qualidade à distância de um simples “clique”. Estas últimas gerações, que já nasceram nesta era
digital, na sua grande maioria, não sabe utilizar, nem valorizar esta fonte de informação. Cabenos a nós, professores, desenvolver estratégias de forma a motivar e orientar estas crianças, para
que a dependência pela Internet se torne numa dependência saudável e influente no seu desenvolvimento enquanto seres pensantes e relevantes no futuro da humanidade.
Tendo em conta esta forma privilegiada de divulgar informação, decidimos disponibilizar
na Internet um sítio onde fossem apresentadas, de forma interactiva e lúdica, algumas aplicações
da aritmética modular. Na seguinte figura, podemos observar o aspecto deste sítio, o qual designamos por “Aritmética Modular”.
Figura 5.1: Sítio na Internet (Aritmética Modular).
34
§5.1 Sistemas de Identificação
Capítulo V
O referido sítio da Internet tem um pequeno texto de introdução ao tema e através de um
menu, no lado esquerdo da página inicial, é possível aceder a exemplos de aplicações da aritmética modular nos sistemas de identificação e exercitar esta aritmética com o auxílio de actividades
lúdicas e interactivas. Este sítio encontra-se no servidor de alojamento gratuito do “Sapo” (sistemaidentificacao.no.sapo.pt). No entanto, foi reservado um domínio (www.aritmeticamodular.
pt.vg) que permite uma melhor divulgação e até memorização do endereço. Este endereço já foi
indexado aos principais motores de busca e surge relativamente bem posicionado nas pesquisas
efectuadas referentes ao tema. Nos seguintes parágrafos serão esplanadas as duas grandes valências do sítio da Internet: aplicações da aritmética modular aos sistemas de identificação e um
jogo envolvendo a aritmética modular.
§5.1 Sistemas de Identificação
Como já referimos, foi construída uma folha de cálculo dinâmica, recorrendo a uma aplicação de folhas de cálculo (Microsoft Excel) que permitiu testar os algoritmos subjacentes a cada
um dos sistemas de identificação modulares estudados.
Figura 5.2: Folha de Cálculo Dinâmica (Microsoft Excel).
Surgiu a ideia de disponibilizar na Internet a referida folha de cálculo, de modo a permitir
a determinação e verificação dos números de identificação. No entanto, não seria viável colocar,
na rede, apenas o ficheiro do Microsoft Excel, uma vez que nem todos os utilizadores o conseguiriam visualizar e utilizar nos seus equipamentos, para além de pressupor o conhecimento da aplicação. Portanto, decidimos construir um sítio na Internet, compatível com as diversas aplicações
de navegação, recorrendo às linguagens mais utilizadas na Internet, a linguagem HTML (Hyper-
35
§5.1 Sistemas de Identificação
Capítulo V
Text Markup Language) e a linguagem JavaScript (linguagem que utiliza a tecnologia Java) tendo sempre como referência a folha de cálculo já construída, folha essa que tomou o papel de
“pseudoprojecto” para as páginas da Internet a construir posteriormente. Bastou, portanto, converter os algoritmos construídos no Microsoft Excel para as linguagens utilizadas na Internet. Foi
utilizado o software de construção de páginas Microsoft Expression Web (versão 3) e, sempre que
necessário, recorreu-se a tutoriais e exemplos disponibilizados online que se revelaram essenciais
na conversão para as linguagens referidas [V].
Ao longo da Licenciatura em Matemática, apenas se adquiriram competências para a implementação de algoritmos em linguagem Pascal, mas foi curioso verificar as grandes semelhanças com estas linguagens mais avançadas. Surgiram algumas dificuldades na implementação dos
algoritmos nestas duas linguagens, mas estas, revelaram-se motivadoras e permitiram um melhor
aperfeiçoamento, de modo a tornar mais simples e apelativa a manipulação por parte dos futuros
utilizadores das páginas construídas.
Do sítio construído, relativamente aos sistemas de identificação, destacam-se duas páginas:
uma que permite verificar se um determinado número de controlo não apresenta erros e uma
outra que permite determinar os algarismos de controlo, partindo dos restantes algarismos do
número de identificação. Essas páginas foram designadas por “verificar.htm” e “calcular.htm”,
respectivamente, e o código subjacente ao seu funcionamento pode ser consultado na íntegra nos
anexos.
Figura 5.3: Aspecto gráfico das páginas “verificar.htm” e “calcular.htm”.
Ambas as páginas apresentam uma estrutura muito semelhante. São constituídas por uma
tabela onde cada linha corresponde a um dos sistemas de identificação estudados: Bilhete de
Identidade (BI), Número de Identificação Fiscal (NIF), International Standard Serial Number
(ISSN), International Standard Book Number (ISBN), European Article Number (EAN), International Serial Music Number (ISMN) e Números de série das notas de euro. Todo o aspecto gráfico que será visualizado pelo utilizador (tabelas, cores, formatações, etc…), foi implementado em
linguagem HTML. Relativamente à forma de interacção do utilizador, as páginas funcionam de
forma muito semelhante. Cabe ao utilizador inserir os números no formato solicitado e clicar no
botão Verificar ou Calcular, para verificar se um determinado número de identificação está correcto ou para calcular o caracter de controlo, respectivamente. Sempre que se desejar efectuar
36
§5.1 Sistemas de Identificação
Capítulo V
uma nova verificação ou um novo cálculo, basta recorrer ao botão Limpar e reiniciar com os novos valores na respectiva linha da tabela.
Todos os cálculos são efectuados recorrendo à linguagem JavaScript onde cada sistema de
identificação é representado por uma função específica, que é accionada através do código em
HTML. Os sistemas implementados, à excepção do sistema de identificação das notas de euro,
podem englobar-se em dois grandes grupos: os que os pesos são semelhantes aos do sistema do
EAN e os que os pesos são semelhantes ao ISBN-10.
Decidimos, de seguida, destacar e apresentar nos seguintes exemplos algumas linhas do código em linguagem JavaScript onde está presente a aritmética modular.
Exemplo 5.1 Comecemos por analisar a função que verifica se um número do sistema EAN
está correcto.
function EAN(form) {
peso = 1;
soma = 0;
if (form.numero.value.length!=13){
alert("Introduzir 13 algarismos")
form.cc.value = ""
form.intro.value = "";
}
else{
for (index = form.numero.value.length; index > 0; --index) {
soma = soma + form.numero.value.substring (index-1, index) * peso;
peso = 4 - peso;
}
soma = (soma % 10);
if(soma==0){
cc="Correcto";
}
else{
cc="Errado";
}
form.intro.value = cc;
result = form.intro.value;
form.cc.value = cc
}
}
Figura 5.4: Função que verifica se um número no sistema EAN está correcto (JavaScript).
Na primeira parte do código, são iniciadas as variáveis (soma e peso) e são lidos os treze
algarismos do número de identificação do EAN. De seguida, é calculada a soma ponderada com
os respectivos pesos recorrendo-se, para tal, a um ciclo for. Como os pesos são alternadamente,
um e três (Tabela 4.1), essa actualização é efectuada em cada iteração do ciclo for, através da
expressão (peso
= 4 - peso)
e a soma é efetuada desde o último algarismo até ao primeiro. A veri-
ficação do número termina com a determinação do resto da divisão por dez da soma obtida (soma
= (soma % 10)),
e sempre que o resto for zero, o número é considerado correcto, caso contrário
estará errado. A operação representada pelo sinal de percentagem (%) devolve o resto da divisão
pelo número indicado, neste caso, dez.
A seguinte função determina, à custa dos doze primeiros algarismos do EAN, o respectivo
caracter de controlo.
function EAN(form) {
peso = 3;
soma = 0;
if (form.numero.value.length!=12){
alert("Introduzir 12 algarismos")
form.cc.value = ""
37
§5.1 Sistemas de Identificação
Capítulo V
form.intro.value = "";
}
else{
for (index = form.numero.value.length; index > 0; --index) {
soma = soma + form.numero.value.substring (index-1, index) * peso;
peso = 4 - peso;
}
cc = ((10 - (soma % 10)) % 10);
form.intro.value = form.numero.value + cc;
result = form.intro.value;
form.cc.value = cc;
}
}
Figura 5.5: Função que calcula o caracter de controlo no sistema EAN (JavaScript).
As principais diferença nesta função, relativamente à função da Figura 5.4 são, o comprimento do número introduzido e o cálculo do caracter de controlo que é calculado pela instrução
(cc
= ((10 - (soma % 10)) % 10)),
garantindo a aplicação da expressão (1.2)

Exemplo 5.2 Analogamente poderia ser efectuada uma análise às funções que permitem averi-
guar se o número do sistema ISBN-10 está correcto e efectuar a determinação do caracter de
controlo de um número desse sistema.
function ISBN(form) {
peso = 1;
soma = 0
if (form.numero.value.length!=10){
alert("Introduzir 10 caracteres")
form.cc.value = ""
form.intro.value = "";
}
else{
for (index = form.numero.value.length ; index > 0; --index) {
if(form.numero.value.substring (index-1, index)=="X" || form.numero.value.substring (index-1,
index)=="x"){
soma= soma + (10 * peso);
}
else{
soma = soma + form.numero.value.substring (index-1, index) * peso;
}
peso++;
}
soma = (soma % 11);
if(soma==0){
cc="Correcto";
}
else{
cc="Errado";
}
form.intro.value = cc;
result = form.intro.value;
form.cc.value = cc
}
}
Figura 5.6: Função que verifica se um número no sistema ISBN-10 está correcto (JavaScript).
function ISBN(form) {
peso = 2;
soma = 0
if (form.numero.value.length!=9){
alert("Introduzir 9 algarismos")
form.cc.value = ""
form.intro.value = "";
}
else{
for (index = form.numero.value.length; index > 0; --index) {
soma = soma + form.numero.value.substring (index-1, index) * peso;
peso++;
}
cc = ((11-(soma % 11)) % 11);
if(cc==10){
cc="X";
}
38
§5.2 Aritmética do Relógio
Capítulo V
form.intro.value = form.numero.value + cc;
result = form.intro.value;
form.cc.value = cc
}
}
Figura 5.7: Função que calcula o caracter de controlo no sistema ISBN-10 (JavaScript).

Observação 5.3
Para melhor compreensão, aconselha-se a análise da Tabela 4.3 e das expressões (1.4) e
(1.5).
Os restantes sistemas de identificação seguem adaptações dos algoritmos apresentados nestes dois exemplos, excepcionando os algoritmos do sistema de identificação das notas de euro que
incluem um ciclo case que permite obter o valor e o nome do estado membro correspondente à
letra inicial do número de série das notas de euro (ver anexos).
§5.2 Aritmética do Relógio
É devido à sua simplicidade que, a aritmética modular, se revela tão poderosa e surge associada a inúmeras e variadas aplicações no nosso quotidiano. Devido a isso, decidimos realizar
uma Actividade Prática - “Aritmética do Relógio” com o objectivo de averiguar a aceitação deste tema por parte dos alunos do 3.º ciclo do ensino básico. Esta actividade será descrita no sexto
capítulo do presente documento. Como suporte para a actividade, decidimos construir e disponibilizar na Internet um jogo didáctico e interactivo que permitisse exercitar a “Aritmética do Relógio” de forma divertida e que ao mesmo tempo orientasse o utilizador para a obtenção das respostas recorrendo à utilização da aritmética modular. Para concretizar esta ideia e aproveitando
os conhecimentos adquiridos numa Formação Profissional no Módulo de Flash MX obtida em
2005, resolvemos efectuar a construção dos jogos didácticos recorrendo à linguagem ActionScript
3.0, mediante a utilização da aplicação de edição Adobe Flash Professional CS5.
Após a idealização do jogo procedemos à sua implementação. Nesta última, foram sentidas
algumas dificuldades, uma vez que a linguagem utilizada se revelou um pouco confusa, devido a
não exigir a organização estrutural que estamos habituados nas outras linguagens mais comuns.
Assim, sentimos a necessidade de colocar comentários nos procedimentos mais relevantes de modo a permitir uma melhor organização do algoritmo.
Outro aspecto onde sentimos algumas limitações foi na elaboração dos elementos gráficos
do jogo, pelo que a aparência gráfica não ficou tão apelativa como seria desejável. No entanto,
como iremos averiguar mais à frente neste texto, o grafismo do jogo obteve uma boa aceitação
por parte da generalidade dos utilizadores.
Portanto, no seguimento do que foi referido anteriormente, a elaboração do jogo sobre a
“Aritmética do Relógio” foi um dos maiores desafios que nos propusemos desenvolver e que exigiu muita pesquisa na Internet, através da visualização e leitura de muitos tutoriais e do recurso
a vários templates que permitem a sua adaptação de modo a efectuar uma determinada acção
[A].
39
§5.2 Aritmética do Relógio
Capítulo V
Este jogo tem como objectivo simular um relógio e depois apresentar questões de forma
aleatória de modo a permitir a exercitação da aritmética modular e ao mesmo tempo, sempre que
a resposta não for correcta, apresentar uma proposta de resolução. Para tal, definiram-se três
versões fundamentais do referido jogo, duas envolvendo um relógio analógico onde seria questionada a posição do ponteiro das horas, passadas algumas horas (Versão I) e há algumas horas
atrás (Versão II), permitindo deste modo exercitar a aritmética modular de módulo 12 (nestas
duas versões o ponteiro dos minutos não se altera). A terceira versão recorre a um relógio digital
e a questão aleatória, neste caso, envolve os minutos e as horas, permitindo desta vez exercitar a
aritmética modular de módulo 60 e de módulo 24. Para que a jogabilidade do jogo se tornasse
mais apelativa foram definidos três níveis de dificuldade para cada uma das três modalidades. A
forma como foram definidos estes níveis de dificuldade será abordada mais à frente.
As três versões do jogo e os respectivos níveis de dificuldade podem ser acedidos através do
menu no lado esquerdo da página inicial do sítio referido no início do presente capítulo
(www.aritmeticamodular.pt.vg) e ilustrado na Figura 5.1. No entanto, sentiu-se a necessidade de
apresentar este jogo num endereço diferente, de forma a separá-lo das aplicações aos sistemas de
identificação, reduzindo assim a quantidade de informação disponibilizada aos alunos do 3.º ciclo
do ensino básico, factor que poderia revelar-se perturbador do bom funcionamento da Actividade
Prática sobre a “Aritmética do Relógio”. Na figura seguinte podemos observar o aspecto do sítio
da Internet construído para esse efeito e que pode ser acedido através do endereço (relogiomodular.alojamentogratuito.com).
Figura 5.8: Sítio na Internet (Jogo da Aritmética do Relógio).
40
§5.2 Aritmética do Relógio
Capítulo V
Analisemos de seguida o aspecto do jogo da “Aritmética do Relógio” (construído em Flash
nas três versões disponibilizadas).
Figura 5.9: Relógio Analógico – Versão I e Versão II.
Figura 5.10: Relógio Digital.
O algoritmo e respectiva implementação em linguagem ActionScript podem ser visualizados
nos anexos através dos ficheiros “RelogioSomar.as”, “RelogioSubtrair.as” e “RelogioDigital.as”.
No entanto, mostraremos, nos dois exemplos seguintes, as linhas de código onde é aplicada a
aritmética modular.
Exemplo 5.4
De seguida é apresentada a parte do algoritmo onde é utilizada a Aritmética
Modular no caso dos relógios analógicos. A diferença entre a Versão I e a Versão II surge apenas
num sinal, uma vez que numa versão sumamos horas e na outra subtraímo-las. O restante código, que poderá ser consultado em anexo, diz respeito ao aspecto gráfico, relativamente às posições do texto, das imagens, das caixas de acção, dos botões e animações implementadas.
}
// Calcula o resto da divisão inteira com 12.
numOriginal=((numOriginal+HoraInicial)%12);
if(numOriginal==0){
num=12;
}
else{
num=numOriginal;
}
Figura 5.11: Relógio Analógico – Versão I (ActionScript).
41
§5.2 Aritmética do Relógio
Capítulo V
}
// Calcula o resto da divisão inteira com 12.
numOriginal=( ((HoraInicial-numOriginal)%12)+12) % 12;
if(numOriginal==0){
num=12;
}
else{
num=numOriginal;
}
Figura 5.12: Relógio Analógico – Versão II (ActionScript).
Nestas duas figuras (Figura 5.11 e Figura 5.12) está patente a semelhança do modo de aplicar a
aritmética modular desta linguagem (ActionScript) com a linguagem utilizada nos sistemas de
identificação (JavaScript).

Exemplo 5.5 Observemos, nas Figuras 5.13 e 5.14, dois conjuntos de linhas de código que per-
tencem ao algoritmo do Relógio Digital.
// Calcula o resto da divisão inteira com 60.
Min=((Min+MinutosInicial)%60);
if(Min==60){
Min=0;
}
Hour=(int)(SomaXhoras.text);
if(Min<MinutosInicial){
Hour++;
}
Figura 5.13: Relógio Digital – Aritmética modular de módulo 60 (ActionScript).
Neste caso a última parte do código apresentado, garante que sempre que a soma dos minutos for superior a 59 minutos, a hora é incrementada de uma unidade.
// Calcula o resto da divisão inteira com 24.
Hour=((Hour+HoraInicial)%24);
if(Hour==24){
Hour=0;
}
Figura 5.14: Relógio Digital – Aritmética modular de módulo 24 (ActionScript).

Nas versões do Relógio Analógico, sempre que o utilizador acerta, o ponteiro roda até à posição da resposta correcta e é gerada automaticamente uma nova questão. Quando a resposta
está errada, é apresentada a correcção e depois permite que o utilizador volte a jogar através de
um “clique” no botão Continuar. Relativamente à versão do Relógio Digital, quando o utilizador
erra, é-lhe atribuída uma ou duas novas tentativas, dependendo do nível, e após esgotadas as
tentativas definidas, apresenta a resposta correcta e fica à espera de um “clique” no botão Continuar para atribuir uma nova questão. Quando a resposta introduzida for correcta, os números
são actualizados no mostrador do relógio e depois é gerada uma nova questão.
Nas versões do Relógio Analógico, os níveis de dificuldade são atribuídos de acordo com o
valor do número de horas a adicionar ou subtrair. Assim, no Nível I esse número tem valor absoluto inferior a 12, no Nível II tem valor absoluto inferior a 24 e no Nível III esse valor pode ser
no máximo 36. Na versão do Relógio Digital foi definido um ciclo case de modo a ajustar os ní-
42
§5.2 Aritmética do Relógio
Capítulo V
veis de dificuldade de forma rápida e, depois de uma análise e alguns testes, ficaram definidos da
forma apresentada na seguinte figura:
switch(NIVEL){
case 1:
// Escolha de NIVEL 1
NUM_TENTATIVAS_MAX=1;
MaximoHoraInicial=11;
MaximoMinutoInicial=29;
MaximoSomaXhoras=10;
MaximoSomaXminutos=30;
break;
case 2:
// Escolha de NIVEL 2
NUM_TENTATIVAS_MAX=1;
MaximoHoraInicial=11;
MaximoMinutoInicial=59;
MaximoSomaXhoras=9;
MaximoSomaXminutos=59;
break;
case 3:
// Escolha de NIVEL 3
NUM_TENTATIVAS_MAX=2;
MaximoHoraInicial=23;
MaximoMinutoInicial=59;
MaximoSomaXhoras=23;
MaximoSomaXminutos=59;
break;
}
Figura 5.15: Relógio Digital – Níveis de dificuldade (ActionScript).
O nome das variáveis é muito explícito e indica os ajustes efectuados aos valores iniciais e
da questão apresentada para cada nível de dificuldade.
43
§6.1 Aplicação em contexto de sala de aula
Capítulo VI
Capítulo VI – Actividades realizadas na Escola
Há diversos tipos de curiosidade; uma de interesse,
que nos leva ao desejo de aprender o que nos pode ser útil,
e outra, de orgulho, que provém do desejo de saber o que os outros ignoram.
Joseph Addison
Temos que “aproveitar” a curiosidade que caracteriza os nossos alunos, pois é nela que
surge a motivação na aprendizagem. E a melhor forma de os motivar é apresentando os conteúdos recorrendo, sempre que possível, a exemplos próximos das suas vivências e utilizando as tecnologias que os absorvem nestas idades, despertando assim a curiosidade e a vontade de procurar
os métodos para obter a solução dos problemas apresentados.
De seguida, apresentamos duas actividades realizadas no âmbito do presente trabalho: uma
actividade em contexto de sala de aula e a realização de uma conferência para toda a comunidade escolar. Tais actividades foram desenvolvidas no ano lectivo 2010/2011 na Escola Secundária
com 3.º Ciclo do Ensino Básico Doutor Ramiro Salgado, sede do Agrupamento de Escolas de
Torre de Moncorvo, situada na vila de Torre de Moncorvo, pertencente ao distrito de Bragança.
§6.1 Aplicação em contexto de sala de aula
A primeira actividade que vamos expor, foi aplicada a alguns alunos do 7.º ano de escolaridade e a uma turma do 1.º ano do nível II, Tipo 2 do Programa Integrado de Educação e Formação (PIEF), envolvendo no total 21 alunos. Esta escolha foi condicionada pelo serviço atribuído ao autor (deste trabalho) naquele agrupamento de escolas. Num universo de 4 turmas do 7.º
ano de escolaridade, totalizando 70 alunos, foi aplicada aos 12 alunos que estiveram presentes
nas aulas de apoio pedagógico ministradas nos dias 3 e 8 de Junho. A média de idades destes 70
alunos ronda os 12 anos e a média das classificações em Matemática obtidas no final do 2.º período encontra-se no nível 3, numa escala de 1 a 5. São quatro turmas constituídas por alunos que
apresentam grandes dificuldades na disciplina de Matemática. Destes alunos, os que frequentam
as aulas de apoio são, na sua grande maioria, os que obtiveram piores classificações em Matemática. Relativamente à turma do PIEF, esta é constituída por 12 alunos com variados problemas
de integração na sociedade. A média de idades destes alunos ronda os 14,5 anos e a média das
classificações obtidas no final do 2.º período à disciplina de Matemática foi de nível 3. No dia 3
de Junho, data da implementação da Actividade Prática, apenas estavam presentes 9 alunos.
Esta actividade visava analisar as capacidades e aptidões dos alunos na resolução de problemas envolvendo a “Aritmética do Relógio” com aplicações, inicialmente mais directas, em
situações envolvendo relógios analógicos e/ou digitais e posteriormente em contextos mais diversificados. Pretendíamos analisar a evolução na compreensão desta aritmética por parte dos alunos após a prática de alguns minutos nos jogos construídos e disponibilizados por nós no sítio da
Internet (referido no parágrafo 5.2 do capítulo anterior).
44
§6.1 Aplicação em contexto de sala de aula
Capítulo VI
A Actividade Prática - “Aritmética do Relógio” foi aplicada numa sala de informática e
teve a duração de 45 minutos, envolvendo vários momentos. Iniciou-se com a resolução da Parte
I, que consistia em 5 questões, sendo as três primeiras de aplicação ao relógio analógico, a quarta
envolvendo uma questão com um relógio digital e a quinta questão, surgia um pouco mais distanciada desta temática das horas, mas ainda num contexto da aritmética modular. Só esta última questão, envolvia a necessidade de uma cuidada interpretação do enunciado, pois as restantes questões eram apresentadas de forma directa. Foram disponibilizados 10 minutos, para a resolução desta parte. O professor não interveio garantindo, assim, que os alunos analisassem e
procurassem as soluções dos problemas apresentados de forma autónoma e sem nenhuma influência ou encaminhamento nos métodos de resolução. Os alunos recorreram aos seus conhecimentos
e às suas experiências. A grande maioria, resolveu esta primeira parte da actividade utilizando as
figuras apresentadas, o que lhes possibilitou resolver as questões recorrendo a contagens. No final
dos 10 minutos, o professor recolheu as resoluções dos alunos e exemplificou sucintamente algumas possibilidades de resolução de problemas semelhantes aos apresentados na primeira parte.
Fez sempre referência à aritmética modular, nomeadamente à aplicação do algoritmo da divisão,
alertando-os para o papel do resto da divisão por 12, 60 e 24 nas questões que envolvem problemas horários e a sua generalização para outras situações como o da quinta questão. De seguida,
foram disponibilizados 15 minutos para os discentes experimentarem as diversas versões e níveis
do jogo da “Aritmética do Relógio”, disponibilizado no endereço especialmente destinado para a
aplicação desta actividade (relogiomodular.alojamentogratuito.com). Ao longo destes minutos, o
professor acompanhou os alunos e orientou-os na resolução das questões que surgiam aleatoriamente, bem como na transição para níveis de dificuldade superior. Todos os alunos seguiram a
mesma sequência (iniciaram no primeiro nível da versão I, seguindo para os restantes níveis desta versão e só depois passaram para as outras versões procedendo de igual forma), sendo que
alguns não chegaram a praticar em níveis mais avançados, devido às dificuldades que apresentaram. Nesta fase da Actividade Prática, os alunos sentiram um acréscimo de motivação, o que os
levou a praticar inúmeras vezes a aritmética em estudo. Após os 15 minutos previstos, foi distribuída aos discentes a segunda parte da actividade, que consistia em 5 questões, de estrutura análoga à da primeira parte, mas com um grau de dificuldade ligeiramente maior, permitindo inferir
relativamente à possível melhoria das aptidões dos alunos na utilização desta aritmética. De facto, a resolução das questões recorrendo a contagens tornava-se menos viável, devido à utilização
de valores mais elevados nos enunciados. No final da aula os alunos responderam a um pequeno
questionário que possibilitou obter um maior feedback sobre a aplicação da Actividade Prática.
Após a análise das respostas apresentadas pelos alunos, constatámos que na primeira parte, os
alunos responderam recorrendo a estratégias de contagem, e que na segunda parte, a grande
maioria dos discentes utilizou as estratégias que faziam recurso à aritmética modular explicadas
quer pelo professor, quer pelas correcções apresentadas nos jogos. Pode ser analisada em anexo,
uma grelha com as pontuações obtidas pelos alunos envolvidos na Actividade Prática. Através
45
§6.1 Aplicação em contexto de sala de aula
Capítulo VI
desta grelha podemos constatar que a maioria dos alunos, aumentou a sua pontuação, o que evidencia uma melhoria da capacidade de cálculo na resolução de questões deste tipo, em parte motivada pelo treino efectuado com o auxílio do jogo da “Aritmética do Relógio”. Alguns alunos
pioraram as suas pontuações, em parte devido ao cansaço apresentado no final da aula, deixando
por resolver algumas questões. Também podemos constatar que os alunos preferiram utilizar
outras estratégias de modo a evitar a utilização do algoritmo da divisão, estratégias essas que
também foram explicadas pelo professor. Este facto deve-se à dificuldade em efectuar a operação
da divisão, sendo que a maioria dos discentes demostraram estar demasiadamente dependentes
da utilização da calculadora. Temos que ser cautelosos com as conclusões retiradas, com esta
actividade, pois a amostra de alunos não é suficientemente estratificada, uma vez que não abrange alunos com boas classificações em Matemática. No entanto, serviu para verificar que a utilização das tecnologias, nomeadamente da Internet e de actividades lúdicas e interactivas, e de problemas em contexto real se traduziram numa maior motivação e persistência na compreensão e
exercitação de um conteúdo aparentemente estranho para jovens da referida faixa etária.
§6.2 Conferência: “Aplicações da Aritmética Modular”
Foi proferida uma conferência intitulada “Aplicações da Aritmética Modular” no dia 8 de
Junho de 2011 na Escola Doutor Ramiro Salgado, sede do Agrupamento de Escolas de Torre de
Moncorvo. Para tal, efectuámos a divulgação junto de toda a comunidade escolar, através da
fixação de cartazes e das respectivas folhas de inscrição nas três salas de professores e na biblioteca da escola. De modo a que todos os alunos do ensino secundário tomassem conhecimento da
palestra, pedimos a colaboração dos professores da disciplina de Matemática na divulgação e
inscrição dos alunos na conferência. Recorreu-se a uma apresentação elaborada com o Microsoft
PowerPoint constituída por 46 diapositivos (ver anexos) que durou sensivelmente 70 minutos. A
apresentação dividiu-se em dois blocos principais. A primeira parte permitiu motivar a audiência
para esta temática recorrendo a referências históricas da utilização de sistemas de codificação e
protecção de mensagens ao longo dos tempos. Foram também apresentados dois exemplos simples que serviram para alertar para a necessidade da introdução de caracteres de controlo de
modo a detectar a ocorrência de erros na transmissão de uma palavra de um determinado idioma. A segunda parte foi, toda ela, dedicada à aritmética modular e aos sistemas de identificação
modulares. Nesta segunda parte, introduzimos os conceitos e definições inerentes aos sistemas de
identificação e números de identificação, bem como a caracterização dos tipos de erros de ocorrência mais comum na transmissão destes números. De seguida apresentámos a aritmética modular, recorrendo ao jogo da “Aritmética do Relógio” e aproveitou-se para publicitar o sítio da Internet dedicado exclusivamente a este jogo (referido no parágrafo 5.2). Na parte final da apresentação foram expostos com maior pormenor o sistema European Article Number (EAN) e o sistema International Standard Book Number (ISBN), explicando a sua constituição, a forma de verificação e determinação do carácter de controlo, os tipos de erros detectados e não detectados
46
§6.2 Conferência: “Aplicações da Aritmética Modular”
Capítulo VI
nestes sistemas, as suas vantagens e desvantagens bem como a evolução do sistema ISBN. Na
exemplificação da detecção de erros, recorremos à folha de cálculo dinâmica, o que permitiu visualizar todos os cálculos inerentes aos algoritmos apresentados e alterar valores de forma rápida e
transparente. Seguidamente, foram referidos alguns sistemas de identificação que seguem estruturas semelhantes às destes sistemas, tais como o International Standard Music Number (ISMN), o
International Standard Serial Number (ISSN), assim como os sistemas nacionais subjacentes aos
números do Bilhete de Identidade (BI), Cartão do Cidadão (CC) e ao Número de Identificação
Fiscal (NIF). A conferência terminou com a apresentação de dois sistemas relacionados com o
actual sistema monetário, o sistema utilizado nos números de série das notas de euro e o sistema
utilizado no Número de Identificação Bancária (NIB). No decorrer da apresentação foram efectuadas diversas ligações aos sítios da Internet construídos, permitindo a sua divulgação, assim
como a exemplificação da elaboração de códigos de barras na aplicação informática ActiveBarcode. A conferência foi ministrada de forma a possibilitar a interacção com a assistência ao longo
da apresentação dos conteúdos, nomeadamente a utilização de números de identificação de alguns dos elementos presentes na assistência. Não obstante, no final, foram ainda disponibilizados
alguns minutos para intervenções de todos os intervenientes. Por último, foi preenchido um questionário o que permitiu constatar as opiniões dos alunos e professores presentes.
Durante o processo de divulgação da conferência “Aplicações da Aritmética Modular” fomos surpreendidos com inúmeras reacções negativas por parte dos elementos da comunidade escolar, que quando eram convidados para a referida actividade, diziam logo que não lhes interessava devido ao envolvimento da Matemática. No entanto, depois de uma breve elucidação do
conteúdo e temas abordados na conferência, alteraram a sua opinião e acabaram por estar presentes. Um outro factor que se revelou determinante, foi o cartaz de divulgação da conferência
(ver anexos), que apesar da sua simplicidade, despertou a atenção para os temas abordados e
mostrou-se muito apelativo e estimulador de curiosidade, por remeter para várias situações do
quotidiano.
Os objectivos que motivaram esta conferência, passavam pela divulgação e compreensão da
forma como a aritmética modular está presente no nosso quotidiano e como as suas aplicações
são importantes na actualidade. Os objectivos foram completamente atingidos. Prova disso foram
os comentários que surgiram nos questionários e no final da conferência, bem como as abordagens de elementos da comunidade escolar em geral, que não puderam estar presentes no dia da
conferência e que, ao longo dos dias seguintes à sua ocorrência, mostraram algum interesse sobre
o tema. As expressões de admiração e desconhecimento dos interessados perante os esclarecimentos levou-nos a intuir que este tema ainda não é do conhecimento da maioria da comunidade
escolar.
47
Conclusão
A vida é boa em apenas duas coisas,
descobrir matemática e ensinar matemática.
Siméon Poisson
A aritmética modular e as suas aplicações comprovam a constante expansão e evolução da
matemática. O próprio contexto da sociedade e da realidade onde estamos inseridos obriga ao
desenvolvimento de cada vez mais métodos que permitam a melhoria na nossa estruturação e
organização, bem como nos modos de comunicação em segurança e com eficácia. Esta aritmética
é poderosíssima e muito versátil, apresentando-se no nosso quotidiano das mais variadas formas,
podendo ser encontrada, para além dos sistemas de identificação, nos processos de codificação e
descodificação de mensagens no âmbito da criptografia. Talvez por isso se possa afirmar que, este
trabalho nos possibilitou a abertura de horizontes, que agora nos estimulam a curiosidade e interesse por continuar o estudo nesta área.
Nos quatro capítulos iniciais deste trabalho foram abordadas as noções essenciais e fundamentais, para todos os que desejem iniciar-se numa incursão ao mundo dos sistemas de identificação, recorrendo essencialmente à utilização da aritmética modular. É óbvio que muito ficou por
referir. No entanto, penso que o principal objectivo, o de estimular e cativar os leitores para as
aplicações da aritmética modular, partindo de exemplos concretos e sobejamente utilizados, foi
cumprido. Após a indispensável introdução e contextualização do tema, partiu-se para a explanação de sistemas de identificação muito utilizados, recorrendo a exemplos concretos e realçando
sempre os aspectos mais simples e de forma mais esmiuçada possível, pois a simplicidade pode
originar a complexidade.
O gosto pela Matemática tem que ser desenvolvido desde muito cedo, pois nas faixas etárias mais avançadas, torna-se mais complicado de efectuar a mudança de opinião relativamente à
Matemática. E a melhor forma de o fazer, junto das crianças e jovens, é recorrer a situações particulares do dia-a-dia, e próximas do ambiente escolar e familiar deles, de modo a motivá-los
para os temas e só depois efectuar a generalização para outras situações menos próximas das
suas vivências. No caso da aritmética modular, pensamos que o melhor momento para a primeira
abordagem será no 3.º ano do 1.º ciclo do ensino básico, pois é neste ano que é introduzido o
tema das horas e o algoritmo para a divisão inteira. Muitas vezes é leccionado este algoritmo e os
alunos não são alertados para a importância do valor correspondente ao resto da divisão. Com
um exemplo simples, envolvendo o relógio, os discentes encontrariam alguma utilidade para este
valor, motivando-os para o estudo do algoritmo da divisão. Poderiam ser utilizados materiais
manipuláveis e jogos interactivos como os apresentados ao longo deste trabalho. Mais tarde, ao
longo do 3.º ciclo do ensino básico, deveriam ser propostos problemas envolvendo esta aritmética,
semelhantes aos da Actividade Prática que expusemos, permitindo assim, a utilização da “Aritmética do Relógio” noutros contextos. Estas abordagens, quando acompanhadas pelas novas tec48
nologias, revelam uma óptima aceitação e motivação por parte dos alunos, pois permite-lhes interagir com a Matemática, o que os estimula para a prática da mesma. Apercebemo-nos que a
maioria dos alunos neste nível de ensino, já não se recorda do algoritmo da divisão, o que consideramos grave, pois a divisão é uma das quatro operações básicas da Matemática. Durante o
ensino secundário, poderiam ser apresentados exemplos mais elaborados das aplicações da aritmética modular, tais como as aplicações nos sistemas de identificação, onde os alunos utilizariam
os seus números de identificação e efectuariam os cálculos de verificação e determinação dos algarismos de controlo. Mais uma vez, achamos importante a utilização da folha de cálculo dinâmica e do sítio da Internet construído.
As actividades realizadas na escola serviram para confirmar o poder dos sítios da Internet
disponibilizados pois, quer na Actividade Prática, quer na conferência, os alunos e os professores
envolvidos conservaram os endereços dos referidos sítios da Internet, não só para voltarem a praticar e experimentar como também para divulgar junto de amigos e familiares.
O meu interesse está no futuro,
pois é lá que vou passar o resto de minha vida.
Charlles Kettering
Em conclusão, este trabalho permitiu-nos averiguar que se optarmos por formas diversificadas, apelativas e interactivas, conseguiremos chegar a todas as mentes, mesmo àquelas que não
gostam ou têm dificuldades na aprendizagem da Matemática. Este trabalho para além de permitir a divulgação da aritmética modular, através da Internet, permitiu-nos aperfeiçoar e desenvolver aptidões para a elaboração de actividades interactivas recorrendo a este meio de comunicação, possibilitando, no futuro, a sua utilização noutras situações, envolvendo este ou outros assuntos da Matemática.
49
Bibliografia
[1] Birckoff, G e Maclane, S., Álgebra Moderna, Editorial Vivens-vives, Barcelona, 1970.
[ISBN 84-316-1226-6]
[2] Borceux, F., A arte do segredo público, conferência realizada no Instituto Politécnico de Viseu a 14 de Dezembro de 2006.
[3] Clarkson, T., Planning for the Age of ISBN-13: A BISAC Briefing on How to Manage the Transition, PMA Newsletter.
[4] Hefez, A. e Villela, M. L. T., Códigos corretores de erros, Instituto Nacional de Matemática Pura e Aplicada, Brasil, 2002.
[ISBN 85-244-0189-9]
[5] ISBN Agency, Guidelines for the Implementation of 13-Digit ISBNs, International ISBN Agency, Berlin, 2004.
[ISBN 3-88053-108-0]
[6] ISBN Agency, ISBN User’s Manual – International Edition, International ISBN Agency, Berlin, 2005.
[ISBN 3-88053-113-7]
[7] ISMN Agency, ISMN User’s Manual, International ISMN Agency, Berlin, 2005.
[ISBN 3-88053-122-6]
[8] Kirtland, J., Identification Numbers and Check Digit Schemes, The Mathematical Association of America, Washington, 2001.
[ISBN 0-88385-720-0]
[9] Lidl, R. e Niederreiter, H., Introduction to finite fields, Cambridge University Press, Cambridge, 2002.
[ISBN 0-521-46094-8]
[10] Lines, M., Pense num Número – Aprender a Fazer Ciência, Gradiva, Lisboa, 1993.
[ISBN 972-662-326-X]
[11] Lint, J. H. V., Coding theory, Springer-Verlag, Berlin.Heidelberg.New York, 1971.
[ISBN 3-540-05476-6]
[12] Picado, J., A álgebra dos sistemas de identificação: da aritmética modular aos grupos diedrais, Boletim da Sociedade Portuguesa
de Matemática, vol 44, 2001.
[13] Queiró, J. F., Teoria dos Números, Departamento de Matemática – Universidade de Coimbra, Coimbra, 2002.
[14] Roman, S., Coding and information theory, Springer, New York, 1992.
[ISBN 0-387-97812-7]
[15] Sobral, M., Álgebra, Universidade Aberta, Lisboa, 1996.
[ISBN 972-674-176-9]
[16] Vitória, J. e Lima, T. P., Álgebra Linear, Universidade Aberta, Lisboa, 1998.
[ISBN 972-674-218-8]
50
Tecnografia
[A] ActionScript 3.0 Language and Components Reference.
[L] International ISMN Agency.
http://www.w3schools.com/
http://www.ismn-international.org/
[B] Administração Central do Sistema de Saúde.
[M] International Organization for Standardization.
http://www.acss.min-saude.pt/
http://www.iso.org/
[C] Associação Portuguesa de Editores e Livreiros.
[N] ISBN-13 online converter.
http://www.apel.pt/
http://www.isbn.org/converterpub.asp
[D] Bar Code 1 – A web of information about bar code.
[O] ISSN – Biblioteca Nacional de Portugal.
http://www.adams1.com/pub/russadam/
http://www.bn.pt/servicos-ao-publico/sp-issn.html
[E] Biblioteca Nacional.
[P] ISSN – International Center.
http://www.bn,pt/
http://www.issn.org/
[F] Cartão de Cidadão.
[Q] Japanese Article Number code.
http://www.cartaodecidadao.pt/
http://www.sensorcentral.com/barcode/barcode03.php
[G] Global Trade Identification Number.
[R] Sistemas de Identificação com algarismos de Controlo.
http://www.gtin.info/
http://www.atractor.pt/mat/alg_controlo/
[H] GS1.
[S] Software para imprimir códigos de barras.
http://www.gs1.org/
[I]
http://www.barcodingfonts.com/
[T] The international ISBN Agency.
How Bar Code Works – UPC.
http://www.howstuffworks.com/upc.htm
http://isbn-international.org/
[J] Informações sobre EAN.
[U] The Power of Identification Technology - Applied Digital.
http://www.adsx.com/
http://www.ean.be/
[K] Instituto Português de Qualidade.
[V] Tutoriais de HTML e de JavaScript.
http://www.w3schools.com/
http://www.ipq.pt/
51
Anexos
Anexos
Conteúdos
I - Elaboração de sítios na Internet (aritmeticamodular.pt.vg) ...................................................A3
I.1 - Sistemas de Identificação (sistemaidentificacao.no.sapo.pt) .............................................A3
I.2 - Aritmética do Relógio (relogiomodular.alojamentogratuito.com) ................................... A16
I.2.1 - Relógio Modular Analógico – Versão I – Nível I ..................................................... A16
I.2.2 - Relógio Modular Analógico – Versão II – Nível I .................................................... A18
I.2.3 - Relógio Modular Digital – Nível I, II e III ............................................................... A20
II - Actividades realizadas na Escola ......................................................................................... A24
II.1 - Aplicação em contexto de sala de aula ......................................................................... A24
II.1.1 - Actividade Prática – Parte I .................................................................................. A24
II.1.2 - Actividade Prática – Parte II ................................................................................. A26
II.1.3 - Actividade Prática – Questionário ......................................................................... A28
II.1.4 - Registos Fotográficos da Actividade Prática .......................................................... A29
II.1.5 - Registos relativos à Actividade Prática – “Aritmética do Relógio” ....................... A32
II.2 - Conferência: “Aplicações da Aritmética Modular” ....................................................... A33
II.2.1 - Cartaz de divulgação da conferência ...................................................................... A33
II.2.2 - Folhas de inscrição (Professores do Agrupamento de Escolas)............................... A34
II.2.3 - Folhas de inscrição (Alunos do Ensino Secundário) ............................................... A35
II.2.4 - Conteúdo da apresentação em PowerPoint (Diapositivos) ..................................... A36
II.2.5 – Questionário/Reflexão ........................................................................................... A59
II.2.6 - Registos Fotográficos da Conferência: “Aplicações da Aritmética Modular” ......... A60
Anexos
A2
Anexos
I - Elaboração de sítios na Internet (aritmeticamodular.pt.vg)
I.1 - Sistemas de Identificação (sistemaidentificacao.no.sapo.pt)
ASPECTO GRÁFICO DA PÁGINA DE VERIFICAÇÃO DE NÚMEROS DE IDENTIFICAÇÃO
CONTEÚDO DO FICHEIRO - verificar.htm
<HTML><HEAD><TITLE>Verificação dos números de Identificação - Sistemas de
Identificação Modulares - Paulo Lourenço</TITLE>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META
content="EAN, BI, ISBN, ISSN, NIF, ISMN, Notas de Euro"
name=keywords>
<META
content="Aritmética Modular - COIMBRA 2011"
name=description>
<META content=en name=language>
<SCRIPT language=JavaScript>
<!-function bi(form) {
peso = 1;
soma = 0;
if (form.numero.value.length!=9){
alert("Introduzir 9 algarismos")
form.cc.value = ""
form.intro.value = "";
}
else{
for (index = form.numero.value.length; index > 0; --index) {
soma = soma + form.numero.value.substring (index-1, index) * peso;
peso++;
}
soma = (soma % 11);
if(soma==0 || (form.numero.value.substring (8, 9)==0 && soma==1 )){
cc="Correcto";
}
else{
cc="Errado";
}
form.intro.value = cc;
result = form.intro.value;
form.cc.value = cc
}
}
function ISBN(form) {
A3
Anexos
peso = 1;
soma = 0
if (form.numero.value.length!=10){
alert("Introduzir 10 caracteres")
form.cc.value = ""
form.intro.value = "";
}
else{
for (index = form.numero.value.length ; index > 0; --index) {
if(form.numero.value.substring (index-1, index)=="X" || form.numero.value.substring (index-1, index)=="x"){
soma= soma + (10 * peso);
}
else{
soma = soma + form.numero.value.substring (index-1, index) * peso;
}
peso++;
}
soma = (soma % 11);
if(soma==0){
cc="Correcto";
}
else{
cc="Errado";
}
form.intro.value = cc;
result = form.intro.value;
form.cc.value = cc
}
}
function EAN(form) {
peso = 1;
soma = 0;
if (form.numero.value.length!=13){
alert("Introduzir 13 algarismos")
form.cc.value = ""
form.intro.value = "";
}
else{
for (index = form.numero.value.length; index > 0; --index) {
soma = soma + form.numero.value.substring (index-1, index) * peso;
peso = 4 - peso;
}
soma = (soma % 10);
if(soma==0){
cc="Correcto";
}
else{
cc="Errado";
}
form.intro.value = cc;
result = form.intro.value;
form.cc.value = cc
}
}
function ISMN(form) {
peso = 1;
soma = 9;
if (form.numero.value.length!=10){
alert("Introduzir 10 caracteres")
form.cc.value = "";
form.intro.value = "";
}
else{
if(form.numero.value.substring (0, 1).toUpperCase()!="M"){
alert("O ISMN tem que iniciar com a letra M")
form.cc.value = "";
form.intro.value = "";
}
else{
for (index = form.numero.value.length; index > 1; --index) {
soma = soma + form.numero.value.substring (index-1, index) * peso;
peso = 4 - peso;
}
soma = (soma % 10);
if(soma==0){
cc="Correcto";
}
else{
cc="Errado";
}
form.intro.value = cc;
result = form.intro.value;
form.cc.value = cc
}
}
}
function nif(form) {
peso = 1;
A4
Anexos
soma = 0;
if (form.numero.value.length!=9){
alert("Introduzir 9 algarismos")
form.cc.value = ""
form.intro.value = "";
}
else{
for (index = form.numero.value.length; index > 0; --index) {
soma = soma + form.numero.value.substring (index-1, index) * peso;
peso++;
}
soma = (soma % 11);
if(soma==0 || (form.numero.value.substring (8, 9)==0 && soma==1 )){
cc="Correcto";
}
else{
cc="Errado";
}
form.intro.value = cc;
result = form.intro.value;
form.cc.value = cc
}
}
function ISSN(form) {
peso = 1;
soma = 0
if (form.numero.value.length!=8){
alert("Introduzir 8 caracteres")
form.cc.value = ""
form.intro.value = "";
}
else{
for (index = form.numero.value.length ; index > 0; --index) {
if(form.numero.value.substring (index-1, index)=="X" || form.numero.value.substring (index-1, index)=="x"){
soma= soma + (10 * peso);
}
else{
soma = soma + form.numero.value.substring (index-1, index) * peso;
}
peso++;
}
soma = (soma % 11);
if(soma==0){
cc="Correcto";
}
else{
cc="Errado";
}
form.intro.value = cc;
result = form.intro.value;
form.cc.value = cc
}
}
function EURO(form) {
peso = 1;
soma = 0;
estado="";
if (form.numero.value.length!=12){
alert("Introduzir 12 caracteres")
form.cc.value = "";
form.intro.value = "";
}
else{
if(form.numero.value.substring (0, 1).toUpperCase()<"A" || form.numero.value.substring (0,
1).toUpperCase()>"Z"){
alert("O primeiro caracter tem que ser uma letra")
form.cc.value = "";
form.intro.value = "";
}
else{
switch(form.numero.value.substring (0, 1).toUpperCase()){
case "A":
soma = 2;
estado = "por atribuir";
break;
case "B":
soma = 3;
estado = "por atribuir";
break;
case "C":
soma = 4;
estado = "por atribuir";
break;
case "D":
soma = 5;
estado = "Estónia";
break;
A5
Anexos
case "E":
soma = 6;
estado = "Eslováquia";
break;
case "F":
soma = 7;
estado = "Malta";
break;
case "G":
soma = 8;
estado = "Chipre";
break;
case "H":
soma = 9;
estado = "Eslovénia";
break;
case "I":
soma = 1;
estado = "não atribuído";
break;
case "J":
soma = 2;
estado = "Reino Unido*";
break;
case "K":
soma = 3;
estado = "Suécia*";
break;
case "L":
soma = 4;
estado = "Finlândia";
break;
case "M":
soma = 5;
estado = "Portugal";
break;
case "N":
soma = 6;
estado = "Áustria";
break;
case "O":
soma = 7;
estado = "não atribuído";
break;
case "P":
soma = 8;
estado = "Holanda";
break;
case "Q":
soma = 9;
estado = "não atribuído";
break;
case "R":
soma = 1;
estado = "Luxemburgo";
break;
case "S":
soma = 2;
estado = "Itália";
break;
case "T":
soma = 3;
estado = "Irlanda";
break;
case "U":
soma = 4;
estado = "França";
break;
case "V":
soma = 5;
estado = "Espanha";
break;
case "W":
soma = 6;
estado = "Dinamarca*";
break;
case "X":
soma = 7;
estado = "Alemanha";
break;
case "Y":
A6
Anexos
soma = 8;
estado = "Grécia";
break;
case "Z":
soma = 9;
estado = "Bélgica";
break;
default:
break;
}
for (index = form.numero.value.length; index > 1; --index) {
soma = soma + form.numero.value.substring (index-1, index) * peso;
}
soma = (soma % 9);
if(soma==0){
cc="Correcto";
}
else{
cc="Errado";
}
form.intro.value = cc;
form.intro0.value = estado;
}
}
}
<!-- -->
</SCRIPT>
<META content="MSHTML 6.00.6000.16441" name=GENERATOR>
<style type="text/css">
.style1 {
text-align: center;
}
.style2 {
font-size: x-small;
}
.style4 {
background-color: #FFFFDD;
}
.style5 {
text-align: left;
}
</style>
</HEAD>
<BODY bgcolor="#FFFFDD" link="#996600" alink="#006600"><!-- HEADER START -->
<p>&nbsp;</p>
<TABLE cellSpacing=0 cellPadding=0 width=714 align=center border=0 id="table1">
<TBODY>
<TR>
<TD vAlign=top width=714>
<H1 class="style34 style5 style7 style12" align="center"><font size="7">Sistemas de
Identificação
</font>
</H1>
<p class="style34 style5 style7 style12" align="center">&nbsp;</p>
<P>Escolha uma das seguintes opções:</P>
<UL>
<LI>
<a title="Clicar para verificar se um número de identificação está correcto ou não..."
href="verificar.htm">Verificação dos
números de Identificação</a><LI>
<a href="calcular.htm" title="Clicar para determinar algarismos de controlo de um dos sistemas...">Cálculo dos
caracteres de controlo</a>
<LI>
<a href="sabermais.htm">Saber mais...</a> </LI></UL>
</TD></TR></TBODY></TABLE>
<p>&nbsp;</p>
<TABLE cellSpacing=0 cellPadding=0 width=714 align=center border=0>
<TBODY>
<TR>
<TD vAlign=top width=714 class="style4">
<H2 align="center"><font size="6">Verificação dos números de Identificação</font></H2>
<p align="center">Introduza o número com o respectivo caracter de controlo
e clique em &quot;Verificar&quot;...</p>
<P>
<TABLE class=style4 cellSpacing=1 cellPadding=4 width="100%" border=0 height="313">
<TBODY>
<TR>
<TH valign="middle" height="38" bgcolor="#99B1E6">
<font size="4">Sistema</font></TH>
<TH height="38" bgcolor="#99B1E6">
<font size="4">Número de Identificação<BR>+ caracter de controlo
</font> </TH>
<TH height="38" bgcolor="#99B1E6">
<DIV align=left>&nbsp;</DIV></TH>
<TH height="38" bgcolor="#99B1E6">
<font size="4">Verificação</font></TH>
</TR>
<TR>
A7
Anexos
<FORM>
<TD width=94 valign="middle" height="57" bgcolor="#C1D0F0" align="left">BI</TD>
<TD width=239 valign="middle" height="57" bgcolor="#C1D0F0" class="style2">
<p align="center">
<INPUT maxLength=9 size=9 name=numero class="style2">
<BR class="style2">
<span class="style2">(Introduzir 9 algarismos)*</span></TD>
<TD width=123 valign="middle" height="57" bgcolor="#C1D0F0">
<p align="center"><INPUT onclick=bi(this.form) type=button value=Verificar>
</TD>
<TD width=129 valign="middle" height="57" bgcolor="#C1D0F0">
<p align="center"><INPUT readonly size=14 name=intro> </TD>
<TD valign="middle" height="57" bgcolor="#C1D0F0" style="width: 68px">
<p align="center">
<INPUT type=reset value=Limpar style="float: center"> </TD></FORM></TR>
<TR>
<FORM>
<TD width=94 valign="middle" height="57" bgcolor="#C1D0F0" align="left">NIF</TD>
<TD width=239 height="57" bgcolor="#C1D0F0" class="style2">
<p align="center">
<INPUT id=numero maxLength=9 size=9 name=numero class="style2">
<BR class="style2"><span class="style2">(Introduzir 9 algarismos)
</span> </TD>
<TD width=123 height="57" bgcolor="#C1D0F0">
<p align="center"><INPUT onclick=nif(this.form) type=button value=Verificar>
</TD>
<TD width=129 height="57" bgcolor="#C1D0F0">
<p align="center"><INPUT readonly size=14 name=intro> </TD>
<TD height="57" bgcolor="#C1D0F0" style="width: 68px">
<p align="center"><INPUT type=reset value=Limpar>
</TD></FORM></TR>
<TR>
<FORM>
<TD width=94 valign="middle" height="57" bgcolor="#C1D0F0" align="left">ISSN</TD>
<TD width=239 height="57" bgcolor="#C1D0F0" class="style2">
<p align="center">
<INPUT id=numero maxLength=8 size=8 name=numero class="style2">
<BR class="style2"><span class="style2">(Introduzir 8 caracteres)
</span> </TD>
<TD width=123 height="57" bgcolor="#C1D0F0">
<p align="center"><INPUT onclick=ISSN(this.form) type=button value=Verificar>
</TD>
<TD width=129 height="57" bgcolor="#C1D0F0">
<p align="center"><INPUT readonly size=14 name=intro> </TD>
<TD height="57" bgcolor="#C1D0F0" style="width: 68px">
<p align="center"><INPUT type=reset value=Limpar>
</TD></FORM></TR>
<TR>
<FORM>
<TD width=94 valign="middle" height="58" bgcolor="#C1D0F0" align="left">ISBN-10</TD>
<TD width=239 height="58" bgcolor="#C1D0F0" class="style2">
<p align="center">
<INPUT id=numero maxLength=10 size=10 name=numero class="style2">
<BR class="style2"><span class="style2">(Introduzir 10 caracteres)
</span> </TD>
<TD width=123 height="58" bgcolor="#C1D0F0">
<p align="center"><INPUT onclick=ISBN(this.form) type=button value=Verificar>
</TD>
<TD width=129 height="58" bgcolor="#C1D0F0">
<p align="center"><INPUT readonly size=14 name=intro> </TD>
<TD height="58" bgcolor="#C1D0F0" style="width: 68px">
<p align="center"><INPUT type=reset value=Limpar> </TD></FORM></TR>
<TR>
<FORM>
<TD width=94 valign="middle" height="58" bgcolor="#C1D0F0" align="left">
ISBN-13&nbsp; EAN</TD>
<TD width=239 height="58" bgcolor="#C1D0F0" class="style2">
<p align="center">
<INPUT id=numero maxLength=13 size=13 name=numero class="style2">
<BR class="style2"><span class="style2">(Introduzir 13 algarismos)
</span> </TD>
<TD width=123 height="58" bgcolor="#C1D0F0">
<p align="center"><INPUT onclick=EAN(this.form) type=button value=Verificar>
</TD>
<TD width=129 height="58" bgcolor="#C1D0F0">
<p align="center"><INPUT readonly size=14 name=intro> </TD>
<TD height="58" bgcolor="#C1D0F0" style="width: 68px">
<p align="center"><INPUT type=reset value=Limpar> </TD></FORM></TR>
<TR>
<FORM>
<TD width=94 valign="middle" height="58" bgcolor="#C1D0F0" align="left">
ISMN</TD>
<TD width=239 height="58" bgcolor="#C1D0F0" class="style2">
<p align="center">
<INPUT id=numero maxLength=10 size=10 name=numero class="style2">
<BR class="style2"><span class="style2">(Introduzir 10 caracteres)
</span> </TD>
<TD width=123 height="58" bgcolor="#C1D0F0">
<p align="center"><INPUT onclick=ISMN(this.form) type=button value=Verificar>
</TD>
A8
Anexos
<TD width=129 height="58" bgcolor="#C1D0F0">
<p align="center"><INPUT readonly size=14 name=intro> </TD>
<TD height="58" bgcolor="#C1D0F0" style="width: 68px">
<p align="center"><INPUT type=reset value=Limpar> </TD></FORM></TR>
<TR>
<FORM>
<TD width=94 valign="middle" height="58" bgcolor="#C1D0F0" align="left">
Notas de EURO</TD>
<TD width=239 height="58" bgcolor="#C1D0F0" class="style2">
<p align="center">
<INPUT id=numero maxLength=12 size=12 name=numero class="style2">
<BR class="style2"><span class="style2">(Introduzir 12 caracteres)
</span> </TD>
<TD width=123 height="58" bgcolor="#C1D0F0">
<p align="center"><INPUT onclick=EURO(this.form) type=button value=Verificar>
</TD>
<TD width=129 height="58" bgcolor="#C1D0F0">
<p align="center"><INPUT readonly size=14 name=intro> </TD>
<TD height="58" bgcolor="#C1D0F0" style="width: 68px">
<p align="center"><INPUT type=reset value=Limpar> </TD>
<TD bgcolor="#C1D0F0" class="style1" style="width: 143px; height: 34px;">
<p style="width: 117px; height: 41px;" class="style1" >Estado Emissor:<INPUT readonly size=14
name=intro0></TD></FORM></TR>
</TBODY></TABLE>
</TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=714 align=center border=0 id="table3">
<TBODY>
<TR>
<TD vAlign=top width=269>
<p align="center">&nbsp;</TD>
<TD vAlign=top width=445>
<font size="2">* </font> <span style="font-family:Euclid"><font size="2">
Sempre que um número de bilhete de identidade apresente menos de oito
algarismos, acrescentam-se os zeros necessários à esquerda do número até
totalizar os oito algarismos.</font></span></TD></TR></TBODY></TABLE>
<p align="center">&nbsp;</p>
<TABLE cellSpacing=0 cellPadding=0 width=714 align=center border=0 id="table2">
<TBODY>
<TR>
<TD vAlign=top width=714>
<p align="center">Coimbra, Junho de 2011</TD></TR></TBODY></TABLE>
<p align="center"><font size="1">
<a title="Clicar para enviar uma mensagem de correio electrónico..."
href="mailto:[email protected]?subject=Sistemas de Identificação Modulares">
<font color="#000000">PJPL Productions</font></a></font></p>
<!-- CONTENT STOP --><!-- FOOTER START -->
<!-- FOOTER STOP --></BODY></HTML>
ASPECTO GRÁFICO DA PÁGINA DE VERIFICAÇÃO DE NÚMEROS DE IDENTIFICAÇÃO
A9
Anexos
CONTEÚDO DO FICHEIRO - calcular.htm
<HTML><HEAD><TITLE>Cálculo dos digitos de controlo - Sistemas de
Identificação Modulares - Paulo Lourenço</TITLE>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META
content="EAN, BI, ISBN, ISSN, NIF, ISMN, Notas de Euro"
name=keywords>
<META
content="Aritmética Modular - COIMBRA 2011"
name=description>
<META content=en name=language>
<SCRIPT language=JavaScript>
<!-function bi(form) {
peso = 2;
soma = 0;
if (form.numero.value.length!=8){
alert("Introduzir 8 algarismos")
form.cc.value = ""
form.intro.value = "";
}
else{
for (index = form.numero.value.length; index > 0; --index) {
soma = soma + form.numero.value.substring (index-1, index) * peso;
peso++;
}
cc = ((11-(soma % 11)) % 11);
if(cc==10){
cc=0;
}
form.intro.value = form.numero.value + "
result = form.intro.value;
form.cc.value = cc
" + cc;
}
}
function ISBN(form) {
peso = 2;
soma = 0
if (form.numero.value.length!=9){
alert("Introduzir 9 algarismos")
form.cc.value = ""
form.intro.value = "";
}
else{
for (index = form.numero.value.length; index > 0; --index) {
soma = soma + form.numero.value.substring (index-1, index) * peso;
peso++;
}
cc = ((11-(soma % 11)) % 11);
if(cc==10){
cc="X";
}
form.intro.value = form.numero.value + cc;
result = form.intro.value;
form.cc.value = cc
}
}
function EAN(form) {
peso = 3;
soma = 0;
if (form.numero.value.length!=12){
alert("Introduzir 12 algarismos")
form.cc.value = ""
form.intro.value = "";
}
else{
for (index = form.numero.value.length; index > 0; --index) {
soma = soma + form.numero.value.substring (index-1, index) * peso;
peso = 4 - peso;
}
cc = ((10 - (soma % 10)) % 10);
form.intro.value = form.numero.value + cc;
result = form.intro.value;
form.cc.value = cc;
}
}
function ISMN(form) {
peso = 3;
soma = 9;
if (form.numero.value.length!=9){
alert("Introduzir 9 algarismos")
form.cc.value = ""
form.intro.value = "";
}
else{
if(form.numero.value.substring (0, 1).toUpperCase()!="M"){
alert("O ISMN tem que iniciar com a letra M")
form.cc.value = "";
A10
Anexos
form.intro.value = "";
}
else{
for (index = form.numero.value.length; index > 1; --index) {
soma = soma + form.numero.value.substring (index-1, index) * peso;
peso = 4 - peso;
}
cc = ((10 - (soma % 10)) % 10);
form.intro.value = form.numero.value + cc;
result = form.intro.value;
form.cc.value = cc;
}
}
}
function nif(form) {
peso = 2;
soma = 0;
if (form.numero.value.length!=8){
alert("Introduzir 8 algarismos")
form.cc.value = ""
form.intro.value = "";
}
else{
for (index = form.numero.value.length; index > 0; --index) {
soma = soma + form.numero.value.substring (index-1, index) * peso;
peso++;
}
cc = ((11-(soma % 11)) % 11);
if(cc==10){
cc=0;
}
form.intro.value = form.numero.value + cc;
result = form.intro.value;
form.cc.value = cc
}
}
function ISSN(form) {
peso = 2;
soma = 0
if (form.numero.value.length!=7){
alert("Introduzir 7 algarismos")
form.cc.value = ""
form.intro.value = "";
}
else{
for (index = form.numero.value.length; index > 0; --index) {
soma = soma + form.numero.value.substring (index-1, index) * peso;
peso++;
}
cc = ((11-(soma % 11)) % 11);
if(cc==10){
cc="X";
}
form.intro.value = form.numero.value + cc;
result = form.intro.value;
form.cc.value = cc
}
}
function EURO(form) {
peso = 1;
soma = 0;
if (form.numero.value.length!=11){
alert("Introduzir 11 caracteres")
form.cc.value = ""
form.intro.value = "";
}
else{
if(form.numero.value.substring (0, 1).toUpperCase()<"A" || form.numero.value.substring (0,
1).toUpperCase()>"Z"){
alert("O primeiro caracter tem que ser uma letra")
form.cc.value = "";
form.intro.value = "";
}
else{
switch(form.numero.value.substring (0, 1).toUpperCase()){
case "A":
soma = 2;
estado = "por atribuir";
break;
case "B":
soma = 3;
estado = "por atribuir";
break;
case "C":
soma = 4;
estado = "por atribuir";
break;
case "D":
soma = 5;
A11
Anexos
estado = "Estónia";
break;
case "E":
soma = 6;
estado = "Eslováquia";
break;
case "F":
soma = 7;
estado = "Malta";
break;
case "G":
soma = 8;
estado = "Chipre";
break;
case "H":
soma = 9;
estado = "Eslovénia";
break;
case "I":
soma = 1;
estado = "não atribuído";
break;
case "J":
soma = 2;
estado = "Reino Unido*";
break;
case "K":
soma = 3;
estado = "Suécia*";
break;
case "L":
soma = 4;
estado = "Finlândia";
break;
case "M":
soma = 5;
estado = "Portugal";
break;
case "N":
soma = 6;
estado = "Áustria";
break;
case "O":
soma = 7;
estado = "não atribuído";
break;
case "P":
soma = 8;
estado = "Holanda";
break;
case "Q":
soma = 9;
estado = "não atribuído";
break;
case "R":
soma = 1;
estado = "Luxemburgo";
break;
case "S":
soma = 2;
estado = "Itália";
break;
case "T":
soma = 3;
estado = "Irlanda";
break;
case "U":
soma = 4;
estado = "França";
break;
case "V":
soma = 5;
estado = "Espanha";
break;
case "W":
soma = 6;
estado = "Dinamarca*";
break;
case "X":
soma = 7;
estado = "Alemanha";
A12
Anexos
break;
case "Y":
soma = 8;
estado = "Grécia";
break;
case "Z":
soma = 9;
estado = "Bélgica";
break;
default:
break;
}
for (index = form.numero.value.length; index > 1; --index) {
soma = soma + form.numero.value.substring (index-1, index) * peso;
}
cc = ((9 - (soma % 9)) % 9);
form.intro.value = form.numero.value + cc;
form.cc.value = cc;
form.intro0.value = estado;
}
}
}
<!-- -->
</SCRIPT>
<META content="MSHTML 6.00.6000.16441" name=GENERATOR>
<style type="text/css">
.style1 {
text-align: center;
}
.style2 {
border: 1px solid #FFFFDD;
background-color: #FFFFDD;
}
.style3 {
text-align: left;
}
.style4 {
font-size: x-small;
}
</style>
</HEAD>
<BODY bgcolor="#FFFFDD" link="#996600" alink="#006600"><!-- HEADER START -->
<p>&nbsp;</p>
<TABLE cellSpacing=0 cellPadding=0 width=714 align=center border=0 id="table1">
<TBODY>
<TR>
<TD vAlign=top width=714>
<H1 class="style34 style5 style7 style12" align="center"><font size="7">Sistemas de
Identificação
</font>
</H1>
<p class="style34 style5 style7 style12" align="center">&nbsp;</p>
<P>Escolha uma das seguintes opções:</P>
<UL>
<LI>
<a title="Clicar para verificar se um número de identificação está correcto ou não..."
href="verificar.htm">Verificação dos
números de Identificação</a><LI>
<a href="calcular.htm" title="Clicar para determinar algarismos de controlo de um dos sistemas...">Cálculo dos
caracteres de controlo</a>
<LI>
<a href="sabermais.htm">Saber mais...</a> </LI></UL>
</TD></TR></TBODY></TABLE>
<p>&nbsp;</p>
<TABLE cellSpacing=0 cellPadding=0 width=714 align=center border=0>
<TBODY>
<TR>
<TD vAlign=top style="width: 695px">
<H2 align="center"><font size="6">Cálculo dos caracteres de controlo</font></H2>
<p align="center">Introduza o número de Identificação e clique em
&quot;Calcular&quot;...</p>
<P>
<TABLE class=style2 cellSpacing=1 cellPadding=4 height="313" style="width: 711px">
<TBODY>
<TR>
<TH valign="middle" height="38" bgcolor="#AFAF61" style="width: 292px">
<font size="4">Sistema</font></TH>
<TH height="38" bgcolor="#AFAF61" style="width: 1590px">
<font size="4">Número de Identificação<BR>
</font> (sem caracter de controlo) </TH>
<TH height="38" bgcolor="#AFAF61" style="width: 207px">
<DIV align=left>&nbsp;</DIV></TH>
<TH height="38" bgcolor="#AFAF61">
<DIV align=center><font size="4">Caracter de Controlo</font></DIV></TH>
<TH height="38" bgcolor="#AFAF61">
<font size="4">Número Completo </font></TH>
</TR>
<TR>
<FORM>
<TD valign="middle" height="57" bgcolor="#CECE9D" align="left" style="width: 292px">BI</TD>
<TD valign="middle" height="57" bgcolor="#CECE9D" style="width: 1590px" class="style4">
<p align="center">
A13
Anexos
<INPUT maxLength=8 size=8 name=numero class="style4">
<BR class="style4">
<span class="style4">(Introduzir 8 algarismos)*</span></TD>
<TD valign="middle" height="57" bgcolor="#CECE9D" style="width: 207px">
<p align="center"><INPUT onclick=bi(this.form) type=button value=Calcular>
</TD>
<TD valign="middle" height="57" bgcolor="#CECE9D" class="style1">
<DIV align=center class="style1"><INPUT readonly size=1 name=cc> </DIV></TD>
<TD width=115 valign="middle" height="57" bgcolor="#CECE9D" class="style1">
<p align="center" class="style1"><INPUT readonly size=14 name=intro> </TD>
<TD valign="middle" height="57" bgcolor="#CECE9D" style="width: 371px">
<p align="center">
<INPUT type=reset value=Limpar>
</TD></FORM></TR>
<TR>
<FORM>
<TD valign="middle" height="57" bgcolor="#CECE9D" align="left" style="width: 292px">NIF</TD>
<TD height="57" bgcolor="#CECE9D" style="width: 1590px" class="style4">
<p align="center">
<INPUT id=numero maxLength=8 size=8 name=numero class="style4">
<BR class="style4"><span class="style4">(Introduzir 8 algarismos)
</span> </TD>
<TD height="57" bgcolor="#CECE9D" style="width: 207px">
<p align="center"><INPUT onclick=nif(this.form) type=button value=Calcular>
</TD>
<TD height="57" bgcolor="#CECE9D" class="style1">
<DIV align=center class="style1"><INPUT readonly size=1 name=cc> </DIV></TD>
<TD width=115 height="57" bgcolor="#CECE9D" class="style1">
<p align="center" class="style1"><INPUT readonly size=14 name=intro> </TD>
<TD height="57" bgcolor="#CECE9D" style="width: 371px">
<p align="center"><INPUT type=reset value=Limpar>
</TD></FORM></TR>
<TR>
<FORM>
<TD valign="middle" height="57" bgcolor="#CECE9D" align="left" style="width: 292px">ISSN</TD>
<TD height="57" bgcolor="#CECE9D" style="width: 1590px" class="style4">
<p align="center">
<INPUT id=numero maxLength=7 size=7 name=numero class="style4">
<BR class="style4"><span class="style4">(Introduzir 7 algarismos)
</span> </TD>
<TD height="57" bgcolor="#CECE9D" style="width: 207px">
<p align="center"><INPUT onclick=ISSN(this.form) type=button value=Calcular>
</TD>
<TD height="57" bgcolor="#CECE9D" class="style1">
<DIV align=center class="style1"><INPUT readonly size=1 name=cc> </DIV></TD>
<TD width=115 height="57" bgcolor="#CECE9D" class="style1">
<p align="center" class="style1"><INPUT readonly size=14 name=intro> </TD>
<TD height="57" bgcolor="#CECE9D" style="width: 371px">
<p align="center"><INPUT type=reset value=Limpar>
</TD></FORM></TR>
<TR>
<FORM>
<TD valign="middle" height="58" bgcolor="#CECE9D" align="left" style="width: 292px">ISBN-10</TD>
<TD height="58" bgcolor="#CECE9D" style="width: 1590px" class="style4">
<p align="center">
<INPUT id=numero maxLength=9 size=9 name=numero class="style4">
<BR class="style4"><span class="style4">(Introduzir 9 algarismos)
</span> </TD>
<TD height="58" bgcolor="#CECE9D" style="width: 207px">
<p align="center"><INPUT onclick=ISBN(this.form) type=button value=Calcular>
</TD>
<TD height="58" bgcolor="#CECE9D" class="style1">
<DIV align=center class="style1"><INPUT readonly size=1 name=cc> </DIV></TD>
<TD width=115 height="58" bgcolor="#CECE9D" class="style1">
<p align="center" class="style1"><INPUT readonly size=14 name=intro> </TD>
<TD height="58" bgcolor="#CECE9D" style="width: 371px">
<p align="center"><INPUT type=reset value=Limpar> </TD></FORM></TR>
<TR>
<FORM>
<TD valign="middle" bgcolor="#CECE9D" align="left" style="width: 292px; height: 57px;">ISBN-13&nbsp;
EAN</TD>
<TD bgcolor="#CECE9D" style="width: 1590px; height: 57px;" class="style4">
<p align="center">
<INPUT id=numero maxLength=12 size=12 name=numero class="style4">
<BR class="style4"><span class="style4">(Introduzir 12 algarismos)
</span> </TD>
<TD bgcolor="#CECE9D" style="width: 207px; height: 57px;">
<p align="center"><INPUT onclick=EAN(this.form) type=button value=Calcular>
</TD>
<TD bgcolor="#CECE9D" style="height: 57px" class="style1">
<DIV align=center class="style1"><INPUT readonly size=1 name=cc> </DIV></TD>
<TD width=115 bgcolor="#CECE9D" style="height: 57px" class="style1">
<p align="center" class="style1"><INPUT readonly size=14 name=intro> </TD>
<TD bgcolor="#CECE9D" style="width: 371px; height: 57px;">
<p align="center"><INPUT type=reset value=Limpar> </TD></FORM></TR>
<TR>
<FORM>
<TD valign="middle" height="58" bgcolor="#CECE9D" align="left" style="width: 292px">
ISMN</TD>
<TD height="58" bgcolor="#CECE9D" style="width: 1590px" class="style4">
<p align="center">
<INPUT id=numero maxLength=9 size=9 name=numero class="style4">
<BR class="style4"><span class="style4">(Introduzir 9 caracteres)
</span> </TD>
<TD height="58" bgcolor="#CECE9D" style="width: 207px">
<p align="center"><INPUT onclick=ISMN(this.form) type=button value=Calcular>
A14
Anexos
</TD>
<TD height="58" bgcolor="#CECE9D" class="style1">
<DIV align=center class="style1"><INPUT readonly size=1 name=cc> </DIV></TD>
<TD width=115 height="58" bgcolor="#CECE9D" class="style1">
<p align="center" class="style1"><INPUT readonly size=14 name=intro> </TD>
<TD height="58" bgcolor="#CECE9D" style="width: 371px">
<p align="center"><INPUT type=reset value=Limpar> </TD></FORM></TR>
<TR>
<FORM>
<TD valign="middle" bgcolor="#CECE9D" align="left" style="width: 292px; height: 34px;">
Notas de EURO</TD>
<TD bgcolor="#CECE9D" style="width: 1590px; height: 34px;">
<p align="center"><INPUT id=numero maxLength=11 size=11 name=numero>
<BR><span class="style4">(Introduzir 11 caracteres) </span> </TD>
<TD bgcolor="#CECE9D" style="width: 207px; height: 34px;">
<p align="center"><INPUT onclick=EURO(this.form) type=button value=Calcular>
</TD>
<TD bgcolor="#CECE9D" style="height: 34px" class="style1">
<DIV align=center class="style1"><INPUT readonly size=1 name=cc> </DIV></TD>
<TD width=115 bgcolor="#CECE9D" style="height: 34px" class="style1">
<p align="center" class="style1"><input readonly size=14 name=intro> </TD>
<TD bgcolor="#CECE9D" style="width: 371px; height: 34px;">
<p align="center"><INPUT type=reset value=Limpar> </TD>
<TD bgcolor="#CECE9D" class="style1" style="width: 143px; height: 34px;">
<p style="width: 117px; height: 41px;">Estado Emissor:<INPUT readonly size=14
name=intro0> </TD></FORM></TR>
</TBODY></TABLE>
</TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=714 align=center border=0 id="table4">
<TBODY>
<TR>
<TD vAlign=top width=269>
<p align="center">&nbsp;</TD>
<TD vAlign=top width=445 class="style3">
<font size="2">* </font> <span style="font-family:Euclid"><font size="2">
Sempre que um número de bilhete de identidade apresente menos de oito
algarismos, acrescentam-se os zeros necessários à esquerda do número até
totalizar os oito algarismos.</font></span></TD></TR></TBODY></TABLE>
<p align="center">&nbsp;</p>
<TABLE cellSpacing=0 cellPadding=0 width=714 align=center border=0 id="table2">
<TBODY>
<TR>
<TD vAlign=top width=714>
<p align="center">Coimbra, Junho de 2011</TD></TR></TBODY></TABLE>
<p align="center"><font size="1">
<a title="Clicar para enviar uma mensagem de correio electrónico..."
href="mailto:[email protected]?subject=Sistemas de Identificação Modulares">
<font color="#000000">PJPL Productions</font></a></font></p>
</BODY></HTML>
A15
Anexos
I.2 - Aritmética do Relógio (relogiomodular.alojamentogratuito.com)
I.2.1 - Relógio Modular Analógico – Versão I – Nível I
CONTEÚDO DO FICHEIRO – RelogioSomar.as
import flash.events.Event;
import flash.events.MouseEvent;
// Variaveis Globais:
var FrameFinal:int;
var HoraInicial:int;
// Escolha de NIVEL
var MaximoHoraInicial:int=11;
var MaximoSomaX:int=35;
// Chamada da Função Inicio;
Inicio();
function Inicio():void{
MensagemCerto.visible=false;
MensagemErrado.visible=false;
mClock.visible=true;
mClock.stop();
// HoraInicial: Gera um numero aleatorio entre [1,MaximoHoraInicial].
HoraInicial=(Math.round(Math.random()*MaximoHoraInicial+1));
mClock.gotoAndStop(1);
mClock.gotoAndStop( Math.round((HoraInicial*100)/12) );
// SomaX: Gera um numero aleatorio entre [1,MaximoSomaX].
SomaX.text=(Math.round(Math.random()*MaximoSomaX+1)).toString();
// Adiciona evento de rato (Click) para o botão Inserir.
mBotao.addEventListener(MouseEvent.CLICK, onBotaoClick);
mBotao.visible=true;
BtContinuar.visible=false;
mResposta.text="";
mResposta.visible=true;
// Adiciona evento de teclado (tecla ENTER).
mResposta.addEventListener(KeyboardEvent.KEY_DOWN, TecladoEnter);
// Botão Fechar Janela.
BtFechar.buttonMode=true;
BtFechar.addEventListener(MouseEvent.CLICK,OnBtFechar);
}
// Função (EnterFrame) que movimenta os ponteiros do relogio.
function onClockEvent(ev:Event):void{
if(mClock.currentFrame==FrameFinal){
mClock.stop();
mClock.removeEventListener(Event.ENTER_FRAME, onClockEvent);
// Mostra Mensagem de Resposta Correcta
MensagemCerto.addEventListener(Event.ENTER_FRAME, onMensagemCerto);
MensagemCerto.gotoAndStop(1);
MensagemCerto.visible=true;
MensagemCerto.play();
}
}
// Função (EnterFrame) Mensagem de Resposta Correcta.
function onMensagemCerto(ev:Event):void{
if(MensagemCerto.currentFrame>=MensagemCerto.totalFrames){
MensagemCerto.stop();
MensagemCerto.visible=false;
MensagemCerto.removeEventListener(Event.ENTER_FRAME, onMensagemCerto);
// Espera 1segundo e gera nova pergunta.
setTimeout(Inicio,1000);
}
}
// Função (EnterFrame) Mensagem de Resposta Incorrecta. E mostra Correcção.
function onMensagemErrado(ev:Event):void{
if(MensagemErrado.currentFrame>=MensagemErrado.totalFrames){
MensagemErrado.stop();
MensagemErrado.removeEventListener(Event.ENTER_FRAME, onMensagemErrado);
MensagemErrado.Correccao.visible=true;
MensagemErrado.Correccao.addEventListener(Event.ENTER_FRAME, onMensagemErradoCorreccao);
MensagemErrado.Correccao.gotoAndStop(1);
MensagemErrado.Correccao.play();
}
A16
Anexos
}
// Função (EnterFrame) Mensagem de Correcção.
function onMensagemErradoCorreccao(ev:Event):void{
if(MensagemErrado.Correccao.currentFrame>=MensagemErrado.Correccao.totalFrames){
MensagemErrado.Correccao.stop();
MensagemErrado.Correccao.removeEventListener(Event.ENTER_FRAME, onMensagemErradoCorreccao);
// Mostra Botão Continuar.
BtContinuar.addEventListener(MouseEvent.CLICK, onBotaoContinuar);
BtContinuar.visible=true;
}
}
// Evento de rato (Click) para o botão Continuar.
function onBotaoContinuar(ev:MouseEvent):void
{
// Esconde Mensagem Resposta Incorrecta.
MensagemErrado.visible=false;
// Gera nova pergunta.
Inicio();
}
// Função Botão Inserir. Verificação da Resposta inserida pelo utilizador.
function onBotaoClick(ev:MouseEvent):void{
var HoraActual:int;
var numOriginal:int;
var num:int
var i:int;
// Verifica se os digitos inseridos são numeros.
for(i=0;i<mResposta.text.length;i++){
if(mResposta.text.charAt(i)<'0' || mResposta.text.charAt(i)>'9'){
mResposta.text="";
return;
}
}
numOriginal=(int)(SomaX.text);
// Verifica se a resposta está entre [1,12]
if( (int)(mResposta.text)<=0 || (int)(mResposta.text)>12 ){
mResposta.text="";
return;
}
// Calcula o resto da divisão inteira com 12.
numOriginal=((numOriginal+HoraInicial)%12);
if(numOriginal==0){
num=12;
}
else{
num=numOriginal;
}
if( num==(int)(mResposta.text) ){
// Coloca o Botão a invisivel e remove o evento do teclado (tecla ENTER).
mBotao.visible=false;
mResposta.removeEventListener(KeyboardEvent.KEY_DOWN, TecladoEnter);
// Coloca o mResposta a invisivel
mResposta.visible=false;
// Calcula o FrameFinal, convertendo a hora em frames.
FrameFinal=Math.round((num*100)/12);
// Faz play à animação do relogio. E adiciona evento para parar o ponteiro quando chegar à hora
actual.
mClock.addEventListener(Event.ENTER_FRAME, onClockEvent);
mClock.play();
}
else{
mResposta.text="";
// Coloca o Botão a invisivel e remove o evento do teclado (tecla ENTER).
mBotao.visible=false;
mResposta.removeEventListener(KeyboardEvent.KEY_DOWN, TecladoEnter);
// Coloca o mResposta a invisivel
mResposta.visible=false;
// Preenche parametros da Correcção:
MensagemErrado.Correccao.H1.text=HoraInicial.toString();
MensagemErrado.Correccao.X1.text=SomaX.text;
MensagemErrado.Correccao.Z1.text=(int(MensagemErrado.Correccao.H1.text)) +
(int(MensagemErrado.Correccao.X1.text));
MensagemErrado.Correccao.Z2.text=MensagemErrado.Correccao.Z1.text;
MensagemErrado.Correccao.R2.text=numOriginal.toString();
MensagemErrado.Correccao.Q2.text=Math.floor((int(MensagemErrado.Correccao.Z2.text)) / 12);
MensagemErrado.Correccao.Z3.text=MensagemErrado.Correccao.Z1.text;
MensagemErrado.Correccao.Q3.text=MensagemErrado.Correccao.Q2.text;
MensagemErrado.Correccao.R3.text=MensagemErrado.Correccao.R2.text;
A17
Anexos
MensagemErrado.Correccao.R4.text=num.toString();
MensagemErrado.Correccao.visible=false;
// Mostra Mensagem de Resposta Incorrecta
MensagemErrado.addEventListener(Event.ENTER_FRAME, onMensagemErrado);
MensagemErrado.gotoAndStop(1);
MensagemErrado.visible=true;
MensagemErrado.play();
}
}
// Evento de Teclado (tecla ENTER)
function TecladoEnter(ev:KeyboardEvent):void
{
//trace("\nTecladoEnter: " + ev.keyCode + " " + ev.keyLocation + " " + ev.toString());
switch(ev.keyCode){
case 13: // ENTER KEY
mBotao.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
break;
}
}
// Botão fechar janela.
function OnBtFechar(ev:MouseEvent):void
{
var urlString:String = "javascript:window.opener = self; self.close();";
var request:URLRequest = new URLRequest(urlString);
navigateToURL(request, "_self");
}
I.2.2 - Relógio Modular Analógico – Versão II – Nível I
CONTEÚDO DO FICHEIRO – RelogioSubtrair.as
import flash.events.Event;
import flash.events.MouseEvent;
// Variaveis Globais:
var FrameFinal:int;
var HoraInicial:int;
// Escolha de NIVEL
var MaximoHoraInicial:int=11;
var MaximoSomaX:int=35;
// Chamada da Função Inicio;
Inicio();
function Inicio():void{
MensagemCerto.visible=false;
MensagemErrado.visible=false;
mClock.visible=true;
mClock.stop();
// HoraInicial: Gera um numero aleatorio entre [1,MaximoHoraInicial].
HoraInicial=(Math.round(Math.random()*MaximoHoraInicial+1));
mClock.gotoAndStop(1);
mClock.gotoAndStop( Math.round(((12-HoraInicial)*100)/12) );
// SomaX: Gera um numero aleatorio entre [1,MaximoSomaX].
SomaX.text=(Math.round(Math.random()*MaximoSomaX+1)).toString();
// Adiciona evento de rato (Click) para o botão Inserir.
mBotao.addEventListener(MouseEvent.CLICK, onBotaoClick);
mBotao.visible=true;
BtContinuar.visible=false;
mResposta.text="";
mResposta.visible=true;
// Adiciona evento de teclado (tecla ENTER).
mResposta.addEventListener(KeyboardEvent.KEY_DOWN, TecladoEnter);
// Botão Fechar Janela.
BtFechar.buttonMode=true;
BtFechar.addEventListener(MouseEvent.CLICK,OnBtFechar);
}
// Função (EnterFrame) que movimenta os ponteiros do relogio.
function onClockEvent(ev:Event):void{
if(mClock.currentFrame==FrameFinal){
mClock.stop();
mClock.removeEventListener(Event.ENTER_FRAME, onClockEvent);
// Mostra Mensagem de Resposta Correcta
MensagemCerto.addEventListener(Event.ENTER_FRAME, onMensagemCerto);
MensagemCerto.gotoAndStop(1);
A18
Anexos
MensagemCerto.visible=true;
MensagemCerto.play();
}
}
// Função (EnterFrame) Mensagem de Resposta Correcta.
function onMensagemCerto(ev:Event):void{
if(MensagemCerto.currentFrame>=MensagemCerto.totalFrames){
MensagemCerto.stop();
MensagemCerto.visible=false;
MensagemCerto.removeEventListener(Event.ENTER_FRAME, onMensagemCerto);
// Espera 1segundo e gera nova pergunta.
setTimeout(Inicio,1000);
}
}
// Função (EnterFrame) Mensagem de Resposta Incorrecta. E mostra Correcção.
function onMensagemErrado(ev:Event):void{
if(MensagemErrado.currentFrame>=MensagemErrado.totalFrames){
MensagemErrado.stop();
//MensagemErrado.visible=false;
MensagemErrado.removeEventListener(Event.ENTER_FRAME, onMensagemErrado);
MensagemErrado.Correccao.visible=true;
MensagemErrado.Correccao.addEventListener(Event.ENTER_FRAME, onMensagemErradoCorreccao);
MensagemErrado.Correccao.gotoAndStop(1);
MensagemErrado.Correccao.play();
}
}
// Função (EnterFrame) Mensagem de Correcção.
function onMensagemErradoCorreccao(ev:Event):void{
if(MensagemErrado.Correccao.currentFrame>=MensagemErrado.Correccao.totalFrames){
MensagemErrado.Correccao.stop();
MensagemErrado.Correccao.removeEventListener(Event.ENTER_FRAME, onMensagemErradoCorreccao);
BtContinuar.addEventListener(MouseEvent.CLICK, onBotaoContinuar);
BtContinuar.visible=true;
}
}
// Evento de rato (Click) para o botão Continuar.
function onBotaoContinuar(ev:MouseEvent):void
{
// Esconde Mensagem Resposta Incorrecta.
MensagemErrado.visible=false;
// Gera nova pergunta.
Inicio();
}
// Função Botão Inserir. Verificação da Resposta inserida pelo utilizador.
function onBotaoClick(ev:MouseEvent):void{
var HoraActual:int;
var numOriginal:int;
var num:int
var i:int;
// Verifica se os digitos inseridos são numeros.
for(i=0;i<mResposta.text.length;i++){
if(mResposta.text.charAt(i)<'0' || mResposta.text.charAt(i)>'9'){
mResposta.text="";
return;
}
}
numOriginal=(int)(SomaX.text);
// Verifica se a resposta está entre [1,12]
if( (int)(mResposta.text)<=0 || (int)(mResposta.text)>12 ){
mResposta.text="";
return;
}
// Calcula o resto da divisão inteira com 12.
numOriginal=( ((HoraInicial-numOriginal)%12)+12) % 12;
if(numOriginal==0){
num=12;
}
else{
num=numOriginal;
}
if( num==(int)(mResposta.text) ){
// Coloca o Botão a invisivel e remove o evento do teclado (tecla ENTER).
mBotao.visible=false;
mResposta.removeEventListener(KeyboardEvent.KEY_DOWN, TecladoEnter);
// Coloca o mResposta a invisivel
mResposta.visible=false;
// Calcula o FrameFinal, convertendo a hora em frames.
FrameFinal=Math.round(((12-numOriginal)*100)/12);
// Faz play à animação do relogio. E adiciona evento para parar o ponteiro quando chegar à hora
actual.
A19
Anexos
mClock.addEventListener(Event.ENTER_FRAME, onClockEvent);
mClock.play();
}
else{
mResposta.text="";
// Coloca o Botão a invisivel e remove o evento do teclado (tecla ENTER).
mBotao.visible=false;
mResposta.removeEventListener(KeyboardEvent.KEY_DOWN, TecladoEnter);
// Coloca o mResposta a invisivel
mResposta.visible=false;
// Preenche parametros da Correcção:
MensagemErrado.Correccao.H1.text=HoraInicial.toString();
MensagemErrado.Correccao.X1.text=SomaX.text;
MensagemErrado.Correccao.Z1.text=(int(MensagemErrado.Correccao.H1.text)) (int(MensagemErrado.Correccao.X1.text));
MensagemErrado.Correccao.Z2.text=MensagemErrado.Correccao.Z1.text;
MensagemErrado.Correccao.R2.text=numOriginal.toString();
MensagemErrado.Correccao.Q2.text=Math.floor((int(MensagemErrado.Correccao.Z2.text)) / 12);
MensagemErrado.Correccao.Z3.text=MensagemErrado.Correccao.Z1.text;
MensagemErrado.Correccao.Q3.text=MensagemErrado.Correccao.Q2.text;
MensagemErrado.Correccao.R3.text=MensagemErrado.Correccao.R2.text;
MensagemErrado.Correccao.R4.text=num.toString();
MensagemErrado.Correccao.visible=false;
// Mostra Mensagem de Resposta Incorrecta
MensagemErrado.addEventListener(Event.ENTER_FRAME, onMensagemErrado);
MensagemErrado.gotoAndStop(1);
MensagemErrado.visible=true;
MensagemErrado.play();
}
}
// Evento de Teclado (tecla ENTER)
function TecladoEnter(ev:KeyboardEvent):void
{
//trace("\nTecladoEnter: " + ev.keyCode + " " + ev.keyLocation + " " + ev.toString());
switch(ev.keyCode){
case 13: // ENTER KEY
mBotao.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
break;
}
}
// Botão fechar janela.
function OnBtFechar(ev:MouseEvent):void
{
var urlString:String = "javascript:window.opener = self; self.close();";
var request:URLRequest = new URLRequest(urlString);
navigateToURL(request, "_self");
}
I.2.3 - Relógio Modular Digital – Nível I, II e III
CONTEÚDO DO FICHEIRO – RelogioDigital.as
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.MovieClip;
var NIVEL:int=3;
var NUM_TENTATIVAS_MAX:int;
var
var
var
var
MaximoHoraInicial:int;
MaximoMinutoInicial:int;
MaximoSomaXhoras:int;
MaximoSomaXminutos:int;
switch(NIVEL){
case 1:
// Escolha de NIVEL 1
NUM_TENTATIVAS_MAX=1;
MaximoHoraInicial=11;
MaximoMinutoInicial=29;
MaximoSomaXhoras=10;
MaximoSomaXminutos=30;
break;
case 2:
// Escolha de NIVEL 2
NUM_TENTATIVAS_MAX=1;
MaximoHoraInicial=11;
MaximoMinutoInicial=59;
MaximoSomaXhoras=9;
MaximoSomaXminutos=59;
break;
A20
Anexos
case 3:
// Escolha de NIVEL 3
NUM_TENTATIVAS_MAX=2;
MaximoHoraInicial=23;
MaximoMinutoInicial=59;
MaximoSomaXhoras=23;
MaximoSomaXminutos=59;
break;
}
var
var
var
var
HoraFinal:int;
MinutosFinal:int;
HoraInicial:int;
MinutosInicial:int;
var hourTimer:Timer;
var minTimer:Timer;
var numTentativas:int=0;
// Chamada da Função Inicio;
Inicio();
function Inicio():void{
MensagemCerto.visible=false;
MensagemErrado.visible=false;
MensagemErradoTentar.visible=false;
mClock.visible=true;
mClock.stop();
// HoraInicial: Gera um numero aleatorio entre [1,MaximoHoraInicial].
HoraInicial=(Math.round(Math.random()*MaximoHoraInicial));
// MinutosInicial: Gera um numero aleatorio entre [1,MaximoMinutoInicial].
MinutosInicial=(Math.round(Math.random()*MaximoMinutoInicial));
setHours(mClock,HoraInicial,MinutosInicial);
// SomaXhoras: Gera um numero aleatorio entre [1,MaximoSomaXhoras].
SomaXhoras.text=(Math.round(Math.random()*MaximoSomaXhoras+1)).toString();
// SomaXminutos: Gera um numero aleatorio entre [1,MaximoSomaXminutos].
SomaXminutos.text=(Math.round(Math.random()*MaximoSomaXminutos+1)).toString();
BtContinuar.visible=false;
// Adiciona evento de rato (Click) para o botão Inserir.
mBotao.addEventListener(MouseEvent.CLICK, onBotaoClick);
mBotao.visible=true;
mRespostaHoras.text="";
mRespostaMinutos.text="";
mRespostaHoras.type=TextFieldType.INPUT;
mRespostaMinutos.type=TextFieldType.INPUT;
mRespostaHoras.selectable=true;
mRespostaMinutos.selectable=true;
// Botão Fechar Janela.
BtFechar.buttonMode=true;
BtFechar.addEventListener(MouseEvent.CLICK,OnBtFechar);
}
// Coloca horas no relogio digital.
function setHours(Movie:MovieClip,Hour:int,Min:int):void{
if(Hour<10){
Movie.Hour.text="0"+Hour.toString();
}
else{
Movie.Hour.text=Hour.toString();
}
if(Min<10){
Movie.Min.text="0"+Min.toString();
}
else{
Movie.Min.text=Min.toString();
}
}
// Actualiza Minutos (100 em 100ms)
function onMinTimer(ev:TimerEvent):void{
var Hour:int=int(mClock.Hour.text);
var Min:int=int(mClock.Min.text)
if(Min==MinutosFinal){
minTimer.stop();
minTimer.removeEventListener(TimerEvent.TIMER,onMinTimer);
minTimer=null;
if(hourTimer==null){
hourTimer=new Timer(200);
hourTimer.start();
hourTimer.addEventListener(TimerEvent.TIMER,onHourTimer);
}
}
else{
if( (Min+1)==60 ){
setHours(mClock,Hour,0);
}
else{
setHours(mClock,Hour,(Min+1));
}
A21
Anexos
}
}
// Actualiza Horas (200 em 200ms)
function onHourTimer(ev:TimerEvent):void{
var Hour:int=int(mClock.Hour.text);
var Min:int=int(mClock.Min.text)
if(Hour==HoraFinal){
hourTimer.stop();
hourTimer.removeEventListener(TimerEvent.TIMER,onHourTimer);
hourTimer=null;
MensagemCerto.addEventListener(Event.ENTER_FRAME, onMensagemCerto);
MensagemCerto.gotoAndStop(1);
MensagemCerto.visible=true;
MensagemCerto.play();
}
else{
if( (Hour+1)==24 ){
setHours(mClock,0,Min);
}
else{
setHours(mClock,(Hour+1),Min);
}
}
}
// Mensagem de Resposta Correcta
function onMensagemCerto(ev:Event):void{
if(MensagemCerto.currentFrame>=MensagemCerto.totalFrames){
MensagemCerto.stop();
MensagemCerto.visible=false;
MensagemCerto.removeEventListener(Event.ENTER_FRAME, onMensagemCerto);
setTimeout(Inicio,1000);
}
}
// Mensagem de Resposta Incorrecta
function onMensagemErrado(ev:Event):void{
if(MensagemErrado.currentFrame>=MensagemErrado.totalFrames){
MensagemErrado.stop();
//MensagemErrado.visible=false;
MensagemErrado.removeEventListener(Event.ENTER_FRAME, onMensagemErrado);
// Mostra Botão Continuar.
BtContinuar.addEventListener(MouseEvent.CLICK, onBotaoContinuar);
BtContinuar.visible=true;
}
}
// Mensagem de Resposta Incorrecta (Tentar de Novo)
function onMensagemErradoTentar(ev:Event):void{
if(MensagemErradoTentar.currentFrame>=MensagemErradoTentar.totalFrames){
MensagemErradoTentar.stop();
MensagemErradoTentar.visible=false;
MensagemErradoTentar.removeEventListener(Event.ENTER_FRAME, onMensagemErradoTentar);
mBotao.addEventListener(MouseEvent.CLICK, onBotaoClick);
mBotao.visible=true;
mRespostaHoras.type=TextFieldType.INPUT;
mRespostaMinutos.type=TextFieldType.INPUT;
mRespostaHoras.selectable=true;
mRespostaMinutos.selectable=true;
}
}
// Evento de rato (Click) para o botão Continuar.
function onBotaoContinuar(ev:MouseEvent):void
{
// Esconde Mensagem Resposta Incorrecta.
MensagemErrado.visible=false;
// Gera nova pergunta.
Inicio();
}
// Função Botão Verificar. Verificação da Resposta inserida pelo utilizador.
function onBotaoClick(ev:MouseEvent):void{
var Hour:int;
var Min:int;
var i:int;
// Verifica se os digitos inseridos são numeros.
for(i=0;i<mRespostaHoras.text.length;i++){
if(mRespostaHoras.text.charAt(i)<'0' || mRespostaHoras.text.charAt(i)>'9'){
mRespostaHoras.text="";
mRespostaMinutos.text="";
return;
}
}
for(i=0;i<mRespostaMinutos.text.length;i++){
if(mRespostaMinutos.text.charAt(i)<'0' || mRespostaMinutos.text.charAt(i)>'9'){
mRespostaHoras.text="";
mRespostaMinutos.text="";
return;
}
}
A22
Anexos
Min=(int)(SomaXminutos.text);
// Verifica se a resposta está entre [0,59]
if( (int)(mRespostaMinutos.text)<0 || (int)(mRespostaMinutos.text)>=60 ){
mRespostaHoras.text="";
mRespostaMinutos.text="";
return;
}
// Calcula o resto da divisão inteira com 60.
Min=((Min+MinutosInicial)%60);
if(Min==60){
Min=0;
}
Hour=(int)(SomaXhoras.text);
if(Min<MinutosInicial){
Hour++;
}
// Verifica se a resposta está entre [0,23]
if( (int)(mRespostaHoras.text)<0 || (int)(mRespostaHoras.text)>=24 ){
mRespostaHoras.text="";
mRespostaMinutos.text="";
return;
}
if(mRespostaHoras.text=="" || mRespostaMinutos.text==""){
return;
}
// Calcula o resto da divisão inteira com 24.
Hour=((Hour+HoraInicial)%24);
if(Hour==24){
Hour=0;
}
if( Hour==(int)(mRespostaHoras.text) && Min==(int)(mRespostaMinutos.text) ){
// Coloca o Botão a invisivel
mBotao.visible=false;
// Coloca o mResposta a invisivel
mRespostaHoras.type=TextFieldType.DYNAMIC;
mRespostaMinutos.type=TextFieldType.DYNAMIC;
numTentativas=0;
HoraFinal=Hour;
MinutosFinal=Min;
if(minTimer==null){
minTimer=new Timer(100);
minTimer.start();
minTimer.addEventListener(TimerEvent.TIMER,onMinTimer);
}
}
else{
// Coloca o Botão a invisivel
mBotao.visible=false;
// Coloca o mResposta a invisivel
mRespostaHoras.selectable=false;
mRespostaMinutos.selectable=false;
if(numTentativas<NUM_TENTATIVAS_MAX){
numTentativas++;
MensagemErradoTentar.addEventListener(Event.ENTER_FRAME, onMensagemErradoTentar);
MensagemErradoTentar.gotoAndStop(1);
MensagemErradoTentar.visible=true;
MensagemErradoTentar.play();
}
else{
setHours(MensagemErrado,Hour,Min);
numTentativas=0;
MensagemErrado.addEventListener(Event.ENTER_FRAME, onMensagemErrado);
MensagemErrado.gotoAndStop(1);
MensagemErrado.visible=true;
MensagemErrado.play();
}
}
}
// Botão fechar janela.
function OnBtFechar(ev:MouseEvent):void
{
var urlString:String = "javascript:window.opener = self; self.close();";
var request:URLRequest = new URLRequest(urlString);
navigateToURL(request, "_self");
}
A23
Anexos
II - Actividades realizadas na Escola
II.1 - Aplicação em contexto de sala de aula
II.1.1 - Actividade Prática – Parte I
A24
Anexos
A25
Anexos
II.1.2 - Actividade Prática – Parte II
A26
Anexos
A27
Anexos
II.1.3 - Actividade Prática – Questionário
A28
Anexos
II.1.4 - Registos Fotográficos da Actividade Prática
Fotografia 1 – Realização da PARTE I.
Fotografia 2 - Realização da PARTE I.
Fotografia 3 – Praticando a “Aritmética do Relógio” – Relógio Analógico.
A29
Anexos
Fotografia 4 – Sítio de apoio à Actividade Prática.
Fotografia 5 – Praticando a “Aritmética do Relógio” – Relógio Digital.
A30
Anexos
Fotografia 6 – Realização da PARTE II.
Fotografia 7 – Realização da PARTE II.
A31
Anexos
II.1.5 - Registos relativos à Actividade Prática – “Aritmética do Relógio”
A32
Anexos
II.2 - Conferência: “Aplicações da Aritmética Modular”
II.2.1 - Cartaz de divulgação da conferência
A33
Anexos
II.2.2 - Folhas de inscrição (Professores do Agrupamento de Escolas)
A34
Anexos
II.2.3 - Folhas de inscrição (Alunos do Ensino Secundário)
A35
Anexos
II.2.4 - Conteúdo da apresentação em PowerPoint (Diapositivos)
A36
Anexos
A37
Anexos
A38
Anexos
A39
Anexos
A40
Anexos
A41
Anexos
A42
Anexos
A43
Anexos
A44
Anexos
A45
Anexos
A46
Anexos
A47
Anexos
A48
Anexos
A49
Anexos
A50
Anexos
A51
Anexos
A52
Anexos
A53
Anexos
A54
Anexos
A55
Anexos
A56
Anexos
A57
Anexos
A58
Anexos
II.2.5 – Questionário/Reflexão.
A59
Anexos
II.2.6 - Registos Fotográficos da Conferência: “Aplicações da Aritmética Modular”
Fotografia 8 – Início da Apresentação.
Fotografia 9 – Decorrer da conferência.
A60
Anexos
Anexos
Download

Veremos - Aplicações da Aritmética Modular