Você está na página 1de 84

Flvio Morgado

EXERCCIOS DE ALGORITMOS Parte I

Santo Andr 2007

SUMRIO 1. PROBLEMAS ALGORTMICOS .................................................................................. 4


1.1. 1.2. 1.3. 1.4. 1.5. BAIXA PRODUTIVIDADE ....................................................................................................................... 4 ADIVINHAO ..................................................................................................................................... 4 MOEDA MAIS PESADA .......................................................................................................................... 6 CAIXA ELETRNICO ............................................................................................................................. 8 PROBLEMAS PROPOSTOS ...................................................................................................................... 9

2. CONCEITOS FUNDAMENTAIS................................................................................. 11
2.1. ORGANIZAO DOS COMPUTADORES ................................................................................................ 11 2.2. VARIVEIS ........................................................................................................................................ 12 2.2.1. Tipo Inteiro............................................................................................................................... 12 2.2.2. Tipo Real .................................................................................................................................. 12 2.2.3. Tipo Caractere .......................................................................................................................... 12 2.2.4. Tipo String................................................................................................................................ 14 2.2.5. Tipo Data .................................................................................................................................. 14 2.2.6. Tipo Booleano .......................................................................................................................... 14 2.3. REGRAS PARA IDENTIFICADORES ....................................................................................................... 14 2.4. EXPRESSES E HIERARQUIA DE OPERADORES ................................................................................... 14 2.5. FUNES PR-DEFINIDAS .................................................................................................................. 15

3. CONSTRUTOR LGICO SEQUENCIAL................................................................... 16


3.1. 3.2. 3.3. 3.4. 3.5. 3.6. TERMMETRO ................................................................................................................................... 16 REA DO CRCULO ............................................................................................................................ 17 CRONMETRO ................................................................................................................................... 18 RATEIO .............................................................................................................................................. 20 ERRO COMUM (PARA INICIANTES) ..................................................................................................... 21 PROBLEMAS PROPOSTOS ................................................................................................................... 21

4. CONSTRUTOR LGICO DE SELEO (DECISO)............................................... 24


4.1. 4.2. 4.3. 4.4. 4.5. 4.6. 4.7. 4.8. 4.9. 4.10. 4.11. 4.12. SALRIO BRUTO ................................................................................................................................ 24 VERIFICAR SE PAR .......................................................................................................................... 25 MAIOR DE 2 NMEROS....................................................................................................................... 25 MAIOR DE 3 NMEROS....................................................................................................................... 26 ORDEM CRESCENTE ........................................................................................................................... 30 CONTAR PARES ................................................................................................................................. 32 QUADRANTE...................................................................................................................................... 33 ALUNOS ............................................................................................................................................ 35 MELHORES NOTAS ............................................................................................................................. 38 MAIOR QUANTIDADE DE PRODUTOS .................................................................................................. 40 ERROS COMUNS (PARA INICIANTES).................................................................................................. 41 EXERCCIOS PROPOSTOS .................................................................................................................... 42

5. CONSTRUTOR LGICO DE REPETIO................................................................ 48


5.1. 5.2. 5.3. 5.4. 5.5. 5.6. 5.7. 5.8. 5.9. 5.10. 5.11. 5.12. N PRIMEIROS PARES ........................................................................................................................... 48 IMPARES ............................................................................................................................................ 51 P.A.................................................................................................................................................... 54 NMEROS TRIANGULARES ................................................................................................................. 55 FATORIAL .......................................................................................................................................... 57 MDC................................................................................................................................................. 58 SEQNCIA OSCILANTE..................................................................................................................... 60 WALLIS ............................................................................................................................................. 63 FIBONACCI ........................................................................................................................................ 64 ACUMULAR SEQNCIA .................................................................................................................... 66 SEQNCIA COM AVISO DE FIM .......................................................................................................... 67 ALFABETO ......................................................................................................................................... 67

5.13. 5.14. 5.15. 5.16.

PRXIMA PLACA ............................................................................................................................... 69 ENGRENAGEM ................................................................................................................................... 70 PRESTAES...................................................................................................................................... 70 EXERCCIOS PROPOSTOS .................................................................................................................... 72

REFERNCIAS E BIBLIOGRAFIA................................................................................... 84

1.

PROBLEMAS ALGORTMICOS

Segundo Gardner (1990), os problemas podem ser classificados em seis categorias: combinatrios, geomtricos, numricos, lgicos, processuais e verbais, podendo haver sobreposies entre as categorias. Neste curso, os problemas so do tipo processual, ou seja, que possuem soluo algortmica, como em uma receita de bolo. Segundo as Diretrizes Curriculares de Cursos da rea de Computao e Informtica (MEC/SESu/CEEInf, 2006), um algoritmo um mtodo abstrato mas bem definido para resoluo de um problema em tempo finito. O uso de algoritmos anterior prpria palavra, originada do sobrenome de um matemtico persa do sculo IX, Al-Khwarizmi, que teve sua obra sobre o sistema de numerao decimal (indiano) publicado no Ocidente no sculo XII (http://pt.wikipedia.org/wiki/Algoritmo). Como exemplo de algoritmos, temos: Dividir um nmero inteiro por outro Soma de fraes Mximo Divisor Comum (MDC) de dois nmeros inteiros (Euclides) Decomposio de nmeros inteiros em fatores primos (Fatorao)

1.1.

Baixa produtividade

Uma estria que ilustra o que so os algoritmos e como eles podem ser mais, ou menos, eficientes a de um pintor que foi contratado para pintar uma faixa contnua em uma estrada. Passados alguns dias, o supervisor chama o pintor e diz que a produtividade dela tem diminudo muito, pois no 1 dia ela pintou 120 metros de faixa, no 2 pintou 60, no 3, 45 e foi sempre diminuindo. O pintor respondeu: Eu no estou trabalhando menos. A lata de tinta que est cada vez mais longe. Moral da estria: No basta apenas funcionar. Os algoritmos tm de ser eficientes.

1.2.

Adivinhao

Um mgico se prope a adivinhar o nmero que uma pessoa pensou, no intervalo de 0 a 1024 e usa a seguinte estratgia, fazendo a seguinte seqncia de perguntas para a pessoa: O nmero que voc pensou o zero? O nmero que voc pensou o um? O nmero que voc pensou o dois?

e assim por diante. Quando a pessoa responder sim, o mgico chegou na soluo. Outro mgico utiliza a seguinte estratgia: A pessoa deve responder se o nmero falado pelo mgico o nmero pensado ou se menor ou maior que o nmero pensado.

O primeiro nmero perguntado pelo mgico o 512, que a metade do intervalo de adivinhao, de 0 a 1024. Se a pessoa responder que no o 512 e que o nmero pensado menor que 512, o mgico desconsidera os nmeros maiores ou iguais a 512 e acha o meio do intervalo de 0 a 511, que 256. Se a pessoa responder que no o 512 e que o nmero pensado maior que 512, o mgico desconsidera os nmeros menores ou iguais a 512 e acha o meio do intervalo de 513 a 1024, que 768. O processo segue assim: elimina-se metade de cada intervalo e divide-se ao meio o intervalo em que se encontra o nmero pensado, at que o nmero pensado seja encontrado. O segundo processo mais eficiente que o primeiro, ou seja, gasta menos recursos computacionais (perguntas do mgico). Para determinar quanto um algoritmo melhor que outro, compara-se o esforo computacional (complexidade) de cada algoritmo. Uma forma de comparao, neste caso, supor que cada algoritmo ser usado para fazer 1024 adivinhaes e compara-se a quantidade de perguntas (esforo computacional) das duas estratgias: 1 estratgia: A quantidade de perguntas de cada adivinhao , em mdia, 512 (alguns pensaro em nmeros no incio da faixa; outros, querendo ver o mgico se cansar, pensaro em nmeros prximos de 1024). 2 estratgia: A quantidade de perguntas , no mximo 10 (cada vez que o mgico faz a pergunta, o intervalo dividido ao meio: 1024 / 2 = 512; 512 / 2 = 256; 256 / 2 = 128; 64; 32; 16; 8; 4; 2; 1. Quando o tamanho do intervalo fica igual a um, o nmero adivinhado). Exemplo: Se o nmero pensado for o 47, na primeira estratgia seriam feitas 47 perguntas. Na segunda, seriam feitas as seguintes perguntas: Pergunta Incio intervalo 1 0 2 0 3 0 4 0 5 0 6 32 7 32 8 40 9 44 10 46 do Fim do intervalo Meio (Nmero perguntado) 1024 512 256 128 64 64 48 48 48 48 512 256 128 64 32 48 40 44 46 47 (nmero pensado)

1.3.

Moeda mais pesada

Num conjunto de 9 moedas, uma mais pesada que as demais. Usando uma balana 1 de 2 pratos , identificar a moeda mais pesada. Uma estratgia dividir as moedas em 3 conjuntos de 3 moedas, colocar um conjunto em cada prato e deixar um conjunto de fora: 1a Pesagem Se houver equilbrio, a mais pesada estar entre as que esto fora. Seno, estar no prato mais baixo. 2a Pesagem Do conjunto que contm a mais pesada, colocar uma em cada prato. Se houver equilbrio, a que ficou fora a mais pesada, seno, a mais pesada ser aquela do prato mais baixo.

Outra estratgia dividir as moedas em 2 conjuntos de 4 moedas e colocar um conjunto em cada prato, ficando uma moeda de fora: 1a Pesagem Se houver equilbrio, a mais pesada a que ficou fora. Seno, est no prato mais baixo. 2a Pesagem Do conjunto que contm a mais pesada, colocar duas em cada prato. A mais pesada estar no prato que descer. 3a Pesagem Colocar uma moeda em cada prato. A mais pesada estar no prato que descer.

Ao examinarmos as duas estratgias notamos que na 1 sempre haver duas pesagens, enquanto que na 2, a moeda mais pesada poder ser localizada j na 1 pesagem. Qual a mais eficiente?
1

Trata-se de uma balana analgica, que no mostra o peso, como numa balana digital, mas se uma coisa tem o mesmo peso que outra.

Podemos supor que temos de identificar 9 lotes de moedas. Sero necessrias 18 pesagens na 1 estratgia (9 lotes X 2 pesagens), e 25 pesagens na 2 (1/9 de probabilidade de encontrarmos na primeira pesagem, e as outras 8 vezes com 3 pesagens), ou seja: 1 / 9 de 9 + 8 X 3 Para esse nmero de moedas, a 1 estratgia melhor. Outra comparao quanto reutilizao das estratgias para conjuntos com mais moedas. Como exemplo, usaremos as duas estratgias para um conjunto de 40 moedas. Nesse momento, os vendedores de cada estratgia criaro slogans para vender seu peixe, algo como: Divida em 3 partes, ou Um pouco, dois bom, trs demais. 1 Estratgia 1 Pesagem 2 Pesagem 3 Pesagem Dividir em 3 partes. Nesse caso, teramos 13 moedas em cada prato e 14 moedas fora. Se houver equilbrio, a mais pesada estar nas moedas de fora. Seno, estar no prato que desceu. Teramos, nesse caso, 6 ou 7 moedas para a prxima pesagem. Colocar 2 moedas em cada prato e 2 ou 3 fora. A concluso seria a mesma da primeira pesagem. Com 2 ou 3 moedas, uma em cada prato, acharemos a mais pesada Dividir em 2 partes iguais. Se a quantidade de moedas for impar, 1 moeda ficar de fora. Colocar 20 moedas em cada prato. A mais pesada estar no prato que descer Por 10 moedas em cada prato. A mais pesada estar no prato que descer Por 5 moedas em cada prato. Se houver equilbrio, a mais pesada ser a de fora. Seno, est no prato que desceu. Por 2 moedas em cada prato. Se houver equilbrio, a mais pesada ser a de fora. Seno, estar no prato que desceu. Colocar uma moeda em cada prato. A mais pesada estar no prato que desceu.

2 estratgia 1 Pesagem 2 Pesagem 3 Pesagem 4 Pesagem 5 Pesagem

Tente mostrar que, exceto por sorte, a 1 estratgia melhor que a 2.

1.4.

Caixa eletrnico

Um procedimento (algoritmo) para retirar dinheiro de um caixa eletrnico algo simples, que est ao alcance de quase todos, devido s facilidades crescentes das interfaces com o usurio, apesar do no entendimento, ainda, da voz ou do pensamento do cliente. Existem variaes de procedimentos entre os bancos, tais como o tipo de acesso ao quiosque, reteno ou no do carto durante a transao, posio do carto para insero etc. 1 Entrar no Envolve a leitura do carto na porta do quiosque e verificao se quiosque um carto vlido. A leitura feita num determinado sentido, pois existem 4 possibilidades com o carto na horizontal, e s uma vlida). Nesse caso, um desenho do carto (cone) prximo ao mecanismo de leitura pode ajudar. 2 Colocar Outra vez ocorre o problema sobre como colocar o carto. carto na mquina 3 Digitar a A senha digitada deve ser verificada com a senha do carto. Deve haver um limite de tentativas (normalmente 3). O programa deve senha emitir mensagens sobre o que ocorrer aps as tentativas frustradas. 4 Solicitar Um menu (cardpio) deve ser mostrado para que o cliente escolha o tipo de servio (saldo, extrato, retirada, transferncia, valor pagamento etc.). Se a escolha for retirada, o programa deve sugerir alguns valores comuns, ou abrir um campo para a digitao de outro valor que, normalmente, deve ser mltiplo de R$ 10,00. Devem, tambm, ser verificados os limites (saldo, acumulado de retiradas no dia, horrios especiais etc.) 5 Retirar o Normalmente, o carto liberado antes do dinheiro, para evitar esquecimentos. Pode-se tambm verificar se o cliente quer utilizar carto algum outro servio antes de devolver o carto. 6 Retirar o Deve-se ter um mecanismo de contagem e escolha de notas para dinheiro cada pagamento. 7 Sair do Mesmo este ato pode no ser to simples, existindo seguros quiosque instantneos para casos de roubos em caixas eletrnicos. No refinamento deste procedimento no foram consideradas as implicaes tecnolgicas, de performance, e dos inmeros contratempos que podem ocorrer, como mquina quebrada, papel enroscado, carto engolido, sem comunicao (off-line) etc.

1.5.
a)

Problemas propostos
Ligao telefnica

Escreva um procedimento detalhado para efetuar uma ligao telefnica de um aparelho pblico. b) Moeda diferente

Num grupo de oito moedas, uma delas diferente (mais leve ou mais pesada). Usando uma balana de dois pratos, escreva um procedimento para descobrir qual. c) Moedas falsas

Existem 10 montes de moedas, cada um com 10 moedas de 10 gramas. Num dos montes todas as moedas so falsas (cada uma delas pesa um grama a mais que as verdadeiras). Descreva os passos para descobrir o monte de moedas falsas, usando uma balana digital. d) Travesia 1 (Canibais)

Trs missionrios esto de um lado de um rio com trs canibais e desejam atravessar um rio usando um barco com capacidade para, no mximo, duas pessoas. O problema que se o nmero de canibais for maior que o nmero de missionrios, em qualquer uma das margens, os canibais comem os missionrios (Barbosa, 1999). e) Travessia 2 (Maridos ciumentos)

Trs maridos, com suas respectivas esposas, querem atravessar um rio. Acontece que, no barco s cabem duas pessoas e os 3 maridos so muito ciumentos e no permitem que sua esposa fique numa das margens com outro homem, sem que ele tambm esteja presente. Como pode ser feita a travessia? (Barbosa, 1999). f) Problema do vinho

Existem trs jarras com capacidade para exatamente 8, 5 e 3 litros. A primeira jarra est cheia de vinho. Como fazer para repartir esse contedo, em partes iguais, nas duas jarras maiores. No existem graduaes nas jarras, nem permitido faze-las (Barbosa, 1999). g) TIC-TAC-TOE (Jogo da velha)

No jogo da velha, quem comea pelo centro ganha com certeza, desde que o adversrio responda com uma casa lateral. D a receita para ganhar (Barbosa, 1999).

10

h)

Torre de Hanoi

