300 ideias de programação básica.pdf

43
300 Na minha vivência profissional, como programador, analista de sistemas e professor, tenho visto programadores de vários tipos. Alguns são mais criativos, outros menos, e também há os que parecem eternos iniciantes. Alguns têm sólida formação em algoritmos e técnicas de programação; outros não 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 salário. Os programadores realmente bons, que unem formação técnica, criatividade, curiosidade e prazer parecem ser relativamente poucos. Naqueles que conheci pude perceber padrões: eles têm acesso a um computador, em casa ou em outro lugar; têm uma grande disposição de buscar soluções por si mesmos e, acima de tudo, eles programam muito. Não dependem de alguém mandá-los programar, tendo ou não suas próprias idéias. Para resumir, eles simplesmente praticam muito, e este é o fator maior que, na minha opinião, os torna melhores que os outros. Por isto foi elaborado este material, cujo conteúdo consiste essencialmente de especificações de programas, não voltadas para nenhuma linguagem de programação em particular. Sua maior finalidade é fornecer idéias para que programadores ávidos possam programar, programar e programar, e assim se tornar cada vez melhores. Uma restrição é que a implementação de algumas das especificações será mais apropriada estando a tela em modo texto, o que não impede que muitas delas possam fornecer inspiração para programas em interface gráfica. A maioria das especificações propostas são voltadas para iniciantes em uma linguagem de programação, e estruturadas na forma que considero mais didática: no início apenas comandos de saída e instruções matemáticas simples, de forma a não sobrecarregar o estudante que, nesse momento, ainda está normalmente assimilando uma série de novas informações sobre processadores, instruções, seqüência, controle e o próprio compilador. Os capítulos seguintes gradativamente incorporam às especificações novos tópicos: variáveis, tipos de dado e entrada, decisão, repetição e outras. Os primeiros cinco capítulos estão organizados em tópicos, e estes focalizados em estruturas de programação. Os exercícios, embora variados, não são todos diferentes: alguns combinam dois ou mais exercícios de capítulos anteriores, resultando em um mais complexo e no qual o estudante pode aplicar a experiência adquirida. O último capítulo sugere idéias para programas, existentes ou não, que podem ser implementadas por programadores que já tenham amadurecido os recursos básicos de uma linguagem de programação, podendo também ser usadas para trabalhos práticos de iniciativa pessoal ou determinados pelo professor. Em alguns casos, é dado algum direcionamento inicial para a implementação; em outros, o desafio é todo do programador! Este é um material para ser usado como um complemento, não servindo por si só para suportar um curso. Dependendo da proposta didática do professor que o adote, será necessário adequar a seqüência em que as especificações serão propostas aos estudantes. Obviamente não há qualquer limite para a evolução deste trabalho; por isto, críticas, sugestões e eventuais correções serão sempre muito bem vindas. Virgílio Vasconcelos Vilela [email protected] Brasília, Fevereiro/1999.

Upload: luizrrosa

Post on 25-Nov-2015

106 views

Category:

Documents


37 download

