300 ideias para programar

Upload: billy-ranndys-mesquita-ferreira

Post on 07-Jul-2015

69 views

Category:

Documents


0 download

TRANSCRIPT

300 IDIAS PARA PROGRAMAR COMPUTADORESNa minha vivncia profissional, como programador, analista de sistemas e professor, tenho visto programadores de vrios tipos. Alguns so mais criativos, outros menos, e tambm h os que parecem eternos iniciantes. Alguns tm slida formao em algoritmos e tcnicas de programao; outros no a tem mas se viram quando precisam. H programadores que praticamente se "viciam" em comandar computadores, e extraem grande prazer dessa atividade, e h outros que o fazem por fazer, simplesmente, talvez pelo salrio. Os programadores realmente bons, que unem formao tcnica, criatividade, curiosidade e prazer parecem ser relativamente poucos. Naqueles que conheci pude perceber padres: eles tm acesso a um computador, em casa ou em outro lugar; tm uma grande disposio de buscar solues por si mesmos e, acima de tudo, eles programam muito. No dependem de algum mand-los programar, tendo ou no suas prprias idias. Para resumir, eles simplesmente praticam muito, e este o fator maior que, na minha opinio, os torna melhores que os outros. Por isto foi elaborado este material, cujo contedo consiste essencialmente de especificaes de programas, no voltadas para nenhuma linguagem de programao em particular. Sua maior finalidade fornecer idias para que programadores vidos possam programar, programar e programar, e assim se tornar cada vez melhores. Uma restrio que a implementao de algumas das especificaes ser mais apropriada estando a tela em modo texto, o que no impede que muitas delas possam fornecer inspirao para programas em interface grfica. A maioria das especificaes propostas so voltadas para iniciantes em uma linguagem de programao, e estruturadas na forma que considero mais didtica: no incio apenas comandos de sada e instrues matemticas simples, de forma a no sobrecarregar o estudante que, nesse momento, ainda est normalmente assimilando uma srie de novas informaes sobre processadores, instrues, seqncia, controle e o prprio compilador. Os captulos seguintes gradativamente incorporam s especificaes novos tpicos: variveis, tipos de dado e entrada, deciso, repetio e outras. Os primeiros cinco captulos esto organizados em tpicos, e estes focalizados em estruturas de programao. Os exerccios, embora variados, no so todos diferentes: alguns combinam dois ou mais exerccios de captulos anteriores, resultando em um mais complexo e no qual o estudante pode aplicar a experincia adquirida. O ltimo captulo sugere idias para programas, existentes ou no, que podem ser implementadas por programadores que j tenham amadurecido os recursos bsicos de uma linguagem de programao, podendo tambm ser usadas para trabalhos prticos de iniciativa pessoal ou determinados pelo professor. Em alguns casos, dado algum direcionamento inicial para a implementao; em outros, o desafio todo do programador! Este um material para ser usado como um complemento, no servindo por si s para suportar um curso. Dependendo da proposta didtica do professor que o adote, ser necessrio adequar a seqncia em que as especificaes sero propostas aos estudantes. Obviamente no h qualquer limite para a evoluo deste trabalho; por isto, crticas, sugestes e eventuais correes sero sempre muito bem vindas. Virglio Vasconcelos Vilela [email protected] Braslia, Fevereiro/1999.

SUMRIO1. BSICOS ________________________________________________________________________ 11.1. SADA SIMPLES _______________________________________________________________________ 1.2. MATEMTICA ________________________________________________________________________ 1.3. CONTROLE DE TELA __________________________________________________________________ 1.4. SONS ________________________________________________________________________________ 1 4 6 6

2. VARIVEIS E ENTRADA DE DADOS _______________________________________________ 92.1. SADA SIMPLES _______________________________________________________________________ 9 2.2. MATEMTICA ________________________________________________________________________ 9 2.3. CARACTERES E CADEIAS _____________________________________________________________ 12 2.4. CONTROLE DE TELA _________________________________________________________________ 12 2.5. SONS _______________________________________________________________________________ 13

3. ALTERNATIVAS E DECISO _____________________________________________________ 153.1. SADA SIMPLES ______________________________________________________________________ 3.2. MATEMTICA _______________________________________________________________________ 3.3. CARACTERES E CADEIAS _____________________________________________________________ 3.4. CONTROLE DE TELA _________________________________________________________________ 3.5. SONS _______________________________________________________________________________ 3.6. VARIADOS __________________________________________________________________________ 4.1. SADA SIMPLES ______________________________________________________________________ 4.2. MATEMTICA _______________________________________________________________________ 4.3. CARACTERES E CADEIAS _____________________________________________________________ 4.4. CONTROLE DE TELA _________________________________________________________________ 4.5. SONS _______________________________________________________________________________ 4.6. REGISTROS E VETORES ______________________________________________________________ 4.7. ARQUIVOS __________________________________________________________________________ 4.8. VARIADOS __________________________________________________________________________ 5.1. MATEMTICA _______________________________________________________________________ 5.2. CARACTERES E CADEIAS _____________________________________________________________ 5.3. CONTROLE DE TELA _________________________________________________________________ 5.4. SONS _______________________________________________________________________________ 5.5. REGISTROS E VETORES ______________________________________________________________ 5.6. ARQUIVOS __________________________________________________________________________ 5.7. VARIADOS __________________________________________________________________________ 6.1. ENTRETENIMENTO __________________________________________________________________ 6.2. DOMSTICOS ________________________________________________________________________ 6.3. EDUCATIVOS ________________________________________________________________________ 6.4. VARIADOS __________________________________________________________________________ 6.5. DESAFIOS ___________________________________________________________________________ 15 15 17 17 17 18 21 22 24 25 26 26 28 29 31 32 34 34 35 35 36 39 40 41 41 42

4. REPETIO ____________________________________________________________________ 21

5. CRIAO DE INSTRUES ______________________________________________________ 31

6. IDIAS E MAIS IDIAS __________________________________________________________ 39

1

1.BSICOS

Quando comeamos, h muita informao nova a ser assimilada. Por isso, convm iniciar pelo mais simples. Para implementar os programas especificados neste captulo, basta conhecer a estrutura de um programa e algumas poucas instrues (veja o apndice A). No so necessrias ainda instrues para tomar decises ou controlar repeties. Isto lhe d tempo para assimilar as (possivelmente) novas ferramentas, como editor, compilador e outras.

1.1.SADA SIMPLES1.1.1 Frase na tela - Implemente um programa que escreve na tela a frase "O primeiro programa agente nunca esquece!".

1.1.2 Etiqueta - Elabore um programa que, aps limpar a tela, escreve seu nome completo naprimeira linha, seu endereo na segunda, e o CEP e telefone na terceira.

1.1.3 Frases assassinas - Faa um programa que mostre na tela algumas frases assassinas, que soaquelas que fazem com muitas idias sejam perdidas antes que amaduream ou seja aprofundadas. Eis alguns exemplos (bole tambm os seus): "Isto no vai dar certo" "Voc nunca vai conseguir" "Voc vai se estrepar" "No vai dar em nada" "Est tudo errado!"

1.1.4 Mensagem - Escreva uma mensagem para uma pessoa de que goste. Implemente um programaque imprima essa mensagem, e envie-a.

1.1.5 Ao mestre - Escreva um bilhete ao seu professor, informando seus objetivos nesta disciplina e oque espera dela e do professor. Implemente um programa que mostra seu bilhete na tela.

1.1.6 Quadrado - Escrever um programa que mostre a seguinte figura no alto da tela:XXXXX X X X X X X XXXXX

2

300 IDIAS PARA PROGRAMAR COMPUTADORES

1.1.7 Tabela de notas - Escreva um programa que produza a seguinte sada na tela:

ALUNO(A) ======== ALINE MRIO SRGIO SHIRLEY

NOTA ===== 9.0 DEZ 4.5 7.0

1.1.8 Apresentao - Um estudante ia participar de uma feira de cincias e seu projeto tinha o tema"fotossntese". Ele conseguiu um notebook emprestado, e queria um programa que lhe permitisse apresentar um texto dividido em partes, cada parte em uma tela, e o programa deveria mudar para a prxima tela ao toque de uma tecla. A tela inicial deve ser a palavra "FOTOSSNTESE" escrita com letras grandes. Faa o programa para o estudante, usando o texto abaixo, no qual cada pargrafo deve aparecer em uma tela diferente. Como o estudante no entende muito de operao de computadores, voc tem que tambm gerar um arquivo executvel, copi-lo para o outro computador e incluir um cone para fcil execuo sob Windows. Texto: "A gua e os sais minerais absorvidos pelas razes sobem atravs dos vasos lenhosos do caule e chegam s folhas. Nas folhas, existe uma substncia verde, a clorofila, que absorve a energia luminosa do sol. Ao mesmo tempo, por meio dos estmatos presentes nas folhas, a planta absorve gs carbnico do ar. Usando a energia solar, o gs carbnico e o hidrognio contido na gua retirada do solo, aps complicadas reaes qumicas, a planta produz acares (glicose)." L, seria assim:

1.1.9 Letra grande - Elabore um programa para produzir na tela a letra X usando a prpria. Se fosseL L L LLLL

1.1.10 Palavra grande - Escreva um programa que produza a tela esquematizada abaixo:******** * * ******** * * ******** ******** * * * * * * * * * * ******** * * * * * * ********

1.1.11 Desenho datilogrfico - H um artista que faz desenhos somente com caracteres disponveisem uma mquina de escrever. Bole uma figura nesse estilo (bem melhor que a abaixo, se possvel) e faa um programa que a mostre na tela.

BSICOS

3

____ / \ / o o \ \ ^ / \_ ~ /