(ENADE Computao 2005) No famoso jogo da Torre de Hani, dada uma torre com discos de raios diferentes, empilhados por tamanho decrescente em um dos trs pinos dados, como ilustra a figura abaixo. O objetivo do jogo transportar-se toda a torre para um dos outros pinos, de acordo com as seguintes regras: apenas um disco pode ser deslocado por vez, e, em todo instante, todos os discos precisam estar em um dos trs pinos; alm disso, em nenhum momento, um disco pode ser colocado sobre um disco de raio menor que o dele; claro que o terceiro pino pode ser usado como local temporrio para os discos.

Imaginando que se tenha uma situao em que a torre inicial tenha um conjunto de 5 discos, qual o nmero mnimo de movimentaes de discos que devero ser realizadas para se atingir o objetivo do jogo? A 25 B 28 C 31 D 34 E 38

11

2.

CONCEITOS FUNDAMENTAIS
Os computadores sabem, desde pequenos, que depois de executar uma instruo, devem executar a prxima.

Um computador executa seqncias de instrues, na ordem em que foram escritas, exceto se houver alguma instruo de desvio.

2.1.

Organizao dos Computadores

Uma mquina que queira ser chamada de computador deve conter os componentes bsicos mostrados no diagrama a seguir:
CPU Entrada (Input) Unidade de Controle Sada (Output)

Unidade Lgica

Unidade Aritmtica

Memria Nome da varivel, endereo, nome do atributo.

A B C |5| |3| |8| Soma CA+B

Contedo, valor, estado. (De acordo com o tipo)

Comando, instruo

Nome da Operao, procedimento, mtodo.

12

2.2.

Variveis

Segundo Sebesta (2000, p. 161), uma varivel pode ser caracterizada como um sxtuplo de atributos: nome, endereo, valor, tipo, tempo de vida e escopo. O tipo de uma varivel determina a faixa de valores que ela pode ter e o conjunto de operaes definidas para os valores do tipo (SEBESTA, 2000, p.163). 2.2.1. Tipo Inteiro utilizado para armazenar valores entre 32.768 e 32.767 (215 1), sem parte decimal, usando 2 bytes, com as seguintes operaes possveis: Operao Adio Subtrao Multiplicao Diviso inteira Smbolo + * \ quociente mod resto Exemplo 7+2=9 72=5 7 * 2 = 14 7\2=3 7 mod 2 = 1

O tipo inteiro utilizado para representar valores enumerveis: quantidades de peas, contadores, nmero de passagens por uma rotina, dias de atraso etc. 2.2.2. Tipo Real Nmeros de ponto flutuante entre 3.402823 * 1038 at 3.402823 * 1038, na preciso simples, ocupando 4 bytes (padro IEEE). Como exemplo, o n 5.483 seria armazenado de forma normalizada: 0.5483 * 103, na qual a parte decimal chamada de mantissa (preciso) e o expoente da base 10 chamado de caracterstica (grandeza). As operaes so as mesmas que as do tipo inteiro, exceto pela diviso, na qual existe apenas um operador, cujo smbolo uma /, e que fornece valores com casas decimais, sem resto. O tipo Real usado para representar nmeros em geral: salrios, notas, preos, saldos etc. 2.2.3. Tipo Caractere Usado para armazenar as letras do alfabeto, numerais e sinais de pontuao. O cdigo ASCII (American Standard Code for Information Interchange), representa, em 7 bits, o padro de caracteres para a lngua inglesa, alm dos caracteres de controle. Na verso estendida, o cdigo ASCII inclui caracteres prprios das diversas lnguas e smbolos grficos.

13

Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

ASCII NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US

Tabela ASCII Decimal ASCII Decimal 32 Espao 64 33 ! 65 34 66 35 # 67 36 $ 68 37 % 69 38 & 70 39 71 40 ( 72 41 ) 73 42 * 74 43 + 75 44 , 76 45 77 46 . 78 47 / 79 48 0 80 49 1 81 50 2 82 51 3 83 52 4 84 53 5 85 54 6 86 55 7 87 56 8 88 57 9 89 58 : 90 59 ; 91 60 < 92 61 = 93 62 > 94 63 ? 95

ASCII @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _

Decimal 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

ASCII ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ DEL

Em sua verso estendida, com 8 bits, o cdigo ASCII representa tambm caracteres especiais, como os acentuados, em algumas lnguas. Decimal 128 130 131 ASCII Decimal 132 133 135 ASCII Decimal 136 160 162 ASCII Decimal 163 166 167 ASCII

14

2.2.4. Tipo String Cadeias de 0 a 65.535 caracteres (string = cordo, em ingls). O tipo string serve para armazenar nomes de pessoas, endereos e cdigos em geral, mesmo aqueles que contenham apenas dgitos, pois, normalmente, no so feitas operaes aritmticas com os cdigos. Ex.: INFORMTICA ; ERRO: Cliente j existe; 12345-6 2.2.5. Tipo Data Datas e horas, ocupando 8 bytes, usadas para representar datas de nascimento, vencimento, casamento, pagamento, etc. Permite-se operaes de diferena entre datas (em dias), acrescentar dias a uma data, e existem funes para obter s o dia, s o ms ou s o ano. Ex.: 05/04/98 26/03/98 9 27/02/97 + 4 03/03/97 2.2.6. Tipo Booleano Representa valores Verdadeiro ou Falso. O resultado das operaes de negao (no), conjuno (e) e disjuno (ou) dado pelas tabelas verdade.

2.3.

Regras para identificadores


Os nomes de variveis seguem algumas regras: Nomes devem ser mnemnicos, ou seja, devem ajudar a lembrar o contedo e os objetivos propostos. Exemplo: Salario, MediaFinal, Seno. Variveis de uma letra devem ser usadas apenas em um escopo local. Exemplo: K (contador), X (auxiliar), I (ndice). Nomes muito parecidos podem confundir. Exemplo Cli e Cii. As letras I, L e O podem ser confundidas com os ns 0 e 1. Utilizar prefixos ou sufixos para identificar categorias. Ex.: frmCliente (formulrio), dbCliente (base de dados).

2.4.

Expresses e Hierarquia de Operadores

Na avaliao de expresses feita pelo computador, valem as mesmas regras utilizadas na 6 srie, para destruir aquelas expresses que ocupavam uma pgina inteira do caderno: A avaliao de expresses segue uma hierarquia (precedncia) de operadores; Os parnteses so usados para forar a avaliao; A resoluo feita a partir do nvel de parnteses mais interno para o externo; Quando existirem operadores de mesma precedncia, a ordem de avaliao ser da esquerda para a direita;

15

Quando existirem vrias categorias de operadores, a avaliao obedecer esta ordem: aritmticos, relacionais e, por fim, os lgicos. Aritmticos Exponenciao Negao ou Inverso de Sinal Multiplicao e Diviso Diviso Inteira Resto Adio e Subtrao Concatenao de strings ^ * / \ Mod + & + Relacionais Igual Diferente Maior Menor Maior ou igual Menor ou igual = <> > < >= <= Lgicos No E OU OU Exclusivo NOT AND OR XOR

Exemplos de expresses matemticas e sua codificao em uma linha: Expresso matemtica

b 4ac 1+N 2 X= 2.5. b . 2a

Codificao

b^24*a*c (1 + N ) / 2 X1 = ( b + Delta ^ 0.5 ) / ( 2 * a ) X2 = ( b Delta ^ (1/2)) / ( 2 * a )

Funes pr-definidas
O conceito de funo, em computao, o mesmo que em matemtica:

y = f( x)
Entrada (parmetro passado para a funo) Processamento Sada Funo Exemplo (retorno da funo) int (Expr.Numrica) Parte inteira do nmero int ( 2.4 ) = 2 Date ( ) Data de hoje 09/02/2000 Time ( ) Hora corrente 13:50:08 Abs (Expr.Numrica) Valor absoluto abs (-5) = 5 rnd Nmero aleatrio entre 0 e 1 0.564326 Sin (Expr.Numrica) Seno de um arco, dado em Sin (3.141592654/6) = 0.5 radianos necessrio respeitar o tipo de parmetro da funo. No caso da funo seno, se escrevermos sin (30), a resposta ser 0.988, que o seno de 30 radianos, e no de 30 graus. Descrio

16

3.

CONSTRUTOR LGICO SEQUENCIAL


Os computadores sabem, desde pequenos, que depois de executar uma instruo, devem executar a prxima.

Um computador executa seqncias de instrues, na ordem em que foram escritas, exceto se houver alguma instruo de desvio. As instrues bsicas, que no executam desvios so: Varivel Expresso A instruo de atribuio avalia a expresso escrita do lado direito do smbolo (calcula o valor da expresso) e atribui (armazena) o resultado na varivel escrita do lado esquerdo. Entrada (lista de variveis) Esta instruo faz a leitura de valores de um dispositivo de entrada (teclado, disco, mouse,...) para as variveis de memria. Sada (lista de variveis ou Esta instruo copia valores das variveis de constantes) memria, ou outros contedos constantes, para um dispositivo de sada (tela, disco, impressora,...).

As instrues de entrada e sada sero usadas em alguns poucos casos na descrio dos algoritmos deste curso, pois o foco a soluo dos problemas, no a interface, ou seja, os dados de entrada esto disponveis (j foram lidos) para a execuo dos processos e as variveis de sada (resultados) ficam disponveis para serem mostradas, impressas, gravadas, etc.

3.1.

Termmetro

Um termmetro mede a temperatura em graus Fahrenheit. Criar um processo para converter a temperatura para graus Celsius. Uma soluo As temperaturas, em graus Celsius ( C ) e em graus Fahrenheit ( F ), so dados do tipo real. A frmula para converso de Fahrenheit para Celsius : C = _5 ( F 32 ) 9 Exemplo: Dada a temperatura de 68 F, o procedimento calcula C = 20.

17

A descrio do algoritmo para resolver esse problema : TERMMETRO Real C // Graus Celsius Real F // Graus Fahrenheit Converte ( ) Objetivo: Converter graus Fahrenheit para Celsius C 5 / 9 * (F 32) As variveis do problema so definidas numa seo especial, incluindo os respectivos tipos (C e F so do tipo Real). Converte ( ) um algoritmo que faz a converso de Fahrenheit (varivel F) para Celsius (varivel C). As variveis passam pelas seguintes mudanas de estado (valor) na memria: Reserva de espao na memria
F C

Aps a leitura do contedo de F


F C

Aps o clculo dos graus Celsius


F C

68

68

20

3.2.

rea do Crculo
Dado o raio de um crculo, obter sua rea. Uma soluo

O raio um dado do tipo real, que deve ser > 0. A rea do crculo do tipo real, e 2 obtida pela frmula: rea = * Raio CIRCULO Real Raio // Raio do crculo Real Area // rea Calc_Area ( ) Objetivo: Obter a rea do crculo, dado seu raio Pr-condio: Raio > 0 Area 3.1416 * Raio ^ 2

18

3.3.

Cronmetro

Um cronmetro mede, em segundos, a quantidade de tempo decorrida entre dois instantes. Converter o tempo em segundos para horas, minutos e segundos, para facilitar a leitura. Exemplos do estado final das variveis Horas, Minutos e Segundos: Tempo Horas Minutos Segundos

100
Tempo

0
Horas

1
Minutos

40
Segundos

3800
Uma soluo

20

A quantidade de segundos um valor do tipo inteiro. A resposta do problema a quantidade de Horas, Minutos e Segundos, tambm valores do tipo inteiro. Para fazer converses de tempo, consideram-se as seguintes relaes: 1 minuto = 60 segundos; 1 hora = 60 minutos. Dado um valor em segundos, pode-se calcular a quantidade de minutos existentes, dividindo a quantidade de segundos por 60. O resto dessa diviso a quantidade de segundos mesmo (no forma um minuto). A quantidade de minutos obtida pode ser maior que 60. Para calcular a quantidade de horas existentes, obtm-se o quociente da diviso dos minutos por 60.

Tempo (Segundos)

3800 20

60 63 60 3 1

Quociente 1 (Minutos)

Resto 1 (Segundos) Resto 2 (Minutos)

Quociente 2 (Horas)

19

A descrio do algoritmo para resolver esse problema : CRONMETRO Inteiro Tempo // Tempo em segundos Inteiro H, M, S // Horas, Minutos e Segundos, aps a converso. Conv_HMS() Objetivo: Converter tempo em segundos para Horas, Minutos e Segundos Pr-condio: Tempo > 0 S Tempo mod 60 M Tempo \ 60 H M \ 60 M M mod 60 Outra soluo A partir da relao 1 hora = 3600 segundos, temos:
Tempo (Segundos) Resto 1 (Segundos) Resto 2 (Segundos

3800 200

3600 1 60

Quociente 1 (Horas)

20

Quociente 2 (Minutos)

CRONMETRO Inteiro Tempo // Tempo em segundos Inteiro H, M, S // Horas, Minutos e Segundos, aps a converso Conv_HMS_2 ( ) Objetivo: Converter tempo, em segundos, para Horas, Minutos e Segundos Pr-condio: Tempo > 0 H Tempo \ 3600 S Tempo mod 3600 M S \ 60 S S mod 60

20

3.4.

Rateio

Dividir uma quantidade de alunos em 3 classes, de modo que a diferena entre elas seja mnima (Oliveira, 2005). Uma soluo Trata-se de um problema tpico de Administrao Escolar: dividir uma quantidade de alunos em um determinado nmero de classes, para que todas as classes fiquem com o mesmo nmero de estudantes. Nem sempre a diviso por 3 resulta exata, e evidentemente a quantidade de alunos por sala deve ser um nmero inteiro. Ex: 46 / 3 = 15,33..., ou seja, Classe 1 = 15, Classe 2 = 15 e Classe 3 = 16 A idia inicial obter o quociente da diviso por 3 e atribuir esse valor Classe 1 (quantidade da menor sala, j que a parte fracionria perdida). A Classe 2 pode ter a mesma quantidade da Classe 1. A Classe 3 obtida pela diferena entre a quantidade de alunos inicial e os alunos j colocados nas duas primeiras classes. ALUNOS Inteiro Alunos, Classe1, Classe2, Classe3 Balanceamento ( ) Objetivo: Dividir uma quantidade de alunos em 3 salas, de forma balanceada Classe1 Alunos \ 3 Classe2 Classe1 Classe3 Alunos Classe1 Classe2 Vamos verificar se o algoritmo est correto para 63, 64 e 65 alunos: Classe 1 2 3 Clculo Quantidade \ 3 = Classe 1 AlunosClasse1 Classe2 Quantidade de alunos 63 64 65 21=63 \ 3 21=64 \ 3 21=65 \ 3 21 21 21 21=632121 22=642121 23=652121

Para a quantidade = 65 a distribuio seria 21, 21 e 23 para as classes 1, 2 e 3. Neste caso, o resultado 21, 22, 22 seria melhor, pois as classes estariam com uma diviso mais balanceada. Isso indica que o algoritmo, embora tenha feito uma diviso correta, no obteve o melhor resultado. Isso ocorre, pois na diviso por 3 podem sobrar 1 ou 2 alunos. Uma melhoria no balanceamento seria a diviso por 2 dos alunos no alocados na primeira sala e o clculo da terceira sala por diferena.

21

ALUNOS Inteiro Alunos, Classe1, Classe2, Classe3 Balanceamento ( ) Objetivo: Dividir uma quantidade de alunos em 3 salas Classe1 Alunos \ 3 Classe2 (Alunos Classe1) \ 2 Classe3 Alunos Classe1 Classe2 Neste caso, o algoritmo far a distribuio corretamente: Classe 1 2 3 Clculo Quantidade \ 3 (AlunosClasse1) \ 2 AlunosClasse1 Classe2 Quantidade de alunos 63 64 65 21=63 \ 3 21=64 \ 3 21=65 \ 3 21 21 22 21=632121 22=642121 22=652121

3.5.

Erro comum (para iniciantes)

Um erro comum para iniciantes achar que uma expresso, uma vez escrita, tornase uma verdade para o restante do programa: Ex.: B A / 2 AA+1 Se o valor de A for alterado, o valor de B no ser alterado, como ocorre nas planilhas eletrnicas.

3.6.
a)