TRANSCRIPT

  • 300 Na 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.

  • SUMRIO

    .1 BSICOS...................................................................................................................................................1.1.1. SADA SIMPLES................................................................................................................................................1.1.2. MATEMTICA..................................................................................................................................................4.1.3. CONTROLE DE TELA...................................................................................................................................... 6.1.4. SONS................................................................................................................................................................... 6

    .2 VARIVEIS E ENTRADA DE DADOS................................................................................................7.2.1. SADA SIMPLES................................................................................................................................................7.2.2. MATEMTICA..................................................................................................................................................7.2.3. CARACTERES E CADEIAS........................................................................................................................... 10.2.4. CONTROLE DE TELA.................................................................................................................................... 10.2.5. SONS................................................................................................................................................................. 11

    .3 ALTERNATIVAS E DECISO............................................................................................................12.3.1. SADA SIMPLES............................................................................................................................................. 12.3.2. MATEMTICA................................................................................................................................................12.3.3. CARACTERES E CADEIAS........................................................................................................................... 14.3.4. CONTROLE DE TELA.................................................................................................................................... 14.3.5. SONS................................................................................................................................................................. 14.3.6. VARIADOS.......................................................................................................................................................15

    .4 Repetio.................................................................................................................................................. 17.4.1. SADA SIMPLES............................................................................................................................................. 17.4.2. MATEMTICA................................................................................................................................................18.4.3. CARACTERES E CADEIAS........................................................................................................................... 20.4.4. CONTROLE DE TELA.................................................................................................................................... 21.4.5. SONS................................................................................................................................................................. 22.4.6. REGISTROS E VETORES...............................................................................................................................22.4.7. ARQUIVOS.......................................................................................................................................................24.4.8. VARIADOS.......................................................................................................................................................25

    CRIAO DE instrues..........................................................................................................................27.4.9. MATEMTICA................................................................................................................................................27.4.10. CARACTERES E CADEIAS......................................................................................................................... 28.4.11. CONTROLE DE TELA.................................................................................................................................. 30.4.12. SONS............................................................................................................................................................... 30.4.13. REGISTROS E VETORES.............................................................................................................................31.4.14. ARQUIVOS.....................................................................................................................................................31.4.15. VARIADOS.....................................................................................................................................................32

    .5 Idias e mais idias.................................................................................................................................. 34.5.1. ENTRETENIMENTO.......................................................................................................................................34.5.2. DOMSTICOS..................................................................................................................................................35.5.3. EDUCATIVOS..................................................................................................................................................36.5.4. VARIADOS.......................................................................................................................................................36.5.5. DESAFIOS........................................................................................................................................................ 37

  • 1.1BSICOS

    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 SIMPLES.1.1.1 Frase na tela - Implemente um programa que escreve na tela a frase "O primeiro programa a

    gente nunca esquece!".

    .1.1.2 Etiqueta - Elabore um programa que, aps limpar a tela, escreve seu nome completo na primeira 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 so aquelas 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 programa que imprima essa mensagem, e envie-a.

    .1.1.5 Ao mestre - Escreva um bilhete ao seu professor, informando seus objetivos nesta disciplina e o que 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:

    XXXXXX XX XX XXXXXX

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

  • 2 300 IDIAS PARA PROGRAMAR COMPUTADORES

    ALUNO(A) NOTA======== =====ALINE 9.0MRIO DEZSRGIO 4.5SHIRLEY 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)."

    .1.1.9 Letra grande - Elabore um programa para produzir na tela a letra X usando a prpria. Se fosse L, seria assim:

    LLLL L L L

    .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 disponveis em 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, vistos de lado e usados freqentemente em correios eletrnicos e bate-papos na Internet. Existem dezenas; veja alguns:

    :-) sorriso:-( tristeza:-p mostrando a lngua:-o 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.

    XXXX

    XXXXXXXXXXXX

    XXXXXXXXXXXXXXXXXXX

    XXXXXXXXXXXXXXXXXXXXXXXXXX

    XXXX

    XXXX.1.1.14 Pinheiro 2 -Elabore uma verso 2 do programa do item anterior que desenhe o pinheiro com

    asteriscos (*). [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 - Fim1 - Inclui2 - Altera3 - Exclui4 - Consulta

    Opo: _

    .1.2.MATEMTICA.1.2.1 Expresses aritmticas - Calcule as expresses abaixo, observando a precedncia dos

    operadores. 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 quociente da 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,90impulsos: R$ 0,04 por impulso que exceder a 90interurbanoschamadas p/ celular: R$0,20 por impulsoMonte 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 dispunha de 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 de madeira 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 5

    .1.2.6 Mdia de notas - Monte uma expresso matemtica que calcula a mdia de suas notas (todas) 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 graus Celsius/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:

    At 1.200,00 isentode 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 169172

    Cosseno(0)1.65 arredondado para inteiro

    .1.2.10 Comprimento de fio - Um eletricista precisa comprar fio que ir passar, pelo telhado, por toda a diagonal de uma casa de 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 cada dia, 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 e calcula a exponencial do valor resultante.

    .1.2.14 Devagar se vai ao longe - Vou e volto diariamente a p para o trabalho, que dista aproximadamente 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.

    ?

    11,5 m

    6,3 m

  • 6 300 IDIAS PARA PROGRAMAR COMPUTADORES

    .1.3.CONTROLE DE TELA.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 - Por nome 2 - Por cdigo 3 - Por data 4 - Fim Opo: _

    .1.3.3 Cruz - Elabore um programa que mostra uma linha vertical na coluna 40, formada pelo caractere "#", 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, aproximadamente centralizado, 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 pgina de 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 depois faz 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 4E 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.SONS.1.4.1 Afinao - Alberto toca violo e programador. Precisando afinar o violo e sem diapaso por

    perto, 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.

    .1.4.2 Parabns - Faa um programa que emite as seis primeiras notas do "Parabns pr voc". Tente as seguintes notas (freqncia em Hz/durao em milissegundos): [440,200], [440,200], [500,800], [440,400], [600,400], [560,800],

  • 7.2VARIVEIS 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 SIMPLES.2.1.1 Mensagem emoldurada - Implemente um programa que leia trs linhas de mensagens de at 15

    caracteres 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 e telefone, 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 o topo 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 XXXX XXXXXXXX XXXXXXXXXXXX XXXXXXX

    XXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXX XXXXXXXX XXX

    X X

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

    .2.1.5 Tringulo com iniciais - Escrever um programa que l um caractere, as iniciais de um nome (3 caracteres), 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.MATEMTICA.2.2.1 Mdia aritmtica - Escrever programa que l trs notas inteiras e calcula a sua mdia

    aritmtica.

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

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

  • 8 300 IDIAS PARA PROGRAMAR COMPUTADORES

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

    .2.2.5 Funes matemticas - Elabore um programa que l um nmero (suponha que ser positivo) e informa 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 cada bimestre, 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 qualquer disciplina 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 sejam lidas do teclado.

    .2.2.10 Converso de temperatura - Um canal de notcias internacionais, a cabo, previa temperatura mxima 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 ms cada 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 MARIDO ESPOSA TOTALDESPESAS PAGAS 1278,60 875,30 2.153,90% PAGO 59,36 40,64 100VALOR DEVIDO 1.076,95 1.076,95 2.153,90SALDO 201,65 -201,65

    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 9

    Digite valor das despesas do marido: 1278.60Digite valor das despesas da esposa: 875.30

    ITEM MARIDO ESPOSA TOTAL=============== ======= ======= =======Despesas pagas 1278.60 875.30 2153.90% pago 59.36 40.64 100Valor devido 1076.95 1076.95 2153.90Saldo 201.65 -201.65

    .2.2.13 Despesas de casal 2 - Altere o programa acima de forma que o marido arque com 60% das despesas 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 invs de 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 (Pense um 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 converso centmetro/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 variao tambm seja lida do teclado.

    .2.2.18 Otimizao de corte - Reescreva o programa 1.2.5 (corte de tbuas) para que leia o tamanho de 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: R$ 21,40impulsos: R$ 0,03 por impulso que exceder a 90interurbanos

  • 10 300 IDIAS PARA PROGRAMAR COMPUTADORESchamadas p/ celular: R$0,40 por impulsoElabore 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 CADEIAS.2.3.1 Concatenao - Escreva um programa que l duas cadeias de caracteres de tamanho 10 e

    mostra-as concatenadas na tela.

    .2.3.2 Subcadeias - Escreva um programa que l uma cadeia de caracteres de tamanho 20, separa-a em 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 na tela 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 e sobrenome.

    .2.3.6 Metades de cadeia - Implemente um programa que l uma cadeia de caracteres de tamanho at 255 e mostra na tela as metades da cadeia. [Dica: basear os clculos no tamanho da cadeia]

    .2.3.7 Cdigos ASCII inicial e final - Elabore um programa que l um nome de at 15 caracteres e mostra a inicial e seu cdigo ASCII, e a ltima letra e seu cdigo.

    .2.3.8 Soma de cdigos ASCII - Escreva um programa que l uma cadeia de tamanho 3 e mostra na tela a soma dos cdigos ASCII dos caracteres da cadeia.

    .2.3.9 Componentes de data - Escrever um programa que l uma data no formato dd/mm/aa e mostra dia, ms e ano separados.

    .2.3.10 Sorteio da LBV - A LBV fez um sorteio cujos bilhetes continham nmeros de 6 dgitos. O sorteio 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 TELA.2.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 posioE assim sucessivamente por 10 colunas.

    .2.4.2 Quadrado em posio - Escrever um programa que desenha um quadrado com o canto superior esquerdo 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 11

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

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

    .2.4.3 Tringulo com iniciais - Faa um programa que l valores de linha e coluna, alm das iniciais de 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 linha lida do teclado:

    Menu de Consultas

    0 - Fim 1 - Clientes 2 - Produtos 3 - Faturas 4 - Estoque

    Opo: _

    .2.5.SONS.2.5.1 Nota musical - Elaborar um programa que l uma freqncia (em Hertz) e uma durao (em

    milissegundos) 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.

  • 12

    .3ALTERNATIVAS E DECISO

    O 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 SIMPLES.3.1.1 Menu principal - Faa um programa de menu que mostra na tela, sob o ttulo de "Menu

    Principal", 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 esteja cursando 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, incluindo uma outra questo de outro tema. No incio do programa, oferea ao usurio a escolha de qual questo quer responder.

    .3.2.MATEMTICA.3.2.1 Maior de 2 - Elaborar programa que l dois nmeros quaisquer e mostra na tela uma mensagem

    indicando qual o maior, ou se so iguais.

    .3.2.2 Maior de 3 - Faa um programa que l trs nmeros diferentes e mostra na tela uma mensagem indicando qual o maior.

    .3.2.3 Diviso - Escrever um programa que l dois nmeros e efetua uma diviso, mas somente se o divisor 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, seja emitida uma mensagem de erro.

    .3.2.6 Aprovao 3 - Altere o programa acima para que leia tambm a quantidade de aulas ministradas 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 equao de 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.

  • ALTERNATIVAS E DECISO 13

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

    assinatura: R$ 17,90valor de impulsos: R$ 0,04 por impulso que exceder a 90valor de interurbanosvalor de chamadas p/ celular: R$0,09 por impulsoElabore 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 fora da 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 tenha atingido:

    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 primeiro bimestre 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:

    At 1.200,00 isentode 1.201,00 a 2.500,00 10%de 2.501,00 a 5.000,00 15%

  • 14 300 IDIAS PARA PROGRAMAR COMPUTADORESacima de 5.000,00 20%.Implemente um programa que leia o valor base e calcule o imposto a pagar.

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

    .3.3.CARACTERES E CADEIAS.3.3.1 Tipo de pessoa - Elaborar programa que l do teclado uma letra que pode ser F ou J e mostra

    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 tela uma 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 a senha 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' e verifica 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. Se o 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 esto no formato esperado (por exemplo, 21.375). Caso algum esteja incorreto, o programa mostra uma mensagem de erro.

    .3.4.CONTROLE DE TELA.3.4.1 Quadrado posicionado - Elabore um programa que mostre um "quadrado" de lado 5 na tela, a

    partir 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.SONS.3.5.1 Nota musical - Elaborar um programa que l uma freqncia em Hertz e uma durao em

    milissegundos e emite um som na freqncia com a durao. Limite a freqncia at 10.000 Hz e a durao a 2 segundos.

  • ALTERNATIVAS E DECISO 15

    .3.6.VARIADOS.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 semana correspondente, 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 fichas brancas e pretas. Dependendo da combinao de cores das fichas retiradas, o jogador ser pago na seguinte proporo:

    Primeira Ficha Segunda Ficha RateioBranca Branca 0Branca Preta 1/2Preta Branca 1Preta Preta 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 o jogador 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.

  • 16 300 IDIAS PARA PROGRAMAR COMPUTADORES

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

    .3.6.10 Categoria de altura - Elaborar programa que l uma altura e mostra uma mensagem conforme a faixa de altura:

    menos que 1,60 baixinhode 1,60 a 1,85 altura normalmais que 1,85 faz frio a em cima?

    .3.6.11 Conceito - Uma universidade atribui conceitos aos alunos com base na nota obtida em cada disciplina, segundo a tabela abaixo. Escreva um programa que l a nota e informa o conceito obtido.

    NOTA CONCEITO-------- ---------------90..100 A75..89 B50..74 C40..49 D0..39 E

    .3.6.12 Multiplicao rpida - Um algoritmo para multiplicao rpida por 11 de nmeros de 2 dgitos 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 (vai-um): 56 x 11 = 616. Faa um programa que efetue multiplicaes por 11 usando este algoritmo.

  • 17

    .4REPETIO

    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 SIMPLES.4.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 de repetio.

    .4.1.3 Caracteres progressivos 1 - Escrever um programa que produza a sada abaixo na tela, para N linhas 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 um menu 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 programa

  • 18 300 IDIAS PARA PROGRAMAR COMPUTADORESde 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.MATEMTICA.4.2.1 Aprovao - Elaborar programa que l uma disciplina e respectiva nota (de 0 a 10, com uma

    casa 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 raiz quadrada de um nmero qualquer.

    .4.2.3 Raiz quadrada 2 - Altere o programa acima para que ele verifique se o usurio entrou um valor positivo 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, quando ento 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 os nmeros inteiros de 1 at o nmero lido.

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

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

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

    .4.2.12 mpares mltiplos 2 - Altere o programa acima de forma que a faixa seja informada pelo usurio, 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 graus Celsius/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 teclado a 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 3 tentativas 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 19

    .4.2.17 Tabuada - Elabore um programa que l um nmero de 1 a 9 e mostra a tabuada de multiplicao do nmero. Por exemplo, para o 5:

    5 x 1 = 55 x 2 = 10...5 x 10 = 50Aps 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.

    .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 dois nmeros lidos do teclado, organizados em 10 linhas e 10 colunas:

    21 22 23 24 25 26 27 28 29 30 31 32 33 34...

    .4.2.20 Conta telefnica - Uma conta telefnica composta dos seguintes custos:

    assinatura: R$ 17,90impulsos: R$ 0,04 por impulso que exceder a 90interurbanoschamadas p/ celular: R$0,09 por impulsoElabore 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 3 candidatos, e os votos dos eleitores foram codificados da seguinte forma:

    1, 2 ou 3: votos para os respectivos candidatos0: voto em branco4: voto nuloEscrever 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:

    SN N N

    N N

    1 21

    32

    12 1

    ...

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

    .4.2.24 Srie 2 - Sendo HN

    112

    13

    1 ... , elaborar um programa para calcular o valor de H, para

    N lido.

  • 20 300 IDIAS PARA PROGRAMAR COMPUTADORES

    .4.2.25 Srie convergente - A srie S 12

    14

    18

    converge para 1. Demonstre isso atravs de

    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 ser entregues 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 CADEIAS.4.3.1 Sorteio da LBV - Melhore o programa 3.3.7 de forma que, quando houver um erro na digitao,

    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 e mostra 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 de nmeros 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 uma cadeia 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 do teclado. 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 cadeia lida 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 uma cadeia 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 o seguinte critrio: uma inicial o primeiro caractere ou o caractere que segue um espao.

  • REPETIO 21

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

    .4.3.11 Eliminao de caractere - Fazer um programa que l uma cadeia e um caractere e elimina todas 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 e informa 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 e informa:

    - 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 de cada 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 TELA.4.4.1 Animao horizontal 1 - Implementar um programa que simula um caractere se movendo pela

    tela 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.

    .4.4.2 Animao horizontal 2 - Alterar o programa anterior para que o movimento seja na vertical, isto , a coluna fica fixa e a linha varia.

    .4.4.3 Nave espacial 1 - Bolar um desenho de uma "nave espacial" em modo texto. Fazer um programa 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 e para baixo.

    .4.4.5 Desenho - Faa um programa de desenho, cuja tela tem um cursor que se movimenta com as setas, 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 avance ou 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].

  • 22 300 IDIAS PARA PROGRAMAR COMPUTADORES

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

    .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, de lado 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.SONS.4.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 em 100 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.

    .4.5.4 Som decrescente - Reescrever o programa acima para que a emisso de sons seja com freqncia decrescente.

    .4.5.5 Queda - Implementar um programa que emite sons de 700 a 600 Hertz, variando a frequncia de 1 em 1, tendo cada som a durao de 10 milissegundos.

    .4.6.REGISTROS E VETORES.4.6.1 Mdia - Escrever um programa que leia at 20 nmeros inteiros para um vetor e calcule a mdia

    dos valores.

    .4.6.2 Maior e menor - Escrever um programa que preencha um vetor de 100 elementos com valores inteiros 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 uma quantidade 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 nmeros inteiros 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 um vetor, 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 graus Celsius/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.

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

  • REPETIO 23

    .4.6.8 Nome do dia - Construa um programa que l um nmero de 1 a 7 e informa o dia da semana correspondente, 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 8 caracteres) 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 uma venda, 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 ariemirPSegunda 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: o primeiro 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.6982 - 65.7883 - 01.2144 - 37.8405 - 77.430Os 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]

  • 24 300 IDIAS PARA PROGRAMAR COMPUTADORES

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

    .4.6.16 Codificao de preo - Certas lojas usam (ou pelo menos usavam) um sistema de codificao de 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 por extenso.

    .4.7.ARQUIVOS.4.7.1 Cpia backup - Escrever um programa que l um nome de arquivo texto existente e copia-o

    para 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 de um arquivo texto.

    .4.7.3 TYPE 1 - Elaborar um programa que l um arquivo texto qualquer e o mostra na tela. Inclua opes 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 um arquivo texto.

    .4.7.6 Comparao de arquivos - Faa um programa que compare dois arquivos texto e informe se so 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 notas bimestrais 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 um programa 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 a quantidade 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 linhasQuantidade de letrasQuantidade de palavrasQuantidade de cada letra.

    .4.7.11 Impresso - Faa um programa que imprime um arquivo texto. Antes de imprimir, pergunta ao usurio a quantidade de linhas por pgina, se deseja ou no numerao das pginas e ainda permite a

  • REPETIO 25digitao de um cabealho que, se fornecido, ser impresso na mesma linha da numerao de pginas.

    .4.8.VARIADOS.4.8.1 Parabns - Para o programa do Parabns (pg. 12), armazenar as notas e duraes em um vetor

    e reproduzir a melodia a partir do vetor.

    .4.8.2 Melodia - Elaborar um programa que l uma seqncia de vrias notas definidas por pares freqncia (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 jogador jogar 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 ASCII aleatrios, 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.6982 - 65.7883 - 01.2144 - 37.8405 - 77.430As 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 um programa 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 atravs de um complicado algoritmo:

    Etapa 1: clculo de DV1Soma 1: soma dos produtos de cada dgito por um peso de 2 a 10, na ordem inversa (do nono para o primeiro).

  • 26 300 IDIAS PARA PROGRAMAR COMPUTADORESMultiplique 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 DV2Soma 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 = 2582580 mod 11 = 6, portanto, DV1 = 6Etapa 2: 3x6 + 4x4 + 5x1 + 6x6 + 7x3 + 8x1 + 9x8 + 10x9 + 11x3 = 299(299 + 6x2)x10 mod 11 = 3150 mod 11 = 8, portanto DV2 = 8Etapa 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 (4.6.12) para que ,quando a senha for 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) de forma 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":

    mensagem secreta

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

  • 27

    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.

    .4.9.MATEMTICA.4.9.1 Nmero par - Fazer um procedimento que retorna Verdadeiro ou Falso conforme um nmero

    seja par ou no. Se necessrio, convencione 0 e 1, "S" e "N" ou outra representao de Falso e Verdadeiro.

    .4.9.2 Numerao de 1 a 100 - Elaborar um procedimento que mostra os nmeros de 1 a 100.

    .4.9.3 Numeraode N1 a N2 - Declarar um procedimento semelhante ao acima, mas que recebe como parmetros os valores inicial e final.

    .4.9.4 Nmeros pares - Escrever um procedimento que recebe dois nmeros e mostra na tela os nmeros 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.

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

    .4.9.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.

    .4.9.7 Maior e menor com menu - Faa duas funes: uma que recebe dois nmeros e retorna o maior 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.

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

    .4.9.9 Maior de 3 - Escrever uma funo que recebe 3 nmeros e retorna o maior

  • 28 300 IDIAS PARA PROGRAMAR COMPUTADORES

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

    .4.9.11 Mdia de 3 - Declarar uma funo que calcula a mdia aritmtica de 3 nmeros

    .4.9.12 Exponenciao inteira - Escrever uma funo que calcula um inteiro elevado a outro inteiro, usando multiplicao.

    .4.9.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.

    .4.9.14 Juros compostos - Sendo C o capital, n o prazo e i a taxa de juros, o valor futuro FV de uma aplicao financeira calculado por:

    FV C i n 1Elabore 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.

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

    S 113

    15

    17

    192 2 2 2

    .4.9.16 Bissexto - Um ano bissexto se for divisvel por 4 exceto os sculos, que so bissextos se forem 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.

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

    .4.9.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]

    .4.9.19 Arco-tangente - O valor do arco-tangente pode ser calculado atravs da frmula abaixo, vlida quando x 2 1 :

    xx x x x

    3 5 7 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.

    .4.10.CARACTERES E CADEIAS.4.10.1 Menor cadeia - Escrever uma funo que recebe duas cadeias de caracteres e retorna a menor

    em ordem alfabtica.

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

  • CRIAO DE INSTRUES 29

    .4.10.3 Cabealho - Criar procedimento que recebe e imprime uma linha de cabealho com nmero de pgina, no formato. A data obtida do sistema e o nmero de pgina um parmetro:

    RELATRIO DE CLIENTES EMISSO: DD/MM/AAAA PG. 999_____________________________________________________________________

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

    .4.10.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 4.9.16 para verificar se o ano bissexto.

    .4.10.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.

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

    .4.10.8 Palndromos - Implementar um programa que verifica se uma frase palndroma (a mesma se lida 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.

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

    .4.10.10 Maisculas - Implementar uma funo que converte uma cadeia de caracteres para maisculas.

    .4.10.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].

    .4.10.12 Insero de caractere - Elaborar uma funo que insere um caractere recebido entre cada letra de uma cadeia.

    .4.10.13 Trim - Implementar uma funo que retira os brancos finais de uma cadeia de caracteres (em certas linguagens disponvel com o nome de "Trim")

    .4.10.14 Ajuste de tamanho - Implementar uma funo que insere brancos no fim de uma cadeia at atingir um tamanho especificado.

    .4.10.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 correta1: dia invlido2: ms invlido3: dia e ms invlidos4: formato invlido

    .4.10.16 Formatao de linha - Um programador est escrevendo um editor de textos, e precisa de uma 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:

  • 30 300 IDIAS PARA PROGRAMAR COMPUTADORESprimeiro 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]

    .4.11.CONTROLE DE TELA.4.11.1 Linha vertical 1 - Desenvolva um procedimento que recebe um nmero de coluna de tela e

    preenche a coluna com caracteres O.

    .4.11.2 Linha vertical 2 - Alterar o procedimento acima para que receba tambm o caractere.

    .4.11.3 Texto posicionado 1 - Escreva um procedimento que recebe duas coordenadas da tela (linha e coluna) e um texto, e mostra o texto na posio indicada.

    .4.11.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.

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

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

    .4.11.7 Entrada de cadeias - Elabore uma instruo que efetua leituras de cadeias de caracteres. Ela recebe 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.

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

    .4.12.SONS.4.12.1 Som crescente - Elaborar um programa que emite sons de freqncia crescente, de uma

    freqncia 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.

    .4.12.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 212 . Sabendo que a freqncia 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.]

  • CRIAO DE INSTRUES 31

    .4.13.REGISTROS E VETORES.4.13.1 Nome do ms - Escrever uma funo que recebe nmero do ms e retorna seu nome por

    extenso.

    .4.13.2 Nome do dia - Idem acima, para o dia da semana.

    .4.13.3 Maior e menor - Escrever um programa com quatro opes (implementadas atravs de instrues 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.

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

    .4.13.5 Estatstica de notas - Escrever um programa para fazer estatsticas de notas de um aluno. O programa 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)

    .4.13.6 Estatstica de notas 2 - Alterar o programa acima para impedir qualquer clculo se os vetores estiverem vazios.

    .4.13.7 Estatstica de notas 3 - No mesmo programa acima, incluir opes para

    a) Mostrar o contedo atual dos vetores de notas e disciplinasb) Dada uma disciplina, pesquisar a nota correspondentec) Dada uma nota, pesquisar se ela existe no vetor de notas e mostrar a respectiva disciplina

    .4.13.8 Quadrado mgico - Um quadrado mgico aquele dividido em linhas e colunas, com um nmero 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 3 41 5 96 7 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]

    .4.14.ARQUIVOS.4.14.1 Salvamento de parmetros - Implementar um mdulo de gravao de parmetros com duas

    possibilidades: 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.

    .4.14.2 Validao de senha - Implementar um programa com opes de cadastrar ou autenticar usurio, alm de uma opo para terminar. Na opo de cadastro, o programa l um nome e uma

  • 32 300 IDIAS PARA PROGRAMAR COMPUTADORESsenha (ambos entre 4 e 8 caracteres), sendo esta lida duas vezes, e grava os dados em um arquivo. 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.

    .4.14.3 Validao de senha criptografada - Altere o programa acima de forma que a senha seja gravada criptografada, por exemplo, somando-se 10 ao cdigo ASCII de cada caractere

    .4.14.4 Configurao de impresso - Elaborar uma instruo que grava em disco um registro com informaes 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.

    .4.14.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 deve