1.1.12 Emoticons - Emoticons so seqncias de caracteres que mostram rostos e expresses, vistosde lado e usados freqentemente em correios eletrnicos e bate-papos na Internet. Existem dezenas; veja alguns: :-) :-( :-p :-o {:-) :-{ :-* sorriso tristeza mostrando a lngua espanto cabelo partido ao meio usa bigode beijo

Elabore um programa que mostre na tela os emoticons, um em cada linha, com a descrio de cada um.

1.1.13 Pinheiro 1 - Implemente um programa que desenhe um "pinheiro" na tela, similar ao abaixo.Enriquea o desenho com outros caracteres, simulando enfeites. X XXX XXXXX XXXXXXX XXXXXXXXX XXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXX XX XX XXXX

1.1.14 Pinheiro 2 -Elabore uma verso 2 do programa do item anterior que desenhe o pinheiro comasteriscos (*). [Dica: use o recurso de localizao/substituio do editor para fazer a substituio rapidamente]

4

300 IDIAS PARA PROGRAMAR COMPUTADORES

1.1.15 Menu - Elabore um programa que mostre o seguinte menu na tela:Cadastro de Clientes 0 1 2 3 4 Fim Inclui Altera Exclui Consulta

Opo: _

1.2.MATEMTICA1.2.1 Expresses aritmticas - Calcule as expresses abaixo, observando a precedncia dosoperadores. Escreva um programa que mostre na tela o resultado de cada expresso e confira seus clculos. 2*6 + 11*5 20/(-2)/5 20/2*2 (3+9)/3*4 (5*6/(3+2) - 15*4)/6-4 4+32*2 -7*2/(9-2) = = = = = =

1.2.2 Div e mod - Calcule as expresses abaixo; o operador mod calcula o resto, e div, o quocienteda diviso inteira. Depois, escreva um programa que lhe permita verificar, quando executado, se voc calculou corretamente. 37 mod 13 41 div 7 11 div 3 mod 2 11 mod 3 div 2 = = = =

1.2.3 Conta telefnica - Uma conta telefnica composta dos seguintes custos:assinatura: R$ 17,90 impulsos: R$ 0,04 por impulso que exceder a 90 interurbanos chamadas p/ celular: R$0,20 por impulso Monte a frmula para calcular o valor da conta para 254 impulsos, R$34,29 de interurbanos e 23 chamadas para celular. Elabore um programa que mostra os custos, calcula e mostra o valor total.

1.2.4 Tempo livre - Um estudante muito metdico estava matriculado em 6 disciplinas, e dispunhade 1 hora e 40 minutos para estudar. Sua inteno era dividir o tempo disponvel igualmente para as 6 disciplinas, e descansar livremente o tempo restante. Faa um programa que calcule o tempo que ele deve dedicar para cada disciplina e o tempo livre. [Dica: use os operadores div e mod]

1.2.5 Otimizao de corte - Um marceneiro, para fazer um trabalho, precisa cortar vrios pedaos demadeira de 45 cm cada um. Ele pode comprar tbuas de 3, 4 ou 5 metros. Usando os operadores div e mod, faa um programa que calcule a quantidade de pedaos e a sobra para cada tipo de tbua, permitindo assim uma melhor escolha do marceneiro.

BSICOS

1.2.6 Mdia de notas - Monte uma expresso matemtica que calcula a mdia de suas notas (todas)

5

de um perodo anterior. Faa o clculo atravs de um programa, mostrando na tela o resultado, formatado com duas casas decimais e dentro de uma moldura (um retngulo feito com algum caractere).

1.2.7 Converso de temperatura - Faa um programa que calcula e mostra uma tabela de grausCelsius/Fahrenheit de 1 a 10 [frmula: C = 5/9(F-32)]. Por enquanto (sem comandos de repetio), voc dever escrever as instrues para calcular e mostrar cada resultado.

1.2.8 Imposto - Um imposto calculado com base na seguinte tabela:1.200,00 isento At de 1.201,00 a 5.000,00 10% de 5.001,00 a 10.000,00 15% acima de 10.000,00 20%. Implemente um programa que calcule os impostos a pagar para um valor em cada faixa. Para cada um, mostre uma mensagem que identifique na tela a que se refere cada valor.

1.2.9 Funes matemticas - Fornecer o valor retornado pelas operaes matemticas abaixo.Depois, chamando as funes adequadas, escreva um programa que lhe permita verificar a correo dos seus clculos: Raiz quadrada de 169 172 Cosseno(0) 1.65 arredondado para inteiro

1.2.10 Comprimento de fio - Um eletricista precisa comprar fio

11,5 m

que ir passar, pelo telhado, por toda a diagonal de uma casa de 6,3 m formato retangular. Como ele no tem condies de medir a ? diagonal com preciso (ou talvez no queira...), a soluo alternativa que ele encontrou foi medir os lados da casa, sabendo que a diagonal pode ser calculada com base nos lados pelo Teorema de Pitgoras (a2 = b2 + c2). Considerando que a casa mede 11,5 x 6,3 metros, faa um programa que calcule a quantidade mnima necessria de fio a ser comprada, com preciso at centmetros.

1.2.11 Tempo dedicado - Uma pessoa com pouco tempo disponvel l um livro por 5 minutos a cadadia, 6 dias por semana. Monte a frmula e escreva um programa que calcula e mostra na tela quanto tempo, em horas, a pessoa ter dedicado ao livro ao final de um ano.

1.2.12 Clculo de notas - Um professor atribui pesos de 1 a 4 para as notas de quatro avaliaes. A

nota calculada por meio da mdia ponderada (N1 + N2*2 + N3*3 + N4*4)/10, onde N1 a nota da primeira avaliao, N2 a da segunda, etc..Um aluno tirou as seguintes notas: 8 - 7,5 - 10 - 9. Faa um programa que calcula e mostra as notas e a mdia deste aluno, sendo a mdia formatada com 1 casa decimal.

1.2.13 Funes aninhadas - Escrever um programa que calcula a raiz de 3, arredonda o resultado ecalcula a exponencial do valor resultante.

1.2.14 Devagar se vai ao longe - Vou e volto diariamente a p para o trabalho, que distaaproximadamente 800 m de minha casa. Supondo que trabalho 5 dias por semana, 45 semanas por ano, "bole" a operao matemtica que deve ser efetuada para calcular quantos quilmetros, aproximadamente, terei andado ao final de um ano. Elabore um programa que faa as contas e mostre o resultado na tela.

6

1.3.CONTROLE DE TELA

300 IDIAS PARA PROGRAMAR COMPUTADORES

1.3.1 Quadrado posicionado - Refaa o programa que desenha o "quadrado" no alto da tela (1.1.6 ),desta vez desenhando-o com o canto superior esquerdo na linha 7, coluna 20.

1.3.2 Menu posicionado - Elabore um programa que mostre o seguinte menu centralizado na tela, e

espera uma tecla ser pressionada para terminar (o trao aps "Opo:" o cursor). Use comandos de posicionamento do cursor para facilitar.

Menu Relatrios 1 2 3 4 Opo: _ Por nome Por cdigo Por data Fim

1.3.3 Cruz - Elabore um programa que mostra uma linha vertical na coluna 40, formada pelocaractere "#", e uma linha horizontal na posio 10 formada por "=". Entre uma e outra e antes de terminar, o programa espera que uma tecla seja pressionada.

1.3.4 Tringulo com iniciais - Escrever um programa que desenha um tringulo, aproximadamentecentralizado, na tela (que em modo texto normal tem 80 colunas por 25 linhas), tendo dentro as iniciais do seu nome. Faa o programa limpar a tela no incio e esperar uma tecla antes de terminar.

1.3.5 Apresentao em cores - Altere o programa da fotossntese (1.1.8 ) de forma que cada pginade texto seja mostrada com uma cor diferente. Destaque palavras especficas do restante do texto com uma cor, como por exemplo, "verde" na cor verde

1.3.6 Animao horizontal - Faa um programa que desenha um "O" na linha 5, coluna 1 e depoisfaz o seguinte, esperando uma tecla para cada ao (sempre na linha 5): - apaga o "O" da coluna 1 e o mostra na coluna 2 - apaga da coluna 2 e mostra na 3 - apaga da 3 e mostra na 4 E assim sucessivamente at a coluna 15. Execute o programa mantendo pressionada alguma tecla e veja o resultado.

1.3.7 Animao horizontal - Elabore um programa semelhante ao anterior, mas variando a linha.

1.4.SONS1.4.1 Afinao - Alberto toca violo e programador. Precisando afinar o violo e sem diapaso porperto, resolveu fazer um programa para ajud-lo. O que ele queria era a nota L soando sem parar at que ele conseguisse afinar a respectiva corda do violo; as demais cordas ele poderia afinar com base na primeira. Escreva um programa que faz soar no alto-falante do computador a nota L (440 Hz) e s para quando for pressionada alguma tecla.

BSICOS

1.4.2 Parabns - Faa um programa que emite as seis primeiras notas do "Parabns pr voc". Tente

7

as seguintes notas (freqncia em Hz/durao em milissegundos): [440,200], [440,200], [500,800], [440,400], [600,400], [560,800],

9

2.VARIVEIS E ENTRADA DE DADOS

Os programas deste captulo incorporam, em relao ao anterior, especificaes que exigem o uso da memria do computador, incluindo a entrada de dados pelo usurio do programa e o conseqente armazenamento dos dados lidos.

2.1.SADA SIMPLES2.1.1 Mensagem emoldurada - Implemente um programa que leia trs linhas de mensagens de at 15caracteres cada uma e mostra-as na tela, emolduradas (retngulo ao redor) por algum caractere.

2.1.2 Etiqueta - Escreva um programa que l do teclado seu nome completo, endereo, CEP etelefone, limpa a tela e mostra seu nome na primeira linha, seu endereo na segunda, e o CEP e telefone na terceira.

2.1.3 Losangos 1 - Implemente um programa que desenhe os losangos abaixo na tela, sendo que otopo do primeiro losango colocado em uma linha e uma coluna lidas do teclado, e o topo do segundo fica 15 colunas direita do primeiro.X XXX XXXXX XXXXXXX XXXXXXXXX XXXXXXX XXXXX XXX X X XXX XXXXX XXXXXXX XXXXXXXXX XXXXXXX XXXXX XXX X

2.1.4 Losangos 2 - No programa do exerccio anterior, troque o caractere de forma que os losangossejam feitos com asteriscos (*).

2.1.5 Tringulo com iniciais - Escrever um programa que l um caractere, as iniciais de um nome (3caracteres), uma linha e uma coluna e depois desenha na tela um tringulo equiltero formado com o caractere, tendo dentro as iniciais lidas. O caractere no pice do tringulo deve estar na linha e coluna lidas, e a altura do tringulo deve ser no mximo 5 linhas.

2.2.MATEMTICA2.2.1 Mdia aritmtica - Escrever programa que l trs notas inteiras e calcula a sua mdiaaritmtica.

2.2.2 Mdia geomtrica - Elabore um programa que l trs valores e calcula a mdia geomtrica dosnmeros lidos (diviso do produto pela quantidade de valores).

2.2.3 Mdia ponderada - Implemente um programa que l trs valores e calcule a mdia ponderadapara pesos 1, 2 e 3, respectivamente (multiplique cada nota pelo seu peso, some os produtos e divida o resultado pela soma dos pesos).

10

2.2.4 Aritmtica bsica - Implemente um programa que l dois nmeros quaisquer e informa suasoma, diferena, produto e quociente, formatados com 2 casas decimais.

300 IDIAS PARA PROGRAMAR COMPUTADORES

2.2.5 Funes matemticas - Elabore um programa que l um nmero (suponha que ser positivo) einforma seu quadrado, raiz, logaritmo e exponencial, formatados com 4 casas decimais

2.2.6 Nota final - O critrio de notas de uma faculdade consiste de uma nota de 0 a 10 em cadabimestre, sendo a primeira nota peso 2 e a segunda peso 3. Elabore um programa que l as notas bimestrais e calcula a nota do semestre.

2.2.7 Soma das idades - Uma criana quer saber qual a soma de todas as idades que ela j teve.Elaborar programa que l uma idade qualquer e responde rapidamente a essa pergunta [frmula para calcular a soma dos N primeiros nmeros inteiros: N (N+1)/2].

2.2.8 Tempo livre - Reescreva o programa 1.2.4 (o estudante metdico) de forma que trate qualquerdisciplina e qualquer quantidade de tempo livre. Assim, o estudante entra com esses valores e o programa efetua os clculos necessrios.

2.2.9 Comprimento de fio - Altere o programa do eletricista (1.2.10 ) para que as medidas sejamlidas do teclado.

2.2.10 Converso de temperatura - Um canal de notcias internacionais, a cabo, previa temperaturamxima para Braslia de 85 graus Fahreneit. Escrever um programa que lhe permita converter esta temperatura (e qualquer outra) para graus Celsius, sabendo que a relao entre elas C =5/9 (F 32).

2.2.11 Quantidade de flexes - Um atleta faz flexes em srie, com quantidades crescentes: 1 vez,depois 2 vezes, 3, 4 e assim por diante. Ao final de uma sesso, ele quer saber rapidamente a quantidade total de flexes que fez. Por exemplo, se ele fez 5 seqncias, fez ao todo 15 flexes (5+4+3+2+1). Implemente um programa que leia o nmero mximo e informe o total.

2.2.12 Despesas de casal 1 - Um casal divide as despesas domsticas mensalmente. Durante o mscada um anota seus gastos e as contas que paga; no final eles dividem meio a meio. O casal deseja um programa que facilite o acerto: eles digitariam os gastos de cada um, e o programa mostraria quem deve a quem. Atualmente eles fazem o acerto manualmente, na forma da seguinte tabela:ITEM DESPESAS PAGAS % PAGO VALOR DEVIDO SALDO MARIDO 1278,60 59,36 1.076,95 201,65 ESPOSA 875,30 40,64 1.076,95 -201,65 TOTAL 2.153,90 100 2.153,90

Portanto, os saldos devem ser iguais, e quem tiver o saldo negativo deve pagar o valor para o outro. Faa um programa que leia os valores adequados e efetue os clculos. O total a soma das despesas individuais; um percentual o gasto individual dividido pelo total, multiplicado por 100; o valor devido por cada um o mesmo e igual metade do total; finalmente, cada saldo corresponde metade da diferena entre o valor pago pela pessoa e o valor total. Uma tela para o programa pode ser, com os mesmos dados da tabela acima:

VARIVEIS E ENTRADA

11

Digite valor das despesas do marido: 1278.60 Digite valor das despesas da esposa: 875.30 ITEM =============== Despesas pagas % pago Valor devido Saldo MARIDO ======= 1278.60 59.36 1076.95 201.65 ESPOSA ======= 875.30 40.64 1076.95 -201.65 TOTAL ======= 2153.90 100 2153.90

2.2.13 Despesas de casal 2 - Altere o programa acima de forma que o marido arque com 60% dasdespesas e a esposa com o restante.

2.2.14 Despesas de casal 3 - Para o mesmo programa de rateio acima, suponha que o casal, ao invsde dividir meio a meio as despesas, vai dividi-las proporcionalmente renda de cada um. Altere o programa de forma que este leia tambm a renda de cada um e use a proporo das rendas para a diviso.

2.2.15 Adivinha - Escrever um programa que adivinha o nmero pensado por uma pessoa (Penseum nmero (pausa), multiplique por 2 (pausa), some 6 ao resultado (pausa), divida o resultado por 2, quanto deu? (informe o resultado), voc pensou o nmero tal). [Dica: problemas desse tipo do origem a uma expresso aritmtica, e voc pode alterar as operaes vontade, desde que a expresso resultante admita uma inversa. Normalmente estruturamos o problema de forma que a expresso permita uma simplificao que facilite os clculos. Para a seqncia proposta, a expresso (sendo n o nmero pensado e R o resultado): (n*2+6)/2 = R, donde n = (R*2-6)/2 = R - 3. Ou seja, basta subtrair 3 do resultado fornecido pela pessoa para "adivinhar" o nmero].

2.2.16 Converso cm/pol 1 - Faa um programa que mostra 10 linhas de uma tabela de conversocentmetro/polegada, a partir de um valor lido e variando de 10 em 10 centmetros (uma polegada equivale a 2,54 centmetros).

2.2.17 Converso cm/pol 2 - Altere o programa do exerccio anterior de forma que a variaotambm seja lida do teclado.

2.2.18 Otimizao de corte - Reescreva o programa 1.2.5 (corte de tbuas) para que leia o tamanhode cada tbua e o comprimento de cada pedao, e calcule a quantidade de pedaos e a sobra para cada tipo de tbua.

2.2.19 Notas do professor - Um professor avalia seus alunos atravs dos seguintes critrios:a) Duas notas de exerccios de 0 a 10, sem casas decimais, peso 1 e peso 2, respectivamente, com peso de 20% na nota final. b) Uma nota de prova de 0 a 10, com uma casa decimal e peso de 80% na nota final. Elabore um programa que l as notas de um aluno, calcula e mostra na tela sua nota final, formatada com uma cada decimal e devidamente ponderada pelos pesos (uma mdia ponderada calculada somando-se os produtos de cada valor pelo seu peso e dividindo-se a soma resultante pela soma dos pesos). Exemplo: Um aluno tirou 5 e 6 de exerccios e 8,5 na prova. Sua nota de exerccios (5*1 + 6*2)/3 = 5,667. Sua nota final (5,667*2 + 8,5*8)/10 = 7,9.