Problemas Propostos
rea do tringulo Dado um tringulo, definido pelos valores dos lados, calcular sua rea. rea = s (sa).(sb).(sc) onde s =a + b + c 2

Exemplo: Dado um tringulo com lados a = 3, b = 4 e c = 5, a rea seria = 6

22

b)

Distncia entre dois pontos num plano

Dadas as coordenadas de 2 pontos num plano (X1, Y1) , (X2, Y2), calcular a distncia entre esses pontos.
d = ( X2 X1 )
2

+ ( Y2 Y1 )

Exemplo: Dados os pontos (3,2) e (6,2), a distncia seria = 3 c) Juros Compostos

Dados o valor presente (VP), um n de perodos (n) e uma taxa de juros do perodo (i, em decimais, ou seja, 5% = 0,05), calcular seu valor futuro (VF), a juros compostos. n VF = VP (1 + i ) Exemplo: Dado VP = R$ 1.000, 00, capitalizado em 12 meses, a uma taxa de 2% de juros ao ms, o valor futuro ser = R$ 1.268,24 = (1 + 0.02) ^ 12. d) Separar dgitos

Dado um nmero inteiro, positivo, < 1000, obter a quantidade de centenas, dezenas e unidades desse nmero. Exemplo: e) Dado o n 764, obter Centena = 7, Dezena = 6 e Unidade = 4

Caixa eletrnico

Um caixa eletrnico trabalha com cdulas de 100, 50, 20, 10, 5, 2 e 1. Obter a quantidade de cdulas de cada tipo, para efetuar um pagamento de uma quantia escolhida pelo cliente, usando a menor quantidade de cdulas. Exemplos: Valor Quantidade Valor das de notas notas 283 2 100 1 50 1 20 1 10 0 5 1 2 1 1 Valor Quantidade Valor das de notas notas 64 0 100 1 50 0 20 1 10 0 5 2 2 0 1

f)

Dgitos centrais

Dado um nmero inteiro entre 1000 e 9999, mostrar a soma dos dgitos centrais (2 e 3 dgitos).

23

g)

Decimal para binrio Dado um nmero inteiro, positivo, < 32, mostrar sua representao em binrio.

Um nmero na base binria (Base 2), utiliza os princpios do sistema de numerao posicional e aditivo, o mesmo que usamos para a base 10, ou seja: 342 = 3 X 100 + 4 X 10 + 2 = 3 X 10 2 + 4 X 10 1 + 2 X 10 0 Para representar as quantidades, escrevemos apenas os coeficientes das potncias da base, ou seja, 3, 4 e 2. A posio do dgito no nmero determina o seu valor. Assim, 3 dgito 3 vale mais que o 4, pois est na posio (casa) da centena ( 10 2 ) e, portanto, vale 300, enquanto o 4 vale 40, pois est na posio da dezena ( 10 1). Quando usamos a base 2, cada posio tem o peso de uma potncia da base 2, e os dgitos, em vez de 0 a 9 da base 10, sero apenas 0 e 1. Assim, para representarmos a quantidade 27 na base 2, escrevemos: 1 X 2 4 + 1 X 2 3 + 0 X 2 2 + 1 X 2 1 + 1 X 2 0 = 11011 Um mtodo para obter os coeficientes das potncias de 2 dividir sucessivamente por 2, enquanto o quociente for 2, e utilizar como resposta o ltimo quociente e os restos das divises por 2, na ordem inversa que foram calculados: 27 1 2 13 1 2 6 0

2 3 1

=11011 2 1

h)

Simulao Simular e determinar qual o objetivo do seguinte algoritmo. Variveis N, N1, N2, N3, N4, N5 (Inteiro) Procedimento ( ) Objetivo: __________________________________________________________ N1 N \ 16 N2 (N mod 16) \ 8 N3 N mod 8) \ 4 N4 N mod 4) \ 2 N5 N mod 2

24

4. CONSTRUTOR LGICO DE SELEO (DECISO)


Se voc adivinhar quantas canetas eu tenho, eu te dou uma e fico com a outra!!! O construtor de seleo usado para testar uma condio e, se esta for verdadeira, executar um bloco de instrues, ou, se for falsa, executar, opcionalmente, outro bloco. A condio uma expresso envolvendo constantes, variveis e operadores aritmticos, relacionais e lgicos e que retorna um valor Verdadeiro (True) ou Falso (False).

4.1.

Salrio Bruto

Dados o tipo do funcionrio (H = Horista ou M = Mensalista), o salrio por hora (horistas) ou por ms (mensalistas) e, o nmero de horas trabalhadas (horistas) ou o valor de faltas (mensalistas), calcular o valor do salrio bruto. O fluxograma da soluo :

[Tipo = H]

[Seno]

SBruto Salario * HorasTrab

SBruto Salario - Faltas

A seguir, a mesma estrutura escrita em linguagem algortmica: Tipo = H ento SBruto Salario * Horas Trab Seno SBruto Salario Faltas Fim-se Se

25

4.2.

Verificar se par
Dado um nmero inteiro, positivo, verificar se ele par. Uma soluo

Se o nmero dado for par, atribuir varivel Par, do tipo booleano, o valor Verdadeiro, seno, atribuir o valor Falso. Um nmero par divisvel por 2, ou seja, o resto da diviso por 2 igual a zero. NMERO Inteiro N // Nmero inteiro dado Booleano Par // Informao se o nmero par Verifica_Par( ) Objetivo: Verificar se um nmero inteiro positivo par Se N mod 2 = 0 ento Par Verdadeiro Seno Par Falso Fim-Se

4.3.

Maior de 2 nmeros
Dados 2 nmeros distintos, obter o maior. Uma soluo A pr-condio que os nmeros so distintos.

Compara-se os ns e o maior armazenado em uma varivel que ser a cpia do maior entre os dois nmeros. 2 NMEROS Inteiro A, B // 2 nmeros dados Inteiro Maior // Cpia do maior dos dois nmeros Maior_de_2 ( ) Objetivo: Obter o maior de 2 nmeros Pr-condio: A e B so distintos Se A > B ento Maior A Seno Maior B Fim-Se

26

4.4.

Maior de 3 nmeros
Dados 3 ns distintos, mostrar o maior. Uma soluo

Sejam A, B e C os 3 ns. As comparaes entre eles so feitas dois a dois. Primeiramente, acha-se o maior entre A e B. Se A for maior que B, A ser comparado com C. Se A for maior que C, ento ser o maior dos 3. Seno, C ser o maior, ou seja:
O vencedor da briga entre A e B disputa com C, e quem ganhar a 2 briga, o maior dos 3.

A rvore de possibilidades que mostra essa estratgia :


Sim Sim

O maior A O maior C O maior B O maior C

A>C?
No Sim

A>B?
No

B>C?
No

As instrues esto numeradas para que seja feita, posteriormente, uma simulao do algoritmo. 3 NMEROS Inteiro A, B, C // 3 nmeros dados Inteiro Maior // Cpia do maior dos 3 nmeros Maior_de_3 ( ) Objetivo: Achar o maior de 3 nmeros Pr-condio: A, B e C so distintos Se A > B ento Se A > C ento Maior A Seno Maior C Fim-Se Seno Se B > C ento Maior B Seno Maior C Fim-Se Fim-Se

1 2 3 4 5 6 7

27

Simulao Na simulao, o algoritmo executado para determinados valores (instncias), sendo verificado se produz a resposta esperada. Exemplo: supondo-se que os valores de A, B e C sejam 6, 8, 4, o algoritmo executaria as seguintes instrues, produzindo o seguinte resultado: Variveis B C Maior 8 4 Resultado do teste F V

Instruo 1 5 6

A 6

Teste A > B (6 > 8) ? B > C (8 > 4) ?

A varivel Maior ficou com uma cpia do maior dos 3 nmeros. Usa-se, nesse casso, o encadeamento de perguntas, ou seja, uma pergunta dentro da outra. Se for usado o operador nas comparaes e houver repetio do maior, o primeiro nmero da comparao ser escolhido como maior. Segunda estratgia Pode-se tornar as brigas independentes, ou seja, a varivel Maior fica com o vencedor entre A e B e disputa com C. Se o valor da varivel Maior for menor que o de C, o contedo da varivel Maior ser substitudo pelo contedo de C. 3 NMEROS Inteiro A, B, C, Maior // 3 nmeros dados e cpia do maior Maior_de_3 ( ) Objetivo: Achar o maior de 3 nmeros Pr-condio: A, B e C so distintos Se A B ento Maior A Seno Maior B Fim-Se Se Maior < C ento Maior C Fim-Se // Neste caso, no necessrio o SENO. Essa estratgia melhor, pois, no caso do acrscimo de um nmero, muda-se muito a estrutura da primeira soluo, enquanto que nesta s acrescentar uma comparao da varivel Maior com uma quarta varivel (D).

28

Terceira estratgia Outra estratgia descobrir se A o maior dos trs. Se no for, o maior estar entre B e C. Para descobrir se A o maior, pode-se utilizar uma pergunta composta, ou seja, para ser o maior, A deve ser maior que B e maior que C. As proposies podem ser combinadas por meio de conectivos lgicos. O resultado dessa combinao pode ser visualizado numa tabela-verdade. A tabela-verdade para 2 proposies (p e q), com dois valores possveis para cada uma (V ou F), tem 4 possibilidades. A tabela da negao tem 2 possibilidades. p F V F V q F F V V Conjuno ( E ) p^q F F F V Disjuno (OU) pvq F V V V p V F Negao (NO) ~p F V

3 NMEROS Inteiro A, B, C, Maior // 3 nmeros dados e cpia do maior Maior_de_3 ( ) Objetivo: Achar o maior de 3 nmeros Pr-condio: A, B e C so distintos Se A B e A C ento Maior A Seno Se B C ento Maior B Seno Maior C Fim-Se Fim-Se Um erro comum, ao verificar se o maior A, a seguinte pergunta: Se A B e B C ento Maior A

A varivel A pode at ser a maior e o comando Maior A no ser executado (no caso de B < C), ou seja, para que A seja o maior no necessrio que B C. Ex.: A = 7; B = 4; C = 5.

29

Outro erro muito comum ocorre quando tornamos os SEs independentes ou em seqncia, ou seja, no encadeados. O algoritmo a seguir funciona somente se o maior valor for B ou C. 3 NMEROS Inteiro A, B, C, Maior // 3 nmeros dados e cpia do maior Maior_de_3_Com_Erro ( ) Objetivo: Achar o maior de 3 nmeros Pr-condio: A, B e C so distintos Se A B e A C ento Maior A Fim-Se Se B C e B A ento Maior B Seno Maior C Fim-Se Convm lembrar que, de acordo com a Lei de Murphy, o programador tende a testar justamente os casos em que o programa no apresenta erro, e que o erro s ser descoberto quando puder causar srios prejuzos reputao do programador. Uma dica interessante, quando temos vrios casos para deciso, verificar quais casos ocorrem menos, e ento perguntarmos por eles. No exerccio acima, para impedirmos a entrada de nmeros iguais, temos de identificar os casos em que pode ocorrer igualdade, ou seja: A=B A=B A=C B=C e e e e A=C BC CB CA

Como temos somente um caso vlido (A B C), melhor perguntar por ele, deixando os casos de erro para o seno. A funo a seguir efetua essa verificao: Funo Distintos (Real A, B, C) Booleano Objetivo: Verificar se 3 nmeros so distintos Distintos A B And B C And A C A definio sobre a possibilidade de entrarem nmeros iguais, ou no, depende da aplicao. Se for para escolher a melhor nota de prova entre trs, no h problema se entrarem trs notas iguais. Se os trs valores so preos de compra, devemos utilizar outro critrio de desempate (condies de pagamento, prazo de entrega, qualidade etc.)

30

4.5.

Ordem crescente
Dados 3 nmeros distintos, coloc-los em ordem crescente. Uma soluo

Uma estratgia comparar os ns , dois a dois, e, se estiverem fora da ordem desejada, trocar o contedo deles. No basta, porm, comparar A com B, e B com C, pois, se B e C forem permutados, a ordem entre A e B tambm pode ter sido alterada. Para permutarmos o valor de duas variveis, necessrio utilizar uma terceira varivel, que funciona como auxiliar da troca (backup):
A 8 6 6 B 8 Aux 6

Se A > B ento Aux B B A A Aux Fim-se

3 NMEROS Real A, B, C Ordenar3 ( ) Objetivo: Colocar 3 nmeros em ordem crescente Se A > B ento Trocar (A, B) Fim-Se Se B > C ento Trocar (B, C) Fim-Se Se A > B ento Trocar (A, B) Fim-Se Procedimento Trocar (X, Y) // X e Y so passados por referncia. Objetivo: Permutar o contedo de X com Y Real Aux Aux X X Y Y Aux

31

Segunda estratgia Supondo que no precisssemos trocar o contedo das variveis, tendo apenas que mostrar os nmeros em ordem. Se A < B, resta saber a posio de C, que pode estar antes de A, entre A e B, ou depois de B. A C C B C CAB ACB ABC C antes de A e B C entre A e B C depois de B

Se B < A, resta saber a posio de C, que pode estar antes de B, entre B e A, ou depois de A. B C C A C CBA BCA BAC C antes de B e A C entre B e A C depois de A

3 NMEROS Real A, B, C Ordenar3 ( ) Objetivo: Mostrar 3 nmeros em ordem crescente Se A < B ento // A antes de B Se C < A ento // C antes de A Imprimir (C, A, B) Seno Se C < B ento // C entre A e B Imprimir (A, C, B) Seno Imprimir (A, B, C) // C depois de B Fim-Se Fim-Se Seno // B antes de A Se C < B ento // C antes de B Imprimir (C, B, A) Seno Se C < A ento // C entre B e A Imprimir (B, C, A) Seno Imprimir (B, A, C) // C depois de A Fim-Se Fim-Se Fim-Se

32

4.6.

Contar Pares
Dados 3 ns inteiros e positivos, mostrar quantos so pares. Uma soluo

O objetivo mostrar quantos so pares, e no quais. Uma das solues criar uma varivel com a funo de contador. Essa varivel seria iniciada com zero e a cada vez que ocorrer um n par, somado 1 no contador. No final, o contador poder continuar com 0 (nenhum par), ou ter valor 1, 2 ou 3. 3 NMEROS Inteiro A, B, C // 3 nmeros Inteiro QP // Quantidade de pares Conta_Pares ( ) Objetivo : Dados 3 ns inteiros, mostrar quantos so pares QP 0 Se A mod 2 = 0 ento QP QP + 1 Se B mod 2 = 0 ento QP QP + 1 Se C mod 2 = 0 ento QP QP + 1 Estratgia 2 (Funo caracterstica) Outra estratgia utilizar a funo caracterstica (seqncia de bits), representando respectivamente casos de sim ou no. Como so 3 casos, usamos 3 variveis, com valor inicial zero, e mudando-se para 1 se o valor correspondente for par. No final, soma-se as 3 variveis e o resultado a quantidade de pares. 3 NMEROS Inteiro A, B, C, QP // 3 nmeros e Quantidade de pares Conta_Pares ( ) Objetivo : Dados 3 ns inteiros, mostrar quantos so pares Inteiro Bit1, Bit2, Bit3 Bit1 0 Bit2 0 Bit3 0 Se A mod 2 = 0 ento Bit1 1 Se B mod 2 = 0 ento Bit2 1 Se C mod 2 = 0 ento Bit3 1 QP Bit1 + Bit2 + Bit3

33

4.7.

Quadrante

Dadas as coordenadas de um ponto no plano cartesiano (X e Y), localizar onde est o ponto: quadrante, eixo ou origem. Uma soluo Parte-se do conhecimento sobre coordenadas cartesianas, como a ordem dos quadrantes (anti-horria, a partir do quadrante superior direito), os eixos (abscissas e ordenadas) etc.

ordenadas ( Y )

II

I
origem abscissas (X)

III

IV

