48
300 IDÉIASPARAPROGRAMARCOMPUTADORES 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émhá os que parecem eternos iniciantes. Alguns têmsó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çãoté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ãosã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ãohá 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.

300 Ideias Para Programar

Embed Size (px)

Citation preview

  • 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 eternosiniciantes. Alguns tm slida formao em algoritmos e tcnicas de programao; outros no a tem mas se viramquando precisam. H programadores que praticamente se "viciam" em comandar computadores, e extraem grandeprazer 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 parecemser relativamente poucos. Naqueles que conheci pude perceber padres: eles tm acesso a um computador, em casaou em outro lugar; tm uma grande disposio de buscar solues por si mesmos e, acima de tudo, eles programammuito. No dependem de algum mand-los programar, tendo ou no suas prprias idias. Para resumir, elessimplesmente 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 deprogramas, no voltadas para nenhuma linguagem de programao em particular. Sua maior finalidade forneceridias para que programadores vidos possam programar, programar e programar, e assim se tornar cada vezmelhores. Uma restrio que a implementao de algumas das especificaes ser mais apropriada estando a telaem modo texto, o que no impede que muitas delas possam fornecer inspirao para programas em interfacegrfica.

    A maioria das especificaes propostas so voltadas para iniciantes em uma linguagem de programao, eestruturadas na forma que considero mais didtica: no incio apenas comandos de sada e instrues matemticassimples, de forma a no sobrecarregar o estudante que, nesse momento, ainda est normalmente assimilando umasrie de novas informaes sobre processadores, instrues, seqncia, controle e o prprio compilador. Oscaptulos 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 deprogramao. Os exerccios, embora variados, no so todos diferentes: alguns combinam dois ou mais exercciosde captulos anteriores, resultando em um mais complexo e no qual o estudante pode aplicar a experinciaadquirida.

    O ltimo captulo sugere idias para programas, existentes ou no, que podem ser implementadas porprogramadores que j tenham amadurecido os recursos bsicos de uma linguagem de programao, podendotambm 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 asespecificaes sero propostas aos estudantes.

    Obviamente no h qualquer limite para a evoluo deste trabalho; por isto, crticas, sugestes e eventuaiscorrees sero sempre muito bem vindas.

    Virglio Vasconcelos [email protected]

    Braslia, Fevereiro/1999.

  • SUMRIO1. BSICOS ________________________________________________________________________ 1

    1.1. SADA SIMPLES_______________________________________________________________________ 11.2. MATEMTICA ________________________________________________________________________ 41.3. CONTROLE DE TELA __________________________________________________________________ 61.4. SONS ________________________________________________________________________________ 6

    2. VARIVEIS E ENTRADA DE DADOS _______________________________________________ 92.1. SADA SIMPLES_______________________________________________________________________ 92.2. MATEMTICA ________________________________________________________________________ 92.3. CARACTERES E CADEIAS _____________________________________________________________ 122.4. CONTROLE DE TELA _________________________________________________________________ 122.5. SONS _______________________________________________________________________________ 13

    3. ALTERNATIVAS E DECISO _____________________________________________________ 153.1. SADA SIMPLES______________________________________________________________________ 153.2. MATEMTICA _______________________________________________________________________ 153.3. CARACTERES E CADEIAS _____________________________________________________________ 173.4. CONTROLE DE TELA _________________________________________________________________ 173.5. SONS _______________________________________________________________________________ 173.6. VARIADOS __________________________________________________________________________ 18

    4. REPETIO ____________________________________________________________________ 214.1. SADA SIMPLES______________________________________________________________________ 214.2. MATEMTICA _______________________________________________________________________ 224.3. CARACTERES E CADEIAS _____________________________________________________________ 244.4. CONTROLE DE TELA _________________________________________________________________ 254.5. SONS _______________________________________________________________________________ 264.6. REGISTROS E VETORES ______________________________________________________________ 264.7. ARQUIVOS __________________________________________________________________________ 284.8. VARIADOS __________________________________________________________________________ 29

    5. CRIAO DE INSTRUES ______________________________________________________ 315.1. MATEMTICA _______________________________________________________________________ 315.2. CARACTERES E CADEIAS _____________________________________________________________ 325.3. CONTROLE DE TELA _________________________________________________________________ 345.4. SONS _______________________________________________________________________________ 345.5. REGISTROS E VETORES ______________________________________________________________ 355.6. ARQUIVOS __________________________________________________________________________ 355.7. VARIADOS __________________________________________________________________________ 36

    6. IDIAS E MAIS IDIAS __________________________________________________________ 396.1. ENTRETENIMENTO __________________________________________________________________ 396.2. DOMSTICOS________________________________________________________________________ 406.3. EDUCATIVOS________________________________________________________________________ 416.4. VARIADOS __________________________________________________________________________ 416.5. DESAFIOS ___________________________________________________________________________ 42

  • 11.BSICOS

    Quando comeamos, h muita informao nova a ser assimilada. Por isso, convm iniciar pelomais simples. Para implementar os programas especificados neste captulo, basta conhecer a estruturade um programa e algumas poucas instrues (veja o apndice A). No so necessrias aindainstrues 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 a

    gente 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.4Mensagem - 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:XXXXXX XX XX XXXXXX

  • 2 300 IDIAS PARA PROGRAMAR COMPUTADORES1.1.7 Tabela de notas - Escreva um programa que produza a seguinte sada na tela:

    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 permitisseapresentar um texto dividido em partes, cada parte em uma tela, e o programa deveria mudar para aprxima tela ao toque de uma tecla. A tela inicial deve ser a palavra "FOTOSSNTESE" escritacom letras grandes. Faa o programa para o estudante, usando o texto abaixo, no qual cadapargrafo deve aparecer em uma tela diferente. Como o estudante no entende muito de operaode computadores, voc tem que tambm gerar um arquivo executvel, copi-lo para o outrocomputador e incluir um cone para fcil execuo sob Windows.

    Texto:"A gua e os sais minerais absorvidos pelas razes sobem atravs dos vasos lenhosos docaule 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 doar.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 fosseL, 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 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. Existemdezenas; veja alguns:

    :-) sorriso:-( tristeza:-p mostrando a lngua:-o espanto{:-) cabelo partido ao meio:-{ usa bigode:-* beijoElabore 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.

    XXXXXXXXX

    XXXXXXXXXXXXXXXXXXXXXXXXXX

    XXXXXXXXXXXXXXXXXXXXXXXXXX

    XXXX

    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 substituiorapidamente]

  • 4 300 IDIAS PARA PROGRAMAR COMPUTADORES1.1.15Menu - Elabore um programa que mostre o seguinte menu na tela:

    Cadastro de Clientes

    0 - Fim1 - Inclui2 - Altera3 - Exclui4 - Consulta

    Opo: _

    1.2.MATEMTICA1.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 seusclculos.

    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, sevoc 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 valortotal.

    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 paraas 6 disciplinas, e descansar livremente o tempo restante. Faa um programa que calcule o tempoque 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 operadoresdiv e mod, faa um programa que calcule a quantidade de pedaos e a sobra para cada tipo detbua, permitindo assim uma melhor escolha do marceneiro.

  • BSICOS 51.2.6Mdia 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 algumcaractere).

    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: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 acorreo dos seus clculos:

    Raiz quadrada de 169172

    Cosseno(0)1.65 arredondado para inteiro

    1.2.10 Comprimento de fio - Um eletricista precisa comprar fioque ir passar, pelo telhado, por toda a diagonal de uma casa deformato retangular. Como ele no tem condies de medir adiagonal com preciso (ou talvez no queira...), a soluoalternativa que ele encontrou foi medir os lados da casa, sabendoque a diagonal pode ser calculada com base nos lados peloTeorema de Pitgoras (a2 = b2 + c2). Considerando que a casa mede 11,5 x 6,3 metros, faa umprograma que calcule a quantidade mnima necessria de fio a ser comprada, com preciso atcentmetros.

    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 telaquanto 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. Anota calculada por meio da mdia ponderada (N1 + N2*2 + N3*3 + N4*4)/10, onde N1 a notada 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 formatadacom 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 porano, "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 emostre o resultado na tela.

    ?

    11,5 m

    6,3 m

  • 6 300 IDIAS PARA PROGRAMAR COMPUTADORES1.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.2Menu posicionado - Elabore um programa que mostre o seguinte menu centralizado na tela, eespera uma tecla ser pressionada para terminar (o trao aps "Opo:" o cursor). Use comandosde posicionamento do cursor para facilitar.

    Menu Relatrios1 - Por nome2 - Por cdigo3 - Por data4 - Fim

    Opo: _

    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 determinar, 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 asiniciais do seu nome. Faa o programa limpar a tela no incio e esperar uma tecla antes determinar.

    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 textocom 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 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.SONS1.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 pararat que ele conseguisse afinar a respectiva corda do violo; as demais cordas ele poderia afinarcom 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 71.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],

  • 92.VARIVEIS E ENTRADA DE DADOS

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

    2.1.SADA SIMPLES2.1.1Mensagem 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 etelefone 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 dosegundo fica 15 colunas direita do primeiro.X XXXX XXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXX XXXXXXXX XXXX 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 como caractere, tendo dentro as iniciais lidas. O caractere no pice do tringulo deve estar na linha ecoluna lidas, e a altura do tringulo deve ser no mximo 5 linhas.

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

    aritmtica.2.2.2Mdia 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.3Mdia 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 edivida o resultado pela soma dos pesos).

  • 10 300 IDIAS PARA PROGRAMAR COMPUTADORES2.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 cadabimestre, sendo a primeira nota peso 2 e a segunda peso 3. Elabore um programa que l as notasbimestrais 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 [frmulapara 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 oprograma 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 estatemperatura (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 aquantidade 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 desejaum programa que facilite o acerto: eles digitariam os gastos de cada um, e o programa mostrariaquem 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 ooutro. Faa um programa que leia os valores adequados e efetue os clculos. O total a soma dasdespesas 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 saldocorresponde 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 11Digite 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% 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 oprograma de forma que este leia tambm a renda de cada um e use a proporo das rendas para adiviso.

    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 por2, quanto deu? (informe o resultado), voc pensou o nmero tal). [Dica: problemas desse tipo doorigem a uma expresso aritmtica, e voc pode alterar as operaes vontade, desde que aexpresso resultante admita uma inversa. Normalmente estruturamos o problema de forma que aexpresso permita uma simplificao que facilite os clculos. Para a seqncia proposta, aexpresso (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 polegadaequivale 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 paracada 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 resultantepela soma dos pesos). Exemplo: Um aluno tirou 5 e 6 de exerccios e 8,5 na prova. Sua nota deexerccios (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

  • 12 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 umproduto para ser avaliado por um cliente, juntamente com o de concorrentes, para uma eventualcompra.

    2.3.CARACTERES E CADEIAS2.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-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 e

    sobrenome.

    2.3.6Metades 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]

    2.3.7 Cdigos ASCII inicial e final - Elabore um programa que l um nome de at 15 caracteres emostra 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 natela 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 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 sorteadoformado pelos trs ltimos dgitos do primeiro e do segundo prmio. Por exemplo, se o primeiroprmio fosse 34.582 e o segundo 54.098, o nmero da LBV seria 582.098. Escreva um programaque 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 mesmalinha):

    - 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 superioresquerdo em uma linha e coluna lidas. O caractere usado para formar o quadrado o '#'. Vejaabaixo uma sugesto para a tela do programa.

  • VARIVEIS E ENTRADA 13Este 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 iniciaisde um nome (at 3 caracteres) e desenha um tringulo ("bole" o desenho) com um vrtice na linhae coluna lidas e com as iniciais dentro.

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

    Menu de Consultas

    0 - Fim1 - Clientes2 - Produtos3 - Faturas4 - Estoque

    Opo: _

    2.5.SONS2.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.2Msica 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 essaconstante (por exemplo, 100) e faz soar as notas somando a constante a cada freqncia.

  • 153.ALTERNATIVAS E DECISO

    O recurso principal incorporado nas especificaes deste captulo a possibilidade deexecutar condicionalmente um conjunto de instrues. Uma ou mais condies, na forma deexpresses lgicas, so avaliadas, para determinar o que ser executado. Algumas especificaesso semelhantes s de captulos anteriores, acrescidas de alternativas ou validaes.

    3.1.SADA SIMPLES3.1.1Menu 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 desejadapelo usurio e mostra uma mensagem confirmando a opo escolhida ou uma mensagem de erro,se a opo for invlida.

    3.1.2Mltipla 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 ouincorreta. Escrever um programa que mostra a questo na tela, pede a resposta correta e informa aousurio se este acertou ou errou.

    3.1.3Mltipla 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 qualquesto quer responder.

    3.2.MATEMTICA3.2.1Maior 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.2Maior 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, casocontrrio, 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 estreprovado, 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 aequao 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 COMPUTADORESassinatura: 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 preverarredondamentos, 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 dehoras extras [(1.000/176)*30*1,5], R$ 125,57 de INSS e um salrio lquido de R$ 1.130,11. Paraum salrio de R$ 2.000,00 e 20 horas extras, seriam R$ 340,91 de horas extras, R$ 150,00 deINSS (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.12Meno - 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,5mais 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%acima de 5.000,00 20%.Implemente um programa que leia o valor base e calcule o imposto a pagar.

  • ALTERNATIVAS E DECISO 173.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 emostra a mensagem pessoa fsica, pessoa jurdica ou "tipo de pessoa invlido", conforme ocaso.

    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 dosnmeros 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 "Acessoautorizado" 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 e12, 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 ASCIIcorrespondente; se 2, lido um caractere e mostrado o respectivo cdigo ASCII. Criticar asentradas 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 umamensagem de erro.

    3.4.CONTROLE DE TELA3.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 faixavlida, 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 oquadrado e o tringulo como achar melhor. Faa o programa mostrar uma mensagem de erro se ousurio 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 em

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

  • 18 300 IDIAS PARA PROGRAMAR COMPUTADORES3.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 semanacorrespondente, sendo domingo o dia de nmero 1. Se o nmero no corresponder a um dia dasemana, mostrada uma mensagem de erro.

    3.6.3 PIS/PASEP - O dgito verificador do PIS/PASEP calculado atravs da seguinte regra: onmero composto por dez dgitos mais um dgito verificador. Multiplique os nmeros, daesquerda para a direita, respectivamente por 3 2 9 8 7 6 5 4 3 2. Some os resultados dasmultiplicaes; calcule o resto da diviso da soma por 11 e subtraia o resultado de 11. Se oresultado 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 bolouprev que programa l dois nmeros inteiros (o que atende suas necessidades) e em seguida umsmbolo de operao. Se este for '+', o programa soma os nmeros, se '-', subtrai, se '*' multiplica ese '/' 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 aespecificao 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 naseguinte 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 recebemetade do que apostou, com um preta e uma branca recebe seu dinheiro de volta e com duas pretasrecebe 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 pelojogador 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 oadivinhe, lendo do teclado o palpite. Caso o usurio acerte ou no, mostrada uma mensagemapropriada.

  • ALTERNATIVAS E DECISO 193.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 conformea 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 cadadisciplina, segundo a tabela abaixo. Escreva um programa que l a nota e informa o conceitoobtido.

    NOTA CONCEITO-------- ---------------

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

    3.6.12Multiplicao 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 oresultado 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.

  • 214.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 quepossa 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.2Mais 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 programarepete 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 umtipo de figura. Caso a opo indicada pelo usurio seja invlida, mostrada uma mensagemapropriada. Em todos os casos exceto 0 o menu oferecido novamente. Tente estruturar o

  • 22 300 IDIAS PARA PROGRAMAR COMPUTADORESprograma de forma que a leitura da quantidade de linhas seja feita em apenas um ponto doprograma, 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 uma

    casa decimal), e informa se o aluno passou na disciplina, repetindo o ciclo at que a nota lida sejazero. 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 deidade. Escrever um programa que l as idades at que o idade lida seja zero, quando ento mostradaa 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 tambma quantidade com valor abaixo de 5 .

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

    4.2.7Maior 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 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 encheruma 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 ainicial, 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 estabaixo ou acima.

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

  • REPETIO 234.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 programatermina. 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 mensagemde erro. E se a opo for invlida (nem 1 nem 2), mostrada uma mensagem apropriada. Quando aopo no a de terminar, o programa volta para mostrar novamente as opes e ler a opo dousurio.

    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 22 23 24 25 26 27 28 29 3031 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 programapergunta 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 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 quecompareceram s urnas.

    4.2.23 Srie 1 - Escrever programa para calcular, para N lido, o valor de S, dado por:S N N N

    N N= + - + - + +- + +1 2

    13

    21

    2 1...

    Aps efetuar um clculo, o programa pede novo nmero, parando quando N for zero.4.2.24 Srie 2 - Sendo H N1

    12

    13

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

  • 24 300 IDIAS PARA PROGRAMAR COMPUTADORES4.2.25 Srie convergente - A srie S = + + +1

    214

    18

    L converge para 1. Demonstre isso atravs deum 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 mensagemapropriada. [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 na

    digitao, ele permita ao usurio entrar novamente, s continuando quando os dois nmerosestiverem 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 sejanula.

    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 ASCIIde cada nmero. Se um dos nmeros estiver fora de faixa, mostrada uma mensagem de erro e oprograma 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 programatermina.

    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 (nestecaso 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 decada caractere somado 1; os nmeros resultantes so convertidos novamente em caracteres econcatenados, sendo a cadeia resultante mostrada na tela. A segunda opo decodifica uma cadeiacodificada pela primeira programa. Exemplo: a cadeia "fogo", codificada, se torna "gphp" (esseprocesso 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 essespassos 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 254.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 sejanula, isto , sem nenhum caractere.

    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 terminaquando 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 diferenciarminsculas/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 senhaest incorreta. A senha correta registrada dentro do programa como uma constante. O programapermite at 3 tentativas.

    4.4.CONTROLE DE TELA4.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. Oprograma 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 umprograma que inicia com a "nave" no centro da tela e move-a para a esquerda ou direita se tecladasas 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 movimentofor na horizontal e uma barra, se na vertical. Se quiser sofisticar mais ainda, use os caracteres dedesenho 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 avanaralm 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 aser mostrada. O segundo mostra o texto da pgina].

  • 26 300 IDIAS PARA PROGRAMAR COMPUTADORES4.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 umde 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 amolaralgum!

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

    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 doque 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 comfreqncia decrescente.

    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.1Mdia - Escrever um programa que leia at 20 nmeros inteiros para um vetor e calcule a mdia

    dos valores.

    4.6.2Maior 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.3Mdia 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 umnmero negativo. calculada ento a mdia, somando-se os produtos de cada nmero por seu pesoe 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, armazenandoo 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 umregistro.

    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 incrementosunitrios. Aps so oferecidas opes para o usurio ver na tela ou imprimir.

  • REPETIO 274.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.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 8caracteres) e verifica e o usurio est autorizado ou no. Para essa verificao, o programa mantmuma lista de nomes e respectivas senhas. O programa mostra mensagens de erro se o nome ou asenha 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 amdia 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 asnotas ou moedas e respectivas quantidades que devem ser entregues ao cliente. Procure estruturasde dados que permitam solues mais simples, como por exemplo um vetor com o valor de cadanota 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 natela com letras grandes. Cada letra formada por uma matriz 8x8, com algum caractere nasposies adequadas de forma a compor o desenho de cada letra (cada caractere como se fosse umpixel - veja sugesto abaixo). Para separar uma letra da outra, quando mostradas na tela, voc podedeixar 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 obtidoatravs dos segundos dgitos, e assim por diante. Por exemplo, suponha que os nmeros da LoteriaFederal so:

    1 - 45.6982 - 65.7883 - 01.2144 - 37.8405 - 77.430

  • 28 300 IDIAS PARA PROGRAMAR COMPUTADORESOs 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.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 codificaode preos associando os dez dgitos palavra PERNAMBUCO. Implemente um programa que lum 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-o

    para um outro com extenso ".bak". Caso o arquivo no seja encontrado, mostrada umamensagem 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 ASCIIcom 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 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 identifiquequais 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 umadisciplina, 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 cadacomentrio).

    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.

  • REPETIO 294.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 aindapermite a digitao de um cabealho que, se fornecido, ser impresso na mesma linha danumerao de pginas.

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

    e reproduzir a melodia a partir do vetor.

    4.8.2Melodia - 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 umdeterminado 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 tudorecomea, 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 daseguinte maneira: o premiado de um grupo o que tiver a pedra correspondente dezena final doprimeiro prmio. Se ele j tiver sido contemplado, a prxima dezena formada pelo dgito domilhar e da dezena. Se o consorciado desta pedra tambm j foi contemplado, a nova dezena incluio 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 umprograma fonte da linguagem que usa. Na impresso so ressaltadas em negrito as palavras chaveda linguagem, e os comentrios so impressos em itlico. Ao final o programa mostra a quantidadede 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 ainclinao.

    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 DV1Soma 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 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 (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 parasimplificar o problema.

    4.8.12 Criptografia 2 - Implementar um programa que criptografa uma cadeia usando o seguintealgoritmo: ela reescrita em blocos de 5 caracteres, sendo as novas palavras obtidas lendo-se cadacoluna resultante, separadas por barras. Por exemplo, se a cadeia for "mensagem secreta":

    mensa

    gem secreta

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

  • 315.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. Poderdeclarar instrues, estendendo a linguagem, certamente o recurso mais valioso das linguagensde programao, por proporcionar reusabilidade e portanto produtividade. conveniente tambmsaber 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 outradeclarao, isto , preciso saber apenas o seu nome e seus parmetros. Tambm no serconveniente que a instruo mostre resultados na tela, a menos que isso faa parte da suafinalidade. Por exemplo, se a finalidade for "calcular a mdia", a instruo retorna o valorcalculado mas no mostra na tela. Se a finalidade for "Mostrar uma mensagem na tela", ento eladeve 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 emque estiver programando, claro que voc tem pelo menos duas opes: usar a disponvel oudesenvolver a sua prpria, para treinar. Neste caso, voc pode comparar os resultados da sua com ada 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 nmero

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

    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 recebe

    como parmetros os valores inicial e final.5.1.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 iniciale 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 equaoresultante 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.7Maior 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 menude 4 opes: ler dois nmeros, testar uma e outra funo e terminar.

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

  • 32 300 IDIAS PARA PROGRAMAR COMPUTADORES5.1.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.5.1.11Mdia de 3 - Declarar uma funo que calcula a mdia aritmtica de 3 nmeros5.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, compareseus 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 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.5.1.15 Srie - Elaborar programa que calcule, usando funo, o valor da srie abaixo para N termos,

    sendo N lido:

    S = - + - + -1 13

    15

    17

    192 2 2 2

    L5.1.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 retornaVerdadeiro 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 acapacidade do tipo de dado adotado?

    5.1.18 Nmeros primos - Um nmero dito ser primo quando divisvel somente por si e pelaunidade. 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 poralgum 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 1p :

    x x x x x- + - + -3 5 7 93 5 7 9

    . . .

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

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

    em ordem alfabtica.5.2.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 parmetropor referncia ou equivalente.

  • CRIAO DE INSTRUES 335.2.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_____________________________________________________________________

    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 formatoDD/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 umprograma 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 emmarrocos"). 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.10Maisculas - Implementar uma funo que converte uma cadeia de caracteres paramaisculas.

    5.2.11Minsculas - 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].5.2.12 Insero de caractere - Elaborar uma funo que insere um caractere recebido entre cada

    letra de uma cadeia.

    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 correta1: dia invlido2: ms invlido3: dia e ms invlidos4: 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 aalinhar o texto largura recebida, retornando a linha formatada. Implemente essa funo. [Dica:

  • 34 300 IDIAS PARA PROGRAMAR COMPUTADORESprimeiro calcule a quantidade de espaos necessria; descubra a quantidade de intervalos entrepalavras e calcule quantos espaos ter que inserir em cada intervalo; insira essa quantidade emcada intervalo, sendo que o ltimo intervalo receber os espaos extras restantes. Investigueoutras possibilidades de distribuio]

    5.3.CONTROLE DE TELA5.3.1 Linha vertical 1 - Desenvolva um procedimento que recebe um nmero de coluna de tela e

    preenche 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 e

    coluna) 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.5Mensagem 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 etermina.

    5.3.6Mensagem 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 tamanhomximo 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 casorestaurando 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 uma

    freqncia inicial at uma final, com percentual de variao e durao de cada som lidos peloteclado. Para emitir o som use um procedimento que recebe esses dados como parmetros. Critiqueo 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, podeconhecer a nota seguinte (um semitom acima) multiplicando aquela por 212 . 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 usemltiplos 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.: frequnciado primeiro L: 27,5. PrximosL = 27,5 * 2**N, onde N aoitava desejada (pag. 207 doScheid).

  • CRIAO DE INSTRUES 355.5.REGISTROS E VETORES

    5.5.1 Nome do ms - Escrever uma funo que recebe nmero do ms e retorna seu nome porextenso.

    5.5.2 Nome do dia - Idem acima, para o dia da semana.5.5.3Maior 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.

    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 maiornota, achar a menor nota e calcular a mdia das notas. Quando mostra algum resultado, o programaespera 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 disciplinasb) Dada uma disciplina, pesquisar a nota correspondentec) Dada uma nota, pesquisar se ela existe no vetor de notas e mostrar a respectiva disciplina5.5.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 ascaractersticas acima. Analise os quadrados identificados e verifique se h alguma diferena bsicaentre eles ou se podem ser considerados os mesmo sob algum aspecto. [Dica: produza todas ascombinaes possveis e verifique a soma quando completar cada quadrado. Usar um vetor de 1 a9 (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 duas

    possibilidades: salvar ou recuperar o valor de um parmetro. Um parmetro identificado atravsde 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 umasenha (ambos entre 4 e 8 caracteres), sendo esta lida duas vezes, e grava os dados em um arquivo.

  • 36 300 IDIAS PARA PROGRAMAR COMPUTADORESAs duas senhas digitadas devem iguais. Na opo de autenticao, o programa l nome e senha everifica se o usurio est cadastrado e se sua senha est correta. O programa mostra mensagens deerro 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 dadosgravados.

    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 seuma dada palavra est no banco. O banco armazenado em um arquivo em disco. Todas asinstrues devem ser reutilizveis. Para testar, faa um programa simples com uma opo paracada 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 denumerao sequencial. Prever instrues para criar um contador (zerado) e recuperar o prximonmero (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 apossibilidade de mostrar na tela a lista das senhas.

    5.7.VARIADOS5.7.1Maior 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 permiteparmetros sem tipo]5.7.2 Dia da semana - Descubra como, a partir de uma data vlida, voc pode identificar o dia da

    semana correspondente (domingo, segunda, etc.). Escreva uma funo que retorna esse dia.5.7.3 Crtica completa de data - Combinar as especificaes 5.2.15 e 5.5.4 para formar uma crtica

    de 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 deduas variveis, de duas formas: na primeira usado para trocar as variveis um procedimento, nasegunda 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 375.7.7 CPF - Escrever funo para calcular os dgitos de controle do CPF (regra na especificao 4.8.8

    ). Para simplificar, j que so duas somatrias, escreva tambm uma funo auxiliar que recebe oCPF 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 paramostrar 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 freqnciarepresenta uma pausa.

    5.7.10Melodias 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 aopo selecionada. O usurio seleciona a opo com as setas ou a primeira letra e depois teclandoEnter.

    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 dadosgravados. 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 amdia das notas.

  • 396.IDIAS E MAIS IDIAS

    Neste captulo voc ter vrias idias para trabalhos prticos. Constituem especificaesmais complexas que as do restante do texto, e que certamente o desafiaro. A maioria delas exigiralgum 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 emarquivos, 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 adivinhara 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 menupara o usurio, permitindo:

    - entrar nova palavra- gerar combinaes- mostrar na tela (formatadas em colunas)- imprimir (tambm em colunas)