2.2.20 Conta telefnica - Uma conta telefnica composta dos seguintes custos:assinatura: impulsos: interurbanos R$ 21,40 R$ 0,03 por impulso que exceder a 90

12

300 IDIAS PARA PROGRAMAR COMPUTADORES

chamadas p/ celular: R$0,40 por impulso Elabore um programa que l os impulsos excedentes, valor de interurbanos e quantidade de chamadas para celular e calcula o valor da conta. Ao definir a tela, imagine que est fazendo um produto para ser avaliado por um cliente, juntamente com o de concorrentes, para uma eventual compra.

2.3.CARACTERES E CADEIAS2.3.1 Concatenao - Escreva um programa que l duas cadeias de caracteres de tamanho 10 emostra-as concatenadas na tela.

2.3.2 Subcadeias - Escreva um programa que l uma cadeia de caracteres de tamanho 20, separa-aem duas e mostra na tela as duas metades.

2.3.3 Cdigos ASCII - Escreva um programa que l uma cadeia de caracteres qualquer, e mostra natela o cdigo ASCII do primeiro e segundo caracteres da cadeia.

2.3.4 Iniciais - Escreva um programa que l nome e sobrenome, e mostra na tela as iniciais. 2.3.5 Finais - Reescreva o programa anterior para mostrar na tela as letras finais do nome esobrenome.

2.3.6 Metades de cadeia - Implemente um programa que l uma cadeia de caracteres de tamanho at255 e mostra na tela as metades da cadeia. [Dica: basear os clculos no tamanho da cadeia] mostra a inicial e seu cdigo ASCII, e a ltima letra e seu cdigo. tela a soma dos cdigos ASCII dos caracteres da cadeia.

2.3.7 Cdigos ASCII inicial e final - Elabore um programa que l um nome de at 15 caracteres e 2.3.8 Soma de cdigos ASCII - Escreva um programa que l uma cadeia de tamanho 3 e mostra na 2.3.9 Componentes de data - Escrever um programa que l uma data no formato dd/mm/aa emostra dia, ms e ano separados.

2.3.10 Sorteio da LBV - A LBV fez um sorteio cujos bilhetes continham nmeros de 6 dgitos. Osorteio foi baseado nos dois primeiros prmios da loteria federal, sendo o nmero sorteado formado pelos trs ltimos dgitos do primeiro e do segundo prmio. Por exemplo, se o primeiro prmio fosse 34.582 e o segundo 54.098, o nmero da LBV seria 582.098. Escreva um programa que l os dois prmios e retorna o nmero sorteado.

2.4.CONTROLE DE TELA2.4.1 Animao horizontal - Faa um programa que l valores de linha e coluna e desenha um "O"na posio lida, e depois faz o seguinte, esperando uma tecla para cada ao (sempre na mesma linha): - apaga o 'O' da posio atual - incrementa a coluna - mostra o 'O' na nova posio E assim sucessivamente por 10 colunas.

2.4.2 Quadrado em posio - Escrever um programa que desenha um quadrado com o canto superioresquerdo em uma linha e coluna lidas. O caractere usado para formar o quadrado o '#'. Veja abaixo uma sugesto para a tela do programa.

VARIVEIS E ENTRADA

13

Este programa desenha um quadrado com o caractere # Linha: 10 Coluna: 30

##### # # # # # # ##### Pressione qualquer tecla

2.4.3 Tringulo com iniciais - Faa um programa que l valores de linha e coluna, alm das iniciaisde um nome (at 3 caracteres) e desenha um tringulo ("bole" o desenho) com um vrtice na linha e coluna lidas e com as iniciais dentro.

2.4.4 Menu posicionado - Implemente um programa que mostra o menu abaixo a partir de uma linhalida do teclado:

Menu de Consultas 0 1 2 3 4 Opo: _ Fim Clientes Produtos Faturas Estoque

2.5.SONS2.5.1 Nota musical - Elaborar um programa que l uma freqncia (em Hertz) e uma durao (emmilissegundos) e emite um som na freqncia com a durao.

2.5.2 Msica linear? - A respeito do programa do parabns (1.4.2 ), deseja-se saber se a melodia preservada somando-se um valor constante a cada freqncia. Faa um programa que l essa constante (por exemplo, 100) e faz soar as notas somando a constante a cada freqncia.

15

3.ALTERNATIVAS E DECISOO recurso principal incorporado nas especificaes deste captulo a possibilidade de executar condicionalmente um conjunto de instrues. Uma ou mais condies, na forma de expresses lgicas, so avaliadas, para determinar o que ser executado. Algumas especificaes so semelhantes s de captulos anteriores, acrescidas de alternativas ou validaes.

3.1.SADA SIMPLES3.1.1 Menu principal - Faa um programa de menu que mostra na tela, sob o ttulo de "MenuPrincipal", trs opes: "1 - Fim", "2 - Cadastro" e "3 - Consulta", l do teclado a opo desejada pelo usurio e mostra uma mensagem confirmando a opo escolhida ou uma mensagem de erro, se a opo for invlida.

3.1.2 Mltipla escolha 1 - Elaborar uma questo de mltipla escolha, de uma disciplina que estejacursando ou um tema de interesse, com um enunciado e cinco alternativas, sendo uma correta ou incorreta. Escrever um programa que mostra a questo na tela, pede a resposta correta e informa ao usurio se este acertou ou errou.

3.1.3 Mltipla escolha 2 - Enriquea o programa acima da questo de mltipla escolha, incluindouma outra questo de outro tema. No incio do programa, oferea ao usurio a escolha de qual questo quer responder.

3.2.MATEMTICA3.2.1 Maior de 2 - Elaborar programa que l dois nmeros quaisquer e mostra na tela uma mensagemindicando qual o maior, ou se so iguais. indicando qual o maior.

3.2.2 Maior de 3 - Faa um programa que l trs nmeros diferentes e mostra na tela uma mensagem 3.2.3 Diviso - Escrever um programa que l dois nmeros e efetua uma diviso, mas somente se odivisor for diferente de zero; quando isto ocorrer, mostrada uma mensagem de erro apropriada.

3.2.4 Aprovao 1 - Elaborar programa que l uma disciplina e respectiva nota final, mltipla de 0,5,e informa o que ocorreu. Se a nota for de 5 a 10, aprovado; se 4 ou 4,5, segunda poca e, caso contrrio, reprovado.

3.2.5 Aprovao 2 - Altere o programa acima para que, se a nota estiver fora da faixa vlida, sejaemitida uma mensagem de erro.

3.2.6 Aprovao 3 - Altere o programa acima para que leia tambm a quantidade de aulasministradas e a quantidade de faltas do aluno. Se o aluno no obteve 75% de freqncia, ele est reprovado, independentemente da nota.

3.2.7 Equao do segundo grau - Elaborar programa que l os coeficientes a, b e c de uma equaode segundo grau e, antes de calcular as razes, calcula o delta. Se este for negativo, informa que a equao no tem soluo real. Se for zero, mostra a nica raiz. Se positivo, mostra as duas razes.

3.2.8 Conta telefnica - Uma conta telefnica composta dos seguintes custos:

16

300 IDIAS PARA PROGRAMAR COMPUTADORES

assinatura: R$ 17,90 valor de impulsos: R$ 0,04 por impulso que exceder a 90 valor de interurbanos valor de chamadas p/ celular: R$0,09 por impulso Elabore um programa que l valor de interurbanos, quantidade total de impulsos normais e para celular, e calcula o valor da conta.

3.2.9 Tipo de tringulo - Em um tringulo, cada lado menor do que a soma dos outros dois.Escreva um programa que l trs valores e informa se estes no podem constituir um tringulo ou, caso contrrio, se o tringulo formado equiltero (trs lados iguais), issceles (dois lados iguais) ou escaleno (lados diferentes).

3.2.10 Salrio - Um salrio tem os seguintes componentes:- valor nominal - adicional devido a horas extras - valor descontado para o INSS (10% do valor a receber, limitado a 150 reais). O valor adicional devido s horas extras calculado dividindo-se o valor nominal por 176 (22 dias de 8 horas), multiplicando-se pela quantidade de horas e ainda com um acrscimo de 50%. Escrever um programa que l os valores necessrios, calcula e mostra na tela os componentes do salrio e o salrio lquido resultante para o empregado. No preciso prever arredondamentos, mas os valores devem ser mostrados na tela com duas casas decimais. Exemplos: para um salrio de R$ 1.000,00, com 30 horas extras, teremos R$ 255,68 de horas extras [(1.000/176)*30*1,5], R$ 125,57 de INSS e um salrio lquido de R$ 1.130,11. Para um salrio de R$ 2.000,00 e 20 horas extras, seriam R$ 340,91 de horas extras, R$ 150,00 de INSS (e no os 10%), com um salrio lquido de R$ 2.190,91.