Desconsiderando-se, inicialmente, os pontos localizados nos eixos ou na origem, pode-se fazer perguntas especficas para determinar o quadrante (3 perguntas e 1 seno ) Se X > 0 e Y > 0 Se X < 0 e Y > 0 Se X < 0 e Y < 0 Seno 1 quadrante 2 quadrante 3 quadrante 4 quadrante

Porm, observa-se que se X > 0, o ponto s poder estar no 1 ou 4 quadrante. Isso evita perguntas desnecessrias. Sim 1 Quadrante Sim Se X > 0 Sim 2 Quadrante No Se Y > 0 No 3 Quadrante Para determinar se um ponto est em um eixo ou quadrante, perguntamos: Se X 0 e Y 0 Se Y > 0 No 4 Quadrante

34

PONTO NO PLANO Real X, Y // Abscissa e ordenada do ponto String Loc // Localizao do ponto Localizar_Ponto ( ) Objetivo : Localizar ponto no plano cartesiano Se X 0 e Y 0 ento // Quadrante Se X > 0 ento // 1 ou 4 quadrantes Se Y > 0 ento Loc "1 Quadrante" Seno Loc "4 Quadrante" Fim-se Seno // 2 ou 3 quadrantes Se Y > 0 ento Loc "2 Quadrante" Seno Loc "3 Quadrante" Fim-se Fim-se Seno // Eixo ou origem Loc Eixo ou origem Fim-Se Pode-se inverter as aes do ento e do seno, negando a condio: No ( X 0 e Y 0 ) Usando De Morgan, temos: X = 0 ou Y = 0 Estratgia 2 Pode-se, tambm, usar outra estratgia para determinao do quadrante, perguntando por X * Y. Se X * Y for > 0, X e Y tm o mesmo sinal, que ocorre para pontos do 1 ou 3 quadrantes. Se X * Y for < 0, ento os sinais so invertidos, que ocorre para pontos do 2 ou 4 quadrantes. Se o ponto estiver no 1o ou 3o quadrante (sinais iguais), se X for positivo, o ponto estar no 1o quadrante, seno, estar no 3o. Nessa soluo ser refinada, tambm, a localizao do ponto quando este no estiver em um dos quadrantes, ou seja, estive em um dos eixos ou na origem.

35

PONTO NO PLANO Real X, Y // Abscissa e ordenada do ponto String Loc // Localizao do ponto Localizar_Ponto ( ) Objetivo: Localizar ponto no plano cartesiano Se X = 0 ou Y = 0 ento // Eixo Se X = 0 ento Se Y = 0 ento Loc Origem Seno Loc Ordenada Fim-se Seno Loc Abscissa Fim-se Seno // Quadrante Se X * Y > 0 ento Se X > 0 ento Loc "1 Quadrante" Seno Loc 3 Quadrante" Fim-se Seno Se X > 0 ento Loc "4 Quadrante" Seno Loc "2 Quadrante" Fim-se Fim-se Fim-se

4.8.

Alunos

Obter a mdia final (MF) e a situao do aluno, dadas as notas P1 e P2 (Provas), A1 e A2 (Atividades), de acordo com os seguintes clculos e critrios: 0 Qualquer nota ou mdia 10, em fraes de 0.5 ponto M1 = P1 X 3 + A1 X 2 M2 = P2 X 3 + A2 X 2 5 5 M1 e M2 so calculadas com arredondamento para 1 casa decimal, pelo critrio universal, ou seja, a partir da metade, inclusive, arredonda-se para cima. Seno, arredondase para baixo.

36

MF = M1 + M2 arredondada para o mais prximo inteiro ou 0.5. 2 Exemplo: 6.2 6.0 6.25 6.5 6.7 6.5 6.75 7.0 A situao do aluno obtida em funo da mdia final (MF): Mdia Final (MF) Abaixo de 3.0 De 3.0 at abaixo de 7.0 De 7.0 em diante Uma soluo O algoritmo ter as seguintes macro-instrues, que sero depois refinadas: Verificar se as notas so vlidas Calcular e arredondar a mdia final Obter a situao do aluno Situao Reprovado Exame Aprovado

Para verificar se as notas so vlidas, testamos cada uma delas, no momento (evento) da entrada dos dados. Se Nota 0 e Nota 10.0 e (Nota * 10) mod 5 = 0 ento vlida

Exemplo: A nota 6,7 ser invlida, pois (6,7 X 10 ) mod 5 = 2, que 0 De acordo com De Morgan: ~ ( P ^ Q ^ R ) ~P v ~Q v ~R . Assim, podemos perguntar se a nota vlida, ou usar a forma complementar (nota no vlida) Se Nota < 0 ou Nota > 10.0 ou (Nota * 10) mod 5 0 ento no valida

A funo NotaOK verifica se a nota valida: Funo NotaOK (Real Nota) Booleano Objetivo: Verificar se uma determinada nota vlida Se Nota 0 e P1 10.0 e (P1 * 10) mod 5 = 0 ento NotaOK Verdadeiro Seno NotaOK Falso Fim-se Para arredondar MF examina-se a parte fracionria de MF, que pode ser calculada como: MF Int (MF). Se MF < 0.25, arredonda-se para baixo; se MF 0.25 e MF < 0.75, arredonda-se para 0.5; seno, arredonda-se para cima.

37

Dada a Mdia Final (MF), temos: S MF 7.0 ? N MF 3.0 ? N Reprovado Aprovado S Exame

Quando se lida com faixas, melhor comear a perguntar pelos extremos (primeira ou ltima faixa). Se a primeira pergunta for da faixa central ela seria mais complexa: Se MF 3 e MF < 7 ento Situao Exame // Desse jeito, as perguntas no so compostas ALUNO Real P1, P2, A1, A2 // Notas de prova e atividade Real MF // Mdia final String Situao // Situao do aluno CalcularSituao ( ) Objetivo: Determinar a mdia fina e a situao do aluno, dadas suas notas Real Frac // Parte fracionria da nota M1 (P1 * 3 + A1 * 2) / 5 // Calcular mdias M2 (P2 * 3 + A2 * 2) / 5 M1 Int ( (M1 + 0,05 ) * 10 ) / 10 // Arredondar mdias M2 Int ( (M2 + 0,05 ) * 10 ) / 10 MF (M1 + M2 ) / 2 // Calcular mdia final Frac MF int ( MF ) // Arredondar mdia final Se Frac < 0.25 ento MF int (MF) Seno Se Frac < 0.75 ento MF int(MF) + 0.5 Seno MF int (MF) + 1 Fim-se Fim-se Se MF 7 ento // Obter situao do aluno Situao Aprovado Seno Se MF 3.0 ento Situao Exame Seno Situao Reprovado Fim-se Fim-se

38

4.9.

Melhores notas

Dadas 4 notas de provas de um aluno, obter a mdia das 2 maiores notas. Se houver notas repetidas, considerar a primeira da seqncia. Uma soluo Uma estratgia iniciar as variveis Maior1 e Maior2 com os valores das duas primeiras notas, a maior delas em Maior1 e a outra em Maior2. Ento, coloca-se a 3 nota para brigar com os valores de Maior1 e Maior2. Se a 3 nota for > Maior1, desloca-se o contedo de Maior1 para Maior2 e substitu-se Maior1 pela 3 nota. Seno, ainda tem-se de comparar a 3 nota com Maior2. Se a 3a nota for > Maior2, substitu-se Maior2 por ela. Seno, deixa-se como est, ou seja, a 3 nota perdeu as 2 brigas. Repete-se o mesmo processo para a 4 nota. ALUNO Real N1, N2, N3, N4, Mdia // Notas de prova e mdia das duas maiores MdiaMaiores ( ) Objetivo: Dadas 4 notas, calcular a mdia das 2 melhores notas Real Maior1, Maior2 Se N1 > N2 ento // Colocar N1 e N2 em Maior1 e Maior2, Maior1 N1 // em ordem decrescente. Maior2 N2 Seno Maior1 N2 Maior2 N1 Fim-se Se N3 > Maior1 ento // Comparao da 3a nota ( N3) Maior2 Maior1 // com Maior1 e Maior2 Maior1 N3 Seno Se N3 > Maior2 ento Maior2 N3 Fim-se Fim-se Se N4 > Maior1 ento // Comparao da 4a nota ( N4 ) Maior2 Maior1 // com Maior1 e Maior2 Maior1 N4 Seno Se N4 > Maior2 ento Maior2 N4 Fim-se Fim-se Mdia (Maior1 + Maior2) / 2 // Mdia das maiores notas Nessa estratgia, o cdigo aumenta 5 instrues para cada nota acrescentada.

39

Estratgia 2 Outra estratgia achar o maior das 6 somas de pares possveis de notas: N1 + N2 N1 + N3 N1 + N4 N2 + N3 N2 + N4 N3 + N4. Pode-se usar uma varivel para guardar a maior soma. Esta varivel iniciada com o valor da soma do primeiro par (N1 + N2) ALUNO Real N1, N2, N3, N4 // Notas de prova Real Mdia // Mdia MdiaMaiores ( ) Objetivo: Dadas 4 notas, calcular a mdia das 2 melhores notas Real Maior Maior N1 + N2 Se N1 + N3 > Maior ento Maior N1 + N3 Se N1 + N4 > Maior ento Maior N1 + N4 Se N2 + N3 > Maior ento Maior N2 + N3 Se N2 + N4 > Maior ento Maior N2 + N4 Se N3 + N4 > Maior ento Maior N3 + N4 Mdia Maior / 2 Neste caso, quando se acrescenta uma nota, a quantidade de pares sobe para 10. Se forem mais duas notas, sobe para 15, mais 3, para 21, ... Algumas perguntas podem induzir a erros, como por exemplo: Se (N1 + N2) > (N3 + N4) ento Maior (N1 + N2) / 2 No exemplo anterior, pode ocorrer o seguinte: N1 N2 N3 N4 , (9+3) >(7+ 4)

sendo obtido (N1 + N2) / 2, quando o correto seria (N1 + N3 ) / 2

40

4.10. Maior quantidade de produtos 2


Uma loja do tipo preo nico s possui produtos de 3 e 5 reais. O menor valor de venda de 8 reais. Dado que sempre possvel compor qualquer quantia 8, apenas com produtos de 3 e 5 reais, mostrar como pode ser feita uma compra, de modo que seja adquirido a maior quantidade de produtos, e no sobre troco. Uma soluo Como a quantidade de produtos adquiridos deve ser a maior possvel, deve-se gastar a quantia com a maior quantidade de produtos de 3 reais. Quando no for possvel, utilizase produtos de 5. Se a quantia for dividida por 3, verifica-se que o resto pode ser 0 (mltiplos de 3), 1 ou 2. Se o resto for = 0, compra-se apenas produtos de 3 reais (Quantia / 3). Se o resto for = 1, substitu-se 3 produtos de 3 reais, mais 1 real do resto, por 2 produtos de 5, ou seja, a quantia ser gasta com 2 produtos de 5 e o restante (Quantia 10), com produtos de 3. Se o resto for = 2, substitu-se 1 produto de 3 reais, mais 2 reais do resto, por 1 produto de 5, ou seja, a quantia ser gasta com 1 produtos de 5 e o restante (Quantia 5), com produtos de 3. A tabela a seguir, mostra as quantidades de produtos, em funo do resto: Resto =0 =1 =2 Produtos de 3 Quantia / 3 (Quantia 10) / 3 (Quantia 5 ) / 3 Produtos de 5 0 2 1

Usa-se neste algoritmo a estrutura de seleo mltipla: LOJA DE 3 E 5 Inteiro Quantia // Quantia disponvel para compra Inteiro P3, P5 // Quantidade de produtos de 3 e de 5 Calcular3_5 ( ) Objetivo : Calcular maior quantidade de produtos Caso Quantia mod 3 // Resto de Quantia por 3 0 : P3 Quantia \ 3 // Se resto for = 0 P5 0 1 : P3 (Quantia 10 ) \ 3 // Se resto for = 1 P5 2 2 : P3 (Quantia 5 ) \ 3 // Se resto for = 2 P5 1 Fim-caso
2

Baseado no problema dos selos, apresentado em Salvetti & Barbosa (1998, p. 57)

41

4.11. Erros Comuns (para iniciantes)


Em algumas expresses lgicas no ocorre erro de sintaxe, nem de execuo, mas o resultado diferente do esperado pelo programador. A expresso A < B < C pode ser avaliada como verdadeira, independente dos valores de A, B ou C. Exemplo: Supondo C = 1, tem-se:

A < B < C

Verdadeiro avaliado como 1, e 1 < C Expresso Verdadeira Falso avaliado como 0, e 0 < C Expresso Verdadeira Troca de E por OU para selecionar valores numa faixa. Exemplo: Selecionar salrios entre 1000 e 2000 A expresso Salrio > 1000 OU Salrio < 2000 ser sempre verdadeira, pois qualquer salrio > 1000 ou < 2000.
Salrios > 1000 Salrios < 2000

1000

2000

A expresso correta seria: Salrio > 1000 E Salrio < 2000 Uso incorreto do OU Exemplo: A expresso A = 5 OU 6, ser sempre verdadeira.
A = 5 OU 6 V OU

11111111 ( Verdadeiro = 1 em binrio) 00000110 ( 6 em binrio) 11111111 ( 1 = Verdadeiro ) 00000000 ( Falso = 0 em binrio) 00000110 ( 6 ) 00000110 ( Em expresses lgicas, qualquer resultado 0 resulta Verdadeiro )

F OU

O operador = (relacional) no distributivo em relao ao OU (lgico). A expresso correta seria: A = 5 OU A = 6

42

4.12. Exerccios propostos


a) Equao do 2 grau Dados a, b e c, a 0, calcular as razes de ax2 + bx + c (equao do 2o grau). Exemplo: Dados 1 -2 e 1 Dados 1 -3 e 2 Dados 1 1 e 2 b) Tringulo (lados) Dados 3 ns positivos, possveis lados de um tringulo, mostrar o tipo de tringulo. Exemplo: Dados 3, 4 e 5 Obter Escaleno, pois os 3 lados so diferentes um do outro. Observao 1: No caso acima, no deve ser informado que o tringulo retngulo, pois no foi pedida a classificao pelos ngulos. Observao 2: Nem todo conjunto de 3 ns, representando lados, formam tringulos, como no caso de 3, 4 e 8. 3 8 c) Poltica de descontos 4 obter obter obter X=1 X1 = 1 e X2 = 2 No existem razes reais

Uma loja utiliza a seguinte poltica de descontos sobre o valor calculado da venda (quantidade vendida * preo unitrio): Valor calculado da venda At $ 200,00 Acima de $ 200,00 at $ 1000,00 Acima de $ 1000,00 % de desconto Sem desconto 5% 10%

Dados a quantidade vendida e o preo unitrio de um produto, calcular o valor a pagar, que considera a poltica de descontos. Exemplo: Dado o preo unitrio = $2,00 e a quantidade = 600, obter $1.080,00. Dado o preo unitrio = $2,00 e a quantidade = 400, obter $760,00.

43

d)

Substitutiva

Em determinada escola, a prova substitutiva (PS) substitui a menor nota entre a P1 e a P2, se for maior que uma delas. Dadas as notas P1, P2 e PS, determinar o valor final da P1 e da P2, aps a verificao da substituio de uma delas pela PS. Exemplo: Dados P1 = 6, P2 = 4 e PS = 7, Obter P1 = 6, P2 = 7 e) Tringulo (ngulos)

Dados 3 ns positivos, possveis ngulos de um tringulo, mostrar o tipo de tringulo. Exemplo: Dados 30, 60 e 90 Obter Retngulo f) Febre

Dada a temperatura de uma pessoa, mostrar sua situao, de acordo com as seguintes faixas de temperatura: Temperatura Abaixo de 36,5 De 36,5 at 37 Acima de 37 at 38 Acima de 38 g) IMC (ndice de Massa Corporal) Situao Hipotermia Normal Estado febril Febre

Dados a massa (Kg) e a altura (m) de uma pessoa, calcular seu IMC e mostrar sua situao, de acordo com a seguinte tabela: IMC = Massa 2 Altura IMC Abaixo de 20 De 20 Acima de 25 Acima de 30 Acima de 40 Situao Desnutrio Normal Excesso de peso Obesidade leve Obesidade grave