3.2.11 Notas do professor - Reescreva o programa 2.2.19 para que, caso uma das notas esteja forada faixa vlida, o programa mostre uma mensagem de erro e no efetue o clculo.

3.2.12 Meno - Uma faculdade atribui menes aos alunos conforme a faixa de notas que tenhaatingido: 9,0 a 10: SS (superior) 7,0 a 8,9: MS (mdio superior) 5, 0 a 6,9: MM (mdio) 3,0 a 4,9: MI (mdio inferior) 0,1 a 2,9: II (inferior) 0: SR (sem rendimento). Faa um programa que l a nota e informa a meno.

3.2.13 Notas finais - As notas de uma faculdade so atribudas por bimestre, tendo o primeirobimestre peso 2 e o segundo peso 3. A nota semestral deve ser arredondada para o mltiplo de 0,5 mais prximo. Elabore um programa que calcule a nota final.[Dica para o arredondamento: obtenha as partes inteira e fracionria da nota; com base na frao, decida se soma 0, 0,5 ou 1 parte inteira]

3.2.14 Imposto - Um imposto calculado com base na seguinte tabela:isento At 1.200,00 de 1.201,00 a 2.500,00 10% de 2.501,00 a 5.000,00 15% acima de 5.000,00 20%. Implemente um programa que leia o valor base e calcule o imposto a pagar.

ALTERNATIVAS E DECISO

3.2.15 Ano bissexto - Um ano bissexto se for divisvel por 4 exceto os sculos, que so bissextos seforem mltiplos de 400. Escreva um programa que determina se um ano bissexto.

17

3.3.CARACTERES E CADEIAS3.3.1 Tipo de pessoa - Elaborar programa que l do teclado uma letra que pode ser F ou J emostra a mensagem pessoa fsica, pessoa jurdica ou "tipo de pessoa invlido", conforme o caso.

3.3.2 Caracteres ASCII - Escreva um programa que l trs nmeros de 32 a 254 e mostra na telauma cadeia formada pela concatenao dos caracteres ASCII de cada nmero. Caso algum dos nmeros esteja fora da faixa vlida, o programa mostra uma mensagem de erro apropriada.

3.3.3 Validao de senha - Elabore um programa que l uma senha de at 8 caracteres, verifica se asenha est correta ou no, comparando-a com uma senha predefinida, e informa "Acesso autorizado" ou "Acesso negado", conforme o caso.

3.3.4 Validao de data - Escrever um programa que l uma data no formato 'DD/MM/AAAA' everifica se as barras esto nas posies corretas, se o dia est entre 1 e 31 e se o ms est entre 1 e 12, mostrando mensagens de erro apropriadas ou que a data est correta.

3.3.5 Cdigo ou caractere ASCII - Escreva um programa que l uma opo que pode ser 1 ou 2. Seo usurio escolher 1, o programa l um nmero de 1 a 255 e mostra o caractere ASCII correspondente; se 2, lido um caractere e mostrado o respectivo cdigo ASCII. Criticar as entradas numricas e mostrar mensagens apropriadas em caso de erro.

3.3.6 Tipo de caractere - Escrever um programa que l um caractere e informa se letra, dgito,operador aritmtico ou nenhum deles.

3.3.7 Sorteio da LBV - Reescreva o programa 2.3.10 para que verifique se os nmeros lidos estono formato esperado (por exemplo, 21.375). Caso algum esteja incorreto, o programa mostra uma mensagem de erro.

3.4.CONTROLE DE TELA3.4.1 Quadrado posicionado - Elabore um programa que mostre um "quadrado" de lado 5 na tela, apartir de uma linha e uma coluna lidas do teclado. Se algum dos valores estiver fora da faixa vlida, mostrada uma mensagem de erro e o desenho no mostrado.

3.4.2 Quadrado ou tringulo - Implemente um programa com 3 opes (letra ou nmero): terminar,desenhar um quadrado ou um tringulo na tela, em linha e coluna lidas pelo teclado. Elabore o quadrado e o tringulo como achar melhor. Faa o programa mostrar uma mensagem de erro se o usurio escolher uma opo invlida ou informar valor invlido para linha ou coluna.

3.5.SONS3.5.1 Nota musical - Elaborar um programa que l uma freqncia em Hertz e uma durao emmilissegundos e emite um som na freqncia com a durao. Limite a freqncia at 10.000 Hz e a durao a 2 segundos.

18

3.6.VARIADOS

300 IDIAS PARA PROGRAMAR COMPUTADORES

3.6.1 Cadeia centralizada - Elabore um programa que l um nmero de linha e uma cadeia qualquer,limpa a tela e mostra a cadeia centralizada na linha indicada. Linhas invlidas no so aceitas. [Dica: calcule a coluna com base na quantidade de colunas da tela e no comprimento da cadeia]

3.6.2 Dia da semana - Construa um programa que l um nmero de 1 a 7 e informa o dia da semanacorrespondente, sendo domingo o dia de nmero 1. Se o nmero no corresponder a um dia da semana, mostrada uma mensagem de erro.

3.6.3 PIS/PASEP - O dgito verificador do PIS/PASEP calculado atravs da seguinte regra: o

nmero composto por dez dgitos mais um dgito verificador. Multiplique os nmeros, da esquerda para a direita, respectivamente por 3 2 9 8 7 6 5 4 3 2. Some os resultados das multiplicaes; calcule o resto da diviso da soma por 11 e subtraia o resultado de 11. Se o resultado for 10 o dgito zero, caso contrrio o dgito o prprio resultado. Por exemplo, para o nmero 1701209041-1, o clculo seria: 1x3 + 7x2 + 0x9 + 1x8 + 2x7 + 0x6 + 9x5 + 0x4 + 4x3 + 1x2 = 98. O resto da diviso de 98 por 11 10. Como 11 - 10 = 1, o dgito 1. Escreva um programa que l um nmero de PIS/PASEP e mostra o dgito verificador correspondente. Para test-lo, voc pode usar tambm o nmero 1010861269-1.

3.6.4 Calculadora - A calculadora de Luciana pifou, justo quando ela precisa fazer vrios clculos.

Ela tem um computador, mas no sabe que um dos acessrios do Windows uma calculadora. Sendo estudante de programao, Luciana resolveu fazer um programa. A especificao que bolou prev que programa l dois nmeros inteiros (o que atende suas necessidades) e em seguida um smbolo de operao. Se este for '+', o programa soma os nmeros, se '-', subtrai, se '*' multiplica e se '/' divide. Se o smbolo for diferente desses, mostrada uma mensagem de erro. O programa, antes de dividir, critica se o divisor zero e mostra uma mensagem, se for. Implemente a especificao de Luciana.

3.6.5 Jogo de fichas 1 - Um jogo consiste em se retirar duas fichas de um saco contendo fichasbrancas e pretas. Dependendo da combinao de cores das fichas retiradas, o jogador ser pago na seguinte proporo: Primeira Ficha Branca Branca Preta Preta Segunda Ficha Branca Preta Branca Preta Rateio 0 1/2 1 2

Ou seja, com duas fichas brancas o jogador perde tudo, com uma branca e uma preta recebe metade do que apostou, com um preta e uma branca recebe seu dinheiro de volta e com duas pretas recebe o dobro. Elaborar um programa que l as cores das duas fichas e calcula o rateio.

3.6.6 Jogo de fichas 2 - Altere o programa anterior para que leia tambm o valor apostado, limitado a$100, e informe o valor a ser recebido pelo apostador.

3.6.7 Jogo de fichas 3 - Modifique o programa do jogo de retirada de fichas, acima, de forma que ojogador retire trs fichas. Atribua valores de rateio para todas as combinaes de cores . Implemente um programa que l o valor apostado, sorteia as cores, calcula o rateio obtido pelo jogador e o valor que ele receber.

3.6.8 Adivinhe 1 - Faa um programa que sorteia um nmero de 1 a 5 e pede ao usurio que o

adivinhe, lendo do teclado o palpite. Caso o usurio acerte ou no, mostrada uma mensagem apropriada.

ALTERNATIVAS E DECISO

3.6.9 Adivinhe 2 - Modifique o programa acima para que o usurio possa tentar novamente se errarna primeira vez.

19

3.6.10 Categoria de altura - Elaborar programa que l uma altura e mostra uma mensagem conformea faixa de altura: menos que 1,60 de 1,60 a 1,85 mais que 1,85 baixinho altura normal faz frio a em cima?

3.6.11 Conceito - Uma universidade atribui conceitos aos alunos com base na nota obtida em cadadisciplina, segundo a tabela abaixo. Escreva um programa que l a nota e informa o conceito obtido. NOTA CONCEITO ---------------------90..100 A 75..89 B 50..74 C 40..49 D 0..39 E

3.6.12 Multiplicao rpida - Um algoritmo para multiplicao rpida por 11 de nmeros de 2dgitos funciona assim: para multiplicar 81 x 11, some os dgitos do nmero (8 + 1 = 9) e insira o resultado entre os dgitos (891). Se a soma der maior que 9, incremente o dgito da esquerda (vaium): 56 x 11 = 616. Faa um programa que efetue multiplicaes por 11 usando este algoritmo.

21

4.REPETIO difcil imaginar um programa realmente til que no contenha comandos de repetio. Familiarize-se com todos os tipos de comandos de repetio disponveis na linguagem, para que possa usar o melhor para cada situao.

4.1.SADA SIMPLES4.1.1 Egocentrismo - Implemente um programa que mostra seu nome na tela dez vezes. 4.1.2 Mais pinheiro - Fazer um programa que desenha o pinheiro (1.1.13 ), usando comandos derepetio.

4.1.3 Caracteres progressivos 1 - Escrever um programa que produza a sada abaixo na tela, para Nlinhas e usando um caractere lido do teclado (no exemplo, *). Aps mostrar uma vez, o programa repete o processo, s parando quando N for zero. ** **** ****** ******** (...)

4.1.4 Caracteres progressivos 2 - Faa o mesmo que acima para:* ** *** **** ***** (...)

4.1.5 Caracteres progressivos 3 - Idem acima, para o formato abaixo.** **** ****** ******** (...)

4.1.6 Caracteres progressivos 4 - Ibidem:(...) ***** *** *

4.1.7 Tudo junto - Faa um programa que junte os 4 exerccios acima. Ele repetidamente oferece ummenu com a opo 0 para terminar e outras 4 opes 1, 2, 3,e 4, cada uma correspondendo a um tipo de figura. Caso a opo indicada pelo usurio seja invlida, mostrada uma mensagem apropriada. Em todos os casos exceto 0 o menu oferecido novamente. Tente estruturar o

22

300 IDIAS PARA PROGRAMAR COMPUTADORES

programa de forma que a leitura da quantidade de linhas seja feita em apenas um ponto do programa, ao invs de ser lida a cada opo.

4.2.MATEMTICA4.2.1 Aprovao - Elaborar programa que l uma disciplina e respectiva nota (de 0 a 10, com umacasa decimal), e informa se o aluno passou na disciplina, repetindo o ciclo at que a nota lida seja zero. O aluno passa quando tira 7 ou mais.

4.2.2 Raiz quadrada 1 - Implemente um programa que repetidamente calcula e mostra a raizquadrada de um nmero qualquer.

4.2.3 Raiz quadrada 2 - Altere o programa acima para que ele verifique se o usurio entrou um valorpositivo ou zero. Se sim, a raiz calculada, caso contrrio mostrada uma mensagem de erro.

4.2.4 Idade mdia - Um professor, aps obter informaes de uma turma, deseja saber a mdia de

idade. Escrever um programa que l as idades at que o idade lida seja zero, quando ento mostrada a mdia (o zero no considerado para a mdia).

4.2.5 Estatstica de notas - Faa um programa que l uma quantidade qualquer de notas de 0 a 10(no permitir fora desta faixa) e, ao final, mostra quantas notas foram digitadas, a mdia e tambm a quantidade com valor abaixo de 5 .

4.2.6 Maior - Escrever um programa que l nmeros inteiros at que o nmero lido seja zero, quandoento mostrado o maior nmero lido.

4.2.7 Maior e menor - Alterar o programa anterior para que mostre tambm o menor nmero lido. 4.2.8 Nmeros inteiros 1 - Escrever um programa que l um nmero inteiro e mostra na tela osnmeros inteiros de 1 at o nmero lido.

4.2.9 Nmeros inteiros 2 - Alterar o programa acima de forma que seja lido tambm o nmeroinicial.

4.2.10 Soma de pares - Implemente um programa que calcula a soma dos nmeros parescompreendidos entre dois nmeros lidos.

4.2.11 mpares mltiplos 1 - Escreva um programa que soma todos os nmeros mpares mltiplos detrs situados na faixa de 1 a 1000.

4.2.12 mpares mltiplos 2 - Altere o programa acima de forma que a faixa seja informada pelousurio, e os nmeros mpares mltiplos de trs sejam mostrados em ordem decrescente.

4.2.13 Converso de temperatura 1 - Escrever um programa que mostra uma tabela de grausCelsius/Fahrenheit de 0 a 100, variando 1 grau de cada vez, uma temperatura por linha. Ao encher uma tela, o programa espera que uma tecla seja pressionada para continuar.

4.2.14 Converso de temperatura 2 - Alterar o programa acima de forma que sejam lidas do tecladoa temperatura inicial, a final e a variao. A temperatura final criticada; se for menor do que a inicial, o programa repete a leitura, s prosseguindo quando for vlida.

4.2.15 Adivinhe 1 - Implemente um programa que sorteia um nmero de 1 a 10 e d ao usurio 3tentativas de acert-lo. A cada tentativa errada, o programa informa se o nmero a adivinhar est abaixo ou acima.

4.2.16 Adivinhe 2 - Altere o programa acima para que ele permita ao usurio tentar at acertar.

REPETIO

4.2.17 Tabuada - Elabore um programa que l um nmero de 1 a 9 e mostra a tabuada demultiplicao do nmero. Por exemplo, para o 5: 5x1 =5 5 x 2 = 10 ... 5 x 10 = 50 Aps mostrar uma tabuada, o programa pergunta se o usurio deseja ver outra. Se a resposta for positiva (por exemplo, 'S'), ele faz tudo de novo, caso contrrio termina.

23

4.2.18 Raiz quadrada - Faa um programa que repetidamente mostra na tela duas opes: "1 - Fim"e "2 - Calcular raiz" e l do teclado a opo desejada pelo usurio. Se a opo for 1, o programa termina. Se a opo for 2, o programa l um nmero real e, se o nmero for positivo ou zero, calcula e mostra sua raiz quadrada com duas casas decimais, se negativo, mostra uma mensagem de erro. E se a opo for invlida (nem 1 nem 2), mostrada uma mensagem apropriada. Quando a opo no a de terminar, o programa volta para mostrar novamente as opes e ler a opo do usurio.

4.2.19 Numerador - Implemente um programa que mostre na tela os nmeros inteiros entre doisnmeros lidos do teclado, organizados em 10 linhas e 10 colunas: 21 31 22 32 23 33 24 25 34... 26 27 28 29 30

4.2.20 Conta telefnica - Uma conta telefnica composta dos seguintes custos:assinatura: R$ 17,90 impulsos: R$ 0,04 por impulso que exceder a 90 interurbanos chamadas p/ celular: R$0,09 por impulso Elabore um programa que l nmero de telefone, valor de interurbanos, quantidade de impulsos normais e para celular, e calcula o valor da conta. Aps calcular uma conta, o programa pergunta se o usurio deseja calcular outra conta, reiniciando se a resposta for positiva.

4.2.21 Contas telefnicas - Faa uma verso do programa acima que mostre a quantidade de contas,o valor total e a mdia do valor das contas, quando o usurio terminar.

4.2.22 Eleio - Para computar o vencedor de uma eleio deve ser feito um programa. H 3candidatos, e os votos dos eleitores foram codificados da seguinte forma: 1, 2 ou 3: votos para os respectivos candidatos 0: voto em branco 4: voto nulo Escrever o programa, que deve fornecer o nmero do vencedor da eleio (suponha que no pode haver empates), as quantidades de votos brancos e nulos e o nmero de eleitores que compareceram s urnas.

4.2.23 Srie 1 - Escrever programa para calcular, para N lido, o valor de S, dado por:S= 1 2 3 N- 1 N + + + ...+ + + N N- 1 N- 2 2 1

Aps efetuar um clculo, o programa pede novo nmero, parando quando N for zero.

4.2.24 Srie 2 - Sendo H1+N lido.

1 1 1 + + ...+ , elaborar um programa para calcular o valor de H, para 2 3 N

24

300 IDIAS PARA PROGRAMAR COMPUTADORES

4.2.25 Srie convergente - A srie S =

1 1 1 + + + L converge para 1. Demonstre isso atravs de 2 4 8

um programa que calcula o valor de S para N termos. Para facilitar, aps apresentar um resultado, faa o programa voltar para ler outro valor de N, s parando quando o nmero lido for zero. Execute vrias vezes para valores sucessivamente maiores de N, e observe os resultados.

4.2.26 Caixa automtico - Um caixa automtico precisa calcular quais e quantas notas devem serentregues ao cliente para efetuar a retirada desejada. Faa um programa com opes para: a) Ler o valor da retirada e mostrar a quantidade de notas de 10 e de 50 a serem entregues. Se alguma das quantidades no for suficiente, o programa cancela a operao, com uma mensagem apropriada. [Dica para calcular as quantidades de notas: use os operadores div e mod] b) Receber notas de 10 e 50 (a quantidade inicial zero para ambas) c) Apresentar relatrio com as quantidades de notas e valor total disponvel, e valor total de retiradas efetuadas.

4.3.CARACTERES E CADEIAS4.3.1 Sorteio da LBV - Melhore o programa 3.3.7 de forma que, quando houver um erro nadigitao, ele permita ao usurio entrar novamente, s continuando quando os dois nmeros estiverem corretos.

4.3.2 Soma de cdigos ASCII - Escreva um programa que l uma cadeia de caracteres quaisquer emostra a soma dos cdigos ASCII dos seus caracteres. Isto repetido at que a cadeia lida seja nula.

4.3.3 Concatenao de caracteres - Elabore um programa que l uma quantidade qualquer denmeros de 32 a 254 e mostra na tela uma cadeia formada pela concatenao dos caracteres ASCII de cada nmero. Se um dos nmeros estiver fora de faixa, mostrada uma mensagem de erro e o programa espera a correo. O final da entrada de nmeros ocorre quando for lido zero.

4.3.4 Insero de caractere 1 - Implementar um programa que insere hfens entre as letras de umacadeia de caracteres, como em f-a-b-u-l-o-s-o.

4.3.5 Insero de caractere 2 - Altere o programa acima para que ele insira um caractere lido doteclado. Ele repete tudo enquanto o usurio digitar uma cadeia. Se nada for digitado, o programa termina.

4.3.6 Substituio de caractere - Elabore um programa que troca todos os espaos de uma cadeialida por um caractere tambm lido. O programa repete isso at que seja lida uma cadeia nula (neste caso o caractere no lido).

4.3.7 Criptografia 1 - Implementar um programa com duas opes: na primeira, ler e codificar umacadeia com cdigos ASCII de 32 (espao) a 122 ('z') , da seguinte maneira: ao cdigo ASCII de cada caractere somado 1; os nmeros resultantes so convertidos novamente em caracteres e concatenados, sendo a cadeia resultante mostrada na tela. A segunda opo decodifica uma cadeia codificada pela primeira programa. Exemplo: a cadeia "fogo", codificada, se torna "gphp" (esse processo de codificao chamado de "criptografia").

4.3.8 Prenome - Escrever um programa que l um nome completo e mostra na tela o prenome, isto ,o primeiro nome. Suponha que o nome nunca comea com um espao. O programa repete esses passos at que o nome lido seja uma cadeia nula (o usurio no digitou nada).

4.3.9 Iniciais - Escreva um programa que l um nome de pessoa e identifica suas iniciais, segundo oseguinte critrio: uma inicial o primeiro caractere ou o caractere que segue um espao.

REPETIO

4.3.10 Inverso de cadeia - Elaborar um programa que l uma cadeia de caracteres e mostra-ainvertida na tela. Aps, o programa volta para ler outra, assim fazendo at que a cadeia nula seja nula, isto , sem nenhum caractere.

25

4.3.11 Eliminao de caractere - Fazer um programa que l uma cadeia e um caractere e eliminatodas as ocorrncias do caractere na cadeia. Aps, o programa pede nova cadeia e s termina quando a cadeia lida for nula.

4.3.12 Quantidade de caracteres - Elaborar um programa que l uma cadeia e um caractere einforma a quantidade de ocorrncias do caractere na cadeia (no diferenciar minsculas/maisculas: 'a' = 'A'). Por exemplo, se a cadeia for "BANANA nanica" e o caractere for "a", o programa deve informar 5.

4.3.13 Estatstica de frase 1 - Elabore um programa que l uma cadeia de at 255 caracteres einforma: - quantidade de brancos - quantidade de palavras - quantidade de ocorrncias da letra 'A'

4.3.14 Estatstica de frase 2 - Altere o programa acima para que informe tambm a quantidade decada vogal.

4.3.15 Validao de senha - Escrever um programa que l uma senha (entre 4 e 8 caracteres),compara a senha linha com o valor correto e informa se o usurio est autorizado ou se a senha est incorreta. A senha correta registrada dentro do programa como uma constante. O programa permite at 3 tentativas.

4.4.CONTROLE DE TELA4.4.1 Animao horizontal 1 - Implementar um programa que simula um caractere se movendo pelatela ao longo de uma linha cujo valor lido do teclado, a partir e at colunas tambm lidas. O programa verifica se a coluna final informada maior do que o valor inicial. isto , a coluna fica fixa e a linha varia.

4.4.2 Animao horizontal 2 - Alterar o programa anterior para que o movimento seja na vertical, 4.4.3 Nave espacial 1 - Bolar um desenho de uma "nave espacial" em modo texto. Fazer umprograma que inicia com a "nave" no centro da tela e move-a para a esquerda ou direita se tecladas as setas, terminando se teclado ESCAPE. A nave pra quando atinge os limites da tela.

4.4.4 Nave espacial 2 - Alterar o programa acima para permitir o movimento tambm para cima epara baixo.

4.4.5 Desenho - Faa um programa de desenho, cuja tela tem um cursor que se movimenta com assetas, deixando um "rastro" (algum caractere; se quiser sofisticar, ponha um hfen se o movimento for na horizontal e uma barra, se na vertical. Se quiser sofisticar mais ainda, use os caracteres de desenho de retngulos da tabela ASCII).

4.4.6 Apresentao 1 - Altere o programa da fotossntese (1.1.8 ) de forma que o estudante avanceou retroceda as pginas atravs de seta acima e seta abaixo. O programa termina quando avanar alm da ltima pgina ou quando teclado ESCAPE. [Dica: use um comando de repetio, combinado com dois comandos de deciso. O primeiro, aps a leitura da tecla, ajusta a pgina a ser mostrada. O segundo mostra o texto da pgina].

26

4.4.7 Apresentao 2 - Altere o programa anterior de forma que, quando o usurio teclar o nmerode uma pgina existente, o programa vai direto para a pgina correspondente.

300 IDIAS PARA PROGRAMAR COMPUTADORES

4.4.8 Losangos - Refaa o programa dos losangos (2.1.3 ), desta vez usando comandos de repetio. 4.4.9 Quadrados crescentes - Elaborar um programa que mostra um "quadrado" no centro da tela, delado 2. Em seguida, mostra outro quadrado de lado 4 ao redor do primeiro e apaga este, depois um de lado 6, etc., at "sair" da tela. O programa repete isso at que uma tecla seja pressionada.