at at at

25 30 40

44

h)

Nmero de 3 algarismos Dado um n inteiro e positivo de 3 algarismos, obter: quantos algarismos tm valor 5; qual o menor algarismo; se a soma dos valores dos algarismos par.

i)

Multas

Dadas a velocidade de um veculo e a velocidade mxima permitida para um local, obter a multa e os pontos perdidos na carteira de motorista, de acordo com a seguinte tabela: Velocidade do veculo At 10% acima da velocidade permitida Acima de 10% at 20% da velocidade permitida Acima de 20% da velocidade permitida Multa (R$) 0 120 520 Pontos 0 4 7

Exemplo: Se um veculo trafegasse a 80 Km/h numa via com velocidade mxima permitida de 60 Km/h, e fosse pego pelo radar, a multa seria de R$ 520,00 e receberia 7 pontos na carteira, pois 80 Km/h est 33% acima da velocidade permitida. Se o veculo fosse pego a 70 Km/h, a multa seria de R$ 120 e receberia 4 pontos, pois 70 Km/h est entre 10% e 20% da velocidade permitida. j) Objetivo Descrever o objetivo do seguinte algoritmo: PARA QUE SERVE? Variveis N1, N2, N3, N4, X (Real) Algoritmo ( ) Objetivo: _________________________________________________________ X N1 + N2 Se N1 + N3 > X ento X N1 + N3 Se N1 + N4 > X ento X N1 + N4 Se N2 + N3 > X ento X N2 + N3 Se N2 + N4 > X ento X N2 + N4 Se N3 + N4 > X ento X N3 + N4 XX/2

45

k)

Senha

Dados os 4 algarismos de uma senha, verificar se vlida, ou seja, se no existem algarismos repetidos e se os algarismos no so consecutivos, sejam em ordem crescente ou decrescente. Exemplos: 1123 1635 5935 l) Invlida, pois contm algarismos consecutivos (123) e repetio (1) Vlida Invlida, pois o algarismo 5 se repete

Dgito de controle

Dados o cdigo da faculdade e nmero de matrcula de um aluno, calcular o dgito verificador, de acordo com o seguinte critrio: Multiplicar cada dgito, da esquerda para direita por 1 2 1 2 1 2 e acumular os produtos. Se um dos produto for 10, somar os dgitos do produto. O dgito verificador ser = 10 ltimo dgito do acumulado. Se o ltimo dgito for = 0, o dgito verificador ser = 0. Ex.: Cdigo: 2 16108 2 X 1 = 2 + 1 X 2 = 2 + 6 X 1 = 6 + 1 X 2 = 2 + 0 X 1 = 0 + 8 X 2 = 1+6 = 19

Cdigo da faculdade

Nmero de matrcula

ltimo dgito do acumulado

O dgito seria = 10 9 = 1, e o cdigo completo, usado para digitao, seria 2 16108 1 No caso do digitador errar um nmero, o acumulado seria outro e o dgito tambm. Uma coincidncia seria a troca de 2 nmeros com peso 1, ou cruzamento (2 X 1, 1 X 2) que resultaria num mesmo acumulado, e portanto num mesmo dgito de controle. Exemplo: Na digitao do nmero anterior, o usurio troca o 1 com o 8, ou seja, digita 2 16801 1 Ex.: Cdigo: 2 16801 2 1 6 8 0 8 X X X X X X 1 2 1 2 1 2 = = = = = = 2 + 2 + 6 + 1+6 + 0 2 = 19 A soma a mesma. Portanto, temos o mesmo dgito, e o erro no seria percebido.

46

m)

Folha de pagamento

Tendo-se o salrio bruto (j descontadas as faltas), o nmero de dependentes e o n de filhos menores de 14 anos, de um dado funcionrio, calcular o salrio lquido a receber, de acordo com as seguintes regras: Salrio Lquido INSS Salrio Bruto INSS Imposto de Renda + Salrio Famlia Aplicar alquota (%) de INSS sobre o Salrio Bruto. O teto para pagamento de INSS de R$ 176,00. Salrio Base de IR Salrio Bruto INSS R$ 100,00 por dependente. IR Aplicar a alquota (%) de imposto (coluna 2 da tabela 1) sobre o Salrio Base de IR. Do valor calculado, tirar o valor a Deduzir (coluna 3 da tabela 1). Salrio Famlia R$ 12,00 por filho menor de 14 anos, para salrios at R$ 500,00. Tabela 1 Tabela progressiva de IR Salrio Base de IR (R$) At 1.000,00 Acima de 1.000,00 at 2.000,00 Acima de 2.000,00 Tabela 2 Alquotas para INSS Salrio Bruto (R$) At 500,00 Acima de 500,00 at 600,00 Acima de 600,00 at 800,00 Acima de 800,00 at 1600,00 Alquota (%) 7,65 8,65 9 11 Alquota (%) Isento 15 27,5 Deduzir (R$) 150,00 400,00

Exemplo: Calcular o salrio lquido de um funcionrio com salrio bruto de R$ 1.500,00 e 2 dependentes para IR, sendo um filho menor de 14 anos. INSS = 176,00 (teto) Salrio Base de IR = 1500,00 176,00 200,00 = 1.124,00 IR = (15 % de 1.124,00) 150,00 = 18,60 Salrio Lquido = 1.500,00 176,00 18,60 = 1.305,40 n) Rodzio

Dado o final da placa de um automvel, obter qual o dia da semana que este veculo est sujeito ao rodzio. Para o final de placa 1 e 2, o veculo no roda s segundas, para o final 3 e 4, s teras, e assim por diante. Exemplo: Dado o final 7, a sada ser Quinta

47

o)

Desconto

Um Hotel adotou a seguinte poltica de descontos na reserva de pacotes para o Reveillon: - Estudante R$ 50,00 de desconto - Trabalhador da Indstria R$ 30,00 de desconto - Scio do Clube de Viagem R$ 80,00 de desconto - Aposentado R$ 100,00 de desconto Os descontos para Estudante, Industririo e Scio no so cumulativos, e o hspede que se enquadrar em mais de uma categoria recebe o maior deles. J o desconto para Aposentado cumulativo sobre os demais. O hspede informa sua situao em cada categoria: Estudante (S ou N); Trabalhador da Indstria (S ou N); Scio do Clube de Viagem (S ou N); Aposentado (S ou N). Dadas as categorias de um hspede, calcular o desconto a que ter direito. (Oliveira, 2005). p) Escola de samba

Na apurao das notas de um desfile de escolas de samba utiliza-se um sistema em que so desprezadas a nota mais baixa e a mais alta, para evitar perseguies ou favorecimentos. Dadas as 4 notas de um quesito qualquer (bateria, evoluo, ...), obter a soma das notas que no foram desprezadas. Se houver notas iguais, considerar a primeira ocorrncia da nota. Exemplo: Dadas as notas 8, 6, 7, 10 num determinado quesito, obter 15. Verifique, tambm, se a sua estratgia boa para 5 notas ou mais. q) Sobreposio

Dados dois intervalos, representados por 4 nmeros, [ a, b ] e [ c, d ], verificar se existe sobreposio (pontos em comum) entre os intervalos. As extremidades dos intervalos podem no estar em ordem crescente. O intervalo [ a, b ] pode no estar antes de [ c, d ]. Exemplo: Dados os intervalos [ 3, 7 ] e [ 4, 8 ] a resposta Sim r) Paralelas

Dadas as coordenadas de dois pontos distintos (X1, Y1) e (X2, Y2), verificar que tipo de reta passa por esses pontos: eixo, paralela a um eixo, no paralela a um eixo. Exemplo: Dadas as coordenadas (3,2) e (6,2), a reta paralela ao eixo das abscissas. Dadas as coordenadas (3,1) e (6,4), a reta no paralela a nenhum eixo.

48

5.

CONSTRUTOR LGICO DE REPETIO


Ih !!! Meu programa entrou em loop.

timo! A maioria dos programas entra em loop. Os que funcionam tambm saem.

usado para repetir um bloco de instrues, sendo a quantidade de repeties controlada por uma varivel ou por uma condio, verificada antes ou aps o bloco de instrues.

5.1.

N primeiros pares
Imprimir os N primeiros nmeros pares positivos. Uma soluo

Podemos iniciar a varivel Par com o valor do primeiro par (2). Para calcular o prximo par pode-se somar 2 na varivel Par, e repetir o processo para a quantidade de pares a serem impressos. Para contar as repeties (voltas do loop), podemos usar uma varivel (K, por exemplo) que inicia com 1 e aumenta 1 a cada volta, como em uma catraca, usada para contar pessoas que passam por ela. O controle das repeties feito comparando, a cada volta, o valor de K com o limite (N). O loop termina quando K fica maior que N.
Par 2 K1 Teste: K N (Verdadeiro) Imprime (Par) 1 par Par Par + 2 prximo par KK+1 Teste: K N (Verdadeiro) Imprime (Par) 2 par Par Par + 2 prximo par KK+1 Teste: K N (Verdadeiro) Imprime (Par) 3 par Par Par + 2 prximo par KK+1 Teste: K N (Falso. O loop termina)

Simulao para N = 3 N 3 K 1 2 2 Par 4 6 8 3 4

49

O seguinte fluxograma representa a soluo do problema. A varivel K responsvel pelo controle de repetio, pois ela que iniciada com 1, testada contra o limite de repeties (N) e incrementada com o passo (1) a cada volta, ou iterao. 3 Incio Par 2
Atribui valor inicial varivel de controle (K)

K1

KN
S

N Testa Limite (N)

Imprime (Par) Par Par + 2 KK + 1

Incrementa o passo ( + 1 ), e volta a testar limite

Fim PARES Inteiro N // Quantidade de pares a serem impressos Inteiro Par // Nmeros pares ImprimePares ( ) Objetivo: Imprimir os N primeiros pares positivos Inteiro K // Varivel de controle de repetio Par 2 K 1 Enquanto K N faa Sada (Par) // Imprime um par Par Par + 2 //Calcula o prximo par KK+1 // Conta + 1 volta Fim-Enquanto
3

Os problemas envolvendo iteraes podem ser resolvidos em duas etapas: 1) Identificar o que deve ser repetido; 2) Quantas vezes ser repetido e como controlar a quantidade de repeties.

50

O controle de repetio pode ser efetuado por uma instruo especial para o caso de se saber de antemo quantas voltas sero executadas (controle feito por varivel). PARES Inteiro N // Quantidade de pares a serem impressos Inteiro Par // Nmeros pares ImprimePares ( ) Objetivo: Imprimir os N primeiros pares positivos Inteiro K // Varivel de controle de repetio Par 2 Para K de 1 at N [passo 1] repita Sada (Par) // Imprime um par Par Par + 2 //Calcula o prximo par Fim-Para Nesse caso, o comando faz automaticamente a inicializao da varivel de controle (K ), acumula o passo (=1, por default), e volta para fazer o teste. Algumas linguagens utilizam uma forma de instruo de controle por varivel que faz a atribuio do valor inicial, o teste de final de loop e o avano da varivel de controle (passo), de forma explcita: PARES Inteiro N // Quantidade de pares a serem impressos Inteiro Par // Nmeros pares ImprimePares ( ) Objetivo: Imprimir os N primeiros pares positivos Inteiro K // Varivel de controle de repetio Par 2 Para (K 1; K N; K K + 1) repita Sada (Par) // Imprime um par Par Par + 2 //Calcula o prximo par Fim-Para Simulao Antes de fazer a simulao, devemos numerar as instrues do algoritmo. Instruo Algoritmo ImprimePares ( ) Inteiro K 2 1 Par 2 Para K de 1 at N [passo 1] repita Sada (Par) 3 Par Par + 2 4 Fim-Para

51

Supondo que o usurio solicitou a impresso dos 3 primeiros pares, o algoritmo ir funcionar da seguinte forma: Variveis Par K 2 2 2 4 4 4 6 6 6 8 8 Teste KN

Instruo 1 2 3 4 2 3 4 2 3 4 2

N 3 3 3 3 3 3 3 3 3 3 3 3

Sada

1 1 1 2 2 2 3 3 3 4

V (1 3) 2 V (2 3) 4 V (3 3) 6 F (4 > 3)

Na simulao rpida de algoritmos que contm loops, interessante separar, em linhas diferentes, as mudanas dentro do loop (uma linha para cada volta): Variveis Par K 2 4 1 6 2 8 3 4

N 3

Sada 2 4 6

5.2.

Impares
Dado um nmero N, inteiro e positivo, obter a soma dos N primeiros mpares. Uma soluo

O resultado do algoritmo estar na varivel Soma, que comea com 0. Utilizamos a varivel Impar, com valor inicial = 1, para calcular a seqncia de N mpares que sero acumulados em Soma.

52

+
Soma 0 1 4 9 16 ...

(N vezes)

Impar 1 3 5 7 ... N impares, N somas

O algoritmo tem as seguintes macro-instrues, que sero depois refinadas: Iniciar Repetir (N vezes) Finalizar Zerar Soma Determinar 1 Termo (= 1) Acumular Termo em Soma Calcular prximo Termo ( + 2) Imprimir Soma

IMPARES Inteiro N // Quantidade de mpares que sero acumulados Inteiro Soma // Acumulado dos N primeiros mpares SomaImpares ( ) Objetivo: Imprimir a soma dos N primeiros mpares Inteiro K Soma 0 Impar 1 Para K de 1 at N repita Soma Soma + Impar // Acumula impar Impar Impar + 2 // Calcula prximo impar Fim-Para O modo como est sendo gerada a seqncia dos nmeros mpares chamado de relao de recorrncia, em que o clculo do prximo termo feito a partir de um ou mais termos anteriores. No caso dos nmeros mpares, cada novo nmero impar obtido somando-se 2 ao impar anterior, sendo o primeiro impar = 1. Impar1 = 1 Impar2 = Impar1 + 2 = 1 + 2 = 3 Impar3 = Impar2 + 2 = 3 + 2 = 5 A relao de recorrncia Impar k+1 = Impar k + 2 , k = 1,2,3, ... Impar 1 = 1

Na linguagem algortmica, a relao de recorrncia implementada pelo comando de atribuio, que contm dois momentos de uma mesma varivel, o valor futuro e o valor atual: Impar Impar + 2 (L-se: Impar ser igual ao valor atual de Impar, mais 2.)

53

Termo geral Termo geral uma frmula usada para calcular qualquer elemento de uma seqncia em funo de sua posio (ndice) na seqncia. O termo geral dos nmeros mpares = 2 * K 1, para K = 1, 2, 3, ... Neste exerccio, trata-se de obter a somatria dos nmeros com formato 2*K 1, para K pertencente a N* N

2 . K 1 = 1 + 3 + 5 + 7 + ... + 2N 1 K=1

O operador

traz em si o conceito de iterao.

L-se: somatria de termos no formato 2*K 1, para K variando de 1 at N, de 1 em 1. Para N = 6, por exemplo, temos: 6

2 . K 1 = 1 + 3 + 5 + 7 + 9 + 11 = 36 K=1

Quando o termo geral usado no necessrio definir um valor inicial para o termo da seqncia, pois necessita-se apenas da posio do termo na seqncia. A posio do termo dada pela varivel de controle da somatria (K). Uma maneira de descobrir o termo geral listar os valores dos termos e as posies que eles ocupam, procurando uma relao entre esses dois conjuntos: Termo Posio (K) 1 1 3 2 5 3 7 4 9 5 ... ...

A relao entre a posio (K) e o Termo (Impar) : Impar K = 2 * K 1 No termo geral, cada termo funo da posio (K), ou seja, Termo K = (K) Na relao de recorrncia, o primeiro termo definido e cada termo a seguir funo do anterior, ou seja: Termo K = (Termo K 1)

54

IMPARES Inteiro N // Quantidade de mpares que sero acumulados Inteiro Soma // Acumulado dos N primeiros mpares SomaImpares ( ) Objetivo: Imprimir a soma dos N primeiros mpares Inteiro K Soma 0 Para K de 1 at N repita Impar 2 * K 1 // Calcula impar Soma Soma + Impar // Acumula impar Fim-Para