4.5.SONS4.5.1 Chateao - Implementar um programa que fica repetindo a melodia do parabns(especificao 1.4.2 ) at que uma tecla seja pressionada. Execute-o sempre que quiser amolar algum!

4.5.2 Som crescente 1 - Elaborar um programa que emite sons de freqncia crescente, iniciando em100 Hz at cerca de 8000 Hz, com variao de 10 em 10 % e tendo cada som a durao de 30 milissegundos.

4.5.3 Som crescente 2 - Alterar o programa acima para que leia via teclado todos os valores:

freqncias inicial e final, durao do som e variao. Verificar se a freqncia final maior do que a inicial e se a variao maior do que 1 e menor do que 2. freqncia decrescente.

4.5.4 Som decrescente - Reescrever o programa acima para que a emisso de sons seja com 4.5.5 Queda - Implementar um programa que emite sons de 700 a 600 Hertz, variando a frequnciade 1 em 1, tendo cada som a durao de 10 milissegundos.

4.6.REGISTROS E VETORES4.6.1 Mdia - Escrever um programa que leia at 20 nmeros inteiros para um vetor e calcule a mdiados valores.

4.6.2 Maior e menor - Escrever um programa que preencha um vetor de 100 elementos com valoresinteiros aleatrios, e identifique o maior e o menor nmero gerados, e respectivas posies.

4.6.3 Mdia ponderada - Escrever um programa que calcula mdias ponderadas para umaquantidade de fatores de at 15. O programa l vrios pares [nmero, peso] at que seja lido um nmero negativo. calculada ento a mdia, somando-se os produtos de cada nmero por seu peso e dividindo-se o resultado pela soma dos pesos.

4.6.4 Soma em vetor 1 - Escrever um programa que, aps preencher dois vetores com nmerosinteiros aleatrios, soma os valores dos elementos correspondentes de dois vetores, armazenando o resultado num terceiro vetor.

4.6.5 Soma em vetor 2 - Elabore um programa semelhante ao anterior, exceto que, em apenas umvetor, soma os valores de dois campos e armazena o resultado em um terceiro campo de um registro.

4.6.6 Tabela de temperatura - Implementar um programa que monta uma tabela de grausCelsius/Fahrenheit desde o ponto de fuso at o ponto de ebulio da gua, em incrementos unitrios. Aps so oferecidas opes para o usurio ver na tela ou imprimir.

REPETIO

4.6.7 Pesquisa notas - Elaborar programa com opes para: ler 10 notas de 0 a 10, pesquisar se umanota existe no vetor e mostrar o contedo do vetor. Na leitura, rejeitar notas fora da faixa vlida.

27

4.6.8 Nome do dia - Construa um programa que l um nmero de 1 a 7 e informa o dia da semanacorrespondente, sendo domingo o dia de nmero 1. Se o nmero estiver fora da faixa vlida, mostrada uma mensagem de erro.

4.6.9 Validao de senha - Implementar um programa que l um nome e uma senha (entre 4 e 8caracteres) e verifica e o usurio est autorizado ou no. Para essa verificao, o programa mantm uma lista de nomes e respectivas senhas. O programa mostra mensagens de erro se o nome ou a senha estiverem incorretos. So permitidas at 3 tentativas.

4.6.10 Alunos e notas - Implemente um programa que l uma lista de pares nomes de aluno/notas.Depois so mostrados na tela os nomes e as notas, juntamente com a quantidade de alunos e a mdia das notas.

4.6.11 Troco - Implemente um programa que resolve o problema do troco: dado um valor de umavenda, um valor pago e um estoque de notas e moedas (todos os possveis), calcular o troco e as notas ou moedas e respectivas quantidades que devem ser entregues ao cliente. Procure estruturas de dados que permitam solues mais simples, como por exemplo um vetor com o valor de cada nota ou moeda, em ordem decrescente de valor.

4.6.12 Frases espelhadas - Faa um programa que leia cadeias (qualquer quantidade, limitada a 20)de at 39 caracteres e mostre-as espelhadas no centro da tela, como no exemplo: Primeira ariemirP Segunda adnugeS Terceira ariecreT ...

4.6.13 Palavras grandes - Faa um programa que l uma cadeia de at 10 caracteres e a mostra na

tela com letras grandes. Cada letra formada por uma matriz 8x8, com algum caractere nas posies adequadas de forma a compor o desenho de cada letra (cada caractere como se fosse um pixel - veja sugesto abaixo). Para separar uma letra da outra, quando mostradas na tela, voc pode deixar em branco uma linha e uma coluna de cada letra, na prpria matriz. *

* *

* * * * * * *

* *

* *

* *

4.6.14 Rifa - Uma rifa sorteada com base nos nmeros da Loteria Federal da seguinte maneira: oprimeiro prmio formado obtendo-se o primeiro dgito de cada prmio. O segundo obtido atravs dos segundos dgitos, e assim por diante. Por exemplo, suponha que os nmeros da Loteria Federal so: 1 - 45.698 2 - 65.788 3 - 01.214 4 - 37.840 5 - 77.430

28

300 IDIAS PARA PROGRAMAR COMPUTADORES

4.6.15 Sena - Faa um programa que l apostas da sena, os nmeros sorteados e apresente osresultados obtidos pelo apostador: senas, quinas e quadras.

Os prmios da rifa sero 46.037, 55.177, etc. Escreva um programa que l os nmeros da Loteria Federal e calcula os nmeros da rifa [Dica: armazene os nmeros como cadeias em um vetor]

4.6.16 Codificao de preo - Certas lojas usam (ou pelo menos usavam) um sistema de codificaode preos associando os dez dgitos palavra PERNAMBUCO. Implemente um programa que l um preo e mostra-o codificado, ou l um cdigo e mostra o preo.

4.6.17 Extenso - Elaborar um programa que l um valor monetrio e mostra na tela o valor porextenso.

4.7.ARQUIVOS4.7.1 Cpia backup - Escrever um programa que l um nome de arquivo texto existente e copia-opara um outro com extenso ".bak". Caso o arquivo no seja encontrado, mostrada uma mensagem de erro.

4.7.2 Contagem de caracteres - Implementar um programa que conta a quantidade de caracteres deum arquivo texto.

4.7.3 TYPE 1 - Elaborar um programa que l um arquivo texto qualquer e o mostra na tela. Incluaopes para converter as letras para maisculas e para filtrar (no mostrar) os caracteres ASCII com cdigo abaixo de 32 ou acima de 127..

4.7.4 TYPE 2 - Altere o programa acima para que numere as linhas ao mostr-las. 4.7.5 Contagem de palavras - Implementar um programa que conte as palavras contidas em umarquivo texto.

4.7.6 Comparao de arquivos - Faa um programa que compare dois arquivos texto e informe seso iguais (byte a byte) ou, se no, o nmero do primeiro caractere em que diferem.

4.7.7 Cadastro de notas - Fazer um programa que armazena arquivos contendo nome e notasbimestrais de alunos. O nome do arquivo identifica a disciplina. Para que o programa identifique quais arquivos so dele, defina uma extenso padro para o nome, como por exemplo, ".dat". Declare opes para incluir, alterar e excluir aluno. Preveja tambm um relatrio completo de uma disciplina, contendo, alm do nome e das notas parciais, a nota final.

4.7.8 Contagem de linhas de cdigo 1 - Escrever um programa que conta linhas de cdigo de umprograma da linguagem em que estiver programando. Mostrar na tela a quantidade total de linhas, linhas em branco e o saldo.

4.7.9 Contagem de linhas de cdigo 2 - Alterar o programa acima para que mostre e desconte aquantidade de linhas de comentrios (o programa ter que identificar o incio e o fim de cada comentrio).

4.7.10 Estatstica de texto - Faa um programa que l um arquivo texto qualquer e mostra:Quantidade de linhas Quantidade de letras Quantidade de palavras Quantidade de cada letra.

REPETIO

4.7.11 Impresso - Faa um programa que imprime um arquivo texto. Antes de imprimir, perguntaao usurio a quantidade de linhas por pgina, se deseja ou no numerao das pginas e ainda permite a digitao de um cabealho que, se fornecido, ser impresso na mesma linha da numerao de pginas.

29

4.8.VARIADOS4.8.1 Parabns - Para o programa do Parabns (pg. 13), armazenar as notas e duraes em um vetore reproduzir a melodia a partir do vetor.

4.8.2 Melodia - Elaborar um programa que l uma seqncia de vrias notas definidas por paresfreqncia (Hz)/durao (milissegundos), armazena-os em um vetor e "toca" a melodia.

4.8.3 Jogo de fichas - Altere o programa do sorteio de fichas (3.6.6 ) para que permita ao jogadorjogar quantas vezes quiser. O programa mostra o valor acumulado pelo jogador at um determinado momento.

4.8.4 Tela aleatria - Escreva um programa que fica preenchendo a tela com caracteres ASCIIaleatrios, em uma posio tambm aleatria. Quando atingir 1000 caracteres, a tela limpa e tudo recomea, s parando quando alguma tecla for pressionada.

4.8.5 Cheques - Faa um programa para preencher cheques. A data de emisso lida na forma"DD/MM/AA". O programa separa dia, ms e ano e preenche o nome do ms.

4.8.6 Sorteio de consrcio - Um consrcio sorteia seus carros com base na Loteria Federal da

seguinte maneira: o premiado de um grupo o que tiver a pedra correspondente dezena final do primeiro prmio. Se ele j tiver sido contemplado, a prxima dezena formada pelo dgito do milhar e da dezena. Se o consorciado desta pedra tambm j foi contemplado, a nova dezena inclui o milhar e a centena, e assim por diante, pegando-se at 3 dezenas de cada nmero. Por exemplo, suponha que os nmeros da Loteria Federal so: 1 - 45.698 2 - 65.788 3 - 01.214 4 - 37.840 5 - 77.430 As dezenas consideradas sero 98, 69, 56 (primeiro prmio), 88, 78, 57 (segundo prmio), e assim por diante. Faa um programa que l os cinco prmios e mostra as dezenas sorteadas, na ordem correta.

4.8.7 Impresso de programa fonte - Faa um programa que imprime um arquivo contendo umprograma fonte da linguagem que usa. Na impresso so ressaltadas em negrito as palavras chave da linguagem, e os comentrios so impressos em itlico. Ao final o programa mostra a quantidade de linhas somente de comentrios, linhas em branco e total de linhas.

4.8.8 Linha reta - Implemente um programa que d uma inclinao e desenha na tela, ponto a ponto,uma linha reta com a inclinao lida. Uma reta definida pela equao y = ax + b, onde a a inclinao.

4.8.9 CPF - Os dois dgitos de verificao do CPF (constitudo de 9 dgitos) so calculados atravsde um complicado algoritmo: Etapa 1: clculo de DV1 Soma 1: soma dos produtos de cada dgito por um peso de 2 a 10, na ordem inversa (do nono para o primeiro).

30

300 IDIAS PARA PROGRAMAR COMPUTADORES

Multiplique a soma 1 por 10 e calcule o resto da diviso do resultado por 11. Se der 10, DV1 zero, caso contrrio o DV1 o prprio resto. Etapa 2: clculo de DV2 Soma 2: soma dos produtos de cada dgito por um peso de 3 a 11, tambm na ordem inversa. Adicione a Soma 2 ao dobro do DV1, multiplique por 10 e calcule o resto da diviso do resultado por 11. Se der 10, DV2 zero, caso contrrio o DV2 o prprio resto. Etapa 3: Multiplique DV1 por 10, some com DV2 e voc tem o nmero de controle do CPF. Exemplo: para o CPF 398 136 146, temos: Etapa 1: 2x6 + 3x4 + 4x1 + 5x6 + 6x3 + 7x1 + 8x8 + 9x9 + 10x3 = 258 2580 mod 11 = 6, portanto, DV1 = 6 Etapa 2: 3x6 + 4x4 + 5x1 + 6x6 + 7x3 + 8x1 + 9x8 + 10x9 + 11x3 = 299 (299 + 6x2)x10 mod 11 = 3150 mod 11 = 8, portanto DV2 = 8 Etapa 3: DV1x10 + DV2 = 6x10 + 8 = 68, que o nmero procurado. Elabore um programa que calcule o nmero de controle do CPF.