5.3.

P.A.
Imprimir os N primeiros termos de uma P.A. definida por a1 = 2 e razo = 3. Uma soluo Pode-se gerar os termos da P.A. pela relao de recorrncia e pelo termo geral. Recorrncia a1 = 2 a2 = a1 + 3 = 5 a3 = a2 + 3 = 8 a4 = a3 + 3 = 11 ... an = an 1 + r Recorrncia O primeiro termo = 2 e cada termo gerado somando-se a razo (=3) ao anterior. P. A. Inteiro N // Quantidade de termos da P.A. Termo // Valor do termo ImprimeTermos ( ) Objetivo: Imprimir os N primeiros termos da P.A. ( a1 = 2 e razo = 3). Inteiro K Termo 2 Para K de 1 at N repita Imprime ( Termo ) Termo Termo + 3 // Termo anterior + razo Fim-Para Termo Geral a1 = 2 a2 = a1 + 3 = 5 a3 = a1 + 6 = 8 a4 = a1 + 9 = 11 ... an = a1 + (n 1 ) r

55

Termo geral Cada termo calculado em funo da posio do termo na seqncia. A posio do termo na seqncia pode ser dada pela varivel de controle do loop (1 volta do loop = 1 termo da seqncia, e assim por diante). 4 P. A. Inteiro N // Quantidade de termos da P.A. Termo // Valor do termo ImprimeTermos ( ) Objetivo: Imprimir os N primeiros termos da P.A. ( a1 = 2 e razo = 3). Inteiro K Para K de 1 at N repita Termo 2 + (K 1) * 3 // ak a1 + (K 1 ) razo Imprime (Termo) Fim-Para

5.4.

Nmeros triangulares

Dado um nmero N, inteiro e positivo, imprimir o N-simo elemento da seguinte seqncia: 1 3 6 10 15 ... Uma soluo Os nmeros so chamados de triangulares devido a essa formao: 1 1 1 1 2 2 3 2 3 4 Soma 1 3 6 10

No se trata de uma progresso aritmtica. O acrscimo de um termo para outro tambm varivel: Termo Acrscimo 1 +2 3 +3 6 +4 10 +5 15 ....

Como o problema pede apenas o valor do N-simo termo, inicia-se o primeiro termo com 1 e calcula-se mais (N 1) termos, alm do primeiro. A varivel de controle de Johann Carl Friedrich Gauss, com 7 anos de idade, ao receber a tarefa de somar os nmeros inteiros de 1 a 100, respondeu, imediatamente, que a soma era 5050 (50 pares de nmeros, cada par somando 101).
4

56

repetio comea com 2 e vai at N (do 2 at o ltimo termo). O valor do termo aps a ltima volta (N) o valor do N-simo termo. NMEROS TRIANGULARES Inteiro N // Ordem do termo a ser calculado Inteiro Termo // Contedo do N-simo termo Triangulares ( ) Objetivo: Obter o N-simo termo da seqncia dos nmeros triangulares Inteiro K Inteiro A // Acrscimo Termo 1 A2 // Valor do primeiro acrscimo Para K de 2 at N repita Termo Termo + A AA+1 // Prximo acrscimo, na prxima volta Fim-Para Nota-se que a varivel A (acrscimo) tem o mesmo comportamento da varivel K, usada para controle do loop. Assim, pode-se utilizar apenas uma delas, de acordo com a descrio a seguir: NMEROS TRIANGULARES Inteiro N // Ordem do termo a ser calculado Inteiro Termo // Contedo do N-simo termo Triangulares ( ) Objetivo: Obter o N-simo termo da seqncia dos nmeros triangulares Inteiro K Termo 1 Para K de 2 at N repita Termo Termo + K Fim-Para Usando a relao de recorrncia, tem-se: T1 = 1 T2 = T1 + 2 = 1 + 2 = 3 T3 = T2 + 3 = 3 + 3 = 6 T4 = T3 + 4 = 6 + 4 = 10 A relao de recorrncia : Tk+1 = Tk + (k + 1), k = 1, 2, 3 ... , T1 = 1, ou Tk = Tk 1 + k , k = 2, 3, 4 ... , T1 = 1 O clculo do termo seguinte dado pelo seguinte comando de atribuio, a partir da relao de recorrncia Termo Termo + K, no qual K a ordem do termo que est sendo calculado.

57

Se o termo geral dessa seqncia for encontrado, no necessrio um processo interativo para obter-se o N-simo termo. Basta aplicar o valor de N na frmula.

5.5.

Fatorial
Dado um nmero inteiro e positivo N, calcular N! Uma soluo N A funo fatorial definida por: N! =

k
k=1

para todo N 0.

Por exemplo: 5! = 1 . 2 . 3 . 4 . 5 = 120 Por se tratar de um produtrio, inicia-se a resposta (varivel Fatorial) com 1 (elemento neutro na multiplicao). Em seguida, multiplica-se Fatorial pelos inteiros at N. Pode-se comear a multiplicar por 2, pois a multiplicao por 1 no altera o resultado. NMERO INTEIRO Inteiro N Inteiro Fatorial Triangulares ( ) Objetivo: Calcular N! Inteiro Fator Fatorial 1 Para Fator de 2 at N repita Fatorial Fatorial * Fator Fim-Para // Fatorial a ser calculado // N!

O clculo pode ser feito com a seqncia de fatores na ordem inversa, ou seja: 5! = 5 . 4 . 3 . 2 . 1 = 120. A varivel Fator inicia com 5 e vai at 2, de 1 em 1. Para isso, usa-se o comando de repetio com passo negativo. NMERO INTEIRO Inteiro N // Fatorial a ser calculado Inteiro Fatorial // N! Triangulares ( ) Objetivo: Calcular N! Inteiro Fator Fatorial 1 Para Fator de N at 2 passo 1 repita Fatorial Fatorial * Fator Fim-Para

58

5.6.

MDC

Dados 2 nmeros inteiros positivos, diferentes de 0, calcular o Mximo Divisor Comum (MDC) deles, pelo mtodo de Euclides. Uma soluo O mtodo (algoritmo) de Euclides para clculo do MDC contm os seguintes passos: Calcular o resto da diviso do 1 nmero pelo 2. Se o resto for = 0, o MDC o 2 nmero. Seno, substitumos o 1 nmero pelo 2, e 2 nmero pelo resto, e calculamos um novo resto. Exemplo: Calcular o MDC entre 20 e 12. Chamando o primeiro nmero de A e o segundo de B, podemos representar o processo da seguinte forma:
Novo A 12 4 8 0 4 MDC Novo B

A 20 Resto 8

35 11

12 1

11 0

1 MDC

O MDC ser o ltimo valor de B.

Outra forma de representar o processo :


A 20 8 Resto 12 8 4 0 12 B 8 4

MDC

Traduzindo o processo para uma linguagem algortmica temos: Resto A mod B Resto 0 ? No Said do loop e MDC B Sim: A B B Resto

59

Para que o teste no fique no meio do loop pode-se repetir o clculo do resto antes de retornar para o teste. Resto A mod B Resto 0 ? No: Sai do loop e MDC B Sim: A B B Resto Resto A mod B No caso do MDC, no se sabe de antemo quantas vezes o loop ser executado. Utiliza-se, ento, um tipo de loop que permite a repetio de um bloco de instrues enquanto uma determinada condio for verdadeira. 2 NMEROS INTEIROS Inteiro A, B, MDC CalcMDC ( ) Objetivo: Calcular o MDC de 2 nmeros inteiros Inteiro Resto Resto A mod B Enquanto Resto 0 faa A B B Resto Resto A mod B Fim-Enquanto MDC B Se a condio for verdadeira, o bloco de instrues ser executado at o fim e voltase para o incio do ciclo, para testar novamente a condio. Se a condio continuar verdadeira, executa-se novamente o bloco e assim por diante. Se a condio tornar-se falsa, o programa prossegue aps o fim da estrutura de repetio (Fim-Enquanto). Nesse construtor de repetio necessrio iniciar a varivel de controle do loop e incrementar o contador de iteraes. Sempre que for possvel determinar o nmero de voltas de um loop, melhor utilizar o controle de repetio por varivel, no por condio. Observa-se que se A mltiplo de B o loop no executado e o MDC = B. Observa-se, tambm, que se o usurio informar A < B, o prprio algoritmo corrige a inverso. 12 12 20 8 12 ...

60

5.7.

Seqncia Oscilante

Dado um nmero N, inteiro e positivo, imprimir os N primeiros termos da seguinte seqncia: 1 2 3 4 5 6 ... Estratgia 1: Intercalar mpares positivos com pares negativos, ou seja, a seqncia 1 3 5 7 ... intercalada com a seqncia 2 4 6 ... Impares positivos Pares negativos 1 2 3 4 5 6 7 ...

A cada uma das N iteraes calcula-se um impar positivo ou um par negativo, dependendo do n da volta (voltas mpares impar positivo; voltas pares par negativo). O n da volta ser controlado pela varivel K, que ser testada para saber se uma volta de ordem par ou impar. O primeiro impar positivo 1. Os prximos sero obtidos somando-se 2 na varivel Impar. O primeiro par negativo 2. Os prximos sero obtidos subtraindo-se 2 da varivel Par. SEQNCIA OSCILANTE Inteiro N // Quantidade de termos Inteiro Termo // Termos da seqncia GerarSeq ( ) Objetivo: Gerar seqncia oscilante Inteiro Impar, Par, K Impar 1 Par 2 Para K de 1 at N repita Se K mod 2 = 0 // Se K divisvel por 2, uma volta de ordem par Termo Par Par Par 2 Seno Termo Impar Impar Impar + 2 Fim-se Imprima (Termo) Fim-Para

61

Uma variao dessa estratgia, baseada tambm na ordem da volta, utiliza a prpria varivel de controle, nas voltas pares como par negativo ( K ) e nas voltas mpares como impar positivo ( K ). SEQNCIA OSCILANTE Inteiro N, Termo GerarSeq ( ) Objetivo: Gerar seqncia oscilante Inteiro K Para K de 1 at N repita Se K mod 2 = 0 Termo K Seno Termo K Fim-se Imprima (Termo) Fim-Para Estratgia 2: Nmeros naturais multiplicados por oscilao de sinal. 1 * 1 1 1 1 1 1 2 3 4 5 6

Percebe-se a existncia da seqncia: 1 2 3 4 5 6 multiplicada, respectivamente, pela seqncia 1 1 1 1 1 1 . A primeira seqncia pode ser o prprio contador de voltas do loop, pois se comporta da mesma maneira (Incio = 1 e incrementos de 1 em 1). Na segunda seqncia, pode-se obter a oscilao por meio de uma varivel de sinal, que comea com 1, e a cada volta multiplicada por 1. SEQNCIA OSCILANTE Inteiro N, Termo GerarSeq ( ) Objetivo: Gerar seqncia oscilante Inteiro K, Sinal Sinal 1 Para K de 1 at N repita Termo K * Sinal Imprima (Termo) Sinal Sinal Fim-Para

62

Estratgia 3: Pndulo Termos Incremento 1 -3 2 +5 3 -7 4 +9 5 11 6

Nota-se que a seqncia se comporta como um pndulo, indo para trs 3 e para frente 5, para trs 7 e para frente 9, sendo que cada oscilao segue um padro, dado pela seqncia dos mpares, a partir do-3. GerarSeq ( ) Inteiro K, Sinal, Termo Sinal 1 Termo 1 Para K de 1 at N repita Imprima (Termo) Termo Termo + Sinal * (2 * K + 1) Sinal Sinal Fim-Para Estratgia 4: Termo Geral Quando se tem o termo geral da seqncia, simples ger-la, bastando aplicar na frmula do termo geral, o valor da varivel de controle do loop ( K = 1 at N ). Posio do Valor do Termo ( K ) Termo 1 2 3 4 5 1 2 3 4 5

K 1 2 3 4 5

* -1 * * * * *

(K+1)

1 1 1 1 1

O termo geral dessa seqncia : 1 ou 1


(K + 1) (K 1)

*K *K

GerarSeq ( ) Inteiro K Para K de 1 at N repita Termo ( 1) ^ ( K + 1 ) * K Imprima (Termo) Fim-Para

63

5.8.

Wallis

Dado um nmero N, inteiro e positivo, calcular o valor aproximado, com N termos, da srie de Wallis: 1 1 + 1 1 + ... 3 5 7 Uma soluo No limite, a srie converge para / 4, ou seja, a medida que so acumulados novos termos, o valor calculado um valor mais preciso de / 4 (0.7854)
Termo 1 2 3 4 5 6 7 8 Valor do termo 1 1/3 1/5 1/7 1/9 1 / 11 1 / 13 1 / 15 Valor acumulado 1 0.6667 0.8667 0.7238 0.8349 0.7440 0.8209 0.7543
1,2 1 Valor de PI / 4 0,8 0,6 0,4 0,2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 N de iteraes

Cada termo pode ser decomposto em numerador e denominador. No 1 termo o numerador vale 1 e o denominador tambm. Os prximos termos sero gerados multiplicando-se o numerador por 1 e somando 2 no denominador. Usa-se uma varivel acumuladora dos termos calculados, iniciada com 0. Wallis Inteiro N // Quantidade de termos Real Soma // Soma dos termos (valor aproximado de / 4) Calcular ( ) Objetivo: Calcular a srie de Wallis, com N termos Inteiro K, Num, Den Soma 0 Num 1 Den 1 Para K de 1 at N repita Soma Soma + Num / Den Num Num Den Den + 2 Fim-Para

64

5.9.

Fibonacci

Dado um nmero N, inteiro e positivo, obter os N primeiros termos da seguinte seqncia: 1 1 2 3 5 8 13 ... Uma soluo Um dos problemas do livro Liber Abaci, sobre tcnicas algbricas, de Leonardo de Pisa (Fibonacci), em 1202 foi: Quantos casais de coelhos sero produzidos num ano, comeando com um s par, se em cada ms cada casal gera um novo par que se torna produtivo a partir do segundo ms?. Esse problema d origem seqncia de Fibonacci. (Boyer, 1974:186) A tabela a seguir mostra a evoluo das variveis do problema: Perodo (Ms) Casais jovens 1 2 3 4 5 6 7 8 9 10 11 12 1 0 1 1 2 3 5 8 13 21 34 55 Casais adultos (reprodutivos) 0 1 1 2 3 5 8 13 21 34 55 89 Total de casais 1 1 2 3 5 8 13 21 34 55 89 144

Cada termo, a partir do terceiro, obtido somando-se os 2 termos anteriores. Os 2 primeiros so iguais a 1.

A 1 1 1

B 2

Termo 2 3

Pode-se usar duas variveis, A e B, contendo inicialmente o valor 1. A soma de A e B gera um novo Termo, com valor 2. Para continuar o processo, pode-se deslocar os valores de B e Termo para A e B e voltar a somar A e B, gerando um novo Termo, com valor 3, e assim por diante.

65

FIBONACCI Inteiro N // Quantidade de termos Inteiro Termo // Termos da seqncia GerarSeq ( ) Pr Condio N > 2 Objetivo: Gerar os termos da seqncia de Fibonacci Inteiro K, A, B, C A 1 K inicia com 3, pois 2 termos j foram B 1 impressos, e o programa pede N termos Imprima (A, B) Para K de 3 at N repita Termo A + B Imprima (Termo) AB B Termo Fim-Para A soluo a seguir, mais criativa, usa uma varivel a menos. FIBONACCI Inteiro N, Termo GerarSeq ( ) Inteiro K, A Termo 1 A0 Para K de 1 at N repita Imprima (Termo) Termo Termo + A A Termo A Fim-Para Termo 1 1 2 3 5 8 13 21 34 55 89 Razo entre 2 termos 1 2 1,5 1,6667 1,6 1,625 1,6153 1,6190 1,6176 1,6181 A razo entre um termo e o anterior, no limite, tende a (phi maiscula), e chamada de razo ou proporo urea. Na geometria do pentgono regular, se um lado AB tiver comprimento unitrio, qualquer diagonal AC = (1 + 5 ) = 2 . cos / 5 = 1,61803 ... =