4.8.10 Senha invisvel - Modifique o programa de validao de senha (0) para que ,quando a senhafor digitada, no seja visvel, impedindo que algum a descubra.

4.8.11 Apresentao - Modifique a verso mais elaborada do programa da fotossntese (4.4.6 ) deforma que as pginas seja armazenadas em vetor. Descubra uma boa estrutura de dados para simplificar o problema.

4.8.12 Criptografia 2 - Implementar um programa que criptografa uma cadeia usando o seguinte

algoritmo: ela reescrita em blocos de 5 caracteres, sendo as novas palavras obtidas lendo-se cada coluna resultante, separadas por barras. Por exemplo, se a cadeia for "mensagem secreta":

mensa gem s ecret a A cadeia criptografada torna-se "mgea/eec /nmr/s e /ast. Prever tambm no programa uma opo para decifrar uma cadeia.

31

5.CRIAO DE INSTRUES

H dois tipos bsicos de instrues que podem ser declaradas pelo programador: procedimentos e funes. A principal diferena entre elas que a funo retorna um valor. Poder declarar instrues, estendendo a linguagem, certamente o recurso mais valioso das linguagens de programao, por proporcionar reusabilidade e portanto produtividade. conveniente tambm saber como armazen-las em bibliotecas, para que elas sejam facilmente reutilizveis. Mas lembre-se: uma instruo s ser reutilizvel se puder ser usada sem qualquer outra declarao, isto , preciso saber apenas o seu nome e seus parmetros. Tambm no ser conveniente que a instruo mostre resultados na tela, a menos que isso faa parte da sua finalidade. Por exemplo, se a finalidade for "calcular a mdia", a instruo retorna o valor calculado mas no mostra na tela. Se a finalidade for "Mostrar uma mensagem na tela", ento ela deve fazer isso e no efetuar clculos de valores que no estejam relacionados a isso. Caso a instruo especificada em algum exerccio deste captulo j exista na linguagem em que estiver programando, claro que voc tem pelo menos duas opes: usar a disponvel ou desenvolver a sua prpria, para treinar. Neste caso, voc pode comparar os resultados da sua com a da linguagem, para validar a instruo criada. Nas especificaes que se seguem, se for pedido "declare uma instruo" ou semelhante, voc dever fazer um pequeno programa para test-la.

5.1.MATEMTICA5.1.1 Nmero par - Fazer um procedimento que retorna Verdadeiro ou Falso conforme um nmeroseja par ou no. Se necessrio, convencione 0 e 1, "S" e "N" ou outra representao de Falso e Verdadeiro.

5.1.2 Numerao de 1 a 100 - Elaborar um procedimento que mostra os nmeros de 1 a 100. 5.1.3 Numeraode N1 a N2 - Declarar um procedimento semelhante ao acima, mas que recebecomo parmetros os valores inicial e final.

5.1.4 Nmeros pares - Escrever um procedimento que recebe dois nmeros e mostra na tela osnmeros pares situados entre os dois, inclusive. Testar com um programa que l os nmeros inicial e final e, se este maior que o inicial, chama o procedimento.

5.1.5 Equao do segundo grau - Implementar uma instruo que recebe os coeficientes a, b e c deuma equao do segundo grau e retorna suas razes. Resolva: como fazer quando a equao resultante no tiver razes reais?

5.1.6 Aprovao - Escrever uma funo que recebe uma nota de 0 a 10 e retorna verdadeiro ou falso(ou outros valores convencionados como tal) se o aluno foi aprovado, isto , se tirou 7 ou mais.

5.1.7 Maior e menor com menu - Faa duas funes: uma que recebe dois nmeros e retorna omaior e outra que recebe o mesmo mas retorna o menor. Implementar um programa com um menu de 4 opes: ler dois nmeros, testar uma e outra funo e terminar.

5.1.8 Maior de 2 - Escrever uma funo que recebe dois nmeros quaisquer e retorna o maior. 5.1.9 Maior de 3 - Escrever uma funo que recebe 3 nmeros e retorna o maior

32

5.1.10 Entre 0 e 100 - Implementar uma funo que recebe um nmero qualquer e retornaVerdadeiro se o nmero est entre 0 e 100, caso contrrio retorna Falso.

300 IDIAS PARA PROGRAMAR COMPUTADORES

5.1.11 Mdia de 3 - Declarar uma funo que calcula a mdia aritmtica de 3 nmeros 5.1.12 Exponenciao inteira - Escrever uma funo que calcula um inteiro elevado a outro inteiro,usando multiplicao.

5.1.13 Exponenciao real - Escrever uma funo que calcula um nmero real elevado a outro real,usando multiplicao. Se houver tal funo na linguagem em que estiver programando, compare seus resultados para vrios tipos de valores.

5.1.14 Juros compostos - Sendo C o capital, n o prazo e i a taxa de juros, o valor futuro FV de umaaplicao financeira calculado por:

FV = C( 1+ i )

n

Elabore um programa com duas opes: uma que, dados capital, prazo e taxa, calcule o valor futuro, e outra que, dados prazo, taxa e valor futuro, calcule o capital necessrio.

5.1.15 Srie - Elaborar programa que calcule, usando funo, o valor da srie abaixo para N termos,sendo N lido:

S = 1-

1 1 1 1 + 2 - 2 + 2 -L 2 3 5 7 9

5.1.16 Bissexto - Um ano bissexto se for divisvel por 4 exceto os sculos, que so bissextos seforem mltiplos de 400. Implementar uma funo que recebe o nmero de um ano e retorna Verdadeiro se o ano for bissexto ou Falso caso contrrio.

5.1.17 Fatorial - Faa uma funo que recebe como parmetro um inteiro e retorna seu fatorial. Oque voc acha que poderia fazer para o caso em que o fatorial, se calculado, vai estourar a capacidade do tipo de dado adotado?

5.1.18 Nmeros primos - Um nmero dito ser primo quando divisvel somente por si e pela

unidade. Faa um programa que verifica, atravs de uma funo, se um nmero ou no primo. [Dica: divida o nmero N por todos os nmeros de 2 a N - 1. Se o resto da diviso de N por algum dos nmeros der zero, ele no primo]

5.1.19 Arco-tangente - O valor do arco-tangente pode ser calculado atravs da frmula abaixo, vlida quando x 2 p 1 :xx3 x5 x7 x 9 + + - ... 3 5 7 9

Elabore um programa que l o valor de x e a quantidade de fatores, e compara o valor encontrado com o calculado pela respectiva instruo da linguagem. Teste para quantidades variadas de fatores.

5.2.CARACTERES E CADEIAS5.2.1 Menor cadeia - Escrever uma funo que recebe duas cadeias de caracteres e retorna a menorem ordem alfabtica.

5.2.2 Leitura de cadeia - Implementar um procedimento que recebe uma linha e uma coluna e l umavarivel caractere na respectiva posio da tela, retornando o valor lido atravs de um parmetro por referncia ou equivalente.

CRIAO DE INSTRUES

5.2.3 Cabealho - Criar procedimento que recebe e imprime uma linha de cabealho com nmero depgina, no formato. A data obtida do sistema e o nmero de pgina um parmetro: RELATRIO DE CLIENTES EMISSO: DD/MM/AAAA PG. 999 _____________________________________________________________________

33

5.2.4 Dia, ms e ano - Implemente funes que recebem uma data no formato 'DD/MM/AAAA' eretornam dia, ms e ano, respectivamente.

5.2.5 Validao de data - Escrever uma funo que verifica se uma data no formato

DD/MM/AAAA vlida. Alm de verificar se o dia est entre 1 e 31 e o ms est entre 1 e 12, se o dia for 29/02 chamada a funo especificada no item 5.1.16 para verificar se o ano bissexto.

5.2.6 Formatao de data - Elaborar um procedimento que recebe como parmetros dia, ms, ano,uma linha e uma coluna da tela e uma letra que corresponde ao formato de data a ser apresentado. Se o formato = A, mostra DD/MM/AA; se B, mostra DD.MM.AAAA. Para test-lo, faa um programa que busca a data do sistema, extrai dia, ms e ano e chama o procedimento.

5.2.7 Inverso de cadeia - Escrever uma funo que recebe uma cadeia de caracteres e retorna-ainvertida (lida de trs para a frente).

5.2.8 Palndromos - Implementar um programa que verifica se uma frase palndroma (a mesma selida normalmente ou de trs para a frente: "roma me tem amor", "socorram me subi no onibus em marrocos"). Use a funo especificada acima e uma outra para retirar espaos de uma cadeia.

5.2.9 Ocorrncias de subcadeia - Elabore uma instruo que identifica quantas vezes uma subcadeiaocorre em uma cadeia de caracteres (por exemplo, "na" ocorre duas vezes em "banana").

5.2.10 Maisculas - Implementar uma funo que converte uma cadeia de caracteres paramaisculas.

5.2.11 Minsculas - Elaborar uma instruo que converte uma cadeia de caracteres para minsculas.[Dica: subtraia 32 dos caracteres cujos cdigos ASCII esto entre 65 e 90, inclusive]. letra de uma cadeia.

5.2.12 Insero de caractere - Elaborar uma funo que insere um caractere recebido entre cada 5.2.13 Trim - Implementar uma funo que retira os brancos finais de uma cadeia de caracteres (emcertas linguagens disponvel com o nome de "Trim")

5.2.14 Ajuste de tamanho - Implementar uma funo que insere brancos no fim de uma cadeia atatingir um tamanho especificado.

5.2.15 Crtica de data - Escrever uma funo que recebe uma data no formato 'DD/MM/AAAA'(dia/ms/ano), verifica se as barras esto na posio correta, se o dia est entre 1 e 31 (inclusive), se o ms est entre 1 e 12 e retorna um valor da seguinte forma: 0: data correta 1: dia invlido 2: ms invlido 3: dia e ms invlidos 4: formato invlido

5.2.16 Formatao de linha - Um programador est escrevendo um editor de textos, e precisa deuma funo que recebe uma linha de texto e uma largura de linha, e insere espaos de forma a alinhar o texto largura recebida, retornando a linha formatada. Implemente essa funo. [Dica:

34

300 IDIAS PARA PROGRAMAR COMPUTADORES

primeiro calcule a quantidade de espaos necessria; descubra a quantidade de intervalos entre palavras e calcule quantos espaos ter que inserir em cada intervalo; insira essa quantidade em cada intervalo, sendo que o ltimo intervalo receber os espaos extras restantes. Investigue outras possibilidades de distribuio]

5.3.CONTROLE DE TELA5.3.1 Linha vertical 1 - Desenvolva um procedimento que recebe um nmero de coluna de tela epreenche a coluna com caracteres O.

5.3.2 Linha vertical 2 - Alterar o procedimento acima para que receba tambm o caractere. 5.3.3 Texto posicionado 1 - Escreva um procedimento que recebe duas coordenadas da tela (linha ecoluna) e um texto, e mostra o texto na posio indicada.

5.3.4 Texto posicionado 2 - Altere o procedimento acima para que preserve a posio do cursor,salvando a linha e a coluna no incio e restaurando-as no final.

5.3.5 Mensagem 1 - Escrever um procedimento que recebe valores de linha e coluna da tela e umtexto, mostra o texto nas coordenadas recebidas e espera 5 segundos. Aps, apaga a mensagem e termina.

5.3.6 Mensagem temporizada - Alterar o procedimento acima para receber tambm o tempo aesperar e, se for pressionada uma tecla, terminar.

5.3.7 Entrada de cadeias - Elabore uma instruo que efetua leituras de cadeias de caracteres. Elarecebe linha e coluna, o "prompt" (texto que aparece antes, como 'Nome: ' ou 'CPF: '), o tamanho mximo da cadeia e o valor inicial. A instruo controla o uso das setas esquerda e direita, permite Delete e Backspace, Home e End. Ela termina com Enter ou Escape, neste segundo caso restaurando o valor inicial.

5.3.8 Entrada de nmeros - Desenvolva uma verso da instruo especificada acima que permiteuma opo de s aceitar dgitos.

5.4.SONS5.4.1 Som crescente - Elaborar um programa que emite sons de freqncia crescente, de umafreqncia inicial at uma final, com percentual de variao e durao de cada som lidos pelo teclado. Para emitir o som use um procedimento que recebe esses dados como parmetros. Critique o percentual de variao, impedindo valores (como 0) que atrapalhem a execuo.

5.4.2 Freqncia de notas musicais - Se voc conhece a freqncia de uma nota musical, pode conhecer a nota seguinte (um semitom acima) multiplicando aquela por 12 2 . Sabendo que afreqncia de uma das notas L 440 Hz, faa o seguinte: Escreva uma funo que recebe uma nota e retorna a prxima; Escreva um programa que calcula as freqncias de notas acima do L (La#, Si, D, D#, R, R#, Mi, F, Sol, Sol#, L, L #, Si, D. Anote as freqncias. Em outro programa, declare constantes para as freqncias das notas (por ex., DO) e escreva instrues que toquem o Parabns pr voc. [Dica: declare uma constante para a durao e use mltiplos desta; as primeiras notas, com a respectiva durao, do Parabns ficariam assim: (DO, Dur), (DO, Dur), (RE, 4*Dur), (DO, 2*Dur). Tente Dur = 100 e 200.]

Comentario: Obs.: frequncia do primeiro L: 27,5. Prximos L = 27,5 * 2**N, onde N a oitava desejada (pag. 207 do Scheid).

5.5.REGISTROS E VETORESextenso.

CRIAO DE INSTRUES

35

5.5.1 Nome do ms - Escrever uma funo que recebe nmero do ms e retorna seu nome por 5.5.2 Nome do dia - Idem acima, para o dia da semana. 5.5.3 Maior e menor - Escrever um programa com quatro opes (implementadas atravs deinstrues declaradas): preencher um vetor de 10 elementos com valores inteiros aleatrios, mostrar o contedo do vetor, identificar o maior e o menor nmero gerados, e respectivas posies.

5.5.4 Crtica de dia do ms - Alterar a funo acima para que verifique se o dia est compatvel como ms. Por exemplo, novembro no possui dia 31. Para isso use tambm uma funo.

5.5.5 Estatstica de notas - Escrever um programa para fazer estatsticas de notas de um aluno. Oprograma oferece opes de: entrar com nomes de disciplinas e respectivas notas, achar a maior nota, achar a menor nota e calcular a mdia das notas. Quando mostra algum resultado, o programa espera ser teclado algo para oferecer novamente o menu. Sugestes para modularizao: - Mostrar o menu, ler e retornar a opo (funo) - Ler os valores das notas, disciplinas e retornar a quantidade (procedimento) - Identificar a posio do menor (funo) - Identificar a posio do maior (funo) - Calcular a mdia (funo)

5.5.6 Estatstica de notas 2 - Alterar o programa acima para impedir qualquer clculo se os vetoresestiverem vazios.

5.5.7 Estatstica de notas 3 - No mesmo programa acima, incluir opes paraa) Mostrar o contedo atual dos vetores de notas e disciplinas b) Dada uma disciplina, pesquisar a nota correspondente c) Dada uma nota, pesquisar se ela existe no vetor de notas e mostrar a respectiva disciplina

5.5.8 Quadrado mgico - Um quadrado mgico aquele dividido em linhas e colunas, com umnmero em cada posio e no qual a soma das linhas, colunas e diagonais a mesma. Por exemplo, veja um quadrado mgico de lado 3, com nmeros de 1 a 9: 8 1 6 3 5 7 4 9 2

Elabore um programa que identifica e mostra na tela todos os quadrados mgicos com as caractersticas acima. Analise os quadrados identificados e verifique se h alguma diferena bsica entre eles ou se podem ser considerados os mesmo sob algum aspecto. [Dica: produza todas as combinaes possveis e verifique a soma quando completar cada quadrado. Usar um vetor de 1 a 9 (a estrutura que usei) parece ser mais simples que usar uma matriz 3x3]

5.6.ARQUIVOS5.6.1 Salvamento de parmetros - Implementar um mdulo de gravao de parmetros com duaspossibilidades: salvar ou recuperar o valor de um parmetro. Um parmetro identificado atravs de um nome de at 8 caracteres. O valor pode ser uma cadeia de at 255 caracteres.

5.6.2 Validao de senha - Implementar um programa com opes de cadastrar ou autenticarusurio, alm de uma opo para terminar. Na opo de cadastro, o programa l um nome e uma senha (ambos entre 4 e 8 caracteres), sendo esta lida duas vezes, e grava os dados em um arquivo.

36

300 IDIAS PARA PROGRAMAR COMPUTADORES

As duas senhas digitadas devem iguais. Na opo de autenticao, o programa l nome e senha e verifica se o usurio est cadastrado e se sua senha est correta. O programa mostra mensagens de erro se o nome ou a senha estiverem incorretos, sendo permitidas at 3 tentativas.

5.6.3 Validao de senha criptografada - Altere o programa acima de forma que a senha sejagravada criptografada, por exemplo, somando-se 10 ao cdigo ASCII de cada caractere

5.6.4 Configurao de impresso - Elaborar uma instruo que grava em disco um registro cominformaes sobre configurao de impresso: nome da impressora, largura e altura do papel, margens (superior, inferior, direita, esquerda). Escrever outra instruo que recupera os dados gravados.

5.6.5 Banco de palavras - Montar um mdulo com instrues para manter um banco de palavras.Deve haver instrues para incluir, alterar e excluir uma palavra do banco, alm de pesquisar se uma dada palavra est no banco. O banco armazenado em um arquivo em disco. Todas as instrues devem ser reutilizveis. Para testar, faa um programa simples com uma opo para cada operao que pode ser feita no banco.

5.6.6 Contador - Declarar instrues para manter contadores, cujos valores atuais so armazenadosem disco. Isto serve, por exemplo, para designar cdigos de clientes ou produtos no caso de numerao sequencial. Prever instrues para criar um contador (zerado) e recuperar o prximo nmero (que tambm atualiza o valor atual). Para identificar cada contador use o nome do arquivo.

5.6.7 Criptografia de arquivos - Elaborar um programa que criptografa um arquivo qualquer,incrementando o cdigo ASCII de cada byte em uma unidade.

5.6.8 Arquivo de senhas - Uma pessoa pode ter inmeras senhas: da conta corrente, poupana, daconta do outro banco, carto de crdito, provedor Internet, da rede local do trabalho e por a vai. Faa uma programa que permita gravar vrias senhas, com uma descrio de cada uma. Inclua a possibilidade de mostrar na tela a lista das senhas.

5.7.VARIADOS5.7.1 Maior qualquer - Implementar uma funo que recebe dois valores de qualquer tipo de dado(cadeia, nmero inteiro ou real, caractere) e retorna o maior. [Verifique se a linguagem permite parmetros sem tipo] semana correspondente (domingo, segunda, etc.). Escreva uma funo que retorna esse dia.

5.7.2 Dia da semana - Descubra como, a partir de uma data vlida, voc pode identificar o dia da 5.7.3 Crtica completa de data - Combinar as especificaes 5.2.15 e 5.5.4 para formar uma crticade data mais completa.

5.7.4 Custo de execuo de procedimento - Escrever um programa que serve para se medir o custo,em tempo, de execuo de um procedimento. Ele troca, alguns milhares de vezes, os valores de duas variveis, de duas formas: na primeira usado para trocar as variveis um procedimento, na segunda sem este. Computar o tempo gasto para cada forma e mostr-los na tela.

5.7.5 Sorteio de dados - Escreva uma instruo que recebe um nmero de 1 a 6, correspondente aosorteio de um dado, e desenha o dado na tela (em qualquer posio), mostrando o lado sorteado. Depois, faa um programa que sorteia 5 dados e os mostra na tela, alinhados.

5.7.6 PIS/PASEP - Escrever uma funo que recebe um nmero de PIS/PASEP e retorna o dgitoverificador (veja a regra na especificao 3.6.3 ).

CRIAO DE INSTRUES

5.7.7 CPF - Escrever funo para calcular os dgitos de controle do CPF (regra na especificao 4.8.8

37

). Para simplificar, j que so duas somatrias, escreva tambm uma funo auxiliar que recebe o CPF e o peso inicial e retorna a soma.

5.7.8 Palavra grande - Elabore uma instruo que desenha "grande" uma letra do alfabeto, em linhae coluna da tela. Outra instruo recebe um texto de at 10 caracteres e chama a primeira para mostrar o texto na tela em letras grandes.

5.7.9 Reproduo de melodia - Declarar uma instruo que recebe um vetor de paresfreqncia/durao, e reproduz os sons na seqncia do vetor. Valor zero para a freqncia representa uma pausa.

5.7.10 Melodias em arquivos - Elaborar um programa que toca msicas, com opes para: editaruma melodia (nova ou existente) e salv-la em disco, reproduzir ou eliminar uma melodia gravada. Cada melodia armazenada em um vetor com freqncia e durao de cada nota ou pausa (freqncia 0).

5.7.11 Implementar uma instruo que recebe uma cadeia e retorna-a embaralhada. Usar nmerosaleatrios.

5.7.12 Janela de confirmao - Implementar uma instruo que mostra uma janela de confirmaona tela com as opes "SIM", "NO" e "CANCELAR", aguarda a opo do usurio e retorna a opo selecionada. O usurio seleciona a opo com as setas ou a primeira letra e depois teclando Enter.

5.7.13 Relatrio de notas - Implementar um programa com opes para cadastrar (incluir ouacrescentar) um arquivo contendo nomes e notas de alunos e para imprimir um relatrio dos dados gravados. O relatrio deve ter um cabealho contendo data e hora de emisso, nome do relatrio, numerao de pginas e quebra (mudana) a cada 66 linhas. Ao final mostrada a quantidade e a mdia das notas.

39

6.IDIAS E MAIS IDIAS

Neste captulo voc ter vrias idias para trabalhos prticos. Constituem especificaes mais complexas que as do restante do texto, e que certamente o desafiaro. A maioria delas exigir algum detalhamento extra, isto , a especificao no completa e voc dever suprir detalhes. Particularmente procure aplicar conceitos de reutilizao e modularizao. Alerta: as especificaes da seo Desafios no so para iniciantes!

6.1.ENTRETENIMENTO6.1.1 Forca - Implementar um programa que jogue o jogo da forca. Na tela mostrado o alfabeto,destacando as letras j tentadas. Um banco de palavras pode ser implementado em vetor ou em arquivos, permitindo ao programa sortear uma palavra. Extenses: armazenar histrico do jogador: nome, jogadas ganhas e perdidas, etc.

6.1.2 Palavra embaralhada - Implementar um programa que, a partir de um banco de palavras,seleciona aleatoriamente uma palavra, embaralha as letras e d um tempo para o usurio adivinhar a palavra.

6.1.3 Jogo-da-velha - Elaborar um programa que jogue o jogo-da-velha, com opes de controlardois jogadores ou jogar o computador contra um jogador.

6.1.4 Combinaes de letras - Implementar um programa que l uma palavra de 4 letras e gera todasas combinaes possveis das quatro letras, sem repetio. O programa deve fornecer um menu para o usurio, permitindo: - entrar nova palavra - gerar combinaes - mostrar na tela (formatadas em colunas) - imprimir (tambm em colunas) - eliminao de palavras indesejadas (por exemplo, que no existam). Extenses: gravar em arquivo as palavras encontradas (um arquivo para cada palavrachave), e permitir ao usurio recuper-las. Permitir qualquer quantidade de letras na palavra. Descobrir como estruturado o