2 A razo urea encontrada na natureza na distribuio das sementes de girassol e do cacto, que regida pela espiral logartmica do nmero ureo. O girassol possui 55 espirais orientadas no sentido horrio, sobrepostas a 34 ou 89 espirais em sentido anti-horrio

66

No corpo humano podemos descobrir o significado metafsico do tal como expresso pelo aforismo de Herclito: O homem a medida de todas as coisas. As medidas da figura humana se ajustam ao antigo smbolo biomtrico do corpo dividido em dois pelos rgos sexuais ou em pelo umbigo (Lawlor, 1996:59). 1 As fraes contnuas fornecem a seguinte frmula: = 1 + 1+ 1+ 1 + ... 1 1

5.10. Acumular seqncia


Usando um processo iterativo, obter quantos termos so necessrios para que a soma dos primeiros termos de uma P.A., definida pelo valor do primeiro termo e pela razo, seja maior que 100. Uma soluo Pode-se criar um processo repetitivo que acumule cada termo da PA e verifique se a soma superior a 100, contando quantas iteraes (voltas) foram realizadas. O termo geral da P.A. : an = a1 + (n 1) * razo O esboo da soluo , dados a1 e a razo: Inciar Repetir (at que Soma > 100) Finalizar Zerar Soma Zerar contador de termos (quantidade de voltas) Somar 1 no contador de termos Calcular Termo ( usar contador de termos na frmula do termo geral) Acumular Termo em Soma A resposta o contador de termos.

A estrutura de repetio usada nessa soluo com o teste no final, ou seja, o bloco de repetio feito pelo menos uma vez, e ser repetido at que a condio seja verdadeira.

67

PROGRESSO ARITMTICA Inteiro A1, Razo // Definio da P.A. Inteiro N // Quantidade de termos Triangulares ( ) Objetivo: Obter a quantidade de termos para que a soma de uma PA seja > 100 Inteiro Termo Soma 0 N 0 Repita N N+1 Termo A1 + (N 1) * Razo Soma Soma + Termo At que Soma > 100 Imprima (N)

5.11. Seqncia com aviso de fim


Uma situao muito comum o tratamento arquivos, em que no se sabe antecipadamente a quantidade de registros. Nesse caso, comum testar o fim da seqncia usando uma varivel que muda de estado quando ele ocorre. Esta varivel chamada de sentinela. No caso de arquivos existe uma funo, uma varivel ou uma propriedade chamada EOF (End Of File 5), que se torna verdadeira quando se tenta ler o prximo registro e o arquivo terminou. O seguinte trecho de algoritmo comum no tratamento seqencial de arquivos: Ler 1o registro Enquanto no for o fim do arquivo faa Tratar registro lido Ler o prximo registro Fim-Enquanto

5.12. Alfabeto
Imprimir as letras maisculas do alfabeto. Uma soluo Podemos imprimir cada uma das letras, uma por uma, o que no parece uma boa soluo. Pode-se, tambm, utilizar operadores/funes para tratamento de caracteres e strings (cadeias de caracteres), para gerar uma letra a partir do valor da anterior.
5

EOF no significa O Fim, em portugus.

68

As principais funes e operadores para tratamento de caracteres e strings so: FUNO/ OPERADOR + Val (string) Str (Expr.Numrica) Len (String) SubStr (string, N1, N2) Chr (Expr. Numrica) Asc (Caractere) DESCRIO Concatenao Valor numrico do string Converte nmeros em string Tamanho de um string Parte do string, comeando em N1, com tamanho N2 Caractere referente ao nmero Cdigo ASCII do caractere EXPRESSO AB + C Val (45.3) Str (45.3) Len (TESTE) VALOR ABC 45.3 45.3 5

SubStr (TESTE,3, 2) ST Chr (67) Asc (F) C 70

A letra A tem o cdigo 65 na tabela ASCII. B tem o cdigo 66, e assim por diante. Assim, podemos iniciar uma varivel com 65 e, usando a funo CHR, gerar a letra A, mudar esta varivel para 66 e gerar B, at o valor 90, equivalente letra Z. ALFABETO Caractere Letra GerarAlfa ( ) Objetivo: Imprimir alfabeto maisculo Inteiro L Para L de 65 at 90 repita Letra Chr ( L ) Imprimir (Letra) Fim-Para Pode-se, tambm, iniciar uma varivel com o valor A, e calcular as prximas somando 1 no valor da letra na tabela ASCII e converter esse valor novamente em caractere. ALFABETO Caractere Letra GerarAlfa ( ) Objetivo: Imprimir alfabeto maisculo Letra A Enquanto Letra Z faa Imprimir (Letra) Letra Chr(Asc(Letra) + 1) Fim-Enquanto

// Prxima letra

69

5.13. Prxima Placa


Dada uma placa de automvel, com 3 letras, um espao e 4 dgitos, armazenada em uma varivel do tipo string, obter a placa que sucede a placa dada. Uma soluo Exemplo: C A B C A B 0 3 1 6 9 9 9 9 C A B C A C 0 3 1 7 0 0 0 1

No se pode somar 1 direto num dado do tipo string. A idia separar a parte numrica da placa, somar 1 e junt-la novamente com as letras. Quando a parte numrica ficar > 9999, voltamos para 0001 e avana-se a terceira letra. Quando a terceira ou a segunda letra ficar > Z, volta-se essa posio para A e avana-se a letra anterior. AUTOMVEL String Placa, Prox // Placa atual e placa seguinte Proxima_Placa( ) Objetivo: Calcular a prxima placa de automvel String Letra1, Letra2, Letra3, Num Inteiro Valor Letra1 SubStr (Placa, 1 , 1) Letra2 SubStr (Placa, 2 , 1) Letra3 SubStr (Placa, 3 , 1) Num SubStr (Placa, 5 , 4) // Parte numrica da placa (tipo string) Valor Val (Num) + 1 // Valor numrico de Num, + 1 Se Valor > 9999 ento Valor 1 Letra3 Chr (Asc (Letra3) + 1) // Prxima letra Se Letra3 > Z ento Letra3 A Letra2 Chr (Asc (Letra2) + 1) Se Letra2 > Z ento Letra2 A Letra1 Chr (Asc (Letra1) + 1) Se Letra1 > Z ento Letra1 A // Voltar ao incio: ZZZ para AAA Fim-se Fim-se Fim-se Fim-se Num Str (Valor) Prox Letra1 + Letra2 + Letra3 + SubStr (000, 1, 4 len ( Num)) + Num

70

5.14. Engrenagem
Obter nmeros de 0 a 999, separados em Centenas, Dezenas e Unidades. Uma soluo As Centenas, Dezenas e Unidades se comportam como engrenagens, ou seja, a cada 10 giros da unidade a dezena gira uma vez (vai um) e a cada 10 giros da dezena a centena gira uma vez. Nota-se que a engrenagem da unidade trabalha mais que a dezena, que trabalha mais que a da centena. A estrutura que implementa esse mecanismo um loop dentro do outro, tendo a unidade como o loop mais interno. A quantidade de voltas 10 X 10 X 10 = 1000. Pode-se usar uma varivel para cada posio e vari-la de 0 a 9. ENGRENAGEM Inteiro C, D, U GerarNmeros ( ) Objetivo : Obter nmeros de 0 a 999 no formato Centena, Dezena e Unidade Para C de 0 at 9 Para D de 0 at 9 Para U de 0 at 9 Imprima (C, D, U) Fim-Para Fim-Para Fim-Para

5.15. Prestaes
Dada a data inicial de uma prestao e um n inteiro N, representando uma quantidade de meses, calcular os prximos N 1 vencimentos mensais, sempre no mesmo dia. Uma soluo Ex.: Data inicial = 16/11/03 , N = 4 As prximas datas seriam: 16/12/03, 16/01/04, 16/02/04 Uma estratgia seria: Separar dia, ms e ano da data inicial Gerar a prxima data, repetindo o dia e somamos 1 no ms Se o resultado for 13, mudar o ms para 1 e somar 1 no ano

Existe um problema para datas com dia > 28, pois fevereiro pode no ter 29 dias nos anos no bissextos, e muito menos 30 ou 31 dias. Tambm, nem todos os meses tm 31 dias. Podemos testar as excees, que so os meses de Abril, Junho, Setembro e Novembro, que tm 30 dias, e o ms de fevereiro que, se for ano bissexto tem 29 dias e se no, tem 28.

71

Um ano bissexto for mltiplo de 4 e no for mltiplo de 100, exceto quando for mltiplo de 400 (1600 e 2000 foram bissextos; 1900 no foi). Quando se lida com o tipo data, pode-se contar com algumas funes de manipulao de datas, tais como: Dia (data ) Ms (data ) Ano (data ) Data ( dia, ms, ano) Retorna o dia de uma data, no tipo inteiro. Retorna o ms Retorna o ano, com 4 dgitos Converte os 3 nmeros para tipo data

CONTRATO Data DataInicial // Data da 1 prestao Inteiro N // Quantidade de prestaes Data DataPrest // Datas de vencimento das prximas prestaes CalcularDatas ( ) Inteiro D1, D2, M, A D1 Dia ( DataInicial ) M Ms ( DataInicial ) A Ano ( DataInicial ) Para K de 1 at N 1 // Calcular as prximas N - 1 datas MM+1 Se M = 13 ento M1 AA+1 Fim-se Se (M = 4 ou M = 6 ou M = 9 ou M = 11) e D1 = 31 ento D2 30 Seno Se M = 2 ento Se D1 > 28 ento Se A mod 4 = 0 e (A mod 100 0 ou A mod 400 = 0) D2 29 // ano bissexto Seno D2 28 Fim-se Fim-se Fim-se Seno D2 D1 Fim-se DataPrest Data ( D2, M, A ) Imprima (DataPrest) Fim-Para

72

Um recurso interessante para se calcular o ltimo dia de cada ms ou a quantidade de dias de um ms, subtrair 1 do 1 dia do ms seguinte. O tipo DATA permite esta operao.Exemplo: Para se saber quantos dias tem o ms de fevereiro de 2000, calcula-se Dia (Data (01, 03, 2000) 1), sem a preocupao com o fato de este ano ser bissexto, e a resposta ser 29.

5.16. Exerccios propostos


a) Loops

Quantas vezes sero executados os blocos de instrues sob o controle dos seguintes comandos de repetio? b) Para I de 2 at 20 Para K de 8 at 2 passo -1 Para J de 1 at 10 passo 2 Para I de 10 at 2 Para K de 3 at N / 2 Para J de 10 at 3 passo 3 Para K de N at 2 passo 2

Simulaes Mostrar, na forma de uma tabela, a evoluo das variveis usadas nos algoritmos deste captulo.

c)

Seqncias Dado um nmero N, inteiro e positivo, obter os N primeiros termos das seguintes seqncias: 1 1 1 2 1 2 1 2 4 3 4 4 4 1 4 7 5 6 9 7 1 8 10 7 8 16 ... 11 ... 1 1 ... 16 13 ... ...

Dado um nmero N, inteiro e positivo, obter o N-simo termo das seguintes seqncias:

73

1 1 1

1 3 2

3 7 1

5 13 5

11 21 5

21 43 ... ... 10 11 ...

YK+1 = 2. YK + 1, Y1 = 1, K = 1, 2, 3, ... YK+1 = YK + K, Y1 = 1, K = 1, 2, 3, ... 2 2 0 4 3 1 1 5 4 0 2 6 5 1 ... ...

Dado um nmero N, inteiro e positivo, obter a soma dos N primeiros termo das seguintes seqncias: d) 1 1 2 2 2 3 5 3 6 7 11 6 24 15 23 11 ... 31 47 18 95 27 ...

YK = (K + 1) K, K = 1, 2, 3, ... 2

Soma de dgitos

Obter todos os nmeros inteiros, maiores que 100 e menores que 1000, cuja soma de dgitos seja maior que 10. Exemplo: Os primeiros nmeros obtidos seriam: {119, 128, 129, 137, 138, 139, ...} e) Quantidade de dgitos Desenvolver um algoritmo iterativo para obter quantos dgitos tem um nmero inteiro dado. Exemplo: Dado 31762, obter 5.

74

f)

MDC por subtraes sucessivas

Dados 2 ns, pertencentes a N*, calcular o MDC pelo mtodo das subtraes sucessivas do maior. Exemplo: Dados A = 20 e B = 12
A 20 8 4 B 12 4

A>B B>A A>B A=B

A B = 20 12 = 8 B A = 12 8 = 4 AB=8 4 =4 MDC = 4

Ou seja, quando A maior A B; quando B maior B A g) Simulao Verificar se o algoritmo abaixo cumpre seu objetivo, para N 1 SEQNCIA Inteiro N, Termo GerarSeqncia ( ) Objetivo: Obter os N primeiros termos da seqncia 0 2 6 12 20 ... Inteiro A, B, C, K A0 B2 Imprima (A, B) Para K de 3 at N repita AA+2 BB*2 Termo A + B Imprima (Termo) Fim-Para h) Sries convergentes

Dado um nmero N, inteiro e positivo, calcular o valor das seguintes sries, com N termos: 1 2 2 + 1 4 * 2 3
2

+ 1 + 1 + ... 8 16 * 4 * 4 * 6 3 5 5
3

(1 )

(no limite, o valor dessa srie converge para 1)

* 6 * 8 ... ( ) 7 7 2 ( ln (1 + X), X > 1 )

X + X 2 3

X 4

+...

75
3 5 7

X 1 1 i)

X 3! +

+ X X 5! 7!
4

+ .
6

( sen (X), X em radianos) ( cos (X), X em radianos) ( e )


X

X 2!

+ X X 4! 6!
2

+... ...

X X 2!

+ X 4!

Primo

Dado um nmero N, inteiro e positivo, verificar se N primo, ou seja, se N tiver apenas dois divisores: ele mesmo e a unidade. Obs: Para verificar se um nmero N primo pode-se limitar o teste de divisibilidade at o valor de N j) MMC

Dados 2 nmeros, inteiros e positivos, calcular o Mnimo Mltiplo Comum (MMC) entre eles. Exemplo: Dados 6 e 10, obter 30. k) Mltiplos

Dados N, A e B, nmeros inteiros e positivos, obter os N primeiros mltiplos de A, de B ou de ambos, em ordem crescente, intercalados e sem repeties. Exemplo: Dados N = 10, A = 3 e B = 4 , mostrar: 3, 4, 6, 8, 9, 12, 15, 16, 18, 20 Dados N = 6, A = 3 e B = 13, mostrar: 3, 6, 9, 12, 13, 15 l) Camundongos 6

Uma determinada populao de camundongos do tipo A triplica a cada ano. A populao de camundongos do tipo B duplica a cada ano. Sabendo-se que a populao de camundongos do tipo A atualmente menor que a do tipo B, escrever um algoritmo iterativo para obter em quantos anos, mantendo-se o mesmo ritmo de crescimento, os camundongos do tipo A sero mais numerosos que os do tipo B. m) Divisores Dado um nmero N, inteiro e positivo, obter todos os divisores pares de N. Exemplo: Dado o nmero 36, obter {2, 4, 6, 12, 18, 36}
6

Baseado no problema das populaes, apresentado em Salvetti & Barbosa (1998, p. 32)

76

n)

CGC / CPF Calcular o dgito de controle do CGC e CPF, de acordo com as seguintes instrues:

1.

Cadastro Geral de Contribuintes CGC

1.1. Formato Geral: X1X2X3X4X5X6X7V1 / O1O2O3O4 C1C2 1.2. Composio: a) Os 7 primeiros algarismos constituem o nmero bsico de inscrio da empresa no CGC (X1 a X7); b) O oitavo algarismo ( V1 ), constitui o dgito verificador do nmero formado pelos 7 primeiros algarismos, calculado pelo mdulo 10; c) Os 4 algarismos aps a barra (O1 a O4) constituem o nmero de ordem do estabelecimento na empresa cadastrada; d) O primeiro algarismo aps o nmero de ordem ( C1) representa o dgito verificador para o nmero formado pelos 12 algarismos anteriores, calculado pelo mdulo 11; e) O ltimo algarismo ( C2 ) representa o dgito verificador para o nmero formado pelos 13 algarismos anteriores, calculado tambm pelo mdulo 11. 1.3. Clculo de V1 Cada algarismo do nmero bsico, a partir da direita, multiplicado por 2, 1, 2, 1, 2, 1, e 2, sucessivamente; somam-se, a seguir, os algarismos resultantes de cada produto. O valor de V1 ser a diferena entre a soma assim obtida e a dezena imediatamente superior. Exemplo: seja o nmero bsico 1 2 3 4 5 6 7. O clculo ser efetuado da seguinte forma: 1 X 2 = 2 2 X 1 = 2 3 X 2 = 6 4 X 1 = 4 5 X 2 = 10 6 X 1 = 6 7 X 2 = 14

A soma dos algarismos ser: 2 + 2 + 6 + 4 + 1 + 0 + 6 + 1 + 4 = 26 O valor de V1 ser dado pela diferena da soma 26 para a dezena imediatamente superior, ou seja, 30. Portanto: V1 = 30 26 = 4 Como resultado, o nmero bsico de inscrio da empresa no CGC ser 12345674. 1.4. Clculo de C1 Para o clculo de C1 considerado o CGC do estabelecimento, compostos de 12 algarismos e formado pelo nmero bsico seguido do nmero de ordem. Cada algarismo, da direita para a esquerda, multiplicado sucessivamente por 2, 3, 4, at 9,

77

quando o multiplicador volta a 2, reiniciando a srie. Os produtos resultantes so ento somados. Para obteno do valor de C1 divide-se a soma resultante por 11 e toma-se o seu resto. Quando o resto for igual a 0 (zero), C1 ser tambm igual a 0 (zero). Nos demais casos o valor de C1 ser igual ao complemento do resto para 11, sendo que, quando o complemento for igual a 10 toma-se o valor 0 (zero). Exemplo: Seja o CGC do estabelecimento 12345674 / 1234 1 X 5 = 5 2 X 4 = 8 3 X 3 = 9 4 X 2 = 8 5 X 9 = 45 6 X 8 = 48 7 X 7 = 49 4 X 6 = 24 / 1 X 5 = 5 2 X 4 = 8 3 X 3 = 9 4 X 2 = 8 resto 6.

A soma dos produtos ser: 5+8+9+8+45+48+49+24+5+8+9+8 = 226 A diviso de 226 por 11 nos d um quociente 20 com Logo C1 = 11 6 = 5 1.5. Clculo de C2

O valor de C2 obtido tendo por base os 13 algarismos anteriores, correspondentes ao CGC do estabelecimento e do primeiro dos dgitos de controle (C1). O procedimento de clculo idntico ao de C1, iniciando a partir da direita, a multiplicao de cada algarismo por 2, 3, 4, at 9, retornando o multiplicador a 2, e somando depois os produtos obtidos. Exemplo: Seja o CGC do estabelecimento 12345674 / 1234 1 X 6 = 6 2 X 5 = 10 3 X 4 = 12 4 X 3 = 12 5 X 2 = 10 6 X 9 = 54 7 X 8 = 56 4 X 7 = 28 / 1 X 6 = 6 2 X 5 = 10 3 X 4 = 12 4 X 3 = 12 - 5 X 2 = 10

A soma ser: 6+10+12+12+10+54+56+28+6+10+12+12+10 = 238. A diviso de 238 por 11 nos d um quociente 21 com resto 7. Logo C1 = 11 7 = 4. Assim, para o exemplo dado, o CGC completo ser: 12345674 / 1234 - 54

78

2. Cadastro de Pessoas Fsicas CPF 2.1. Formato Geral: X1X2X3X4X5X6X7X8R C1C2 2.2. Composio: a) Os 8 primeiros algarismos constituem o nmero bsico de inscrio da pessoa fsica no CPF (X1 a X8); b) O nono algarismo R o indicativo da Regio Fiscal onde foi efetuada a inscrio no cadastro; c) O primeiro algarismo aps o indicativo da Regio Fiscal C1 representa o dgito verificador para o nmero formado pelos 9 algarismos anteriores, calculado pelo mdulo 11; d) O ltimo algarismo C2 - representa o dgito verificador para o nmero formado pelos 10 algarismos anteriores, calculado tambm pelo mdulo 11; 2.3. Clculo de C1 Cada um dos 9 algarismos do CPF, a partir da direita, multiplicado sucessivamente por 2, 3, 4, 5, 6, 7, 8, 9 e 10 e os produtos resultantes so somados. A soma obtida dividida por 11 e C1 ser igual ao complemento para 11 do resto da diviso; quando o complemento for maior ou igual a 10, toma-se o valor 0 (zero). Exemplo: seja o CPF 123456785. O clculo de C1 ser efetuado da seguinte forma: 1 X 10 = 10 2 X 9 = 18 3 X 8 = 24 4 X 7 = 28 5 X 6 = 30 6 X 5 = 30 7 X 4 = 28 8 X 3 = 24 5 X 2 = 10

A soma dos produtos ser: 10+18+24+28+30+30+28+24+10 = 202 A diviso de 202 por 11 nos fornece um quociente 18 com resto 4. Logo C1 = 11 4 = 7 2.4. Clculo de C2 O clculo de C2 toma por base o nmero de 10 algarismos formado pelo CPF seguido do primeiro dgito de controle. Cada um dos algarismos a partir da direita, multiplicado sucessivamente por 2, 3, 4, 5,6, 7, 8, 9, 10 e 11 e os produtos resultantes so somados. C2 ento obtido de maneira anloga a C1.

79

Exemplo: Seja o CPF 123456785 com o primeiro dgito verificador igual a 7. C2 ser calculado para o nmero 12345678 7 como segue: 1 X 11 = 11 2 X 10 = 20 3 X 9 = 27 4 X 8 = 32 5 X 7 = 35 6 X 6 = 36 7 X 5 = 35 8 X 4 = 32 5 X 3 = 15 - 7 X 2 = 14

A soma dos produtos ser: 11+20+27+32+35+36+35+32+15+14 = 257 A diviso de 257 por 11 nos d um quociente 23 com resto 4. Logo C1 = 11 4 = 7 Assim, para o exemplo dado, o CPF completo ser : 123456785 77 o) Imposto

O pagamento de certo imposto deve ser feito na quarta-feira da semana seguinte ao fato gerador. Dada a data do fator gerador, calcular a data do pagamento. Considerar a existncia de uma funo chamada DayOfWeek, que recebe uma data no formato DD/MM/AA, e retorna o nome do dia da semana (SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY). p) Repeties

Dado um nmero N, inteiro e positivo, obter os N primeiros termos da seguinte seqncia: 1 2 2 3 3 3 4 4 4 4 5 ... q) Fatorao Dado um nmero inteiro e positivo, obter sua decomposio em fatores primos. Ex. Dado: 84 , obter 2 2 3 7 Dado: 75, obter 3 5 5

Alterar o programa anterior, para mostrar o fator primo e seu respectivo expoente: Ex. Dado: 84 , obter 2 3 7 2 1 1 Dado: 75, obter 3 1 5 2

80

r)

Calculadora financeira Fazer um projeto para simular as funes de uma calculadora financeira. As variveis envolvidas nos clculos financeiros so: PMT PV n FV i = = = = = prestao (pagamento peridico) valor atual (valor presente) da anuidade n de intervalos de pagamento montante da anuidade (valor futuro) taxa de juros do perodo, expressa em decimais (5% = 0,05)

Se uma das variveis no estiver preenchida o programa deve calcular seu valor. Deve, tambm, refazer o clculo para a ltima alterao de uma das variveis. Deve prever tambm uma funo para limpar tudo. As frmulas a seguir so para pagamento no final do perodo de amortizao ou capitalizao. FV PV = PMT [ (1 + i ) i
n1

] ]

= PMT [ 1 (1 + i ) i
n

PMT = i . PV [ ( 1 + i ) ] n1 (1+ i ) n = log (1 i PV ) PMT_____ ) log ( 1 1+i

O clculo da taxa ( i ) feito por interpolao, a partir de uma taxa inicial sugerida e um intervalo para pesquisa da taxa aproximada. Exemplo: Seja n = 12, PV = 1000 e PMT = 106,55 Usando a frmula para clculo de PV temos que encontrar duas taxas, uma acima e outra abaixo da taxa procurada, que aproxime o valor de PV / PMT. Comeamos por uma taxa que achamos ser prxima do valor procurado. PV = [ 1 (1 + i ) n PMT i No exemplo temos: ]

PV = 1000 = 9,38527 PMT 106,55

81

Se usarmos como taxa inicial 3 %, a relao PV / PMT : [ 1 (1 + 0,03 ) 12 ] = 9,954 (valor acima de 9,38527 taxa abaixo da real) 0,03 Para uma taxa de 5 %, a relao PV / PMT : [ 1 (1 + 0,05 ) 12 ] = 8,86325 (taxa acima da real) 0,05 Interpolando os valores temos: 0,03 i 0,05 = i 0,03 0,05 0,03 9,954 9,38527 8,86325 9,38527 9,954 8,86325 9,954 i = 4,04 %

Se a interpolao fosse feita entre 3,5 % e 4,5 %, a taxa seria 4,01%. Se as taxas fossem 3,9% e 4,1%, a taxa encontrada seria 4%. s) Tabela de amortizao

Dado uma quantidade de perodos, uma dvida original e uma taxa de juros, preencher a tabela de amortizao dessa dvida. Perodo 1 2 t) Saldo devedor no Juro devido no fim Pagamento inicio do perodo do perodo (J) (PMT) (SD) Dvida original i% x SD Prestao SD CA Capital amortizado (CA) PMT J

Depreciao

Calcular a depreciao anual de um bem, dado o valor de compra e sua vida til, para os seguintes mtodos: Linear, Progressiva, Soma dos dgitos. Ex.: Calcular as depreciaes anuais de um bem comprado por $10.000, com vida til de 10 anos. Linear Depreciao anual = Valor original = 10.000 = 1.000 por ano Vida til 10 O valor da depreciao constante

82

Progressiva O valor da depreciao de cada perodo obtido aplicando-se um fator sobre o valor do bem no incio do perodo, j descontadas as depreciaes dos perodos anteriores. O fator pode ser, por exemplo, 2 / Vida til = 2 / 10 = 0.2 Ano 1o 2o 3o Valor inicial do perodo 10.000 8.000 6.400 Depreciao 10.000 x 0.2 = 2.000 8.000 x 0.2 = 1.600 6.400 x 0.2 = 1.280

O valor final (incio do 11o ano), denominado valor residual ou depreciado. Soma dos dgitos dos anos Aplica-se, sobre o valor original, um fator diferente para cada ano. Esse fator uma frao cujo numerador o n do ano de vida, em ordem decrescente (10, 9, 8, ..., 1). O denominador a soma dos dgitos dos anos (1+2+3+ ...+ 10). Ano 1o 2o 3o u) Depreciao 10.000 x 10 / 55 = 1.818,18 10.000 x 9 / 55 = 1.636,36 10.000 x 8 / 55 = 1.454,55

Binrio para decimal

Dado um string de bits (seqncia de dgitos 0 ou 1), representando um nmero na base 2, converte-lo para a base 10. Exemplo: Dado o string 10110, obter 22. v) Domin Criar uma lista com os valores das 28 peas do jogo de domin: 0 0, 0 1, 0 2, 0 3, 0 4, 0 5, 0 6, 1 1, 1 2, ..., 5 6, 6 6. w) Placas de automvel

Obter uma lista de placas de automvel, de acordo com a solicitao, por faixa, ou por quantidade. Por faixa: mostrar placas entre 2 placas informadas. Ex.: Mostrar as placas entre BAC 0001 e BCZ 9999. Por quantidade: mostrar uma quantidade de placas a partir de uma placa inicial. Ex.: Mostrar 1000 placas a partir de CAA 0358.

Este tipo de programa pode ser utilizado para emisso de etiquetas de placas em despachantes, cdigos de contas correntes, nmeros de matrcula etc.

83

x)

Nmeros amigos entre si

(Malba Tahan, 1966) Dois nmeros inteiros e positivos so amigos entre si quando a soma dos divisores prprios do primeiro nmero for igual ao segundo, e a soma dos divisores prprios do segundo for igual ao primeiro. Dados dois nmeros, verificar se so amigos entre si. Ex.: 220 tem como divisores prprios: 1, 2, 4, 5 ,10, 11, 20, 22, 44, 55 e 110, cuja soma 284 284 tem como divisores prprios: 1, 2, 4, 71, 142, cuja soma 220 Portanto, 220 e 284 so amigos entre si. Verificar o programa para os nmeros (18416 e 17296 ) e ( 9.434.056 e 9.363.584). Alguns nmeros so amigos de si prprio: 6 = 1 + 2 + 3; 28 = 1 + 2 + 4 + 7 + 14 y) Planilha eletrnica

Criar uma lista com os cdigos de uma faixa de colunas de uma planilha eletrnica, de AA at IV, ou seja: {AA, AB, AC, ...., AZ, BA, BB, BC, ..., IV) z) Gros de trigo

(Malba Tahan, 1966) Conta-se que um poderoso rei da ndia resolveu dar uma rica recompensa ao inventor do jogo de xadrez, tal foi seu encanto pelo jogo. O inventor pediu que o pagamento fosse feito em gros de trigo, um gro como prmio pela 1a casa, dois pela 2a , 4 pela 3a, e sempre assim, dobrando a cada casa, at a 64a. Escrever um algoritmo para calcular a quantidade de gros, considerando que o resultado, que possui 20 dgitos, no pode ser armazenado em uma nica varivel, por falta de suporte para esta quantidade de dgitos (preciso).

84

REFERNCIAS E BIBLIOGRAFIA BAASE, Sara, GELDER, Allen Van. Computer Algorithms: Introduction to Design and Analysis. 3. ed., Addison-Wesley, 2000. BARBOSA, Lisbete Madsen. Ensino de algoritmos em cursos de computao. Dissertao de mestrado. PUC So Paulo. 1999. BOYER, Carl. Histria da Matemtica. So Paulo: Edgar Blcher e Ed. da USP, 1974. FARRER, H. et alli. Algoritmos estruturados. Rio de Janeiro: Ed. Guanabara, 1989. GARDNER, Martin. Ah, Descobri!. Lisboa: Gadiva, 1990. KNUTH, Donald E. The art of computer programming. Massachusetts: Addison-Wesley. Volume 1 Fundamental Algorithms; Volume 3 Sorting and Searching. 1973. LAWLOR, Robert. Geometria Sagrada. Madri: Edies del Prado, 1996. MALBA TAHAN. Diabruras da Matemtica. 2.ed. So Paulo: Saraiva, 1966. MEC/SESu/CEEInf Diretrizes Curriculares de Cursos da rea de Computao e Informtica. Disponvel em http://www.mec.gov.br/sesu. Acesso em 30/01/2006. OLIVEIRA, Ariovaldo Dias de. Notas de aula da disciplina de Algoritmos. Fundao Santo Andr, 2005. SALVETTI, Dirceu Douglas, BARBOSA, Lisbete Madsen. Algoritmos. So Paulo: Makron Books, 1998. SEBESTA, Robert W. Conceitos de linguagens de programao. 4. ed. Porto Alegre: Bookman, 2000. SETUBAL, Joo Carlos. Uma proposta de Plano Pedaggico para a matria de Computao e Algoritmos, in. Qualidade de cursos de graduao da rea de Computao e Informtica. SBC WEI 2000 Curitiba: Ed. Universitria Champagnat, 2000 TREMBLAY, J., BUNT, R. Introduo cincia dos computadores - Uma abordagem algortmica. So Paulo: McGraw-Hill, 1983. VELOSO, Paulo, et. alli . Estruturas de dados. Rio de Janeiro: Campus. 1983. WIRTH, Niklaus. Programao sistemtica em Pascal. 6 ed. Rio de Janeiro: Campus,1987.

Você também pode gostar