Sie sind auf Seite 1von 168

Elisamara de Oliveira

Algoritmos e Linguagem de Programao

Revisada por Clausia Mara Antoneli (janeiro/2013)

APRESENTAO
com satisfao que a Unisa Digital oferece a voc, aluno(a), esta apostila de Algoritmos e Linguagem de Programao, parte integrante de um conjunto de materiais de pesquisa voltado ao aprendizado dinmico e autnomo que a educao a distncia exige. O principal objetivo desta apostila propiciar aos(s) alunos(as) uma apresentao do contedo bsico da disciplina. A Unisa Digital oferece outras formas de solidificar seu aprendizado, por meio de recursos multidisciplinares, como chats, fruns, aulas web, material de apoio e e-mail. Para enriquecer o seu aprendizado, voc ainda pode contar com a Biblioteca Virtual: www.unisa.br, a Biblioteca Central da Unisa, juntamente s bibliotecas setoriais, que fornecem acervo digital e impresso, bem como acesso a redes de informao e documentao. Nesse contexto, os recursos disponveis e necessrios para apoi-lo(a) no seu estudo so o suplemento que a Unisa Digital oferece, tornando seu aprendizado eficiente e prazeroso, concorrendo para uma formao completa, na qual o contedo aprendido influencia sua vida profissional e pessoal. A Unisa Digital assim para voc: Universidade a qualquer hora e em qualquer lugar! Unisa Digital

SUMRIO
INTRODUO................................................................................................................................................ 5 1 ALGORITMOS............................................................................................................................................ 7
1.1 O que um Algoritmo?..................................................................................................................................................7 1.2 Conceitos Bsicos da Programao de Computadores.....................................................................................9 1.3 Etapas da Programao de Computadores.........................................................................................................12 1.4 Expresso de Algoritmos ...........................................................................................................................................13 1.5 Os Algoritmos sero Expressos em Pseudolinguagem..................................................................................18 1.6 Resumo do Captulo.....................................................................................................................................................19 1.7 Atividade Proposta........................................................................................................................................................19

2 PSEUDOLINGUAGEM DE PROGRAMAO: PORTUC.............................................. 21

2.1 Identificadores................................................................................................................................................................21 2.2 Tipos Bsicos e Declarao de Variveis................................................................................................................22 2.3 Comando de Atribuio..............................................................................................................................................23 2.4 Operadores Aritmticos .............................................................................................................................................24 2.5 Operadores Lgicos .....................................................................................................................................................25 2.6 Operadores Relacionais..............................................................................................................................................28 2.7 Comando Condicional.................................................................................................................................................29 2.8 Comando de Repetio..............................................................................................................................................31 2.9 Comandos de Entrada e Sada..................................................................................................................................33 2.10 Separador de Comandos ........................................................................................................................................37 2.11 Comentrios..................................................................................................................................................................37 2.12 Bloco de Programa.....................................................................................................................................................38 2.13 Resumo do Captulo..................................................................................................................................................41

3 CONSTRUO DE ALGORITMOS EM PORTUC: PRATICANDO OS COMANDOS E FAZENDO CLCULOS..................................................................................... 43

3.1 Declarao de Variveis Comandos leia e imprima.................................................................................43 3.2 Comando Condicional se.........................................................................................................................................44 3.3 Bloco de Programa........................................................................................................................................................45 3.4 Operaes Bsicas com Nmeros...........................................................................................................................46 3.5 Operaes com Operadores Lgicos e Relacionais..........................................................................................49 3.6 Resumo do Captulo.....................................................................................................................................................51 3.7 Atividades Propostas....................................................................................................................................................51 4.1 Os Passos da Metodologia.........................................................................................................................................55 4.2 Soluo de Exerccios utilizando a Metodologia...............................................................................................57 4.3 Resumo do Captulo.....................................................................................................................................................57 4.4 Atividades Propostas....................................................................................................................................................58

4 METODOLOGIA PARA A CONSTRUO DE ALGORITMOS.................................... 55

5 A LINGUAGEM DE PROGRAMAO C................................................................................... 61

5.1 Tipos Bsicos e Declarao de Variveis em C....................................................................................................61 5.2 Operadores de Atribuio, Aritmticos, Relacionais e Lgicos (Binrios) em C ...................................62 5.3 Comando Condicional em C (if)...............................................................................................................................65 5.4 Comando de Seleo Mltipla em C (switch).....................................................................................................68 5.5 Comando de Repetio em C (while).....................................................................................................................71 5.6 Comando de Repetio em C (for)..........................................................................................................................72 5.7 Comandos de Leitura e Escrita em C .....................................................................................................................76 5.8 Comentrios em C ........................................................................................................................................................79 5.9 Bloco de Programa em C ...........................................................................................................................................79 5.10 Funes teis em C....................................................................................................................................................81 5.11 Traduo de PortuC para a Linguagem C........................................................................................................84 5.12 Resumo do Captulo..................................................................................................................................................89 5.13 Atividades Propostas.................................................................................................................................................89 6.1 Comando de Repetio Entrada Indeterminada de Dados (uso de flags)...........................................91 6.2 Comando de Repetio Entrada de Dados Determinada..........................................................................94 6.3 Exemplo dos Minutos Telefnicos...........................................................................................................................96 6.4 Exemplo do Preo Final de Automveis.............................................................................................................100 6.5 Exemplo da Eleio.....................................................................................................................................................104 6.6 Exemplo da Srie Numrica....................................................................................................................................108 6.7 Resumo do Captulo...................................................................................................................................................112 6.8 Atividades Propostas..................................................................................................................................................112

6 USANDO COMANDOS DE REPETIO EM C.................................................................... 91

7 OUTROS PROGRAMAS EM C......................................................................................................119 8 PRTICA EM LABORATRIO.......................................................................................................127


8.1 Estudo Dirigido............................................................................................................................................................ 127

9 CONSIDERAES FINAIS..............................................................................................................131 RESPOSTAS COMENTADAS DAS ATIVIDADES PROPOSTAS....................................133 REFERNCIAS............................................................................................................................................175

INTRODUO
Esta apostila se refere disciplina Algoritmos e Linguagem de Programao do curso de Engenharia de Produo, na modalidade a distncia, da Unisa. O objetivo desta disciplina capacitar voc, caro(a) aluno(a), a fazer os primeiros programas de computador utilizando uma linguagem de programao. Escrever programas de computador uma tarefa muito interessante, instigante e desafiadora! Vamos comear entendendo o que um algoritmo, que um roteiro com instrues sequenciais para se resolver um problema ou se realizar alguma tarefa. como uma receita de bolo, que indica os ingredientes e as instrues para se fazer o bolo passo a passo. Usando essa analogia, os ingredientes seriam os dados, os passos seriam as instrues do programa e o forno para assar o bolo seria o computador! O universo dos computadores muito simples, muito limitado, mas muito poderoso: tudo se baseia na base 2, que possui apenas 2 algarismos: 0 e 1. Esses dois dgitos binrios, ou bits, formam a linguagem de mquina, que a nica linguagem que o computador digital entende. Mas ns vamos aprender a escrever as instrues dos nossos programas numa linguagem de programao chamada C, que mais prxima da nossa linguagem de comunicao. Ns nos comunicamos em Portugus, certo? Ento vamos comear a escrever nossos primeiros algoritmos em PortuC, uma pseudolinguagem, e depois traduzi-los para um programa em linguagem C. Isso ainda no resolve nosso problema: para que o computador possa executar nosso programa em C, ele precisa ser traduzido para linguagem de mquina! Mas isso ser feito facilmente pelo compilador C, um programa que faz exatamente isso: traduz programas em C para instrues binrias (linguagem de mquina). Como voc pode ver, ser um belo desafio! Ento, caro(a) aluno(a), afie seu raciocnio lgico e prepare-se para entrar num mundo em que a lgica ser o carro-chefe! No tema nada, pois tudo ser ensinado de forma simples e didtica... Mais algumas pginas frente e voc j estar programando seu computador! Profa. Dra. Elisamara de Oliveira

Unisa | Educao a Distncia | www.unisa.br

ALGORITMOS

Em nosso dia a dia, executamos mecanicamente uma srie de aes, que so seguidas sequencialmente e que provocam o acontecimento de algo. Por exemplo, temos um trajeto frequente ao sairmos diariamente de casa em direo ao nosso trabalho ou nossa universidade, que, sempre que seguido, nos leva ao nosso destino. Isso um algoritmo. Em outras palavras, um algoritmo descreve eventos com durao finita, que envolvem um conjunto de objetos cujas caractersticas podem ser alteradas, atravs de aes que ocorrem sequencialmente.

1.1 O que um Algoritmo?

Vamos, juntos, entender o que so algoritmos, utilizando inicialmente alguns conceitos j definidos na literatura tcnica da rea:
Ateno
Programar construir algoritmos. Programa = algoritmo + estruturas de dados. No processo de construo de programas, a formulao do algoritmo e a definio das estruturas de dados esto intimamente ligadas.

Alm dessas importantes definies, acrescentemos que, num algoritmo, podem-se observar os seguintes aspectos: ao: evento que ocorre num perodo de tempo finito; estado: propriedades de um objeto numa dada situao; processo: sequncia temporal de aes; padro de comportamento: toda vez que seguido, um evento ocorre.

Unisa | Educao a Distncia | www.unisa.br

Elisamara de Oliveira

Saiba mais
Exemplo de um algoritmo

Algoritmo para fazer batatas fritas para o jantar Traga a cesta com batatas da despensa; Traga a panela do armrio; Coloque leo na panela; Se a roupa clara ento coloque o avental; Enquanto n de batatas insuficiente para o nmero de pessoas faa descasque as batatas; Pique as batatas; Esquente o leo da panela; Frite as batatas na panela; Escorra o excesso de leo das batatas fritas; Coloque as batatas fritas numa vasilha com papel absorvente.

Apesar de muito simples, algumas observaes importantes podem ser notadas nesse algoritmo: o tempo verbal est na forma imperativa (faa, traga, frite etc.); h um sequenciamento das aes, que esto separadas por um ponto e vrgula; o avental no usado toda vez: existe um motivo para coloc-lo, ou seja, h uma condio para que o avental seja colocado; o nmero de batatas descascadas varia; a ao de descascar uma batata repete-se at que a condio de parada (ser suficiente para alimentar as pessoas que iro jantar) seja alcanada; a ordem das aes importante: primeiro descasca-se a batata, pica-se a batata, para depois frit-la... Exemplos de algoritmos conhecidos: Qual o algoritmo que voc descreve para vir estudar? Qual o algoritmo para se fazer uma feijoada? Qual o algoritmo para se trocar uma lmpada? Apesar de receitas culinrias e trajetos rotineiramente percorridos encaixarem-se perfeitamente no conceito inicial de algoritmo, no nosso curso, estamos interessados num tipo de algoritmo especial, que seja capaz de ser executado por um computador. Para tanto, necessrio que identifiquemos problemas do mundo real que possam ser traduzidos em aes primitivas finitas e dos quais se possa extrair um padro de comportamento.

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Com base nos exemplos apresentados at aqui, estamos prontos para definir o que um algoritmo. Um algoritmo a descrio de um padro de comportamento, expresso em termos de um repertrio bem definido e finito de aes primitivas que podem ser executadas. Analise a definio e veja como coerente com o que apresentamos; no mesmo? Alm disso, importante observar que, num algoritmo, distinguem-se claramente dois aspectos: aspecto esttico: que corresponde ao texto; aspecto dinmico: que corresponde sua execuo (a partir de valores iniciais). O curso de Algoritmos e Linguagem de Programao , na realidade, um curso de Programao de Computadores para alunos(as) que iniciam cursos superiores na rea de Engenharia e Informtica. Sei que voc est curioso(a) para conhecer um algoritmo, mas, para comear a construir seus algoritmos e fazer seus primeiros programas de computador, necessrio que voc domine uma srie de conceitos bsicos, que so apresentados a seguir, a comear pelo prprio computador!

1.2 Conceitos Bsicos da Programao de Computadores

Fonte: http://evotecinformatica.blogspot.com/p/como-cuidar-do-seu-computador.html.

Computador: uma mquina capaz de seguir uma espcie de algoritmo chamado programa, que est escrito em linguagem de mquina. Linguagem de mquina: internamente, o computador executa uma srie de instrues que ficam armazenadas em sua memria principal em cdigo binrio, ou seja, em linguagem de mquina (zeros (0) e uns (1), que so os dgitos binrios ou bits). Linguagem de alto nvel: para escrever os programas de computador, os programadores utilizam linguagens que esto mais prximas da linguagem humana, que so chamadas linguagens de alto nvel ou, simplesmente, linguagens de programao. Exemplos de linguagens de programao (alto nvel) so: C, C++, C#, Pascal, Delphi, Java, Basic, VisualBasic, Fortran, Cobol, entre muitas outras.

Unisa | Educao a Distncia | www.unisa.br

Elisamara de Oliveira

Linguagem de montagem ou Assembly: h programas de computador que precisam interferir diretamente no hardware da mquina para permitir a execuo de funes especficas, como as oferecidas por sistemas operacionais, por exemplo. Nesse caso, os programadores utilizam as linguagens de montagem ou linguagens assembly, que esto muito prximas da linguagem de mquina e mais distantes das linguagens de programao, sendo, por isso, chamadas linguagem de baixo nvel. A Figura 1 mostra a relao entre as linguagens discutidas anteriormente.
Figura 1 Relao entre linguagens de baixo e de alto nvel.

Numa ponta da Figura 1, est a linguagem de mquina e, no outro extremo, esto as linguagens humanas. Quanto mais prxima da linguagem de mquina, mais de baixo nvel a linguagem; em contrapartida, quanto mais prxima das linguagens humanas, mais alto nvel. As linguagens de programao fazem uma espcie de ponte entre a linguagem binria, ou linguagem que o computador entende, e a linguagem que ns humanos utilizamos. Linguagem de programao: Uma linguagem de programao uma linguagem utilizada por uma pessoa para expressar um processo atravs do qual o computador possa resolver um problema. (SEBESTA, 2000). Pessoas que possuem uma compreenso limitada da linguagem natural tendem a ser mais limitadas para expressar seus pensamentos, especialmente em termos de capacidade de abstrao. Programadores que tiveram pouca educao formal em disciplinas de Computao tendem a continuar a usar a mesma linguagem de programao, mesmo que esta esteja em desuso. A aprendizagem contnua fundamental. necessrio que os programadores conheam os fundamentos das linguagens de programao para que possam ler, entender e aprender com os manuais e livros tcnicos das novas linguagens e os novos paradigmas que venham a surgir. Compilador: permite que os programadores utilizem linguagens de alto nvel para escrever os programas de computador, pois se encarrega de traduzi-los para linguagem de mquina. O compilador um programa que traduz uma determinada linguagem de programao para linguagem de mquina. Dessa forma, existem diversos compiladores especficos para cada uma das linguagens de programao e para cada sistema operacional, conforme ilustra a Figura 2.

10

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Figura 2 Os compiladores so especficos para cada linguagem e para cada sistema operacional.

Conforme ilustra a Figura 2, um compilador C para o sistema operacional Windows (compilador X) diferente de um compilador C para o sistema operacional Linux (compilador Y), que tambm diferente de um compilador C para o sistema operacional Mac OS (compilador Z), por exemplo, embora a linguagem de programao (C) seja a mesma (linguagem de alto nvel). O compilador de linguagem de montagem ou linguagem assembly chamado assembler. Caro(a) aluno(a), dadas essas explicaes bsicas, como unir todas essas informaes para comearmos a programar? A Figura 3 vai nos ajudar, mostrando o ciclo completo da elaborao do algoritmo execuo de um programa de computador. Cada um dos componentes desse ciclo explicado a seguir.
Figura 3 Do algoritmo execuo de um programa de computador.

Unisa | Educao a Distncia | www.unisa.br

11

Elisamara de Oliveira

Algoritmo: estrutura do programa; instrues que descrevem a lgica do programa; Editor de texto: permite que o cdigo-fonte do programa seja editado em um arquivo-fonte. Alguns compiladores tm editores com ambiente de programao integrados, como o caso do compilador Dev C++; Cdigo-fonte: conjunto de comandos escritos na linguagem de programao escolhida (que, neste curso, ser a linguagem C). O cdigo-fonte fica armazenado no arquivo-fonte em formato ASCii, ou seja, em texto [o arquivo-fonte possui a extenso relativa linguagem de programao usada, por exemplo, .pas (Pascal), .c (C), .cpp (C++), .cs (C#), .java (Java)]; Compilador: l o cdigo-fonte do programa e cria outro arquivo, com o mesmo programa escrito em linguagem de mquina; Cdigo-objeto: arquivo resultante da compilao do cdigo-fonte. Contm informaes sobre alocao de memria, os smbolos do programa (como nomes de variveis e de funes) e tambm informaes sobre debug (o arquivo-objeto possui a extenso .obj para a maioria das linguagens de programao); Arquivos de biblioteca: contm funes j compiladas que podem ser utilizadas no programa; Linker: programa auxiliar do compilador que cria o programa executvel a partir de arquivos-objeto e dos arquivos de biblioteca; Cdigo executvel: programa que pode ser executado no computador (o arquivo executvel possui a extenso .exe). Resumindo todo esse processo, caro(a) aluno(a), vamos precisar passar por 5 etapas: obter um problema a ser resolvido; escrever um algoritmo em pseudolinguagem para solucionar esse problema; traduzir o algoritmo para a linguagem de programao C; e, finalmente, editar esse programa e usar um compilador C para testar seu funcionamento!

1.3 Etapas da Programao de Computadores

Como acabamos de dizer, para conseguirmos construir programas de computador, necessrio cumprir 5 etapas bsicas da programao. As 5 etapas da programao de computadores so: 1. identificao de um problema do mundo real; 2. confeco do algoritmo; 3. teste do algoritmo; 4. confeco do programa de computador; 5. execuo do programa no computador. Para realizarmos esse ciclo de etapas com sucesso, quer dizer, para conseguirmos fazer programas de computador com qualidade e confiveis, muito importante a utilizao de tcnicas de programao, como a programao estruturada. A programao estruturada uma metodologia de projeto e desenvolvimento que pretende:

12

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

facilitar a escrita; facilitar o entendimento; permitir a verificao; facilitar a alterao e a manuteno dos programas de computador. O principal objetivo da metodologia de programao estruturada reduzir a complexidade dos problemas. Essa metodologia, quando utilizada, induz o programador a produzir programas: confiveis; de fcil manuteno; flexveis; documentados; legveis. Sendo assim, caro(a) aluno(a), vamos aprender a programar da melhor maneira possvel: utilizando as regras da programao estruturada!

1.4 Expresso de Algoritmos

Os algoritmos podem ser expressos atravs de diagramas, de pseudolinguagens ou da prpria linguagem de programao. Vamos examinar cada uma dessas trs opes e, no final deste captulo, vamos optar por uma delas, para que possamos comear a fazer nossos primeiros algoritmos! Expresso de Algoritmos Atravs de Diagramas A utilizao de diagramas para a expresso de algoritmos foi bastante utilizada at a dcada de 1980. Diagramas de Chapin e fluxogramas foram os principais mtodos utilizados ento. Nos mtodos baseados em diagramas, uma grande variedade de formas geomtricas, como quadrados, retngulos, hexgonos, pentgonos etc., utilizada para representar as instrues de leitura e impresso de dados, assim como os comandos condicionais, de repetio etc. Alm disso, uma srie de regras para a disposio dessas formas e/ou setas para representar o sequenciamento das instrues fazem parte desses mtodos. Apesar de terem sido utilizados largamente pelas primeiras geraes de programadores, esses mtodos apresentam uma srie de inconvenincias, tais como: o programador tem que memorizar todas as formas geomtricas e conhecer as regras de inter-relacionamento entre elas; o programador perde um tempo considervel para fazer e refazer desenhos, tendo que possuir diversas rguas com os smbolos dos diagramas; para algoritmos muito grandes, os desenhos comeam a ocupar muitas pginas, tornando im-

Unisa | Educao a Distncia | www.unisa.br

13

Elisamara de Oliveira

praticvel a visualizao de toda a soluo; a memorizao de regras de expresso desvia a ateno do programador, que no tem apenas de se concentrar na lgica do problema, como seria desejvel, mas tem as preocupaes adicionais de elaborar desenhos e consultar regras e regras. Alm de todos os inconvenientes citados, que de longe esgotam os seus problemas, os mtodos baseados em diagramas se distanciam muito do alvo da programao, que a expresso da lgica algortmica na prpria linguagem de programao! Alm disso, esses mtodos no so nem um pouco intuitivos. Veja a Figura 4 e tente descobrir o que o programa faz, sem muito esforo, se for possvel:
Figura 4 Algoritmo expresso atravs de um diagrama de Chapin.

A Figura 5 mostra um exemplo de um algoritmo expresso atravs de um fluxograma. Observe a existncia de diferentes formas geomtricas para as diferentes instrues e o uso de setas para representar o fluxo dos dados. Voc seria capaz de dizer o que esse algoritmo faz? Quais as variveis que ele utiliza e de que tipo bsico elas so? (Dica: esse algoritmo faz a mesma coisa que o expresso pelo diagrama de Chapin, da Figura 4).

14

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Figura 5 Algoritmo expresso atravs de um fluxograma.

Expresso de Algoritmos Atravs de Linguagem de Programao Expressar um algoritmo atravs de uma linguagem de programao o objetivo, a meta do programador, com certeza, mas isso feito quando o programador j adquiriu bastante experincia de programao, quer dizer, quando o programador j consegue programar diretamente da linguagem de programao. Os programadores iniciantes podem ter grandes dificuldades para aprender a programar se forem diretamente s instrues da linguagem de programao. Uma linguagem de programao permite, alm da expresso do raciocnio algortmico, a sua execuo no computador (por causa do compilador, conforme j aprendemos). Embora as linguagens de programao sejam chamadas linguagens de alto nvel, devido sua proximidade com a linguagem humana, suas instrues vm em ingls. O ingls uma das diversas linguagens humanas, claro, mas pode oferecer certo desconforto aos estudantes, principalmente aos que falam portugus, como o nosso caso. Existem diversas linguagens de programao. Cada uma pode ser mais adequada resoluo de problemas especficos e recebe alguns rtulos por isso, como linguagens para aplicaes cientficas, linguagens para desenvolvimento de software bsico, linguagens para utilizao intensiva de recursos Unisa | Educao a Distncia | www.unisa.br

15

Elisamara de Oliveira

grficos, para manipulao de bancos de dados etc. e linguagens para o ensino de programao! Veja a Figura 6. um cdigo escrito em Pascal.
Figura 6 Algoritmo expresso na linguagem de programao Pascal.

A Figura 6 mostra um algoritmo expresso na linguagem de programao Pascal, ou seja, j um programa de computador. Observe a estrutura do programa: comea com PROGRAM, depois tem a seo VAR, na qual as variveis so declaradas e, depois, vm as instrues contidas entre o BEGIN (incio) e o END (fim). Voc seria capaz de dizer o que esse algoritmo faz? Quais as variveis que ele utiliza e de que tipo bsico elas so? (Dica: esse programa faz a mesma coisa que o expresso pelo diagrama de Chapin e pelo fluxograma, mostrados nas Figuras 4 e 5). Agora, observe o exemplo de um programa escrito na linguagem de programao C.
Figura 7 Algoritmo expresso na linguagem de programao C.

16

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

A Figura 7 mostra um algoritmo expresso na linguagem de programao C, ou seja, tambm um programa de computador. Observe a estrutura do programa: comea com um comentrio, depois tem a incluso de uma biblioteca de funes, depois a declarao das variveis e, em seguida, vem a seo main, na qual as instrues do programa esto contidas entre o { (incio) e o } (fim). Voc seria capaz de dizer o que esse algoritmo faz? Quais as variveis que ele utiliza e de que tipo bsico elas so? (Dica: esse programa faz a mesma coisa que o expresso pelo diagrama de Chapin, pelo fluxograma e pelo programa Pascal, mostrados nas Figuras 4, 5 e 6). O programa traz um comentrio dizendo explicitamente o que ele faz. Portanto, garanto que voc conseguiu responder primeira pergunta. Com relao s variveis que o programa utiliza e seu tipo bsico, observe a declarao int valor, menor; no programa. H duas variveis ali declaradas: valor e menor; o tipo bsico int; um pouquinho de imaginao e int = inteiro! Que tal voc comparar o cdigo C com o cdigo Pascal? Semelhanas? Qual dos dois lhe pareceu mais fcil de entender? Bem, se sua resposta foi o cdigo Pascal, digo-lhe que o Pascal tem o rtulo de linguagem mais adequado ao ensino de programao. Se sua resposta foi o cdigo C, saiba que uma linguagem que foi criada para ser utilizada por programadores experientes. Mas, se voc teve dificuldade de entender ambos os cdigos, no se preocupe! O curso est apenas comeando e h muito que se aprender de lgica de programao! Garanto que no final do curso esse programa vai parecer muito, muito fcil para voc! Expresso de Algoritmos Atravs de Pseudolinguagem Uma pseudolinguagem uma notao para expresso de algoritmos para ser utilizada nas 3 primeiras etapas da programao definidas na seo 1.3, quais sejam, identificao de um problema do mundo real, confeco e teste do algoritmo. apresentada na forma de portugus estruturado. Embora seja uma pseudolinguagem, possui estrutura, sintaxe e semntica semelhantes s de uma linguagem de programao. A principal diferena entre a pseudolinguagem e a linguagem de programao que a primeira no possui um compilador. Isso significa que possvel expressar o raciocnio algortmico utilizando-se uma pseudolinguagem, mas o programa no pode ser executado no computador. So muitas as vantagens de se utilizar uma pseudolinguagem para escrever algoritmos: uma linguagem independente de mquina; o programador pensa somente no problema a ser resolvido, sem se preocupar com possveis restries do compilador ou do hardware (computador); o programador tem que conhecer a sintaxe, a semntica e a estrutura da pseudolinguagem, mas tem total liberdade para criar novos comandos ou usar instrues em alto nvel (ou em forma de frases); por um lado, ele vai se acostumando com a rigidez da sintaxe das linguagens de programao, mas, por outro, tem a liberdade de expressar seu raciocnio sem esbarrar em limitaes de contexto; uma vez estando pronto o algoritmo na pseudolinguagem, a sua implementao no computador (etapas 4 e 5 da programao: confeco e execuo do programa) fica muito facilitada, pois toda a lgica j foi desenvolvida e testada e somente uma traduo para a linguagem de programao-alvo se faz necessria.

Unisa | Educao a Distncia | www.unisa.br

17

Elisamara de Oliveira

Veja o exemplo de um algoritmo escrito na pseudolinguagem PortuC.


Figura 8 Algoritmo expresso na pseudolinguagem PortuC.

A Figura 8 mostra um algoritmo expresso na pseudolinguagem PortuC. Observe a estrutura do algoritmo: comea com um comentrio dizendo o que o algoritmo faz, tem a declarao das variveis e depois vem a seo principal ( ), em que so apresentadas as instrues contidas entre o { (incio) e } (fim) do algoritmo. Voc seria capaz de dizer o que esse algoritmo faz? Quais as variveis que ele utiliza e de que tipo bsico elas so? (Dica: esse algoritmo faz a mesma coisa que o expresso pelo diagrama de Chapin, pelo fluxograma, pela linguagem Pascal e pela linguagem C, mostrados nas Figuras 4, 5, 6 e 7). Esse algoritmo em PortuC corresponde ao programa em C mostrado na Figura 7. Observe a grande semelhana entre eles. Essa semelhana proposital, com certeza. O PortuC quase a traduo de um programa C para o portugus. As vantagens de se utilizar o PortuC so muitas. Pense sobre elas, pois o PortuC ser nosso maior aliado no aprendizado de algoritmos! Um exerccio interessante para voc fazer agora seria visitar os exemplos deste algoritmo escritos no diagrama de Chapin e no fluxograma e compar-los com o PortuC. Diga-me: qual deles mais fcil de entender? Qual dessas formas de expresso de algoritmos voc escolheria?

1.5 Os Algoritmos sero Expressos em Pseudolinguagem

Em funo de tudo o que foi dito e aps conhecermos as 3 formas de expresso de algoritmos, usaremos pseudolinguagem para escrever nossos primeiros algoritmos! As justificativas dessa nossa escolha so muitas e foram j fundamentadas. A pseudolinguagem PortuC utiliza o portugus, numa forma estruturada, e tem estrutura, sintaxe e semntica muito semelhantes s da linguagem de programao C. Apesar de o Pascal ter se consagrado como uma linguagem adequada para o ensino da programao aos estudantes que a iniciam, ou seja, como primeira linguagem de programao, a linguagem C, antes restrita comunidade cientfica, ganhou uma popularidade inquestionvel na dcada de 1990 que se estende aos dias atuais, pois a base de novas linguagens, como o Java, o C# e at o Android. Em funo disso, a linguagem C passou a ser alvo do interesse dos estudantes. A resistncia, que j existiu,

18

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

em utiliz-la como primeira linguagem de programao pelos professores se deveu, em parte, ao fato de seus criadores, Dennis Ritchie e Brian Kernighan, terem afirmado que C retm a filosofia bsica de que os programadores sabem o que esto fazendo (KERNIGHAN; RITCHIE, 1989). Bem, se considerarmos que programadores iniciantes no tm condies de saber com segurana o que esto fazendo, exatamente pelo fato de serem inexperientes, a adoo da linguagem seria realmente questionvel. No entanto, as linguagens de programao evoluram bastante e as mais utilizadas hoje, como o Java e o C#, tm como base a linguagem C. Alm disso, a adoo de um mtodo adequado e coerente para o ensino da programao de computadores pode atuar como um facilitador do processo de aprendizagem, permitindo que uma linguagem mais complexa, como o C, possa ser ensinado sem oferecer obstculos aprendizagem. Assim, a adoo do PortuC, nossa pseudolinguagem, e da metodologia de ensino proposta pela professora viabiliza a adoo da linguagem de programao C como primeira linguagem. Isso vai ao encontro das expectativas dos estudantes e coloca o ensino da programao na direo da atual tendncia da programao de computadores, que vem utilizando, cada vez mais, o C como base dos novos e modernos paradigmas de programao.

1.6 Resumo do Captulo

Caro(a) aluno(a), o PortuC, alm de oferecer o conforto de utilizar nossa lngua ptria, o que o torna muito familiar ao programador, no requer a memorizao das abominveis formas geomtricas e setas e mais setas dos diagramas. Fique tranquilo, meu(minha) estudante, mais duas lies e voc j estar fazendo seus primeiros programas de computador!

1.7 Atividade Proposta

1. Tente deduzir qual o padro de comportamento utilizado para gerar as sequncias: 1, 5, 9, 13, 17, 21, 25 ... 1, 1, 2, 3, 5, 8, 13, 21, 34 ...

Unisa | Educao a Distncia | www.unisa.br

19

PSEUDOLINGUAGEM DE PROGRAMAO: PORTUC

Caro(a) aluno(a), suponha que voc ganhou de presente uma viagem para os Estados Unidos. O que voc deveria fazer antes de ir para l? Estudar ingls! J que os americanos falam essa lngua, claro. Ento, neste nosso curso, voc est ganhando a chance nica de aprender a programar. Este captulo o convida a aprender PortuC, que a lngua que os algoritmos (que so as bases dos programas de computador) falam! O PortuC , basicamente, uma traduo da linguagem C para Portugus. Assim, aprendendo bem o PortuC, voc j estar se preparando para aprender a prpria linguagem C, de forma simples e fcil!

2.1 Identificadores

Todo programa de computador manipula dados, que so armazenados em variveis. Uma varivel precisa ter um nome que a identifique de forma nica no programa: o identificador.

Ateno
Um identificador em PortuC formado por caracteres alfanumricos; O primeiro caractere tem que ser uma letra; os outros caracteres podem ser: letras: A-Z, a-z; dgitos: 0-9; sublinhado: _ . No pode haver dois identificadores iguais. Letras minsculas e letras maisculas so diferentes. Os identificadores no podem ser acentuados. No pode haver espao em branco num identificador. O caractere no pode ser usado num identificador. Um identificador no pode ter o mesmo nome das palavras reservadas do PortuC (como: principal, se, seno, inteiro, real etc.).

Exemplos de identificadores vlidos: NOME, raiz1, letra4, Total_dos_Salarios, Nome_de_Familia.

Unisa | Educao a Distncia | www.unisa.br

21

Elisamara de Oliveira

Exemplos de identificadores INVLIDOS:


4pontos CUSTO FINAL PreoTotal Pessoa+Alta Preco-caro Total_dos_salrios inteiro (comea com nmero) (tem espao em branco) (caractere no pode ser usado) (caractere + no pode ser usado) (caractere - no permitido) (palavra acentuada) (palavra reservada do PortuC)

2.2 Tipos Bsicos e Declarao de Variveis

Os dados manipulados por um programa so armazenados em variveis. As variveis precisam ter um nome (identificador), um tipo associado, e precisam ser declaradas antes que possam ser utilizadas.
Saiba mais
H trs tipos bsicos que podem ser associados s variveis: inteiro; real; caractere. Para declarar uma varivel, escreve-se o nome de seu tipo, salta-se um espao em branco, em seguida escreve-se o nome do seu identificador e ; para finalizar a declarao. Se mais de uma varivel for do mesmo tipo bsico, elas podem ser declaradas juntas, apenas separadas por vrgulas. Toda varivel precisa ser declarada antes de ser utilizada. No pode haver duas variveis com mesmo nome, mesmo que tenham tipos bsicos diferentes, a menos que algum caractere maisculo ou minsculo as diferencie.

Exemplos de declarao de variveis vlida:


caractere NOME[20], letra; inteiro soma; real raiz1, Total_dos_Salarios; caractere Nome_de_familia[30];

Exemplos de declarao de variveis INVLIDA:


caractere NOME[20]; letra4; (o separador de identificadores deve ser a vrgula) inteiro: SOMA; (no pode haver o sinal de dois-pontos aps o nome do tipo) raiz1, Total_dos_Salarios real; (o tipo bsico deve vir antes dos identificadores) caractere Nome_de_Familia[30]; (o nome do tipo bsico est errado) real SOMA;

(a varivel SOMA j foi declarada: um identificador no pode ser duplicado) Unisa | Educao a Distncia | www.unisa.br

22

Algoritmos e Linguagem de Programao

2.3 Comando de Atribuio

O contedo das variveis do programa pode ser determinado atravs de dois tipos de comandos: comando de atribuio e comando de leitura. O comando de atribuio permite que um determinado valor seja armazenado numa varivel.

Ateno
O smbolo do comando de atribuio = . No se deve atribuir a uma varivel um valor que NO seja compatvel com o tipo bsico dessa varivel, ou seja, nmeros inteiros devem ser atribudos a variveis do tipo inteiro; nmeros reais devem ser atribudos a variveis do tipo real; frases e letras devem ser atribudas a variveis do tipo caractere. Caso no haja compatibilidade entre o dado e o tipo da varivel, podem acontecer efeitos indesejados. Ento, muito cuidado, pois nesse tipo de atribuio ocorre a CONVERSO AUTOMTICA DE TIPOS e o que chega na varivel de destino pode ser um desastre! Toda varivel deve ter um valor a ela atribudo antes de ser usada no programa; Em variveis reais, S EXISTE PONTO DECIMAL; no se pode usar vrgula decimal.

Exemplos de atribuies vlidas:


letra = L; soma = 0; Total_dos_Salarios = 1275.50; NOME = Luiza;

Exemplos de atribuies INVLIDAS:


NOME = Maria;

(a cadeia de caracteres tem que estar entre aspas) (o smbolo que delimita a cadeia de caracteres no pode ser apstrofo, devem-se usar aspas) (o valor a ser atribudo a uma varivel numrica no pode estar entre apstrofos nem entre aspas) (no existe vrgula decimal, o certo usar ponto decimal) (numa varivel do tipo inteiro,como o caso da varivel soma, no pode haver parte decimal; esse caso est sujeito converso automtica) (o smbolo do comando de atribuio = e no :=)

NOME = Maria;

Total_dos_Salarios = 1275.50; Total_dos_Salarios = 1275,50; soma = 10.0;

soma := 0;

Unisa | Educao a Distncia | www.unisa.br

23

Elisamara de Oliveira

2.4 Operadores Aritmticos

Os operadores aritmticos permitem que expresses da Matemtica sejam atribudas s variveis. Os operadores aritmticos implementam as operaes bsicas (adio, subtrao, diviso e multiplicao) e algumas operaes mais avanadas da Matemtica (como logaritmo, raiz quadrada, seno, cosseno etc.). A varivel que vai receber o resultado de uma operao aritmtica tem que ser de um tipo numrico compatvel, capaz de armazenar o valor resultante, seno poder ocorrer uma converso automtica com resultados muitas vezes indesejados ou mesmo imprevisveis.

Saiba mais
Os operadores aritmticos bsicos so: + (adio); - (subtrao); * (multiplicao); / (diviso real); ++ (adiciona 1); -- (subtrai 1). Alguns operadores aritmticos mais avanados so: % (resto da diviso inteira); / (quociente da diviso inteira); sqrt( ) (raiz quadrada); abs( ) (valor absoluto).

Exemplos de expresses aritmticas vlidas:


resto = 10 % 3; quociente = 10 / 3; salario = ((totaldehoras*32.50)+102.00) - descontoinss; valoremdolares = salario / 1.85; impostoderenda = salario * (0.20); nome = nome + da silva; contador = contador +1; ++contador; --contador; raiz = sqrt(numero);

24

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Exemplos de expresses aritmticas INVLIDAS:


resto = 10.0 % 3;

(o operador % s pode envolver nmeros inteiros) (no existe vrgula decimal, o separador sempre o ponto decimal) (os operadores * e + so didicos, envolvem sempre dois operadores, portanto no podem ser utilizados juntos) (em variveis do tipo caractere s pode ser feita adio ou subtrao de caracteres) (o operador * didico, tem que envolver dois operandos)

valoremdolares = salario / 1,85; salario = totaldehoras *+ 32.50;

nome = nome * 3; contador = *1;

2.5 Operadores Lgicos

Os operadores lgicos permitem que os trs principais operadores da lgebra de Boole possam ser utilizados num programa: E, OU e NO. O estado dos operandos e o resultado de uma operao lgica so sempre FALSOS (avaliados como zero) ou VERDADEIROS (avaliados como diferentes de zero).
Saiba mais
Os operadores lgicos so: e (conjuno); ou (disjuno); ! (negao). O operador binrio e envolve sempre dois operandos e o resultado VERDADEIRO somente quando ambos os operandos forem VERDADEIROS, ou seja, basta que um operando seja FALSO para que o resultado seja FALSO. O operador binrio ou envolve sempre dois operandos e o resultado FALSO somente quando ambos os operandos forem FALSOS, ou seja, basta que um operando seja VERDADEIRO para que o resultado seja VERDADEIRO. O operador unrio ! muda o estado do operando de FALSO para VERDADEIRO ou de VERDADEIRO para FALSO.

Caro(a) aluno(a), aqui cabe uma explicao um pouco mais detalhada para melhorar o entendimento dos operadores lgicos E, OU e ! (no): uma varivel lgica aquela que pode assumir apenas os valores VERDADEIRO ou FALSO; na prtica, as variveis lgicas so utilizadas para descrever o funcionamento de um sistema, como um circuito formado por uma bateria e uma lmpada:

Unisa | Educao a Distncia | www.unisa.br

25

Elisamara de Oliveira

a representao dos nveis lgicos (1=verdadeiro e 0=falso) pode ser melhor entendida atravs de chaves que representam um circuito. Se a chave est fechada (valor 1 ou valor VERDADEIRO), a corrente pode passar, o que pode permitir que a lmpada se acenda. Se a chave est aberta (valor 0 ou valor FALSO), a corrente no pode passar, o que pode impedir que a lmpada se acenda;

uma funo E resulta em 1=VERDADEIRO se, e somente se, todas as variveis lgicas de entrada tiverem valor 1=VERDADEIRO. Em outras palavras, a lmpada do circuito s acende se ambas as chaves estiverem fechadas, o que caracteriza um circuito com chaves em sequncia, como o mostrado a seguir (na funo E, somente se ambas as entradas forem verdadeiras a expresso avaliada como verdadeira);

26

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

uma funo OU resulta em 1=VERDADEIRO se, pelo menos, uma das variveis lgicas de entrada tiver valor 1=VERDADEIRO. Em outras palavras, a lmpada acende se uma das chaves estiver fechada ou quando as duas estiverem fechadas (forem verdadeiras), o que caracteriza um circuito com chaves em paralelo, como o mostrado a seguir (na funo OU, basta que uma entrada seja verdadeira para a expresso ser avaliada como verdadeira);

uma funo ! (no) uma operao de inverso. Ela converte o estado ou valor de uma varivel lgica em seu inverso lgico: de VERDADEIRO para FALSO e de FALSO para VERDADEIRO. No caso do circuito, funciona assim: se a chave est aberta, ela se fecha e acende a luz, e, se est fechada, ela se abre e apaga a luz.

Exemplos de expresses lgicas vlidas:


se (altura > 1.80 e idade < 21 e escolaridade >= 2) se (idade >= 13 e idade <=20) se ((media >= 7.0 e faltas <= 18) ou foiDispensado == 1) se !( numero % 2 == 0)

Unisa | Educao a Distncia | www.unisa.br

27

Elisamara de Oliveira

Exemplos de expresses lgicas INVLIDAS:


se (altura > 1.80 e ou idade < 21)

(os operadores e e ou so binrios, envolvem sempre 2 operandos, portanto no podem ser utilizados juntos) (a varivel idade deveria ser repetida para obter o resultado lgico da comparao)

se (idade >=13 e <= 20)

2.6 Operadores Relacionais

Os operadores relacionais permitem a comparao entre contedos de variveis ou de valores e resultam sempre num resultado FALSO (avaliado como zero) ou VERDADEIRO (avaliado como diferente de zero).
Saiba mais
Os operadores relacionais so: > (maior que); >= (maior ou igual a); < (menor que); <= (menor ou igual a); == (igual a); != (diferente de).

Importante: o sinal = corresponde ao comando de atribuio e o sinal == significa comparao! Exemplos de expresses relacionais vlidas:
se se se se (resposta == (resposta == (resposta != (sexo == F S) S ou resposta == s) S e resposta != s) e altura <= 1.50)

Exemplos de expresses relacionais INVLIDAS:


se (resposta ! = S)

(o smbolo do operador diferente est errado: no pode haver espao em branco entre o ! e o =) (o smbolo do operador menor que est errado: no pode haver espao em branco entre o < e o =)
= 1.50)

se (altura <

28

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

se (resposta = S)

(o problema aqui o uso do smbolo =, que do comando de atribuio, e no == que a igualdade; na verdade, o comando no est errado, mas est sendo feita uma atribuio e no uma comparao. Portanto, muito cuidado!)

2.7 Comando Condicional

O comando condicional permite que se tomem 2 caminhos diferentes e mutuamente exclusivos a partir da avaliao de uma condio. Se a condio avaliada como verdadeira, um caminho seguido; se avaliada como falsa, outro caminho escolhido, nunca ambos! A associao do comando condicional com fatos rotineiros imediata: se estiver chovendo eu vou de carro, seno eu vou de bicicleta; nesse exemplo, a pessoa avalia a condio do tempo antes de decidir se sair de carro ou de bicicleta e no h possibilidade de ela sair com ambos os meios de transporte!

Ateno
A sintaxe do comando condicional : se (<condio>) { <bloco de comandos 1> } seno { <bloco de comandos 2> } A semntica (como funciona) do comando condicional : a <condio> avaliada como VERDADEIRA (valor diferente de zero) ou FALSA (valor igual a zero); se a <condio> for VERDADEIRA, o <bloco de comandos 1> executado e o comando condicional finalizado; se a <condio> for FALSA, o <bloco de comandos 2> executado e o comando condicional finalizado. seno clusula do comando se, ou seja, no comando, apenas faz parte do comando se. A clusula seno pode no existir num comando se. Nesse caso, (quando no existe a clusula seno), quando a <condio> avaliada como FALSA, nenhum comando executado e o comando se finalizado. Os delimitadores de incio { e de fim } so obrigatrios quando existe mais de um comando no <bloco de comandos 1> ou mais de um comando no <bloco de comandos 2>. Quando existir apenas um comando, os delimitadores ficam opcionais.

Unisa | Educao a Distncia | www.unisa.br

29

Elisamara de Oliveira

Exemplos de comandos condicionais VLIDOS:


se (media >= 7.0) aprovado = 1; se (media >= 7.0) { aprovado = 1; } se (media >= 7.0) { aprovado = 1; ++contadoraprovados; } se (media >= 7.0) aprovado = 1; seno aprovado = 0; se (media >= 7.0) { aprovado = 1; ++contadoraprovados; } seno aprovado = 0; se (media >= 7.0 e faltas <= 9) { aprovado = 1; ++contadoraprovados; } seno { aprovado = 0; ++contadorreprovados; }

Exemplos de comandos condicionais INVLIDOS:


se media >= 7.0 aprovado = 1; se (media >= 7.0) { aprovado = 1; ++contadoraprovados;

(faltou colocar parnteses na condio)

(faltou colocar o delimitador de fim { no final do comando )

30

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

se (media >= 7.0) aprovado = 1 seno aprovado = 0;

(faltou ; depois do comando aprovado = 1)

se (media >= 7.0) { aprovado = 1; ++contadoraprovados; } seno aprovado = 0

(novamente faltou ; aps o comando aprovado = 0)

se (media >= 7.0 e faltas <= 9) { aprovado = 1; ++contadoraprovados; } seno aprovado = 0; ++contadorreprovados; }

(faltou o delimitador { aps o seno)

se (media >= 7.0) aprovado = 1; ++contadoraprovados; seno aprovado = 0

(faltaram os delimitadores { } aps a condio do comando se caso verdadeiro (antes do seno))

2.8 Comando de Repetio

O comando de repetio permite que um comando ou um bloco de comandos seja executado diversas vezes. O nmero de vezes determinado por uma condio que constantemente avaliada. Enquanto a condio for avaliada como verdadeira (ou diferente de zero), o comando ou bloco de comandos executado repetidamente; quando a condio fica falsa, o comando de repetio para. A associao do comando de repetio com fatos rotineiros possvel: enquanto o nmero da casa for menor que o procurado, continue subindo a rua e verificando se a casa procurada; nesse exemplo, a pessoa avalia a condio, que a verificao do nmero desejado entre diversas casas de uma rua, por exemplo. Essa avaliao continua at que a casa procurada seja encontrada ou que se encontre uma casa cujo nmero seja superior ao procurado, supondo que a numerao esteja em ordem crescente.

Unisa | Educao a Distncia | www.unisa.br

31

Elisamara de Oliveira

Ateno
A sintaxe do comando de repetio :
enquanto (condio) { <bloco de comandos> }

A semntica (como funciona) do comando de repetio : a condio avaliada como VERDADEIRA (diferente de zero) ou FALSA (igual a zero); se a condio for VERDADEIRA, o <bloco de comandos> executado e, ao chegar ao delimitador de fim } ou final do comando, automaticamente se retorna avaliao da condio; se a condio for FALSA, o comando de repetio finalizado. Entre os comandos do <bloco de comandos> ESSENCIAL que exista um comando que altere a <condio> que constantemente avaliada, pois, caso contrrio, o comando enquanto NUNCA TERMINAR! Os delimitadores { e } so obrigatrios quando existe mais de um comando no <bloco de comandos>. Quando existir apenas um comando, os delimitadores ficam opcionais e o ; funcionar como delimitador de fim, indicando o final do comando enquanto.

Exemplos de comandos de repetio vlidos:


enquanto (contador < 3) ++contador; numero = 1; enquanto (numero <= 50) { se (numero % 2 == 0) ++contapar; seno ++contaimpar; ++numero;

Exemplos de comandos de repetio INVLIDOS:


enquanto contador <= 10 ++contador;

(faltaram parnteses na condio)

numero = 1; enquanto (numero <= 50) { se (numero % 2 == 0) ++contapar; seno ++contaimpar; ++numero;

(faltou colocar o delimitador fim } aps o ltimo comando) Unisa | Educao a Distncia | www.unisa.br

32

Algoritmos e Linguagem de Programao

numero = 1; enquanto (numero <= 50) se (numero % 2 == 0) ++contapar; seno ++contaimpar; ++numero;

(como no existem os delimitadores de incio e fim { }, somente o comando se faz parte do comando enquanto e, como o comando se no altera a varivel numero, o comando enquanto nunca vai parar!)

numero = 1; enquanto (numero <= 50); { se (numero % 2 == 0) ++contapar; seno ++contaimpar; ++numero; }

(como foi colocado ; aps a condio, o comando enquanto foi finalizado; a varivel numero no ser alterada e o comando enquanto nunca vai parar!)

2.9 Comandos de Entrada e Sada

O comando de entrada permite que o usurio possa fornecer valores ao programa, atravs do teclado, que sero armazenados nas variveis. O comando de sada permite que informaes e valores de variveis possam ser enviados ao usurio pela tela do monitor. dessa forma que se consegue estabelecer um dilogo com o usurio. Se o programa deseja saber o nome do usurio, por exemplo, usa-se o comando de sada para fazer a pergunta qual o seu nome? e usa-se o comando de entrada para obter a resposta e armazen-la numa varivel.

Unisa | Educao a Distncia | www.unisa.br

33

Elisamara de Oliveira

Ateno
A sintaxe do comando de entrada : leia(%letra, [&] varivel); em que: %letra representa os especificadores de formato e depende do tipo associado varivel: %d ou %i %f %c %s para variveis do tipo inteiro (integer); para variveis do tipo real (float); para variveis do tipo caractere (nico) (character); para variveis do tipo caractere (cadeia ou string);

O smbolo & deve ser utilizado apenas para os tipos numricos, ou seja, para variveis declaradas como inteiras ou reais. A semntica (como funciona) do comando de entrada : a varivel tem que ter sido previamente declarada; o usurio vai utilizar o teclado para fornecer o dado e, depois que ele teclar <ENTER>, tudo o que ele tiver digitado ser armazenado na varivel automaticamente. Recomenda-se utilizar o comando leia para ler uma s <varivel> de cada vez.

A tabela a seguir mostra um exemplo de declarao de variveis de tipos bsicos e a forma correta de leitura. Declarao inteiro numero; real valor; Leitura leia(%i, &numero); leia(%f, &valor); Exemplos de contedos numero = -5; numero = 2002; valor = -5.867; valor = 2002.50; ch = 5; ch = s; ch = #; nome = Maria; nome = fim;

caractere ch;

leia(%c, ch);

caractere nome[20];

leia(%s, nome);

Observe, na tabela, a diferena entre a declarao, a leitura e a atribuio de valores a um caractere nico (%c) e a uma cadeia de caracteres (%s). Um nico caractere vem entre apstrofos ( ) e uma cadeia de caracteres entre aspas ( )!

34

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Ateno
A sintaxe do comando de sada : imprima( frase e %letra [, lista de variveis] ); Entre aspas, podem ser escritas frases formadas por palavras intercaladas pelos especificadores de formato %s, %c, %i, %d ou %f, descritos no comando leia. Para cada especificador utilizado, a varivel do tipo correspondente deve constar da lista de variveis. A lista de variveis opcional; deve existir somente quando um especificador de formato colocado na frase entre aspas e, nesse caso, deve haver uma vrgula separando a frase da lista de variveis e vrgulas separando as variveis da lista. A semntica (como funciona) do comando de sada : pode ser impressa qualquer frase e qualquer varivel dentro de um comando imprima, desde que a frase esteja entre aspas e as variveis estejam devidamente listadas aps a vrgula que separa a frase da lista de variveis; a frase entre aspas copiada integralmente para a tela e os especificadores de formato so substitudos pelas variveis da lista de variveis; quando existe uma varivel, o seu contedo copiado para a tela; a ordem em que as palavras da frase e as variveis aparecem no comando imprima mantida quando impressa na tela.

Exemplos de comandos de entrada e sada vlidos:


imprima (Qual o seu nome? ); leia(%s,nome); imprima (Qual a sua idade? ); leia (%i,&idade); imprima (Qual a sua altura? ); leia (%f,&altura); imprima (Qual o seu sexo? (F/M) ); leia (%c,sexo); imprima (O seu nome : %s e voc tem %i anos ,nome, idade); imprima (Voc foi aprovado no curso com mdia= %f, Media);

Exemplos de comandos de entrada e sada INVLIDOS:


imprima (Qual o seu nome? );

(faltaram aspas aps a interrogao para delimitar a frase a ser impressa)

Unisa | Educao a Distncia | www.unisa.br

35

Elisamara de Oliveira

imprima (Qual a sua idade? ); leia (%i,idade);

(faltou o & antes do identificador idade, pois o tipo numrico: %i)

imprima (A sua idade %i idade);

(faltou uma vrgula entre a frase entre aspas e a varivel idade)

imprima (Voc foi aprovado no curso com mdia= , media);

(faltou o especificador de formato da varivel Media (%f) aps o = na frase entre aspas)

imprima (Qual o seu nome? ); leia (%s,&nome);

(no pode haver & na leituras de variveis do tipo caractere (%c e %s) )

Saiba mais

Explicao adicional Passo a passo do comando de impresso: imprima (frase varivel1 varivel2 varivel3); (entre a frase e a varivel e entre as variveis deve haver uma vrgula separando-as). imprima (frase , varivel1, varivel2, varivel3); (a frase deve vir entre aspas). imprima (frase , varivel1, varivel2, varivel3); (dentro da frase, deve vir um formato para cada varivel, compatvel com o seu tipo bsico). imprima (frase %s %i %f ,varivel1,varivel2,varivel3); Exemplo:
imprima (Vc se chama %s, tem %i anos e %f m de altura , nome, idade, altura);

36

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

2.10 Separador de Comandos

Todos os comandos do PortuC so separados por ponto e vrgula.


Ateno
O separador de comandos : ;

Exemplos de erro na separao de comandos:


se (resposta != s); { <comandos> }

(o ; depois da condio finaliza o comando se)

enquanto (contador < 5) ; { <comandos> }

(o ; depois da condio do comando enquanto coloca o programa em loop infinito!)

2.11 Comentrios

Os comentrios no pertencem s instrues dos algoritmos, mas so teis para que o programador explique o que est sendo feito.
Saiba mais
Os comentrios podem vir delimitados entre /* */ Ou podem ser comentrios de linha //

Exemplos de comentrios:
/* Este trecho calcula a media de notas */ desc = preco*0.15; // calcula desconto de 15%

Unisa | Educao a Distncia | www.unisa.br

37

Elisamara de Oliveira

2.12 Bloco de Programa

Bloco de programa o nome que se d estrutura de um programa escrito numa determinada linguagem. O bloco de programa em PortuC pode ser visto a seguir.
Saiba mais
O Bloco de Programa em PortuC tem a forma: /* comentrios */ <declarao de variveis>; principal() { <bloco de comandos>; } desejvel que todo algoritmo escrito em PortuC comecer com um comentrio dizendo o que o programa faz, embora comentrios sejam opcionais. Em seguida, devem ser declaradas todas as variveis que sero utilizadas no <bloco de comandos>. Aps a declarao das variveis, deve-se escrever a palavra principal( ), que delimita a seo em que os comandos podem ser utilizados. O <bloco de comandos> pode conter todos os comandos vlidos em PortuC, separados por ponto e vrgula, e estes devem estar contidos entre os delimitadores { e }. Nenhum comando pode ser usado fora dessa seo. importante notar que letras maisculas e minsculas alteram os identificadores e as palavras reservadas do PortuC.

Exemplos de programas escritos em PortuC vlidos:


/* sexo.c: le o nome e o sexo de uma pessoa e imprime uma frase dizendo se masculino, feminino ou invalido */ caractere nome[20], sexo; principal ( ) { imprima (Qual eh o seu nome? ); leia(%s,nome); imprima (Qual eh o seu sexo? (f/m) ); leia (%c,sexo); se (sexo == f ou sexo == F) imprima (%s voce eh do sexo feminino. ,nome); seno se (sexo == m ou sexo == M) imprima (%s voce eh do sexo masculino. ,nome); seno imprima (Voce digitou um sexo invalido ); imprima(Fim do programa.); }

38

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

/* nota.c: le a nota de um aluno e verifica se ele foi aprovado ou reprovado */ real nota; principal() { imprima (Digite sua nota final: ); leia(%f,&nota); se (nota >= 6.0) imprima (Voce foi aprovado! ); seno imprima (Voce foi reprovado. ); imprima(Fim do programa.); } /* idade.c: le o ano atual e o ano de nascimento de uma pessoa e imprime uma frase dizendo qual eh a idade da pessoa */ inteiro anoatual, anonasc, idade; principal() { imprima (Qual eh o ano atual? ); leia(%i,&anoatual); imprima (Qual eh o seu ano de nascimento? ); leia (%i,&anonasc); idade = anoatual anonasc; imprima (Voce fez ou fara %i anos , idade); imprima(Fim do programa.); }

/* parimpar.c: le um numero e verifica se ele eh par ou impar */ inteiro n; principal() { imprima (Digite um numero inteiro: ); leia(%i,&n); se (n % 2 == 0) imprima (O numero %i eh par , n); seno imprima (O numero %i eh impar , n);

imprima( Fim do programa.); }

Unisa | Educao a Distncia | www.unisa.br

39

Elisamara de Oliveira

Exemplos de programas escritos em PortuC INVLIDOS:


caractere sexo, caractere[20];

principal ( ) { imprima (Qual eh o seu nome? ); leia(%s,caractere); imprima (Qual eh o seu sexo? (F/M) ); leia (%c,sexo); se (sexo == F) imprima (%s voce eh do sexo feminino. ,caractere); seno imprima (%s voc eh do sexo masculino. ,caractere); }

(a varivel caractere tem o mesmo nome da palavra reservada caractere)

real nota;
{ imprima (Digite sua nota final: ); leia(%f,&nota); se (nota >= 6.0) imprima (Voce foi aprovado! ); seno imprima (Voce foi reprovado... ); imprima(Fim do programa.); }

(faltou a palavra principal( ) para dar incio seo de comandos)

real nota; nota = 7.5; principal() { imprima (Digite sua nota final: ); leia(%f,&nota); se (nota >= 6.0) imprima (Voce foi aprovado! ); seno imprima (Voce foi reprovado... ); imprima( Fim do programa.); }

(h um comando de atribuio nota=7.5; na seo de declarao de variveis: no pode!)

40

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

inteiro anoatual, anonasc, idade; principal() imprima (Qual eh o ano atual? ); leia(%i,&anoatual); imprima (Qual eh o seu ano de nascimento? ); leia (%i,&anonasc); idade = anoatual anonasc; imprima (Voce fez ou fara %i anos , idade); imprima(Fim do programa.); }

(faltou o delimitador { para iniciar a seo de comandos do programa)

inteiro N; principal() { imprima (Digite um numero inteiro: ); leia(%i,&n); se (n % 2 == 0) imprima (O numero %i eh par , n); seno imprima (O numero %i eh impar , n); imprima( Fim do programa.); }

(no foi declarada a varivel n ou foi declarada errada (N maisculo diferente de n minsculo))

2.13 Resumo do Captulo

Caro(a) aluno(a), este captulo foi um convite a aprender PortuC, que a lngua que os algoritmos (que so as bases dos programas de computador) falam! O PortuC , basicamente, uma traduo da linguagem C para Portugus. Assim, aprendendo bem o PortuC, voc j estar se preparando para aprender a prpria linguagem C, de forma simples e fcil!

Unisa | Educao a Distncia | www.unisa.br

41

CONSTRUO DE ALGORITMOS EM PORTUC: PRATICANDO OS COMANDOS E FAZENDO CLCULOS

3.1 Declarao de Variveis Comandos leia e imprima

1. Escreva um comando que leia um nmero inteiro.

2. Escreva comandos para pedir e ler um nmero inteiro.

3. Escreva comandos para pedir, ler e imprimir um nmero inteiro.

4. Repita o exerccio 3 para um nmero real.

Saiba mais
Ao invs de usar %f para apresentar a altura, usamos %.2f O que isso significa? Que ns queremos apresentar a altura com apenas 2 dgitos na parte decimal! Afinal, a forma tradicional de se apresentar uma altura com 2 dgitos apenas, como 1.75, 1.62, 1.88 etc., no mesmo?

5. Declare as variveis utilizadas nos exerccios de 1 a 4.

Unisa | Educao a Distncia | www.unisa.br

43

Elisamara de Oliveira

6. Escreva comandos para pedir, ler e imprimir o nome e a idade de uma pessoa.

3.2 Comando Condicional se

7. Escreva um comando para verificar se a idade lida no exerccio 6 corresponde a um adulto (maior que 17 anos). Se for verdadeiro, imprimir uma frase dizendo que um adulto.

8. Escreva um comando para verificar se a idade lida no exerccio 6 corresponde a uma criana (menor que 13 anos). Se for, imprima uma frase dizendo que uma criana.

9. Escreva um comando para verificar se a idade lida no exerccio 6 corresponde a um adolescente (entre 13 e 17 anos). Se for, imprima uma frase dizendo que um adolescente.

10. Escreva um nico comando capaz de classificar uma pessoa pela faixa etria e ainda verificar se a idade vlida.

44

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

3.3 Bloco de Programa

11. Transforme o exerccio 6 num algoritmo, ou seja, construa o Bloco de Programa em PortuC.

12. Escreva um algoritmo que leia o nome e a idade de uma pessoa e imprima uma frase dizendo se a pessoa uma criana, um adolescente, um adulto ou se a idade invlida.

Unisa | Educao a Distncia | www.unisa.br

45

Elisamara de Oliveira

3.4 Operaes Bsicas com Nmeros

13. Escreva um comando para somar dois nmeros: n1 e n2.

Observe que soma a varivel na qual o resultado da adio de n1 com n2 ser armazenado. So usados apenas o comando de atribuio = e o operador +. 14. Escreva comandos para subtrair e multiplicar dois nmeros: n1 e n2.

O raciocnio para subtrair e multiplicar dois nmeros o mesmo usado na adio. 15. Escreva um comando para dividir dois nmeros: n1 por n2. Antes de dividir um nmero n1 (numerador) por um nmero n2 (denominador) necessrio que verifiquemos se o denominador diferente de zero, pois no existe diviso por zero! O comando divisao = n1 / n2; vlido do ponto de vista sinttico, mas em programao temos que pensar nos erros que porventura possam ocorrer quando da execuo dos comandos.

Para evitarmos a diviso eventual por zero, usamos o comando se. Somente se n2 for diferente de zero que a diviso ser calculada; caso contrrio, uma mensagem impressa para comunicar ao usurio o motivo pelo qual o clculo no foi efetuado. O resultado da diviso um nmero real. 16. Escreva um comando para calcular o quadrado de um nmero inteiro n1 e tambm n1 elevado a 3.

Com certeza, muito mais fcil do que voc pensava, no ? So pequenos truques da programao. Mas se quisermos calcular n1 elevado a 1000 ou n1 elevado a um nmero qualquer, teremos que escrever um pequeno trecho de algoritmo. Depois eu mostro como fazer.

46

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

17. Escreva um comando para calcular a raiz quadrada de um nmero n1.

Novamente, para evitarmos um erro tentando calcular a raiz de um nmero negativo, usamos o comando se. Observe que sqrt( ) um operador aritmtico cuja sintaxe diferente dos outros vistos nos exerccios anteriores. Esse tipo de operador, na verdade, uma funo que recebe n1 como parmetro e devolve a sua raiz quadrada calculada. Existem muitas outras funes e elas sero apresentadas na medida em que se fizer necessria a sua utilizao. 18. Escreva comandos para fornecer o quociente e o resto da diviso inteira de n1 por n2. No caso da diviso inteira de n1 (numerador) por um nmero n2 (denominador), tambm necessrio que o denominador seja diferente de zero.

Nesse caso, importante voc notar que ambos os nmeros (n1 e n2) tm que ser inteiros para que os operadores / (quociente da diviso) e % (resto da diviso inteira) possam ser utilizados! Como voc pode notar, no existe um operador especfico para o quociente da diviso inteira; usa-se o / (que da diviso real), mas, como n1 e n2 so inteiros, haver uma converso automtica de tipos, com o truncamento da parte fracionria do resultado, o que nos fornece o quociente da diviso inteira. Isso um trunfo do PortuC: nunca se esquea disso! Se n1 for 7 e n2 for 3, por exemplo, quais seriam os valores de quociente e resto? (7 dividido por 3 d 2 (quociente) e sobra 1 (resto), no ?)

Saiba mais
Qual a diferena entre diviso real e diviso inteira? 3.5 este o resultado da diviso real 7 / 2 = 3 (quociente da diviso inteira) 7 % 2 = 1 (resto da diviso inteira)

Unisa | Educao a Distncia | www.unisa.br

47

Elisamara de Oliveira

19. Escreva um comando para calcular 10% de um nmero.

Em primeiro lugar, vamos esclarecer que NO EXISTE O OPERADOR porcentagem. Na verdade, % o resto da diviso inteira. Portanto, o clculo da porcentagem tem que ser feito pela operao equivalente: 10% = 10/100 = 0.10. A varivel porc deve ser do tipo real. No recomendo o uso de 10/100, pois 10/100 pode ser zero, com a converso automtica de tipos. Ento, use sempre 0.10 no clculo de 10%. 20. Suponha que um produto custe um determinado preo, mas, se pago vista, o cliente ganha 5% de desconto. Escreva comandos para calcular o valor do desconto e o valor final do produto.

21. Escreva comandos para separar os dgitos de um nmero inteiro menor que 100 em dezena e unidade. Vamos entender, primeiramente, o que se quer: dado um nmero menor que 100, por exemplo, 29, deseja-se obter o dgito 2 (dezena) separado do dgito 9 (unidade); no caso de um nmero de um s dgito, por exemplo, 3, o resultado seria 0 (dezena) e 3 (unidade). Bem, este um problema muito comum na programao e muito fcil de ser resolvido tambm! Basta usar os operadores / e % com nmeros inteiros.

Vamos fazer um pequeno teste: 29 dividido por 10 d 2 e sobra 9, certo? 2 a dezena de 29 e coincide com o quociente da diviso inteira; 9 a unidade de 29 e coincide com o resto da diviso inteira por 10! No caso de n1 ser igual a 3, ficaria assim: 3 dividido por 10 d 0 e sobra 3. Nesse caso, 0 a dezena (/) e 3 a unidade (%). Um bom teste aqui seria voc responder: como poderamos separar os 3 dgitos de nmeros entre 100 e 999? Se no conseguir resolver, esta uma boa pergunta para o frum!

48

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

22. Suponha que, numa certa universidade, os alunos tm um nmero de 5 dgitos que os identificam. Desses 5 dgitos, os 2 primeiros indicam o ano em que o aluno entrou na universidade. Escreva comandos para separar os 2 primeiros dgitos de um nmero inteiro de 5 dgitos que representa a identificao do aluno. Vamos entender o que se quer: dado um nmero de 5 dgitos, por exemplo, 99211, se deseja obter os 2 primeiros dgitos, no caso, 99 (que indicaria que o aluno entrou em 1999 na universidade).

Mas e se o aluno entrou em 2000 ou 2009? O resultado teria que ser ano de entrada = 0. Vamos fazer, agora, os testes. Vejamos: n1 00211. 00211 dividido por 1000 d ZERO (que o quociente) e sobra 211. Pode parecer estranho, mas pense: quando se divide um nmero por 1000, o menor resto zero e o maior resto pode ser 999. Como queremos apenas o quociente da diviso inteira, o resultado ser anoentrada = 0 (que, no caso, representaria 2000). Funciona! Outro teste: n1 igual a 10231. 10231 dividido por 1000 d 10 e sobra 231, certo? 10 o quociente, o que resulta em anoentrada= 10 (que seria 2010)! Funciona mesmo! Faa outros testes e verifique que d certo. E como o clculo simples, no?

3.5 Operaes com Operadores Lgicos e Relacionais

23. Escreva um comando para verificar se um nmero positivo ou negativo.

Observe que 0 pode ser considerado um nmero positivo e todo nmero menor que 0 negativo. 24. Escreva um comando para verificar se um nmero par ou mpar. Um nmero par aquele que, dividido por 2, tem resto zero: 0, 2, 4, 6, 8, 10..., e um nmero mpar aquele que, dividido por 2, tem resto diferente de zero: 1, 3, 5, 7, 9...

Unisa | Educao a Distncia | www.unisa.br

49

Elisamara de Oliveira

25. Escreva um comando para verificar se um nmero maior que 100.

26. Escreva um comando para verificar se um nmero est entre 10 e 100.

Para se verificar se um nmero est entre dois limites, so necessrias duas comparaes: uma para o limite inferior e outra para o limite superior, e essas comparaes tm que estar ligadas pelo conectivo lgico e, quer dizer, somente quando as duas comparaes forem verdadeiras, o nmero est dentro dos limites. No como na Matemtica, que usamos uma expresso do tipo 10 n1 100! 27. Suponha que certo clube esportivo quer selecionar atletas para o time de basquete. As exigncias so: ter 1.85 m de altura ou mais, ter menos de 21 anos e ter, pelo menos, o primeiro grau completo. Escreva um comando para verificar se um candidato pode ser ou no aprovado para o time de basquete. O grau de instruo definido como: 0= sem instruo, 1=primeiro grau, 2=segundo grau, 3=superior.

Observe que, ao se fazer a comparao da altura, no se faz referncia unidade de medida metros, quer dizer, estaria errada uma comparao do tipo altura >= 1.85 m. O mesmo acontece com a idade, em que os anos foram (e devem) ser omitidos.

50

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

28. Suponha que o clube esportivo deseje, agora, formar um time masculino (sexo == m) e outro feminino (sexo == f) e tenha mudado um pouco seus critrios. As exigncias passaram a ser: ter 1.85m de altura ou mais para os homens e 1.75 ou mais para as mulheres e ter menos de 21 anos. Escreva um comando para verificar se um candidato ou candidata pode ser ou no aprovado(a) para o time de basquete.

Observe que surgiu o conectivo ou ligando as comparaes de altura para os sexos diferentes, que continuaram a ser ligados pelo conectivo e na comparao de idade! Pense por que assim.

3.6 Resumo do Captulo

Caro(a) aluno(a), este captulo foi uma excelente oportunidade para exercitarmos a linguagem de programao.

3.7 Atividades Propostas

Agora hora de voc praticar um pouco sozinho(a)! A minha forte recomendao que voc faa os exerccios sozinho(a), consultando os exemplos anteriores para ajud-lo(a). Somente depois da sua tentativa, que voc deve conferir as respostas. Boa sorte! 1. Escreva um algoritmo que leia e imprima o nome e as duas notas de um aluno. 2. Escreva um comando que calcule a mdia das duas notas lidas no exerccio 3.1.1. 3. Escreva um comando que verifique se a mdia calculada no exerccio 3.1.2 maior ou igual a 7.0; se for, imprima uma frase dizendo que o aluno foi aprovado, caso contrrio, imprima uma frase dizendo que foi reprovado. 4. Escreva um algoritmo que leia o nome e as duas notas de um aluno, calcule a mdia das notas e imprima uma frase dizendo se ele foi aprovado (mdia maior ou igual a 7.0) ou reprovado.

Unisa | Educao a Distncia | www.unisa.br

51

Elisamara de Oliveira

5. Considere o trecho de algoritmo em PortuC: se (B1) C1; seno se (B2) se (B3) C2; seno { C3; C4; }

C5;

Em PortuC, no existe uma varivel do tipo lgico a qual se possa atribuir um valor verdadeiro ou falso. No entanto, o PortuC considera o valor 0 (zero) como sendo falso e qualquer outro valor diferente de zero como sendo verdadeiro. Nos exerccios que se seguem, considere que os valores de B1, B2 e B3 representam valores verdadeiros (diferentes de zero) ou falsos (iguais a zero) e responda pergunta: quais comandos sero executados. a) Se B1= Verdadeiro B2 =Verdadeiro e B3=Falso? b) Se B1=Falso B2= Verdadeiro e B3= Falso? c) Se B1=Falso B2=Verdadeiro e B3=Verdadeiro? d) Quais os valores de B1, B2 e B3 para que somente o comando C5 seja executado? 6. Dado um conjunto de respostas sim ou no de vrias pessoas e seu sexo (F=feminino, M=masculino), escreva comandos em PortuC para calcular: a) o nmero de mulheres que responderam sim; b) o nmero de homens que responderam no; c) o nmero de mulheres e homens que responderam no.

52

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

7. Observe o algoritmo a seguir. Qual o valor de L aps a execuo deste algoritmo? inteiro A, B, C; real X, Y; inteiro L; principal() { A = 0; /* falso */ B = 1; /* verdadeiro */ C = 0; /* falso */ X = 1.5; Y = 3.2; se (C ou (X+Y>5) ou no(A e B)) L = 0; seno L = 1;

8. Escreva trechos de algoritmo em PortuC que ajudem o Instituto Brasileiro de Geografia e Estatstica (IBGE) a fazer o censo populacional de uma certa cidade. Sabendo-se que os seguintes dados foram pedidos aos cidados: SEXO (H= homem, M= mulher) e RENDA (nmero de salrios-mnimos sm), os trechos de algoritmo devem fornecer: a) o total de homens; b) o total de mulheres; c) o total de pessoas da classe C (at 4 sm), da classe B (at 20 sm) e da classe A (acima de 20 sm). 9. Fornecidos os dados das candidatas a modelo: ALTURA, PESO e IDADE, escreva um trecho de algoritmo para verificar se os dados se enquadram nos seguintes limites: ALTURA: de 1.70 a 1.85 m PESO: de 48.0 a 60.0 kg IDADE: de 17 a 21 anos Se os dados da candidata corresponderem a esses limites, deve ser impressa uma frase dizendo que ela foi aprovada; caso contrrio, que no foi aprovada. 10. Modifique o exerccio anterior para que uma frase seja impressa aps a verificao de cada quesito, dizendo se a candidata foi aprovada ou no em cada um deles e uma frase final dizendo se foi aprovada ou no como modelo.

Unisa | Educao a Distncia | www.unisa.br

53

METODOLOGIA PARA A CONSTRUO DE ALGORITMOS

Neste captulo, caro(a) aluno(a), voc aprender uma metodologia que facilitar o processo de desenvolvimento de solues algortmicas para os problemas que sero propostos para voc resolver. A metodologia composta de uma sequncia de passos, cujo principal objetivo ajud-lo(la) a resolver problemas dividindo-os por partes, diminuindo, assim, a sua complexidade. Como ficar bem claro logo adiante, resolvendo cada parte do problema por vez, consegue-se chegar a solues completas e complexas a partir de solues simples, que j foram, muitas vezes, encontradas para diversos outros problemas semelhantes. Voc conhecer os passos da metodologia e vrios exemplos prticos sero fornecidos de maneira a familiariz-lo(la) com o mtodo. importante ressaltar que a metodologia um processo dinmico. Voc pode estar num passo mais adiante e identificar uma varivel auxiliar e voltar aos passos anteriores e alter-los, por exemplo. Portanto, no se detenha aos detalhes, pelo contrrio, sinta-se livre para criar suas solues. O mtodo pretende ajud-lo(la) e no engess-lo(LA)! Vamos em frente!

4.1 Os Passos da Metodologia


Passo 1: Ler e entender o problema importante ler e reler, pelo menos 3 vezes, o problema at que ele seja completamente compreendido. No adianta querer buscar a soluo de um problema que no esteja suficientemente esclarecido! Passo 2: Listar todos os dados de entrada do problema Um dado de entrada aquele que ser fornecido pelo usurio, ou seja, o dado que ser lido pelo programa. Passo 3: Listar todos os dados de sada do problema Um dado de sada algo que ser produzido ou calculado pelo programa; tudo aquilo que deve ser apenas impresso no deve ser considerado um dado de sada.

Unisa | Educao a Distncia | www.unisa.br

55

Elisamara de Oliveira

Passo 4: Listar todas as variveis auxiliares do programa Uma varivel auxiliar identificada como aquela que necessria para o clculo de alguma varivel de sada e no varivel de entrada. Por exemplo, num problema em que vrios nmeros sero lidos e sua mdia deve ser calculada, o nmero uma varivel de entrada e a mdia uma varivel de sada, mas como, para calcular a mdia, necessrio somar os nmeros e dividir a soma pela quantidade de nmeros lidos, a soma e a quantidade de nmeros so variveis auxiliares do programa. Assim, para identificar as variveis auxiliares, basta analisar cada uma das sadas e verificar se, dadas as entradas, h necessidade de mais alguma varivel para facilitar o seu clculo. Passo 5: Declarar todas as variveis do programa Cada dado de entrada, cada dado de sada e cada varivel auxiliar geram uma varivel. As variveis do programa devero ser uma para cada dado de entrada, uma para cada dado de sada e uma para cada varivel auxiliar. extremamente importante que o programador escolha nomes de variveis significativos, que possam exprimir a funo da varivel. Por exemplo, uma varivel que receber a idade de uma pessoa no deveria se chamar x, nem mesmo i seria bom, o ideal seria idade. Passo 6: Inicializar as variveis do programa H um conjunto de pequenas regras que pode nos ajudar a encontrar os valores iniciais de cada varivel do programa, apesar de que nem todas as variveis precisam ter valores iniciais: toda varivel de entrada inicializada com o comando leia; todo contador e todo somador devem ser inicializados com 0 ( zero); todo produto deve ser inicializado com 1 (um). Passo 7: Escrever o cdigo para calcular cada uma das sadas do programa Os principais problemas a serem solucionados, na maior parte das vezes, resumem-se no clculo das sadas do programa. Portanto, neste passo, cada uma das sadas deve ser analisada individualmente e sua soluo encontrada separadamente. Passo 8: Imprimir os resultados do programa Aqui, s devem ser impressos os resultados pedidos na especificao do problema. Passo 9: Montar o algoritmo unindo os resultados dos passos 5 a 8 Os passos 5 a 8 tm a soluo do problema. A montagem do algoritmo/programa pode seguir um esquema bsico, mas vai depender muito da lgica de cada problema. Portanto, o esquema a seguir

56

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

serve apenas de orientao. Cada problema deve, no entanto, ser analisado logicamente para chegar ao seu algoritmo.
Ateno
/* Nome do Programa e o que ele faz */ <passo 5 declarar todas as variveis do programa> principal() { <passo 6 inicializar as variveis do programa > <passo 7 calcular cada uma das sadas do programa> <passo 8 imprimir os resultados do programa> imprima(Fim do programa);

Passo 10: Fazer o teste de mesa do programa a partir de diferentes valores iniciais O teste de mesa consiste na execuo de todas as instrues do programa a partir de conjuntos de valores iniciais. Os valores iniciais devem ser escolhidos de maneira que as condies de contorno do problema sejam verificadas. Por exemplo, num programa que trabalhe com flags, deve ser testada a condio em que o valor do flag seja fornecido como dado inicial; num programa que s leia nmeros positivos, devem ser fornecidos nmeros negativos e zero; entre outras situaes possveis.

4.2 Soluo de Exerccios utilizando a Metodologia

A estratgia que utilizaremos nesta seo propor uma lista de exerccios e resolver alguns deles usando a metodologia, deixando outros para que voc, utilizando solues semelhantes, resolva-os sozinho(a), ok? Ento, vamos l!

4.3 Resumo do Captulo

Neste captulo, caro(a) aluno(a), voc aprendeu uma metodologia que facilitar o processo de desenvolvimento de solues algortmicas para os problemas que sero propostos para voc resolver. A metodologia composta de uma sequncia de passos, cujo principal objetivo ajud-lo a resolver problemas dividindo-os por partes, diminuindo, assim, a sua complexidade. Como ficar bem claro logo adiante, resolvendo cada parte do problema por vez, consegue-se chegar a solues completas e complexas a partir de solues simples que j foram, muitas vezes, encontradas para diversos outros problemas semelhantes. Voc conhecer os passos da metodologia e vrios exemplos prticos sero fornecidos de maneira a familiariz-lo com o mtodo.

Unisa | Educao a Distncia | www.unisa.br

57

Elisamara de Oliveira

4.4 Atividades Propostas

1. Escreva um algoritmo em PortuC para calcular e imprimir a rea e o permetro de uma sala retangular, sendo que os comprimentos das paredes (comprimento e largura) so fornecidos pelo usurio. 2. Escreva um algoritmo em PortuC para calcular e imprimir a rea de uma esfera. O raio da esfera ser fornecido pelo usurio. Obs.: A = 3.14*R2. 3. Escreva um algoritmo em PortuC que calcule e imprima o valor em reais correspondente aos dlares que um turista possui no cofre do hotel. O programa deve solicitar os seguintes dados: quantidade de dlares guardada no cofre e cotao do dlar naquele dia. 4. Escreva um algoritmo em PortuC que leia um nmero e informe se ele par ou mpar. 5. Escreva um algoritmo em PortuC que leia 2 nmeros e diga qual deles o maior. 6. Escreva um algoritmo em PortuC que calcule e imprima a quantidade de tijolos iguais necessria para construir uma determinada parede. So dados de entrada do programa: dimenses do tijolo (comprimento e largura) e dimenses da parede a ser construda (comprimento e largura). 7. Escreva um algoritmo em PortuC que calcule S, o alcance de um projtil, dados a velocidade inicial v0 e o ngulo entre o cano do canho e o solo. O valor de g corresponde gravidade que de 9.8 m/s2. A frmula a ser utilizada :

8. Escreva um algoritmo em PortuC que calcule a rea A de um tringulo pela frmula de Hero, lendo os valores de entrada s, que o semipermetro, e a, b e c, que so os lados do tringulo:

9. Escreva um algoritmo em PortuC para calcular o valor do desconto, sendo que o preo do produto fornecido pelo usurio e o desconto de 5%. Apresentar o preo do produto, o valor do desconto e o preo final com o desconto.

58

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

10. Escreva um algoritmo em PortuC para calcular e imprimir qual foi a porcentagem de desconto dada em um determinado produto, sabendo-se o preo original do produto e o preo que foi cobrado por ele depois do desconto sero fornecidos pelo usurio. 11. Escreva um algoritmo em PortuC que receba dois valores inteiros nas variveis A e B. O programa deve trocar os valores entre as variveis (ou seja, ao trmino do programa, a varivel A deve ter o valor inicial de B e vice-versa). Apresentar as duas variveis no final. 12. Escreva um algoritmo em PortuC para calcular e imprimir o valor a ser pago pelo perodo de estacionamento do automvel. O usurio entra com os seguintes dados: hora e minuto de entrada, hora e minuto de sada. Sabe-se que esse estacionamento cobra R$ 10,00 por hora ou frao. 13. Escreva um algoritmo em PortuC que leia o valor de uma conta de luz e, caso o valor seja maior que R$ 50,00, apresente a mensagem: Voc est gastando muito. Caso contrrio, exiba a mensagem: Seu gasto foi normal, parabns. 14. Escreva um algoritmo em PortuC que receba a leitura do termmetro. Caso a temperatura esteja abaixo de 100 C, apresentar a mensagem de que a temperatura est muito baixa. Caso a temperatura esteja entre 100 e 200 C, apresentar a mensagem de que a temperatura est baixa. Caso a temperatura esteja acima de 200 C e inferior a 500 C, apresentar a mensagem de que a temperatura est normal. Caso contrrio, apresentar a mensagem de que a temperatura est muito alta. 15. Escreva um algoritmo em PortuC que leia o valor do salrio atual, calcule e imprima o valor do novo salrio de um funcionrio. Considere que o funcionrio dever receber um reajuste de 15% caso seu salrio seja menor que R$ 500.00. Se o salrio for maior ou igual a 500, mas menor ou igual a R$ 1000.00, o reajuste deve ser de 10%. Caso o salrio seja maior que R$ 1000.00, o reajuste deve ser de 5%. 16. Escreva um algoritmo em PortuC que determine quanto ser gasto para encher o tanque de um carro, sabendo-se que o preo da gasolina R$ 2.60 e o preo do lcool R$ 1.80. O usurio fornecer os seguintes dados: tipo de carro (as opes como tipo de carro so a letra G gasolina ou a letra A lcool; rejeitar valores invlidos) e capacidade do tanque em litros.

Unisa | Educao a Distncia | www.unisa.br

59

A LINGUAGEM DE PROGRAMAO C

Neste captulo, voc, caro(a) aluno(a), poder comear a traduzir seus primeiros algoritmos para a linguagem de programao C. Isso o(a) capacitar a realizar as primeiras aulas prticas em laboratrio. Recomenda-se que voc prepare em seu computador um ambiente adequado programao em C e comece a trabalhar sozinho(a), fazendo os programas da lista 4.1 como atividades extraclasse. O interessante em se utilizar o PortuC como pseudolinguagem que ele segue quase totalmente as mesmas regras da linguagem C. Assim, comear a programar em C ser muito fcil, voc ver!

5.1 Tipos Bsicos e Declarao de Variveis em C

Saiba mais
Um identificador em C formado por caracteres alfanumricos. O primeiro caractere tem que ser _ ou uma letra; os outros caracteres podem ser: letras: A-Z, a-z; dgitos: 0-9; sublinhado: _ . No pode haver dois identificadores iguais. Letras minsculas e letras maisculas so diferentes. Os identificadores no podem ser acentuados. No pode haver espao em branco num identificador. O caractere no pode ser usado num identificador. Um identificador no pode ter o mesmo nome das palavras reservadas do C (como main, if, else, int, char). Na linguagem C, h 5 tipos bsicos (int, float, double, char e void) e quatro modificadores de tipos (long, short, signed e unsigned), o que amplia muito os tipos de variveis, mas, neste curso, usaremos apenas 3 tipos bsicos: int; float; char. O tipo de dados double (%Lf ) corresponde ao float, mas com maior capacidade de armazenamento. Para se declarar uma varivel, escreve-se o nome de seu tipo, salta-se um espao em branco, em seguida o nome do seu identificador e ponto e vrgula para finalizar a declarao. Se mais de uma varivel for do mesmo tipo bsico, elas podem ser declaradas juntas, apenas separadas por vrgulas. Pode-se inicializar uma varivel na sua declarao atribuindo-se a ela um valor inicial compatvel com seu tipo. Toda varivel precisa ser declarada antes de ser utilizada. No pode haver duas variveis com mesmo nome, mesmo que tenham tipos bsicos diferentes, a menos que algum caractere maisculo ou minsculo as diferencie.

Unisa | Educao a Distncia | www.unisa.br

61

Elisamara de Oliveira

Exemplo de declarao de variveis vlida:


char nome[20], letra, zero=0; float soma=0; int n1, n2; float raiz1, Total_dos_Salarios; char nome_de_familia[30]=Menezes; int idade, cont=0;

5.2 Operadores de Atribuio, Aritmticos, Relacionais e Lgicos (Binrios) em C

Ateno
O operador de atribuio : = . H os operadores de atribuio compostos: += -= *= /= Os operadores aritmticos bsicos so: + (adio); - (subtrao); * (multiplicao); / (quociente da diviso real); ++ ( adiciona 1); -- (subtrai 1). Alguns operadores aritmticos mais avanados so: % (resto da diviso inteira); / (quociente da diviso inteira); sqrt( ) (raiz quadrada); abs( ) (valor absoluto). Os operadores relacionais so: > (maior que); >= (maior ou igual a); < (menor que); <= (menor ou igual a); == (igual a); != (diferente de). Os operadores lgicos so: && (operador e conjuno); || (operador ou disjuno); ! (operador no negao).

62

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Funcionamento dos operadores lgicos em C Operador lgico && (e) || (ou) ! (no) Ao Avalia como 1 (verdadeiro) se ambas as expresses forem verdadeiras, caso contrrio, avalia como 0 (falso). Avalia como 1 (verdadeiro) se pelo menos uma expresso for verdadeira, caso contrrio, avalia como 0 (falso). Avalia como 1 (verdadeiro) se a expresso for falsa e 0 (falso) se a expresso for verdadeira, ou seja, troca verdadeiro por falso e vice-versa.

Expresses conectadas por operadores lgicos so avaliadas da esquerda para a direita, to logo a veracidade ou falsidade do resultado for reconhecida.
Saiba mais
Na linguagem C, em qualquer expresso que se espere um valor lgico, o resultado ser: falso se o valor for 0; verdadeiro para qualquer outro valor (1 ou qualquer nmero positivo ou negativo ou qualquer expresso vlida da linguagem).

Exemplos:
(5 > 2) && (3 != 2) (3 >= 2) || (4 == 2) (3 <= 2) || (4==2) ! (4==2) ! (4>3) /* avalia como 1 (verdadeiro) */ /* avalia como 1 (verdadeiro) */ /* avalia como 0 (falso) */ /* avalia como 1 (verdadeiro) */ /* avalia como 0 (falso) */

Exemplos de expresses lgicas e relacionais vlidas:


if if if if if if if if if (altura > 1.80 && idade < 21 && (idade >= 13 && idade <=20) ((media >= 7.0 && faltas <= 18) !(numero % 2 == 0) (resposta == S) (resposta == S || resposta == (resposta != S && resposta != (sexo == F && altura <= 1.50) (cont=0 && soma !=0) escolaridade >= 2) || foidispensado == 1)

s) s)

(muito cuidado com este tipo de expresso: cont=0 uma atribuio e no uma comparao, mas em C pode-se fazer atribuio num comando if!)

Unisa | Educao a Distncia | www.unisa.br

63

Elisamara de Oliveira

Exemplos de expresses lgicas e relacionais INVLIDAS:


if (altura > 1.80 && || idade < 21)

(os operadores && e || so binrios, envolvem sempre 2 operandos, portanto no podem ser utilizados juntos) if (idade >=13 && <= 20) (o operando idade deveria ser repetido para se obter o resultado lgico da comparao) if (resposta ! = S) (o smbolo do operador diferente est errado: no pode haver espao em branco entre o ! e o =) if (altura < = 1.50) (o smbolo do operador menor que est errado: no pode haver espao em branco entre o < e o =) resposta == S (faltaram parnteses delimitando a expresso)

Exemplos de expresses aritmticas vlidas:


resto = 10 % 3; quociente = 10 / 3; salario = ((totaldehoras*32.50)+102.00) - descontoinss; valoremdolares = salario / 2.55; impostoderenda = salario * 0.20; ok = (achou=1) && (resposta=s); strcat (nome,da silva); // concatenao de strings contador = contador +1; ++contador; contador += 2; // equivale a contador = contador + 2; --valor; valor -= 5; // equivale a valor = valor 5; Soma += Valor; // equivale a Soma = Soma + Valor; x1 = -b + sqrt(teta) / (2*A); // a funo sqrt() est na biblioteca <math.h>

64

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Exemplos de expresses aritmticas INVLIDAS:


resto = 10.0 % 3; salario = totaldehoras *+ 32.50;

(o operador % s pode envolver nmeros inteiros)

(os operadores * e + so didicos, envolvem sempre dois operadores, portanto no podem ser utilizados juntos) (no existe vrgula decimal, o separador sempre o ponto)

valoremdolares = salario / 2,55; Nome = Nome + da Silva;

(em variveis do tipo string a manipulao feita atravs de funes. As funes esto na biblioteca <string.h>) (o operador * didico, tem que envolver dois operandos)

Contador =

*1;

5.3 Comando Condicional em C (if)

Ateno
A sintaxe do comando condicional : if (condio) { <bloco de comandos 1> } else { <bloco de comandos 2> } A semntica (como funciona) do comando condicional if : a <condio> avaliada como VERDADEIRA (valor diferente de zero) ou FALSA (valor igual a zero); se a <condio> for VERDADEIRA, o <bloco de comandos 1> executado e o comando condicional finalizado; se a <condio> for FALSA, o <bloco de comandos 2> executado e o comando condicional finalizado. else clusula do comando if, ou seja, no comando, apenas faz parte do comando if. A clusula else pode no existir num comando if. Nesse caso (no existe a clusula else), quando a <condio> avaliada como FALSA, nenhum comando executado e o comando if finalizado. Os delimitadores de { e } so obrigatrios quando existe mais de um comando no <bloco de comandos 1> ou mais de um comando no <bloco de comandos 2>. Quando existir apenas um comando, os delimitadores ficam opcionais.

Unisa | Educao a Distncia | www.unisa.br

65

Elisamara de Oliveira

Exemplos de comandos condicionais vlidos:


if (media >= 7.0) aprovado = 1; if (media >= 7.0) { aprovado = 1; } if (media >= 7.0) { aprovado = 1; ++contadoraprovados; } if (media >= 7.0) { aprovado = 1; ++contadoraprovados; } else aprovado = 0; if (media >= 7.0) aprovado = 1; else aprovado = 0; if (media >= 7.0 && faltas <= 9) { aprovado = 1; ++contadoraprovados; } else { aprovado = 0; ++contadorreprovados; } if (numero % 2 == 0) ++contapar; else ++contaimpar; if (numero > 0) printf(\nNumero else if (numero printf(\nNumero else printf(\nNumero

positivo); < 0) negativo); zero);

66

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Exemplos de comandos condicionais INVLIDOS:


if media >= 7.0 aprovado = 1;

(faltou colocar parnteses na condio)

if (media >= 7.0) { aprovado = 1; ++contadoraprovados;

(faltou colocar o delimitador de fim { no final do comando )

if (media >= 7.0) aprovado = 1 else aprovado = 0;

(faltou ; depois do comando aprovado = 1)

if media >= 7.0 aprovado = 1; ++contadoraprovados; else { aprovado = 0; ++contadorreprovados; }

(faltou colocar parnteses na condio e delimitadores de incio e fim { } antes do else)

if (numero % 2 == 0); ++contapar; else ++contaimpar;

(no pode-se colocar ; depois da condio do comando if, pois o ; finaliza o comando)

Unisa | Educao a Distncia | www.unisa.br

67

Elisamara de Oliveira

5.4 Comando de Seleo Mltipla em C (switch)

Ateno
Comando de seleo mltipla que testa sucessivamente o valor de uma expresso contra uma lista de valores do tipo inteiro ou de caracteres. Quando o valor coincide, os comandos associados quele valor so executados. A sintaxe do comando de seleo mltipla switch : switch (expresso) { case valor1: <comandos_1>; break; case valor2: <comandos_2>; break; ... case valorn: <comandos_n>; break; default: comandos_default; } A expresso deve resultar num valor inteiro do tipo long, int ou char. Compara-se esse resultado com o valor1 at valorn: se for encontrada alguma equivalncia, o programa passa a executar os comandos a partir deste ponto, at encontrar uma instruo break; se nenhuma equivalncia for encontrada, os comandos relativos a default so executados; caso no haja a opo default, nenhum comando executado; caso a instruo break no seja encontrada, todos os comandos vo sendo executados at se chegar ao final do comando switch.

Exemplos de comandos de seleo mltipla vlidos:


switch (sexo) { case f: case F: printf(\nVoce eh do sexo feminino); break; case m: case M: printf(\nVoce eh do sexo masculino); break; default: printf(\nValor de sexo invalido.); }

68

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

para maisculo {

letra = toupper(letra); switch (letra)

// toupper transforma o caractere

case A: case E: case I: case O: case U: printf(\n Voce digitou uma vogal); break; default: printf(\n Voce digitou algo diferente de uma vogal); }

printf(\nDigite o numero do dia da semana (1-7): ); scanf(%i,&dia); switch(dia) { case 1: printf(\n1-Domingo - Sunday); break; case 2: printf(\n2-Segunda-feira - Monday); break; case 3: printf(\n3-Terca-feira - Tuesday); break; case 4: printf(\n4-Quarta-feira - Wednesday); break; case 5: printf(\n5-Quinta-feira - Thursday); break; case 6: printf(\n6-Sexta-feira - Friday); break; case 7: printf(\n7-Sabado - Saturday); break; default: printf(\nDia da semana invalido.); }// switch

Unisa | Educao a Distncia | www.unisa.br

69

Elisamara de Oliveira

switch (voto) { case 1: printf(\n Voce votou no candidato 1); ++cont1; break; case 2: printf(\n Voce votou no candidato 2); ++cont2; break; case 3: printf(\n Voce votou no candidato 3); ++cont3; break; default: printf(\n Voto invalido); }

Exemplos de comandos de seleo mltipla INVLIDOS ou ERRADOS:


scanf(%f,&temp); switch (temp) printf(\nQual eh a temperatura do seu corpo? );

{ case 36.0: case 36.5: printf(\nVoce no tem febre. Temperatura normal.); break; case 37.0: case 37.5: printf(\nVoce esta levemente febril.); break; default: if (temp > 37.5) printf(\nVoce esta febril. Procure um medico); else printf(\nEsta temperatura esta fora dos valores normais); }

(o comando switch no aceita valores do tipo real!!! Este comando totalmente invlido)

switch (sexo) { case f: case F: printf(\nVoce eh do sexo feminino); case m: case M: printf(\nVoce eh do sexo masculino); default: printf(\nSexo invalido.); }

(falta o comando break dentro dos cases, ento todos os printf sero executados)

70

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

5.5 Comando de Repetio em C (while)

Ateno
A sintaxe do comando de repetio while : while (condio) { <bloco de comandos> } A semntica (como funciona) do comando de repetio while : a condio avaliada como VERDADEIRA (diferente de zero) ou FALSA (igual a zero); se a condio for VERDADEIRA, o <bloco de comandos> executado e, ao chegar ao delimitador de fim } ou final do comando, automaticamente se retorna avaliao da condio; se a condio for FALSA, o comando de repetio finalizado. Entre os comandos do <bloco de comandos>, ESSENCIAL que exista um comando que altere a <condio> que constantemente avaliada, pois, caso contrrio, o comando enquanto NUNCA TERMINAR! Caso haja um comando break; dentro do comando while, este finaliza imediatamente o comando while quando for executado. Os delimitadores { e } so obrigatrios quando existe mais de um comando no <bloco de comandos>. Quando existir apenas um comando, os delimitadores ficam opcionais e o ; funcionar como delimitador de fim, indicando o final do comando while.

Exemplos de comandos de repetio vlidos:


contador=0; while (contador < 3) ++contador; numero = 1; while (numero <= 100) { if (numero % 2 == 0) ++contapar; else ++contaimpar; numero += 3; } numero = 1; while (1) { if (numero % 2 == 0) ++contapar; else ++contaimpar; numero += 3; if (numero >= 100) break; }

Unisa | Educao a Distncia | www.unisa.br

71

Elisamara de Oliveira

Exemplos de comandos de repetio INVLIDOS ou errados:


while contador <= 10 ++contador;

(faltaram parnteses na condio)

numero =1; while (numero <= 100) if (numero % 2 == 0) ++contapar; else ++contaimpar; numero += 3;

(como no existem os delimitadores de incio e fim { } do comando, somente o comando if faz parte do comando while e, como o comando if no altera a varivel numero, que controla a condio, o comando while nunca vai parar!)

numero = 1; while (numero <= 10); { numero += 3; }

(como foi colocado ; aps a condio, o comando while foi finalizado, a varivel numero no ser alterada e o comando while nunca vai parar!)

numero = 1; while (1) numero += 3; if numero >= 10 break;

(como no foram colocados { } delimitando os comandos dentro do while, que foi colocado em loop infinito de propsito, o comando break no ser executado e o comando while nunca vai parar mesmo!)

5.6 Comando de Repetio em C (for)

O comando de repetio for permite que um comando ou um bloco de comandos seja executado um nmero determinado de vezes. um comando de repetio, como os comandos while (j apresentado) e do while (que no apresentaremos nesta apostila). A diferena entre eles que o comando for utiliza um mecanismo de contagem automtica, dentro de um intervalo definido pelo usurio. muito til para controlar a leitura e a impresso de vetores e matrizes (estruturas que sero estudadas no futuro).

72

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Ateno
A sintaxe do comando de repetio for : for (inicial; condio; incremento ou decremento) { <bloco de comandos> } As expresses inicial e incremento ou decremento so, em geral, atribuies varivel de controle e condio uma expresso relacional que envolve a mesma varivel de controle. A semntica do comando for : A expresso inicial avaliada, consistindo geralmente na inicializao de uma varivel de controle; Em seguida, avaliada a condio: se a condio for verdadeira, o <bloco de comandos> executado e, ao chegar ao delimitador } ou final do comando for, automaticamente se incrementa ou se decrementa a varivel de controle e se retorna avaliao da condio; quando a condio ficar falsa, ou seja, o incremento/decremento fizer a varivel de controle chegar no limite da condio, o comando de repetio finalizado. Os delimitadores { e } so obrigatrios quando existe mais de um comando no <bloco de comandos>. Quando existir apenas um comando, os delimitadores ficam opcionais e o ; funcionar como delimitador de fim, indicando o final do comando for.

Informaes importantes sobre o comando for e exemplos de utilizao: for (i=3; i<=5; i++) printf(O valor de i eh: %i\n, i); Nesse caso, i a varivel de controle; inicial corresponde a i=3; condio corresponde a i<=5; e incremento corresponde a somar 1 varivel de controle i++. Pode-se omitir a expresso inicial, se esta j tiver sido avaliada anteriormente no programa, porm o ponto e vrgula deve permanecer. i=3; for ( ; i<=5; i++) printf(O valor de i eh: %d\n, i); A expresso inicial pode ser qualquer expresso vlida em C. i=3; for (printf(comecou) ; i<=5 ; i++) printf(O valor de i : %d\n, i); Pode-se, tambm, omitir a expresso incremento ou decremento e avali-la no corpo da instruo for. i=3; for ( ;i <= 5; ) { printf(O valor de i e: %d\n, i); i++; } Unisa | Educao a Distncia | www.unisa.br

73

Elisamara de Oliveira

Note que, quando o corpo da instruo for consistir de mais de um comando, necessrio que estes sejam colocados entre os delimitadores { }. A expresso condio pode ser constituda por expresses conectadas por operadores lgicos. for(i=0; (i<10 && aux!=0); i++) { printf(\n %d, aux); --aux; } achou= i= 0; for( ; (i<10 && achou==0); i++) { printf(\n Digite um inteiro: ); scanf(%i, &aux); achou = (aux == -1); }

Usando vrgulas, pode-se criar expresses constitudas de duas subexpresses, de forma a realizar duas tarefas. As subexpresses sero avaliadas da esquerda para a direita e toda a expresso ser avaliada como o valor da expresso da direita. for(i=0, j=10; i<10; i++, j--) printf(\n%d, %d, i, j); A instruo for pode ser aninhada, ou seja, executada dentro de outra instruo for. for(linha=0; linha<10; linha++) { for(coluna=0; coluna<10; coluna++) printf(\n%d, matriz[linha][coluna]); } Podem-se omitir as trs expresses: inicial, condio e incremento: for( ; ; ) Tendo-se, ento, um loop infinito, que pode, no entanto, ser interrompido dentro do corpo da instruo for por um comando break. i=10; for( ; ; ) { if (i==0) break; --i; }

74

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Exemplos de comandos for vlidos: for (i=10; i>0; i--) printf(\nContador decrescente= %i,i);

i= soma = 0; for ( ; i < 10; i++) { printf(\nDigite o valor da nota do aluno %i= ,i); scanf(%f,&nota); soma = soma + nota; } for (j=1; j<=1000; j++) { if (j % 2 == 0) printf(\n %i eh par ,j); else printf(\n %i eh impar ,j); }

for (j=1; j<=1000; j++) { printf(\nDigite um numero negativo: ); scanf(%i,&n); if (n>=0) break; else printf(\nValor absoluto de %i = %i, n, abs(n)); } Exemplos de comandos for INVLIDOS:
for (i=10; i<0; i--) printf(\nContador decrescente= %i,i);

(o comando for no ser executado nenhuma vez, pois o valor inicial menor que o valor final e i-- indica contagem decrescente)

for

(i=10; i>0; i--); printf(\nContador decrescente= %i,i);

(o comando for no vai fazer nada, pois tem um ; indevido i-- ); que faz com que o for finalize printf ser executado uma nica vez)

Unisa | Educao a Distncia | www.unisa.br

75

Elisamara de Oliveira

for (j=1; j<=1000; j--) { if (j % 2 == 0) printf(\n %i eh par ,j); else printf(\n %i eh impar ,j); }

(o comando for no vai parar nunca, pois a condio nunca vai ser falsa; o certo seria usar j++ e no j--)

5.7 Comandos de Leitura e Escrita em C

Ateno
Na linguagem C, h diversos comandos de leitura e cada um deles mais adequado aos diferentes tipos bsicos. Para a leitura de nmeros, o comando deve ser scanf. Para a leitura de caractere nico, o melhor comando o getche(). Para a leitura de strings (cadeia de caracteres), o melhor comando gets(). A sintaxe dos comandos de entrada : scanf(%letra, & varivel); em que %letra representa os especificadores de formato e depende do tipo associado varivel: %d ou %i, para variveis do tipo int, e %f, para variveis do tipo float. varivel = getche(); gets(varivel); para variveis do tipo char (nico) para variveis do tipo char (string)

76

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

A tabela a seguir mostra um exemplo de declarao de variveis de tipos bsicos, a forma correta de leitura e as bibliotecas do C a serem includas. Declarao
int numero;

Leitura

Exemplos de contedos

Biblioteca a ser includa


stdio.h

scanf(%i, &nume- numero = -5; ro); numero = 2002; scanf(%f, &valor); valor = -5.867; valor = 2002.50; c = 5; c = s; c = #;

float valor;

stdio.h

char c;

c=getche();

conio.h

char nome[20];

gets(nome);

Atribuio somente atraconio.h vs de funo: string.h strcpy(nome, Ana);

Saiba mais
A sintaxe dos comandos de sada : printf(\n frase puts(\n frase); No comando printf, entre as aspas podem ser escritas somente frases ou frases formadas por palavras intercaladas pelos especificadores de formato %s, %c, %i, %d ou %f, descritos nos comandos de leitura. Caso haja especificadores, para cada especificador utilizado, a varivel do tipo correspondente deve constar da <lista de variveis>. A lista de variveis opcional; deve existir somente quando um especificador de formato colocado na frase entre aspas e, nesse caso, deve haver uma vrgula separando a frase da lista de variveis e vrgulas separando as variveis da lista. Os nmeros do tipo float podem ser impressos com formato, no comando printf, para evitar a forma cientfica, ou seja, para serem impressos em forma estendida. A parte fracionria truncada caso haja mais casas fracionrias do que a delimitada pelo formato, mas a parte inteira nunca truncada. Exemplos: %.2f (2 casas na parte fracionria), %3.0f (no mnimo 3 casas na parte inteira, mas no ocorre truncamento nunca, e nenhuma casa na parte fracionria). \n um cdigo de barra invertida que salta uma linha na tela. Pode ser usado em qualquer posio dentro das aspas em ambos os comandos, puts e printf, e opcional. O comando puts salta uma linha aps a impresso da frase, mesmo sem \n, e no imprime variveis. %letra , <lista de variveis>);

Unisa | Educao a Distncia | www.unisa.br

77

Elisamara de Oliveira

Ateno
Explicao adicional Passo a passo do comando de impresso: printf (frase varivel1 varivel2 varivel3); (entre a frase e a varivel e entre as variveis deve haver uma vrgula separando-as) printf (frase , varivel1, varivel2, varivel3); (a frase deve vir entre aspas) printf (\nfrase , varivel1, varivel2, varivel3); (dentro da frase deve vir um formato para cada varivel, compatvel com o seu tipo bsico) printf (\nfrase %s %i %f ,varivel1,varivel2,varivel3); Exemplo: printf (\nVc se chama %s, tem %i anos e %.2f metros de altura , nome, idade, altura);

Exemplos de comandos de entrada e sada vlidos: puts (\nQual eh o seu nome? );

gets(nome);

printf (\nQual eh a sua idade? ); scanf (%i,&idade); puts (\nQual eh a sua altura? ); scanf (%f,&altura); puts (\nQual eh o seu sexo? (F/M) ); sexo=getche(); printf (\n%s, voce tem %i anos e\n %.2m de altura\n, nome, idade, altura);
printf (\nVoc foi aprovado no curso com media= %2.1f,

media);

78

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

5.8 Comentrios em C

Os comentrios no pertencem s instrues do programa C, mas so teis para que o programador explique o que est sendo feito.
Saiba mais
Os comentrios podem vir delimitados entre /* */ Ou podem ser comentrios de linha //

Exemplos de comentrios:
/* Este trecho calcula a media de notas */ desc = preco*0.15; // calcula desconto de 15%

5.9 Bloco de Programa em C

Ateno
O Bloco de Programa em C tem a forma: /* comentrios */ <incluso de bibliotecas> <declarao de variveis> void main() { <bloco de comandos> } Apesar de opcional, todo programa C deve comear com o nome do arquivo .c em um comentrio dizendo o que o programa faz. Em seguida, devem ser includas as bibliotecas .h, que sero utilizadas no programa, atravs da diretiva #include < >. Em seguida, devem ser declaradas todas as variveis que sero utilizadas no <bloco de comandos>. Aps a declarao das variveis, deve-se escrever a palavra main( ) ou int main() ou void main(), que delimita a seo em que os comandos podem ser utilizados. O <bloco de comandos> pode conter todos os comandos vlidos em C, separados por ponto e vrgula, e estes devem estar contidos entre os delimitadores { e }. Nenhum comando pode ser usado fora dessa seo, a no ser o comando de atribuio para inicializar variveis na sua declarao. importante notar que letras maisculas e minsculas alteram os identificadores e as palavras reservadas do C. Alguns compiladores C no aceitam void main( ), mas int main() ou apenas main(). Nesses casos, necessrio colocar o comando return 0; antes de finalizar o programa.

Unisa | Educao a Distncia | www.unisa.br

79

Elisamara de Oliveira

Exemplos de programas escritos em C vlidos:


/* nomesexo.c: le o nome e o sexo de uma pessoa e imprime uma frase dizendo se masculino ou feminino */ #include <stdio.h> #include <conio.h> char nome[20], sexo; int main () { puts (Qual eh o seu nome? ); gets(nome); printf (\nQual eh o seu sexo? (F/M) ); sexo=getche(); if (sexo == F || sexo == f) printf (\n%s, voce eh do sexo feminino. ,nome); else printf (\n%s, voce eh do sexo masculino. ,nome); puts(\n Fim do programa); getch(); // para a tela return 0;

/* switch.c - avalia o conhecimento do usurio */ #include <stdio.h> #include <conio.h> int opcao; int main() { printf(\nTeste de avaliacao de conhecimento\n); printf(\nPergunta: Em que ano o Brasil foi descoberto?); printf(\n 1- Em 100 AC por Pitagoras); printf(\n 2- Em 1492 por Cristovao Colombo); printf(\n 3- Em 1500 por Pero Vaz de Caminha); printf(\n 4- Em 1500 por Pedro Alvares Cabral); printf(\n Qual a sua escolha? ); scanf(%d,&opcao);

80

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

switch(opcao) { case 1: printf(\nVoce precisa ler mais sobre a historia grega !); break; case 2: printf(\nEle chegou nos paises vizinhos...); break; case 3: printf(\n Naturalmente voce eh um f da carta do descobrimento!); break; case 4: printf(\n Resposta certissima !); break; default: printf(\nVoce nao escolheu nenhuma das alternativas validas.); } printf(\n Fim do programa ); getch(); return 0; }

5.10 Funes teis em C

Caro(a) aluno(a), a linguagem C fornece uma srie de funes teis que pertencem a diferentes bibliotecas. Segue uma pequena lista das principais funes que voc poder usar quando se fizer necessrio. Funes da biblioteca string.h: strcat (destino, fonte);

anexa o string <fonte> ao string <destino>.

strcpy (destino, fonte);

copia o string <fonte> para o string <destino>.

strcmp (string1,string2); resultando em:

compara o <string1> com o <string 2> pela ordem alfabtica (conforme tabela ASCii), menor que 0: <string1> menor que <string2>; igual a 0: <string1> igual a <string2>; maior que 0: <string1> maior que <string2>.

Unisa | Educao a Distncia | www.unisa.br

81

Elisamara de Oliveira

strchr(string, caractere);

Verifica se o <caractere> se encontra na <string> e retorna posio da primeira ocorrncia do <caractere> no <string>; se o <caractere> no for encontrado, retorna NULL.

tamanho = strlen(string);

Retorna o <tamanho> de uma <string> em nmero de caracteres.

strrev(string);

Retorna a <string> invertida, ou seja, os caracteres em ordem contrria.

strupr(string);

Retorna a <string> convertida para letras maisculas.

strlwr(string);

Retorna a <string> convertida para letras minsculas.

Funes da biblioteca ctype.h: letra=toupper(letra); letra=tolower(letra);

Converte uma <letra> para maisculo.

Converte uma <letra> para minsculo.

Funes da biblioteca conio.h


clrscr();

Limpa a tela.

textcolor(cor);

Muda a cor da letra.

textbackground(cor);

Muda a cor do fundo.

gotoxy(coluna, linha);

Posiciona o cursor nas coordenadas especificadas.

82

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Funes da biblioteca math.h Trigonomtricas


sin()


cos()

Retorna o valor do seno. Recebe como argumento o valor dos graus em double. Retorna o valor do cosseno. Recebe como argumento o valor dos graus em double.

tan()

Retorna o valor da tangente. Recebe como argumento o valor dos graus em double. Logartmicas
log()

Potenciao
pow()

Retorna o valor do logaritmo na base 2. Exige um argumento do tipo double. Retorna o valor do logaritmo na base 10. Exige um argumento do tipo double.

log10()

Retorna o valor da base elevada ao expoente. Recebe dois argumentos do tipo double: o primeiro a base e o segundo o expoente. Por exemplo: se quisermos saber o resultado da operao 210, faramos pow (2, 10).
sqrt()

Retorna o valor da raiz quadrada. Recebe como argumento um double do qual ele deve extrair a raiz. Arredondamento ceil() Retorna o primeiro float sem casas decimais acima. Recebe um float como argumento. Exemplo: ceil (45.98561) resultaria em 46.
floor()

Retorna o primeiro float sem casas decimais abaixo. Recebe um float como argumento. Exemplo: floor (45.98561) resultaria em 45.

Unisa | Educao a Distncia | www.unisa.br

83

Elisamara de Oliveira

Outras funes system


system(cls);

Limpa a tela.

system(pause);

Faz uma pausa ou para a tela.

system(color 0B);

Cor de fundo preta e letras azuis brilhantes.

5.11 Traduo de PortuC para a Linguagem C

Como voc viu, caro(a) aluno(a), aprender PortuC ajuda bastante a aprender C! Use a tabela a seguir para ajud-lo(la) na traduo de comandos do PortuC para C!

Saiba mais
Comandos/Tipos Atribuio PortuC = inteiro Tipos bsicos inteiro longo real caractere inteiro real Formatos caractere nico string inteiro longo Condicional Seleo mltipla Leitura de caracteres Leitura de strings Leitura de nmeros Escrita Escrita Operadores lgicos se seno escolha leia leia leia imprima imprima e ou no C = int long int float char %i ou %d %f %c %s %ld if else switch getche() gets scanf printf puts && || !

84

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Caro(a) aluno(a), voc deve implementar todos os programas em C usando o compilador de sua preferncia. No final da apostila, eu indico um compilador que fcil de ser encontrado na internet, gratuito e fcil de usar (o compilador Dev C++).
/* sexo.c: le o nome e o sexo de uma pessoa e imprime uma frase dizendo se masculino, feminino ou invalido */ caractere nome[20], sexo; principal ( ) { imprima (Qual eh o seu nome? ); leia(%s,nome); imprima (Qual eh o seu sexo? (f/m) ); leia (%c,sexo); se (sexo == f ou sexo == F) imprima (%s voce eh do sexo feminino. ,nome); seno se (sexo == m ou sexo == M) imprima (%s voce eh do sexo masculino. ,nome); seno imprima (Voce digitou um sexo invalido ); imprima(Fim do programa.);

/* sexo.c: le o nome e o sexo de uma pessoa e imprime uma frase dizendo se masculino, feminino ou invalido */ #include <stdio.h> #include <conio.h> char nome[20], sexo; int main() { puts (Qual eh o seu nome? ); gets(nome); puts (\nQual eh o seu sexo? (f/m) ); sexo = getche(); if (sexo == f || sexo == F) printf (\n%s voce eh do sexo feminino. ,nome); else if (sexo == m || sexo == M) printf (\n%s voce eh do sexo masculino. ,nome); else printf (\nVoce digitou um sexo invalido ); puts(\nFim do programa.); getch();

Unisa | Educao a Distncia | www.unisa.br

85

Elisamara de Oliveira

return 0;

/* idade.c: le o ano atual e o ano de nascimento de uma pessoa e imprime uma frase dizendo qual eh a idade da pessoa */ inteiro anoatual, anonasc, idade; principal() { imprima (Qual eh o ano atual? ); leia(%i,&anoatual); imprima (Qual eh o seu ano de nascimento? ); leia (%i,&anonasc); idade = anoatual anonasc; imprima (Voce fez ou fara %i anos , idade); imprima(Fim do programa.);

/* idade.c: le o ano atual e o ano de nascimento de uma pessoa e imprime uma frase dizendo qual eh a idade da pessoa */ #include <stdio.h> #include <conio.h> int anoatual, anonasc, idade; main() { printf (\nQual eh o ano atual? ); scanf(%i,&anoatual); printf (\nQual eh o seu ano de nascimento? ); scanf (%i,&anonasc); idade = anoatual anonasc; printf (\nVoce fez ou fara puts(\nFim do programa.); getch(); return 0;

%i anos , idade);

86

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

/* parimpar.c: le um numero e verifica se ele eh par ou impar */ inteiro n; principal() { imprima (\nDigite um numero inteiro: ); leia (%i,&n); se (n % 2 == 0) imprima (O numero %i eh par , n); seno imprima (O numero %i eh impar , n); imprima( Fim do programa.);

/* parimpar.c: le um numero e verifica se ele eh par ou impar */ #include <stdio.h> #include <conio.h> int n; int main() { printf (\nDigite um numero inteiro: ); scanf(%i,&n); if (n % 2 == 0) printf (\nO numero %i eh par , n); else printf (\nO numero %i eh impar , n); puts(\nFim do programa.); getch(); return 0;

Unisa | Educao a Distncia | www.unisa.br

87

Elisamara de Oliveira

/* nota.c: le a nota de um aluno e verifica se ele foi aprovado ou reprovado */ real nota; principal() { imprima (Digite sua nota final: ); scanf(%f,&nota); se (nota >= 6.0) imprima (Voce foi aprovado! ); seno imprima (Voce foi reprovado... ); imprima( Fim do programa.);

/* nota.c: le a nota de um aluno e verifica se ele foi aprovado ou reprovado */ #include <stdio.h> #include <conio.h> float nota; void main() { printf (\nDigite sua nota final: ); scanf(%f,&nota); if (nota >= 6.0) printf (\nVoce foi aprovado! ); else printf (\nVoce foi reprovado... ); printf(\n Fim do programa.); getch(); }

88

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

5.12 Resumo do Captulo

Neste captulo, caro(a) aluno(a), voc aprendeu uma metodologia que facilitar o processo de desenvolvimento de solues algortmicas para os problemas que sero propostos para voc resolver. A metodologia composta de uma sequncia de passos, cujo principal objetivo ajud-lo a resolver problemas dividindo-os por partes, diminuindo, assim, a sua complexidade.

5.13 Atividades Propostas

1. Traduzir o algoritmo em PortuC para C:


/* Eleicoes.c: este programa computa os votos de uma eleio e divulga os nmeros obtidos e o candidato vencedor.*/ inteiro voto, vencedor, brancos, nulos, eleitores, cont1, cont2, cont3;

principal() { imprima (digite o seu voto (1,2,3 ou 0(branco) -1 finaliza): ); leia (%i,&voto); brancos=nulos=eleitores=cont1=cont2=cont3=0; enquanto (voto != -1) { ++eleitores; se (voto == 1) ++cont1; seno se (voto == 2) ++cont2; seno se (voto == 3) ++cont3; seno se (voto == 0) ++brancos; seno ++nulos; imprima (digite o seu voto (1,2,3 ou 0(branco) 1 finaliza): ); leia (%i,&voto); } se ((cont1 > cont2) e (cont1 > cont3)) vencedor = 1; seno se ((cont2 > cont1) e (cont2 > cont3)) vencedor = 2; seno vencedor = 3; imprima (o candidato vencedor foi: %i , vencedor); imprima (numero de votos em branco: %i , brancos); imprima (numero de votos nulos: %i ,nulos); imprima (numero de eleitores: %i ,eleitores); }

Unisa | Educao a Distncia | www.unisa.br

89

Elisamara de Oliveira

2. Crie uma nova verso do programa em C do exerccio 5.1.1 utilizando o comando switch no lugar do ninho de comandos if. 3. Faa um programa em C que calcule e imprima o valor em reais correspondente aos dlares que um turista possui no cofre do hotel. O programa deve solicitar os seguintes dados: quantidade de dlares guardada no cofre e cotao do dlar naquele dia. 4. Faa um programa em C para calcular e imprimir o valor a ser pago pelo perodo de estacionamento do automvel. O usurio entra com os seguintes dados: hora e minuto de entrada, hora e minuto de sada. Sabe-se que esse estacionamento cobra R$ 10.00 por hora ou frao. 5. Faa um programa em C que leia o valor do salrio atual, calcule e imprima o valor do novo salrio de um funcionrio. Considere que o funcionrio dever receber um reajuste de 15% caso seu salrio seja menor que R$ 500.00. Se o salrio for maior ou igual a R$ 500, mas menor ou igual a R$ 1000.00, o reajuste deve ser de 10%. Caso o salrio seja maior que R$ 1000.00, o reajuste deve ser de 5%. 6. Faa um programa em C tendo como dados de entrada o preo de um produto e seu cdigo de origem; apresente o preo e a sua procedncia, de acordo com a tabela a seguir: Cdigo de Origem 1 2 3 4 5 Procedncia Sul Sudeste Centro-Oeste Norte Nordeste

90

Unisa | Educao a Distncia | www.unisa.br

6 USANDO COMANDOS DE REPETIO EM C


6.1 Comando de Repetio Entrada Indeterminada de Dados (uso de flags)

Aqui voc vai aprender a usar o comando repetitivo e a resolver problemas que envolvam flags. Flag vem do ingls e significa sinal ou bandeira. Um flag em programao representa um valor que usado para indicar o final da entrada de dados. Como j foi dito antes, um algoritmo usado para resolver problemas finitos. Se algum pede que faamos um programa para ler uma quantidade indeterminada de nmeros, aparentemente no poderamos escrever um algoritmo para resolv-lo, mas, se um flag informado, a soluo se torna possvel: faa um programa para ler uma quantidade indeterminada de dados, sabendo-se que o ltimo valor ser -1. Veja bem: a quantidade de nmeros continua indeterminada, isto , no sabemos se sero 5, 20, 2 ou 2000 nmeros, mas sabemos que o ltimo -1! Assim, -1 o flag e os nmeros sero lidos at que seja fornecido o -1, quando o programa ir parar de ler os nmeros. Vamos ver isso na prtica! 1. Escreva comandos para ler e imprimir vrios nmeros inteiros. O ltimo nmero 0 (flag=0).

importante que voc observe a lgica de um trecho de algoritmo que trabalha com flag. Antes de o nmero n ser processado, necessrio verificar se ele o flag ou no. Por isso, feita uma leitura ANTES do incio do comando de repetio while. No entanto, necessrio que o nmero n seja lido novamente dentro do comando while para que a condio que determina a finalizao do comando seja modificada (seno o comando while nunca para) e tambm para que a leitura indeterminada de dados prossiga; essa nova leitura feita no FINAL do comando while! No pretendo aqui dar uma receita de bolo para voc seguir, mas apenas chamar a sua ateno para a lgica desse tipo de problema que poder ser utilizada, com certeza, em muitos outros problemas que envolvam o uso de flags.

Unisa | Educao a Distncia | www.unisa.br

91

Elisamara de Oliveira

2. Escreva comandos para ler e imprimir vrios nmeros inteiros e contar a quantidade de nmeros lidos. O ltimo nmero 0 (flag=0). Imprima, tambm, a quantidade de nmeros.

importante que voc observe a lgica para se contar a quantidade de nmeros fornecidos. Quando o flag utilizado, sabe-se que a entrada de dados indeterminada. Quando se deseja saber quantos valores vlidos foram fornecidos, necessrio usar um contador (neste algoritmo o cont). O contador tem que ser inicializado com zero. Cada vez que uma repetio realizada (ou seja, cada vez que o comando while executado), soma-se mais 1 ao contador. A impresso do contedo do contador s pode ser feita aps o final do comando while, quando temos a certeza de que a entrada de dados foi finalizada (ou seja, o flag foi fornecido). 3. Escreva comandos para ler e somar vrios nmeros inteiros. O ltimo nmero -1 (flag= -1).

92

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

4. Escreva comandos para ler e imprimir a idade e o nome de vrias pessoas (ltima idade=0).

Temos, neste exemplo, um caso em que h mais de uma varivel a ser lida e apenas uma dessas variveis vai funcionar como flag. Nesse caso, a lgica tem que ser um pouco alterada: a varivel que ser utilizada como flag deve ser lida ANTES do comeo do comando while e sua leitura deve ser repetida DENTRO do comando imediatamente ANTES DO FINAL do comando while (observe os comandos em destaque); todas as outras variveis devem ser lidas apenas uma vez, DENTRO do comando while, bem no seu incio! 5. Escreva comandos para ler e imprimir a idade, o nome e a altura de vrias pessoas (ltima idade=0). Crie uma forma alternativa.

Observe que, neste exemplo, o comando while no para nunca, pois a condio sempre 1, ou seja, sempre verdadeira. Para finalizar o comando while, foi utilizado o comando break, ou seja, quando o usurio digitar 0 para a idade, o comando while finalizado pelo break. Isso pode ser feito, sim, sem problemas!

Unisa | Educao a Distncia | www.unisa.br

93

Elisamara de Oliveira

6.2 Comando de Repetio Entrada de Dados Determinada

Voc vai continuar usando um comando repetitivo, mas para resolver problemas que envolvam contadores. Ao contrrio do que vimos na seo 6.1, em que entradas indeterminadas de dados foram tratadas, aqui estudaremos os problemas cuja entrada de dados DETERMINADA. Se algum pede que faamos um programa para ler um conjunto de 10 nmeros, seria necessrio que contssemos de 1 at 10 e, a cada contagem, lssemos um dos nmeros do conjunto para que, no final, todos os 10 valores tivessem sido lidos. Esse tipo de problema requer o uso de contadores para facilitar a contagem dos dados de entrada. Existe um comando especfico para fazer essa contagem, que o comando for, embora tambm possamos usar o comando while. Vamos ver isso na prtica! 6. Escreva comandos para ler e imprimir o nome de 5 pessoas.

Novamente, importante que voc observe a lgica de um trecho de programa que trabalha com entrada determinada de dados. Antes de o nome ser lido, necessrio zerar o contador cont. Da, utiliza-se o comando while, cuja condio exatamente o contador ser menor do que o nmero de dados a serem lidos (cont < 5, neste caso). DENTRO do comando while feita, uma nica vez, a leitura do nome, o nome impresso e somente no FINAL do comando while o contador incrementado de 1. No entanto, este mesmo trecho pode ser escrito com um comando mais adequado, que o comando for! Vejamos:

Percebeu como mais fcil? O comando for comea do zero e vai somando 1 varivel de controle cont at que cont fique igual a 5! DENTRO do comando for feita, uma nica vez, a leitura do nome e o nome impresso.

94

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

7. Escreva comandos para ler e imprimir o nome, a idade e a altura de 10 pessoas.

Observe que, quando h mais de uma varivel a ser lida, todas elas devem ser lidas apenas uma vez DENTRO do comando for. A contagem fica como antes. Fcil, no ? 8. Escreva comandos para pedir ao usurio o nmero de dados que ele deseja fornecer (N), leia e imprima o nome e a quantidade que ele forneceu.

Note que a nica mudana na soluo deste tipo de problema a leitura da quantidade de dados ANTES do comando for e a mudana na condio de finalizao para (cont < n). 9. Reescreva o trecho 8 usando while (1).

Unisa | Educao a Distncia | www.unisa.br

95

Elisamara de Oliveira

10. Reescreva o trecho 9 usando for ( ; ; ).

6.3 Exemplo dos Minutos Telefnicos

A empresa TELEFUN est interessada em saber qual foi o maior nmero de minutos gastos no ms entre os assinantes e quantos assinantes atingiram esse valor. Faa um programa que leia os valores dos minutos (o ltimo valor ser -1) e imprima os resultados desejados pela empresa. Passo 1 (ler e entender o problema) Certa companhia telefnica quer saber qual foi o maior nmero de minutos gastos num certo ms e quantos assinantes empataram atingindo esse valor mximo. Por exemplo, se o conjunto de minutos fornecido: 200, 150, 300, 200, 300, -1 O resultado seria: 300 foi o maior nmero de minutos e 2 assinantes atingiram o valor mximo. Passo 2 (dados de entrada) 1. Valor dos minutos Passo 3 (dados de sada) 1. Maior nmero de minutos 2. Quantos assinantes atingiram o maior nmero de minutos

96

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 4 (variveis auxiliares) No h variveis auxiliares a serem geradas (para se chegar a essa concluso, o raciocnio foi o seguinte: para o clculo do maior nmero de minutos, necessrio apenas comparar o valor dos minutos dado de entrada com o maior valor de minutos dado de sada , ou seja, no precisa de varivel auxiliar; para saber a quantidade de assinantes, somente o contador necessrio) Passo 5 (declarar as variveis)

int minutos, maior minutos, quantos;

(uma varivel para cada entrada, sada e auxiliar: total de 3 variveis. Todas do tipo int.) Passo 6 (inicializar as variveis)

printf(\nDigite o numero de minutos: ); scanf (%i,& minutos);

(varivel de entrada do tipo int: inicializada com scanf)


maiorminutos = 0;

(quando se deseja selecionar o maior valor, uma estratgia possvel considerar o primeiro valor lido como sendo o maior ou ento como sendo zero e depois fazer a comparao dos outros valores com este)
quantos = 0;

(contador: inicializado com zero. Poderia ser inicializado na declarao tambm) Passo 7 (clculo das sadas) H apenas 2 variveis de sada, ento, dois trechos a serem construdos. Para se selecionar o maior nmero de minutos, necessrio compar-lo com o valor dos minutos que sero lidos. O comando a ser utilizado o if.

Unisa | Educao a Distncia | www.unisa.br

97

Elisamara de Oliveira

if (minutos > maiorminutos) { maiorminutos = minutos; quantos = 1; }

No caso de essa comparao ser verdadeira, o maior valor dos minutos deve ser mudado: maiorminutos = minutos. Mas, ao se alterar o valor do maiorminutos, o contador de assinantes que o atingiram deve ser retornado para 1, pois este seria o primeiro assinante que o utilizou: quantos = 1. Resta, agora, contar a quantidade de assinantes que atingiram o valor mximo de minutos. Isso deve ser feito atravs de outra comparao. Cada vez que o valor do maior nmero de minutos for encontrado novamente, deve-se somar 1 ao contador: if (minutos == maiorminutos) ++quantos;

No entanto, esses 2 trechos devem ser unidos num nico comando if, pois no se deve somar +1 ao contador quantos quando ocorre a troca do valor de maiorminutos, seno o contador ficaria sempre com um 1 a mais. Para manter os dois trechos separados, o contador quantos teria que ser inicializado com zero. Faa alguns testes voc mesmo(a) para entender melhor essa explicao.

if (minutos > maiorminutos) { maiorminutos = minutos; quantos = 1; } else if (minutos == maiorminutos) ++quantos;

Passo 8 (impresso dos resultados)


if (maiorminutos !=0) { printf(\nO maior numero de minutos foi: %i , maiorminutos); printf(\nAssinantes que atingiram o maior nro de minutos: %i, quantos); } else printf (\nNenhum valor valido foi fornecido);

98

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 9 (montagem do programa)


/* telefun.c: este programa l um conjunto de valores de minutos, seleciona o maior deles e conta quantos assinantes atingiram este valor */ #include <stdio.h> #include <conio.h> int

minutos, maiorminutos=0, quantos=0;

int main() { printf(\nTelefun: quem fala mais ao telefone???\n); while (1) { printf(\nDigite o numero de minutos (-1 finaliza): ); scanf(%i,&minutos); if (minutos = -1) break; if (minutos > maiorminutos) { maiorminutos = minutos; quantos = 1; } else if (minutos == maiorminutos) ++quantos;

} if (maiorminutos !=0) { printf(\nO maior numero de minutos foi: %i , maiorminutos); printf(\nAssinantes que atingiram o maior nro de minutos: %i, quantos); } else printf (\nNenhum valor valido foi fornecido); printf(\nFim do programa); getch(); return 0;

Passo 10 (fazer o teste de mesa do algoritmo) Suponha os seguintes valores de entrada: 100, 50, 100, 150, 150, 10, 150 , -1 minutos 100 50 100 150 150 10 150 -1 3 O maior nmero de minutos foi: 150 Nmero de assinantes que atingiram o maior nmero de minutos: 3 150 2 1 2 maior minutos 0 100 quantos 0 1 Resultados

Unisa | Educao a Distncia | www.unisa.br

99

Elisamara de Oliveira

Suponha o seguinte valor de entrada: -1 minutos -1 maiorminutos 0 quantos 0 Resultados Nenhum valor vlido foi fornecido

6.4 Exemplo do Preo Final de Automveis

O preo final de um automvel novo calculado da seguinte forma: ao preo de fbrica, so acrescidos 35% de IPI e sobre o preo j com o IPI acrescido 5% correspondente ao ICMS. Faa um programa que leia o nome de vrios modelos de automveis (flag=FIM) e o seu preo de fbrica e calcule e imprima o seu preo final. Passo 1 (ler e entender o problema) Suponhamos a seguinte entrada de dados: BMW 70000.00 GOL FIM O preo final do BMW seria assim calculado: IPI 70000.00 x 0.35 = 24500.00 20000.00

PRIPI 70000.00 + 24500.00=94500.00 FINAL PRIPI x 1.05 = 99225.00

O preo final do GOL seria assim calculado: IPI 20000.00 x 1.35 =

PRIPI 20000.00 + 7000.00=27000.00 FINAL PRIPI x 1.05 = 28350.00

100

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 2 (dados de entrada) 1. Nome do modelo do automvel 2. Preo de fbrica do automvel Passo 3 (dados de sada) 1. Preo final do automvel Passo 4 (variveis auxiliares) 1. Valor do IPI 2. Preo do automvel com o IPI (para se chegar a essa concluso, o raciocnio foi o seguinte: dado o preo de fbrica, primeiramente calcula-se o preo com o IPI numa varivel auxiliar; depois feito o clculo do preo do carro com o valor do IPI, gerando duas variveis auxiliares) Passo 5 (declarar as variveis)

char nome[20]; float prFabrica, IPI,

prIPI, prFinal;

(uma varivel para cada entrada, uma para cada sada, uma para cada auxiliar: total de 5 variveis) Passo 6 (inicializar as variveis)

printf(\nForneca o nome do modelo do automovel: ); gets (nome); printf(\nForneca o preco de fabrica do automovel: ); scanf (%f,&prFabrica); (variveis de entrada: inicializadas com comandos de leitura) (as outras variveis no precisam de valores iniciais, pois o IPI, o preo com o IPI e o preo final sero calculados diretamente)

Unisa | Educao a Distncia | www.unisa.br

101

Elisamara de Oliveira

Passo 7 (escrever o cdigo para calcular as sadas) H apenas uma varivel de sada, ento um trecho de algoritmo a ser construdo. Para se chegar ao preo final, no entanto, primeiramente necessrio calcular o preo com o IPI.

IPI = prFabrica * 0.35; prIPI = prFabrica + IPI; prFinal = prIPI * 1.05;

Aqui so apresentadas 2 formas diferentes de se fazer o clculo de porcentagem. No caso do IPI, isso foi feito em 2 passos: primeiramente, calcula-se o IPI e depois soma-se esse valor ao preo de fbrica para se obter o preo com IPI. No caso do ICMS, foi feito um nico clculo multiplicando-se o preo com IPI por 1.05. Nesse caso, o valor 1 na parte inteira faz com que seja somado ao preo com IPI o valor do ICMS! Passo 8 (impresso dos resultados) printf(\nIPI= R$%.2f ICMS= R$%.2f,IPI,prIPI*0.05); printf (\nO preco final do automovel %s= R$ %.2f , nome, prFinal);

102

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 9 (montagem do algoritmo)


/* zerokm.C: este programa le o nome e o preco de fabrica de varios automoveis e calcula seu preo final. */ #include #include #include #include <stdio.h> <conio.h> <string.h> <stdlib.h>

char nome[20]; float prFabrica, IPI, prIPI, prFinal; int main() { printf(\nOlha o tanto de imposto que pagamos nos carros!!!); while (1) { printf(\nForneca o nome do modelo do automvel (FIM para terminar): ); gets (nome); if (strcmp(nome,FIM)==0) break; printf(\nForneca o preco de fabrica do automovel: ); scanf (%f,&prFabrica); IPI = prFabrica * 0.35; prIPI = PrFabrica + IPI; prFinal = prIPI * 1.05; printf(\nIPI= R$%.2f ICMS= R$%.2f,IPI,prIPI*0.05); printf (\nPreco final do automovel %s= R$ %.2f ,nome, prFinal); fflsuh(stdin); //limpa o teclado para evitar erros na leitura de strings

puts (\nFim do programa); getch(); return 0;

Passo 10 (fazer o teste de mesa do programa) Suponha os seguintes valores de entrada: FOX 30000.00 SCOOTER 10000.00 MILLE 12000.00 CIVIC 50000.00 FIM

Unisa | Educao a Distncia | www.unisa.br

103

Elisamara de Oliveira nome FOX prFabrica 30000.00 IPI 10500.00 prIPI 40500.00 prFinal 42525.00 Resultados IPI= R$ 10500.00 ICMS=2025.00 Preco final do automovel FOX= R$42525.00 IPI= R$ 3500.00 ICMS=675.00 Preco final do automovel SCOOTER= R$14175.00 IPI= R$ 4200.00 ICMS=810.00 Preco final do automovel MILLE= R$17010.00 IPI= R$ 17500.00 ICMS=3375.00 Preco final do automovel CIVIC= R$70875.00 Fim do programa

SCOOTER

10000.00

3500.00

13500.00

14175.00

MILLE

12000.00

4200.00

16200.00

17010.00

CIVIC FIM

50000.00

17500.00

67500.00

70875.00

6.5 Exemplo da Eleio

Existem 3 candidatos a uma vaga no senado. Durante a eleio, os votos so computados eletronicamente atravs do seguinte cdigo: 1, 2, 3 votos para os candidatos 1, 2 e 3 0 voto em branco -1 fim dos votos Fazer um programa que compute os votos da eleio, fornea o nmero do candidato vencedor, a quantidade de votos nulos e brancos e a quantidade de eleitores que participaram da eleio. Suponha que no haver empates. Passo 1 (ler e entender o problema) Vamos simular a eleio e computar seus resultados. Esses foram os votos: 0,2,3,2,3,1,1,1,3,2,0,1,1,0,3,5,1,9,3,-1. Votos do candidato 1: 6, votos do candidato 2: 3, votos do candidato 3: 5, votos em branco: 3, votos nulos: 2, total de eleitores: 19. Resultados: Candidato vencedor: 1 Quantidade de votos brancos: 3 Quantidade de votos nulos: 2 Total de eleitores: 19 Passo 2 (dados de entrada) 1. Votos 0,1,2,3 voto nulo

104

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 3 (dados de sada) 1. Candidato vencedor 2. Votos brancos 3. Votos nulos 4. Total de eleitores Passo 4 (variveis auxiliares) 1. Contador de votos para o candidato 1 2. Contador de votos para o candidato 2 3. Contador de votos para o candidato 3 Passo 5 (declarar as variveis) int int int voto; vencedor, brancos, nulos, eleitores; cont1, cont2, cont3;

Passo 6 (inicializar as variveis)

printf(\nDigite o seu voto (1,2,3 ou 0(branco)): ); scanf (%i,&voto);

(varivel de entrada: inicializada com scanf)

brancos=nulos=eleitores=cont1=cont2=cont3=0;

(contadores: inicializados com zero. Em C, possvel inicializar vrias variveis com o mesmo valor num nico comando de atribuio mltipla!)

Unisa | Educao a Distncia | www.unisa.br

105

Elisamara de Oliveira

Passo 7 (escrever o cdigo para calcular as sadas) Para se saber quem foi o candidato vencedor, necessrio, primeiramente, computar os votos: ++eleitores; if (voto == 1) ++cont1; else if (voto == 2) ++cont2; else if (voto == 3) ++cont3; else if (voto == 0) ++brancos; else ++nulos;

Existe outra maneira muito mais prtica de realizar essa comparao. Basta usar o comando de seleo mltipla switch. Veja como fica a soluo.

++eleitores; switch (voto) { case 0: ++brancos; break; case 1: ++cont1; break; case 2: ++cont2; break; case 3: ++cont3; break; default: ++nulos; }

Note que os dois trechos de cdigo fazem exatamente a mesma coisa, mas de formas diferentes. Escolha a que achar mais fcil. Ao se computar os votos, as sadas 2, 3 e 4 foram obtidas; resta agora obter o candidato vencedor.

if ((cont1 > cont2) && (cont1 > cont3)) vencedor = 1; else if ((cont2 > cont1) && (cont2 > cont3)) vencedor = 2; else vencedor = 3;

106

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 8 (impresso dos resultados) printf(\nO candidato vencedor foi: %i , vencedor); printf(\nNumero de votos em branco: %i ,brancos); printf(\nNumero de votos nulos: %i ,nulos); printf(\nNumero de eleitores: %i ,eleitores);

Passo 9 (montagem do programa)


/* Eleicoes.c: computa os votos de uma eleio e divulga os nmeros obtidos e o candidato vencedor.*/ #include <stdio.h> #include <conio.h> int voto, vencedor, brancos, nulos, eleitores, cont1, cont2, cont3;

int main () { printf(\nEleicoes Ficha Limpa por um Brasil melhor!\n); brancos=nulos=eleitores=cont1=cont2=cont3= 0; while (1) { printf (\nDigite o seu voto (1,2,3 ou 0(branco) -1 finaliza): ); scanf (%i,&voto); if (voto==-1) break; ++eleitores; switch (voto) { case 0: ++brancos; break; case 1: ++cont1; break; case 2: ++cont2; break; case 3: ++cont3; break; default: ++nulos; } } if ((cont1 > cont2) && (cont1 > cont3)) vencedor = 1; else if ((cont2 > cont1) && (cont2 > cont3)) vencedor = 2; else vencedor = 3; printf printf printf printf (\nO candidato vencedor foi: %d , vencedor); (\nNumero de votos em branco: %d , brancos); (\nNumero de votos nulos: %d ,nulos); (\nNumero de eleitores: %d ,eleitores);

puts(\nFim do programa); getch(); return 0;

Unisa | Educao a Distncia | www.unisa.br

107

Elisamara de Oliveira

Passo 10 (fazer o teste de mesa do algoritmo) Suponha os seguintes valores de entrada: 1, 2, 2, 0, 2, 1, 3, -1 eleitores 0 1 2 3 4 5 6 7 vencedor

voto 1 2 2 0 2 1 3

cont1 0 1

cont2 0 1 2

cont3 0

brancos 0

nulos 0

Resultados

1 3 2 1

-1

O candidato vencedor foi: 2 Numero de votos em branco: 1 Numero de votos nulos: 0 Numero de eleitores: 7 Fim do programa

6.6 Exemplo da Srie Numrica

Escreva um programa que leia N e calcule e imprima o valor de S dado por:

Passo 1 (ler e entender o problema) Vamos simular um determinado valor inicial de N = 5. A srie S resultante seria:

Passo 2 (dados de entrada) 1. Valor de N

108

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 3 (dados de sada) 1. Valor de S Passo 4 (variveis auxiliares) 1. Contador de termos 2. Numerador 3. Denominador Passo 5 (declarar as variveis)

int N, cont, num, den; float termo, S;

Passo 6 (inicializar as variveis)

printf(\nDigite a quantidade de termos da serie: ); scanf (%i,&N);

(varivel de entrada: inicializada com scanf)

S=cont=0;

(contadores e somadores: inicializados com zero. Em C, possvel inicializar vrias variveis com o mesmo valor num nico comando de atribuio mltipla!) num = 1; den = N;

(o primeiro numerador comea com 1 e o primeiro denominador comea com N)

Unisa | Educao a Distncia | www.unisa.br

109

Elisamara de Oliveira

Passo 7 (escrever o cdigo para calcular as sadas) Para se calcular a sada, necessrio gerar os N termos da srie. Cada termo formado pelo numerador dividido pelo denominador. O prximo numerador ganha 1 (soma 1) e o prximo denominador perde 1 (subtrai 1). Observe na soluo a converso para float do resultado de num/den (o resultado seria inteiro pois envolve operandos inteiros).

for (cont=0; cont < N; cont++) { termo = (float) num / den; printf(\n %i / %i , num, den); S = S + termo; ++num; --den; }

Passo 8 (impresso dos resultados)

printf (\n\nO valor da serie S= %.5f \n, S);

110

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 9 (montagem do programa)

/* .......................................... serieS.c: Gera a serie S assim formada: S = 1/N + 2/N-1 + ... + N/1 .............................................*/ #include <stdio.h> #include <conio.h> int float N, cont, num, den; termo, S;

int main( ) { printf(Gera a serie S \n); printf(\nForneca o numero de termos da serie: ); scanf(%d,&N); num = 1; den = N; for (cont=0; cont < N; cont++) { termo = (float) num / den; printf(\n %i / %i , num, den); S = S + termo; ++num; --den; } printf (\n\nO valor da serie S= %.5f \n, S); getch(); return 0;

Passo 10 (fazer o teste de mesa do algoritmo) Suponha o seguinte valor de entrada: 4 N 4 cont 0 1 2 3 num 1 2 3 4 den 4 1/4 3 2 1 2/3 3/2 4/1 0 + 1/4 0 + 1/4 + 2/3 0 + 1/4 + 2/3 + 3/2 0 + 1/4 + 2/3 + 3/2 + 4/1 1/4 2/3 3/2 4/1 O valor da serie S= 6.41667 termo S Resultados

Unisa | Educao a Distncia | www.unisa.br

111

Elisamara de Oliveira

6.7 Resumo do Captulo

Caro(a) aluno(a), aprendemos a usar o comando repetitivo e a resolver problemas que envolvam flags. Flag vem do ingls e significa sinal ou bandeira. Um flag em programao representa um valor que usado para indicar o final da entrada de dados. Como j foi dito antes, um algoritmo usado para resolver problemas finitos. Se algum pede que faamos um programa para ler uma quantidade indeterminada de nmeros..., aparentemente no poderamos escrever um algoritmo para resolv-lo.

6.8 Atividades Propostas

Vamos praticar um pouco mais agora. A minha forte recomendao, novamente, que voc faa os exerccios sozinho(a), consultando os exemplos dados para ajud-lo(a). Somente depois da sua tentativa que voc deve conferir as respostas. Boa sorte! 1. Escreva um programa em C que leia e imprima o nome e as duas notas de vrios alunos. O ltimo aluno ter o nome=FIM. 2. Escreva um programa em C que leia 10 nmeros, calcule e imprima a sua soma. 3. Escreva um programa em C que calcule e imprima N nmeros pares, comeando do zero. Pergunte ao usurio quantos nmeros ele deseja (ou seja, pea-lhe para fornecer o valor de N). 4. Quais os resultados produzidos pelo programa?

#include <stdio.h> int X, Y; int main() { Y = 0; X = -1; while (Y != 4) { X = X * -1; ++Y; if (X > 0) /* X positivo? */ printf(\n%i,Y); else printf(\n%i,-Y); } return 0; }

112

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Para que seja possvel voc acompanhar a execuo do programa em C, vamos criar uma tabela para fazer o chamado teste de mesa de um programa em C. A tabela deve ter uma coluna para cada varivel e uma coluna especial para a impresso dos resultados. O programa em C deve ser seguido comando a comando e os valores das variveis devem ser alterados de acordo com as instrues. X Y Resultados

5. Faa o teste de mesa do programa seguir e construa a tabela com os valores das variveis e os resultados do programa. #include <stdio.h> int numero, cont; main() { numero = 2; for (cont=0; cont < 5; cont++) { printf(%i,numero); printf(%i\n,-numero); numero = numero + 2; } return 0; }

numero

cont

Resultado

Unisa | Educao a Distncia | www.unisa.br

113

Elisamara de Oliveira

6. Fazer um programa que leia vrios valores de ngulos (flag=-1) e verifique a qual quadrante pertence esse ngulo.

7. Fazer um programa que leia vrios pares de nmeros N1 e N2 (Flag=N1=0), calcule e imprima: a) N1 * N2 b) N1 / N2 c) N1 - N2 d) N1 + N2 e) 10% de N1 f) 25% de N2 g) raiz quadrada de N1 h) raiz quadrada de N2 i) a unidade de N1 j) a dezena de N2 k) o resto da diviso inteira de N1 por N2 l) N1 elevado a 3 m) N2 elevado a 2 n) N1 elevado a N2 8. Fazer um programa para realizar uma pesquisa de opinio sobre um tema de sua escolha. Devem ser lidas a resposta 1-A favor 2- Contra ou 0-Finaliza e o sexo (1=feminino, 2=masculino) dos participantes; calcular e imprimir: a) o nmero de mulheres e o percentual; b) o nmero de homens e o percentual; c) nmero de votos a favor e percentual; d) nmero de votos contra e percentual.

114

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

9. Fazer um programa para ler vrios pares de nmeros inteiros e calcular sua soma, subtrao, multiplicao e diviso. Usar n1=0 como flag. 10. Fazer um programa que leia o NOME, a ALTURA, o PESO e a IDADE de vrios candidatas a modelo (flag=NOME=fim) e verifique se elas podem ser aprovadas ou no para serem modelos: 1.70 <= ALTURA <= 1.85 50 <= PESO <= 60 18 <= IDADE <= 21 11. Fazer um programa que leia o nmero de termos desejados e gere as sequncias numricas (uma de cada vez, mas ambas no mesmo programa): 2, 4, 8, 16, 32, 64... 1, -1, 2, -2, 3, -3, 4, -4... 12. O preo final de um automvel calculado pelo preo de fbrica, mais o valor do IPI = 40% sobre o preo de fbrica, mais a porcentagem da concessionria = 10% sobre o preo j com o IPI. Faa um programa que leia o NOME de vrios modelos de automveis (flag=NOME=jegue) e o preo de fbrica, calcule e imprima o seu preo final. 13. Faa um programa em C para calcular o valor a ser pago pelo perodo de estacionamento do automvel. O usurio entra com os seguintes dados: hora e minuto de entrada, hora e minuto de sada. Sabe-se que esse estacionamento cobra hora cheia, ou seja, se passar um minuto ele cobra a hora inteira. O valor cobrado pelo estacionamento : R$ 4,00 para 1 hora de estacionamento; R$ 6,00 para 2 horas de estacionamento; R$ 1,00 por hora adicional (acima de 2 horas). 14. Faa um programa que leia o cdigo de um livro (* finaliza) e apresente a categoria do livro, conforme a tabela a seguir: Cdigo do Livro A B C D E Categoria Fico Romance Documentrio Audiolivro Tcnico

Unisa | Educao a Distncia | www.unisa.br

115

Elisamara de Oliveira

15. Fazer um programa que leia vrios pares de coordenadas X e Y (flag=X=1000) e verifique a qual quadrante pertence esse ponto (X,Y). A seta indica o sentido positivo dos eixos.

16. Fazer um programa para calcular e imprimir o valor de H, dado pela seguinte srie: H = 1 - 2 + 4 - 8 + 16 - ... + 16.384 225 196 169 144 121 1 17. Fazer um programa para calcular a mdia de um conjunto de nmeros inteiros (flag = -1). 18. Fazer um programa para calcular as razes de uma equao do 2 grau. Os valores dos coeficientes A, B e C sero fornecidos pelo usurio. Voc deve perguntar se o usurio deseja fornecer outros dados at que ele responda N no. 19. Fazer um programa para gerar todos os nmeros potncia de 2 menores que 1000000 e todos os nmeros mpares menores que 100. Dica: utilize o tipo bsico long int. 20. Fazer um programa para calcular o valor aproximado de p, utilizando os N primeiros termos (N dever ser lido) da srie: = 4 - 4 + 4 - 4 + 4 ... 3 5 7 9 21. Fazer um programa para ler uma sequncia de nmeros inteiros de 5 dgitos (flag = -1), calcular o seu dgito verificador (DV) e imprimir o nmero lido e seu DV separado por um hfen. O DV calculado somando-se os 5 dgitos do nmero, dividindo essa soma por 11 e obtendo o resto dessa diviso inteira. Quando o DV for 10, deve-se imprimir X. Exemplo: Nmero lido: 12819

Nmero impresso: 12819 - X

116

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

22. Nmeros palndromos so aqueles que tm o mesmo valor se lidos da esquerda para a direita ou da direita para a esquerda, como: 44, 232, 1001, 838 etc. Fazer um programa que leia vrios nmeros inteiros de 4 dgitos (flag= -1) e imprima o nmero lido e uma frase dizendo se ele palndromo ou no. 23. Fazer um programa para calcular o Imposto de Renda (IR) de um grupo de contribuintes, sabendo que: a) devero ser lidos o CPF e a renda anual de cada contribuinte (ltimo contribuinte tem o CPF = 0); b) o IR dever ser calculado de acordo com a tabela: Renda Anual at 5000,00 de 5000,01 at 50000,00 acima de 50000,01 Alquota para clculo do IR isento 10 % 15 %

c) dever ser impressa uma frase com o CPF do contribuinte, sua renda anual e o valor do IR. 24. Fazer um programa que leia vrios conjuntos de dados com: o NOME de um produto, seu preo de CUSTO, seu preo de VENDA e a QUANTIDADE vendida do produto (ltimo conjunto lido tem NOME do produto=fim) e calcule o lucro obtido com o produto. No final, o programa deve imprimir o NOME do produto que deu mais lucro. 25. Fazer um programa que leia vrios nmeros que representem um determinado nmero de ms do ano (flag=-1), escreva o nome do ms por extenso e o nmero de dias. Se o ms no existir, imprimir uma frase de erro. 26. Certo produto custa R$ 100,00 e concedido um desconto de 10% se a compra for acima de 10 unidades, 15% se for acima de 40 unidades e 25% se for acima de 100 unidades. Faa um programa que leia a quantidade desejada por vrios clientes (flag=quantidade=0) e calcule e imprima o preo sem desconto, o valor do desconto (se no houver desconto, imprima 0) e o valor a ser pago com o desconto. 27. Faa um programa que leia a distncia em quilmetros percorrida por vrios carros (flag=0), a quantidade de combustvel consumida e calcule e imprima o consumo mdio de combustvel (consumo= distncia/combustvel). 28. Faa um programa que leia vrias temperaturas em graus Fahrenheit (flag=1000) e calcule e imprima a temperatura em graus Celsius (Celsius = (Fahrenheit-32) * (5/9)). 29. Faa um programa que leia vrios pares de valores N1 e N2 (flag=N1=0), imprima uma frase dizendo se eles so iguais, qual o maior e qual o menor e, aps terminar a leitura de todos os nmeros, selecione e imprima o maior e o menor de todos.

Unisa | Educao a Distncia | www.unisa.br

117

Elisamara de Oliveira

30. Fazer um programa que leia vrios nmeros inteiros (flag=0) e verifique se o nmero primo ou no. Um nmero primo s divisvel por 1 e por ele mesmo (sugesto: tente dividir o nmero por 2, 3, 4, 5... at o valor do nmero; se alguma diviso resultar em zero, ele no primo...). 31. Faa um programa que apresente o menu de livros venda numa livraria: Cdigo do Livro 1 2 3 0 Ttulo Informtica para Concursos Java como Programar Use a cabea: C# finaliza Preo 87,00 219,00 99,00

Para cada opo vlida de livro (rejeitar escolhas invlidas), oferecer as formas de pagamento. Cdigo da forma de pagamento 1 2 Condio de pagamento vista, com 10% de desconto Em 2 vezes, preo normal de etiqueta sem juros

Imprimir todos os valores de acordo com a escolha do usurio. Rejeitar formas de pagamento invlidas. 32. Faa um programa que leia o cdigo de um determinado produto (0 finaliza) e mostre a sua classificao, utilizando a seguinte tabela: Cdigo do Produto (CP) 1 2, 3 ou 4 5 ou 6 7 8 ou 9 Qualquer outro cdigo Classificao Alimento no perecvel Alimento perecvel Vesturio Higiene pessoal Limpeza e utenslios domsticos Invlido

118

Unisa | Educao a Distncia | www.unisa.br

7
#include <stdio.h> #include <stdlib.h> #include <conio.h>

OUTROS PROGRAMAS EM C

/*CoresnoDevC.c: mostra como usar cores de texto e de fundo no DevC++ */

int main() { system (cls); // limpa a tela system (color 0B); // cor de fundo preta e letras azuis brilhantes printf (\n\n\t\t\tTESTE: AZUL); getch(); system (cls); // limpa a tela system (color 4C); // cor de fundo vermelha e letras vermelhas brilhantes printf (\n\n\t\t\tTESTE: VERMELHO); getch(); system (cls); // limpa a tela system (color 5D); // cor de fundo roxa e letras lilases brilhantes printf (\n\n\t\t\tTESTE: LILAS); getch(); system (cls); // limpa a tela system (color 0E); // cor de fundo preta e letras amarelas brilhantes printf (\n\n\t\t\tTESTE: AMARELO); getch(); system (cls); // limpa a tela system (color 1B); // cor de fundo azul e letras azuis claras printf (\n\n\n); system (color /? |more); getch();

Unisa | Educao a Distncia | www.unisa.br

119

Elisamara de Oliveira

//for.c - ilustra o uso do comando for e de #define #include <stdio.h> #include <conio.h> #define MAXINT 100 #define MAXLONG 1000000 #define clrscr(); system(cls); int num, contnum; long int numlong, quadrado; int main() { clrscr(); printf(\n Sequencia de numeros impares menores que %i, MAXINT); printf(\n =============================================\n\n); for (num=1; num<=MAXINT; num=num+2) { printf(%i\t,num); } getch(); clrscr(); printf(\n Sequencia de numeros pares menores que %i,MAXINT); printf(\n ===========================================\n\n); contnum=1; num=0; for (; num<=MAXINT; num+=2) { printf(%i\t,num); if (contnum==20) { getch(); contnum=0; } ++contnum; } clrscr(); printf(\n Sequencia de numeros multiplos de 3 menores que %i,MAXINT); printf(\n ====================================================\n\n); contnum=1; num=3; for ( ; ; ) { printf(%i\t,num); num=num+3; if (num > MAXINT) break; }

120

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

getch(); clrscr(); printf(\n Sequencia de numeros potencia de 2 menores que %ld,MAXLONG); printf(\n ======================================================\n\n); for (numlong=2; numlong<=MAXLONG; numlong=numlong*2) { printf(%ld\t,numlong); } getch(); clrscr(); printf(\n Sequencia de quadrados perfeitos menores que %ld,MAXLONG); printf(\n ====================================================\n\n); quadrado=1; for (numlong=1; quadrado<=MAXLONG; numlong++) { quadrado=numlong*numlong; printf(%ld\t,quadrado); } getch(); printf (\n\n\n\n getch(); return 0; Fim do programa);

/*Multiplos3.c: gera multiplos de 3 menores que 500 */ #include <stdio.h> #include <conio.h> int num, contnum; int main() { printf(\n Sequencia de numeros multiplos de 3 menores que 500); printf(\n ========================================\n\n); contnum=0; num=3; while (num<500) { printf(%i\t,num); num = num + 3; if (contnum==20) { getch(); contnum=0; } ++contnum; }

Unisa | Educao a Distncia | www.unisa.br

121

Elisamara de Oliveira

printf (\n\n\n\n Fim do programa); getch(); return 0; } /*Compara.c: mostra como se apresenta um menu e se comparam meros */ #include <stdlib.h> #include <conio.h> #include <stdio.h> #include <string.h> char str1[20], str2[20]; int num1, num2, opcao; int main() { while ( 1 ) { printf(\n 1- Compara strings ); printf(\n 2- Compara numeros ); printf(\n 0- Finaliza ); printf(\n\n Escolha sua opcao: ); scanf (%i, &opcao); if (opcao == 0) { printf (\n Bye, bye! getch(); break; }

strings e nu-

Pressione ENTER...);

switch (opcao) { case 1: printf (\n Forneca o primeiro nome: ); gets(str1); printf (\n Forneca o segundo nome: ); gets(str2); if (strcmp(str1,str2) > 0) printf (\n %s vem depois de %s , str1, str2); else if (strcmp(str1,str2) < 0) printf (\n %s vem antes de %s , str1, str2); else printf (\n Os nomes so iguais.); getch(); break; case 2: printf (\n Forneca um numero inteiro: ); scanf(%d, &num1);

122

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

printf (\n Forneca outro numero inteiro: ); scanf(%d, &num2); if (num1>num2) printf (\n %d eh maior que %d , num1, num2); else if (num2>num1) printf (\n %d eh maior que %d , num2, num1); else printf (\n Os numeros sao iguais! ); getch(); break; default: printf (\n Opao de menu invalida. ); getch(); } // fim do switch } // fim do while (1) return 0; } // fim do main()

//loja.c: oferece 3 produtos e realiza as vendas com desconto

#include <stdio.h> #include <conio.h> #include <stdlib.h> #define limpa; system(cls);

int opcao, qtde; int total1=0, total2=0, total3=0; float fatura=0; float preco, desc, precocomdesc; int main() { while (1) { limpa; printf(\nLojinha da 25 ); printf(\nNas compras acima de printf(\n1- Celular R$ printf(\n2- Computador - R$ printf(\n3- Camera R$ printf(\n-1 Finaliza );

4 unidades ganhe 10%% de desconto!! ); 500.00 ); 950.00 ); 600.00 );

Unisa | Educao a Distncia | www.unisa.br

123

Elisamara de Oliveira

printf(\nEscolha sua opcao: ); scanf(%i,&opcao); if (opcao == -1) break; switch (opcao) { case 1: printf(\nVc esta comprando celulares!!!); printf(\nQuantos celulares vc deseja?); scanf(%i,&qtde); if (qtde > 0) { total1=total1+qtde; preco=500.00 * qtde; if (qtde >=5) { desc = preco * 0.10; precocomdesc = preco - desc; printf(\nVc obteve R$ %.2f de desconto e vai pagar R$ %.2f,desc,precocomdesc); fatura=fatura+precocomdesc; } else { printf(\nSua compra totalizou R$ %.2f,preco); fatura=fatura+preco; } } else printf(\nQuantidade invalida. Venda cancelada.); break; case 2: printf(\nVc esta comprando computadores!!!); printf(\nQuantos computadores vc deseja?); scanf(%i,&qtde); if (qtde > 0) { total2=total2+qtde; preco=950.00 * qtde; if (qtde >=5) { desc = preco * 0.10; precocomdesc = preco - desc; printf(\nVc obteve R$ %.2f de desconto e vai pagar R$ %.2f,desc,precocomdesc); fatura=fatura+precocomdesc; } else { printf(\nSua compra totalizou R$ %.2f,preco); fatura=fatura+preco;

124

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

} else printf(\nQuantidade invalida. Venda cancelada.); break; case 3: printf(\nVc esta comprando cameras!!!); printf(\nQuantas cameras vc deseja?); scanf(%i,&qtde); if (qtde > 0) { total3=total3+qtde; preco=600.00 * qtde; if (qtde >=5) { desc = preco * 0.10; precocomdesc = preco - desc; printf(\nVc obteve R$ %.2f de desconto e vai pagar R$ %.2f,desc,precocomdesc); fatura=fatura+precocomdesc; } else { printf(\nSua compra totalizou R$ %.2f,preco); fatura=fatura+preco; } } else printf(\nQuantidade invalida. Venda cancelada.); break; default: printf(\n\nOpcao invalida\n);

}//switch getch(); //while

printf(\n\n\nQuantidade vendida de celulares= %i, total1); printf(\n\n\nQuantidade vendida de computadores= %i, total2); printf(\n\n\nQuantidade vendida de cameras= %i, total3); printf(\n\n\nFaturamento da Lojinha 25 R$ %.2f, fatura);

Unisa | Educao a Distncia | www.unisa.br

125

Elisamara de Oliveira

printf(\n\n\nFim do programa); getch(); //para a tela return 0;

}//main printf(\n\n\nFim do programa); getch(); //para a tela return 0;

}//main

126

Unisa | Educao a Distncia | www.unisa.br

8
8.1 Estudo Dirigido

PRTICA EM LABORATRIO

1. Crie uma pasta com seu nome no diretrio do seu computador, em que voc armazenar os programas em C deste curso, seguindo as instrues: Entre no Windows Explorer ou na pasta Meu computador do desktop: Clique em <Arquivo> <Novo> <Pasta> Substitua o nome nova pasta criado, pelo seu primeiro nome 2. Faa o download gratuito do compilador Dev-C++ para que possa comear a escrever seus programas. 3. No sistema Windows, localize o compilador Dev-C++ e execute o programa. <Iniciar> <Programas><Dev-C++> 4. No DevC++, crie um novo arquivo <Arquivo> <Novo> <Arquivo Fonte>

Unisa | Educao a Distncia | www.unisa.br

127

Elisamara de Oliveira

5. Edite o seguinte programa no editor.


/* nota.c: le a nota de um aluno e verifica se ele foi aprovado ou reprovado */ #include <stdio.h> #include <conio.h> float nota; char nome[20]; int main() { printf (\nQual eh seu nome? ); gets(nome); printf (\nDigite sua nota final: ); scanf(%f,&nota); if (nota >= 6.0) printf (\n%s, voce foi aprovado! ,nome); else printf (\n%s, voce foi reprovado... ,nome); printf(\n\nFim do programa.); getch(); return 0;

6. A qualquer momento que desejar, salve o seu arquivo. Clique em <Arquivo> <Salvar Como>. V para o diretrio E:\EXECUTAVEIS LIBERADOS\seunome e salve seu arquivo como nota.c e v salvando seu programa enquanto edita. 7. Compile e execute seu programa. Conserte os erros que o compilador apontar antes de executar. Clique em <Executar> <Compilar&Executar> Execute o programa vrias vezes para diferentes valores.

128

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

8. Edite o programa C a seguir, salve-o, compile-o e execute-o seguindo os passos ensinados no programa anterior. Para abrir um arquivo novo: <Arquivo> <Novo><Arquivo Fonte>. Salve seu arquivo como menor.c.
/* menor.c: Este programa seleciona o menor numero em uma sequencia de numeros inteiros */ #include <stdio.h> #include <conio.h> int valor, menor;

int main () { printf (\nDigite um numero inteiro: ); scanf (%i, &valor); menor = valor; while (valor != -1) { if (valor < menor) menor = valor; printf(\nDigite um numero inteiro (1 para terminar): scanf (%i, &valor); } printf (\nO menor valor lido foi: %i , menor); printf(\n\nFim do programa); getch(); return 0; }

);

Unisa | Educao a Distncia | www.unisa.br

129

CONSIDERAES FINAIS

E chegamos ao final deste curso bsico de Algoritmos e Linguagem de Programao C! Espero que voc, aluno(a), j esteja conseguindo fazer seus primeiros programas de computador nessa linguagem to moderna, avanada e instigante, que a linguagem C. De acordo com nossa metodologia, voc aprendeu a escrever os primeiros algoritmos utilizando o PortuC, uma pseudolinguagem que o(a) ajudou a quebrar a primeira barreira da linguagem C, que so seus comandos escritos em ingls. Rapidamente passamos traduo desses algoritmos para a linguagem-alvo e, em seguida, j pudemos ir para o computador fazer nossos primeiros testes. Espero que voc no pare por aqui, caro(a) aluno(a). H muitos problemas do mundo real que esperam por solues automatizadas. O desafio grande, mas sua capacidade de aprendizado e de superao maior ainda! Como falamos no captulo inicial, a linguagem C inspirou e foi a base de plataformas e linguagens de programao modernas e atuais, como o Java e o C#. Assim, voc j tem a base para encarar desafios maiores e se tornar um grande desenvolvedor. A gente se encontra, ento, no mundo profissional da nossa rea, trocando informaes, aprendendo juntos e trabalhando bastante, pois o mercado profissional amplo e vasto e conta conosco! Qualquer dvida, entre em contato por e-mail comigo: elisaoli@uol.com.br.

Unisa | Educao a Distncia | www.unisa.br

131

RESPOSTAS COMENTADAS DAS ATIVIDADES PROPOSTAS

Caro(a) aluno(a), aqui voc encontrar respostas de uma parte dos exerccios das atividades propostas. Voc deve tentar fazer sozinho(a) primeiramente, antes de olhar a resposta. Os outros exerccios voc j tem condies de resolver sem ajuda, mas, caso restem dvidas, use os chats e fruns para solicitar a ajuda de seu professor! Boa sorte! Captulo 1 1. Qual o padro de comportamento utilizado para gerar as sequncias: 1, 5, 9, 13, 17, 21, 25 ... A srie de nmeros comea com 1 (primeiro termo); Para se gerar qualquer um dos outros termos da srie, basta somar 4 ao nmero imediatamente anterior; Esta uma srie infinita. Seu fim deve ser determinado por uma condio do tipo gerar os 10 primeiros termos da srie ou gerar todos os termos da srie menores que 100. 1, 1, 2, 3, 5, 8, 13, 21, 34 ... A srie de nmeros comea com 1 (primeiro termo); O segundo termo tambm 1; Para se gerar qualquer um dos outros termos da srie, basta somar os dois termos imediatamente anteriores: Exemplos: 1 (primeiro termo) + 1 (segundo termo) =2 (terceiro termo) 1 (segundo termo) + 2 (terceiro termo) = 3 (quarto termo) 2 (terceiro termo) + 3 (quarto termo) = 5 (quinto termo) Esta uma srie infinita, conhecida como srie de Fibonacci. Seu fim deve ser determinado por uma condio do tipo gerar os 10 primeiros termos da srie ou gerar todos os termos da srie menores que 100.

Unisa | Educao a Distncia | www.unisa.br

133

Elisamara de Oliveira

Captulo 3 1. O exerccio pede que voc escreva um algoritmo que leia e imprima o nome e as duas notas de um aluno. Para a soluo desse problema, so necessrias apenas 3 variveis: uma para o nome do aluno, uma para a nota da prova 1 e outra para a nota da prova 2. O nome uma cadeia de caracteres e as notas so do tipo real, pois o aluno pode tirar uma nota 7.5, por exemplo. Veja a soluo completa, analise e reflita. Caso haja dvidas, participe dos chats e dos fruns com seu professor!
/* notas.c: programa que le e imprime 2 notas */ caractere nome[20]; real nota1, nota2; principal() { imprima (Qual eh o seu nome? leia (%s,nome);

);

imprima (Digite a primeira nota do aluno: ); leia (%f,&nota1); imprima (Digite a segunda nota do aluno: leia(%f,&nota2); );

imprima (%s, sua 1a nota foi: %1.2f e a sua 2a nota foi: %1.2f , nome,nota1,nota2); imprima (Fim do programa); }

2. Voc deve escrever apenas o comando que calcule a mdia das duas notas lidas no exerccio anterior. Isso simples: basta somar as duas notas e dividir a soma por 2. Observe os parnteses envolvendo a soma das duas notas!
media = (nota1 + nota2) / 2;

3. Voc deve escrever um comando que verifique se a mdia calculada no exerccio anterior maior ou igual a 7. Para isso, voc deve usar o comando condicional se. Caso a mdia seja superior ou igual a 7, vamos imprimir uma frase dizendo que o aluno foi aprovado, caso contrrio, imprimimos uma frase dizendo que foi reprovado. Veja a soluo:

se (media >= 7.0) imprima (Voce foi aprovado! ); seno

imprima (Voce foi reprovado...);

134

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

4. Aqui voc deve acrescentar ao algoritmo inicial os comandos para clculo da mdia e critrios de aprovao! Dessa maneira, a soluo fica completa. Voc ter escrito um algoritmo que l o nome e as duas notas de um aluno, calcula a mdia das notas e imprime uma frase dizendo se ele foi aprovado (mdia maior ou igual a 7.0) ou reprovado.
/* media.c: programa que calcula a media de 2 notas e verifica a aprovacao do aluno */ caractere nome[20]; real nota1, nota2, media; principal() { imprima (Qual eh o seu nome? leia (%s,nome); );

imprima (Digite a primeira nota do aluno: ); leia (%f,&nota1); imprima (Digite a segunda nota do aluno: leia(%f,&nota2); media = (nota1 + nota2) / 2; se (media >= 7.0) imprima (%s voce foi aprovado! ,nome); seno imprima (%s voce foi reprovado..., nome); } imprima(Fim do programa ); );

5. Vamos repetir o trecho de comandos se aninhado e depois resolver cada uma das situaes propostas. Observe, nesse trecho, que temos apenas 2 comandos: um comando se que possui outros comandos se dentro dele e o comando C5, ou seja, o comando C5 est fora do ninho de comandos se, por isso, ser sempre executado, independentemente dos valores de B1, B2 e B3!

Unisa | Educao a Distncia | www.unisa.br

135

Elisamara de Oliveira

a) Se B1 verdadeiro, o comando C1 do primeiro se ser executado e o ninho de comandos se ser finalizado (lembre-se que o seno no poder ser executado, pois a condio se B1 foi avaliada como verdadeira!). Finalizado o ninho de comandos se, o prximo comando a ser executado o C5. Resposta: C1 e C5 b) Se B1 falso, o seno do primeiro se ser executado e a condio do segundo comando se ser avaliada. Como B2 verdadeiro, o segundo se ser executado e a condio do terceiro comando se ser avaliada. Como B3 falso, o seno do terceiro se ser executado, ou seja, os comandos C3 e C4 sero executados e o ninho de comandos se ser finalizado. Finalizado o ninho de comandos se, o prximo comando a ser executado o C5. Resposta: C3, C4 e C5 c) Se B1 falso, o seno do primeiro se ser executado e a condio do segundo comando se ser avaliada. Como B2 verdadeiro, o segundo se ser executado e a condio do terceiro comando se ser avaliada. Como B3 verdadeiro, o comando C2 do terceiro se ser executado e o ninho de comandos se ser finalizado. Finalizado o ninho de comandos se, o prximo comando a ser executado o C5. Resposta: C2 e C5 d) Se B1 falso, o seno do primeiro se ser executado e a condio do segundo comando se ser avaliada. Como B2 falso e no existe o seno do segundo se, o ninho de comandos se ser finalizado. Finalizado o ninho de comandos se, o nico comando a ser executado o C5! Resposta: B1 = Falso, B2= Falso e B3 no precisa ser definido. 6. Dado um conjunto de respostas sim ou no de vrias pessoas e seu sexo (F=feminino, M=masculino), voc deve escrever comandos em PortuC para calcular: a) o nmero de mulheres que responderam SIM
se (sexo == F e resposta == sim) ContMulSim = ContMulSim + 1;

b) o nmero de homens que responderam NO


se (sexo == M e resposta == nao) ContMulSim = ContMulSim + 1;

136

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

c) o nmero de mulheres e homens que responderam NO


se (resposta == nao) ContNao = ContNao + 1;

Ateno! Todos os contadores utilizados nos trechos de algoritmo devem ser previamente inicializados com 0 (zero). As comparaes com F, M, sim e nao s vo funcionar se o usurio, claro, escrever as respostas exatamente dessa forma. Se o programador quiser que o programa aceite outros tipos de grafia envolvendo letras maisculas e minsculas, isso deve ser includo no cdigo. Por exemplo, para aceitar F ou f, o trecho da letra a ficaria assim: se ( (sexo==F ou sexo==f) e (resposta==sim ou resposta=SIM) ) 7. Qual o valor de L aps a execuo desse algoritmo?

Aps a inicializao das variveis, a condio do comando se deve ser avaliada. Como esta no uma condio simples, vamos analis-la por partes, lembrando que 0 avaliado como Falso e qualquer outro valor avaliado como Verdadeiro. C Falso (X+Y > 5) (1.5 + 3.2 = 4.7 ... 4.7 > 5 ?) como 4.7 no maior que 5, o resultado Falso. O resultado da expresso fica assim: Falso ou Falso ou Verdadeiro que Verdadeiro! Como a condio do comando se foi avaliada como verdadeira, o comando L=0 ser executado e o algoritmo ser finalizado! Resposta: L=0

Unisa | Educao a Distncia | www.unisa.br

137

Elisamara de Oliveira

8. Voc deve escrever os trechos de algoritmo em PortuC que ajudem o IBGE a fazer o censo populacional de certa cidade, sabendo-se que os seguintes dados foram pedidos aos cidados: SEXO (H= homem, M= mulher) e RENDA (nmero de salrios-mnimos sm). Vamos soluo dos trechos de algoritmo: a) o total de homens
se (sexo == H ou sexo == h) ++contHomens;

b) o total de mulheres
se (sexo == M ou sexo == m) ++contMulheres;

c) o total de pessoas da classe C (at 4 sm), da classe B (at 20 sm) e da classe A (acima de 20 sm)
se (renda <= 4) ++contClasseC; seno se (renda <= 20) ++contClasseB; seno ++contClasseA;

O trecho da letra c pode ser escrito em 3 comandos se separados. Voc deve escolher aquele que voc considera mais fcil de entender para usar, ok? Ficaria assim: se (renda<= 4) ++contClasseC; se (renda > 4 e renda <= 20) ++contClasseB; se (Renda > 20) ++contClasseA; Ateno! Todos os contadores utilizados nos trechos de algoritmo devem ser previamente inicializados com 0 (zero).

138

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

9. Fornecidos os dados das candidatas a modelo, voc deve escrever um trecho de algoritmo para verificar se os dados se enquadram nos seguintes limites: ALTURA: de 1.70 a 1.85 m, PESO: de 48.0 a 60.0 Kg e IDADE: de 17 a 21 anos. Se os dados da candidata corresponderem aos limites anteriores, deve ser impressa uma frase dizendo que ela foi aprovada, caso contrrio, que no foi aprovada. muito simples, basta checar cada um dos quesitos num nico comando se, unindo-os pelo operador lgico e. O uso do e indica que, somente se todos os quesitos forem verdadeiros, a candidata ser aprovada.

se ( (altura >= 1.70 e altura <= 1.85) e (peso >= 48 e peso <= 60) e (idade >=17 e idade <= 21) ) imprima(Candidata aprovada); seno imprima(Candidata reprovada);

10. Voc deve modificar o exerccio anterior para que uma frase seja impressa aps a verificao de cada quesito dizendo se a candidata foi aprovada ou no em cada um deles e uma frase final dizendo se foi aprovada ou no como modelo. Observe a estratgia que eu utilizei para saber se a candidata foi reprovada em algum quesito: eu usei uma varivel inteira que funciona como uma varivel lgica aprovada. Essa varivel foi inicializada com verdadeiro (1) e somente no caso de algum quesito ser reprovado, ou seja, no caso de algum seno ser executado, essa varivel passaria a ter o valor falso (0), indicando a reprovao da candidata. Mas existem outras solues, claro. Uma delas foi criada por um aluno que usou um contador: cada vez que um quesito era aprovado, ele somava 1 ao contador; no final, se o contador fosse igual a 3, a candidata estaria aprovada, caso contrrio, teria sido reprovada.
aprovada = 1; se (altura >= 1.70 e altura <= 1.85) imprima (quesito altura aprovado!); seno { imprima (reprovada no quesito altura); aprovada = 0; } se (peso >=48 e peso <=60) imprima(quesito peso aprovado!) seno { imprima(reprovada no quesito peso.); aprovada = 0; } se (idade >=17 e idade <= 21) imprima(quesito idade aprovado!) seno { imprima(reprovada no quesito idade); aprovada = 0; } se (aprovada) imprima(Candidata aprovada); seno imprima(Candidata reprovada);

Unisa | Educao a Distncia | www.unisa.br

139

Elisamara de Oliveira

Captulo 4 1. Passo 1: ler e entender Passo 2: variveis de entrada - comprimento - largura - rea da sala - permetro da sala - no tem real compr, larg, area, perimetro; imprima (Digite o comprimento da sala: ); leia(%f, &compr); imprima (Digite a largura da sala: ); leia(%f, &larg); Passo 7: calcular as sadas area = compr * larg; perimetro = (2*compr) + (2*larg); imprima(A sala tem %f de area e %f de perimetro , area, perimetro); Passo 9: montar o algoritmo /*Exerc411.c: Le o comprimento e a largura de uma sala e calcula sua area e perimetro*/ real compr, larg, area, perimetro;
principal () { imprima (Digite o comprimento da sala: ); leia(%f, &compr); imprima (Digite a largura da sala: ); leia(%f, &larg); area = compr * larg; perimetro = (2*compr) + (2*larg); imprima(A sala tem %f de area e %f de perimetro , area,

Passo 3: variveis de sada

Passo 4: variveis auxiliares Passo 5: declarar todas as variveis Passo 6: inicializar as variveis

Passo 8: imprimir os resultados

140

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

perimetro);
}

imprima(Fim do programa);

Passo 10: testes de mesa compr 2.5 larg 5.0 area 12.5 area 0 perimetro Sada Tela

10.0 perimetro

A sala tem 12.5 de area e 10.0 de perimetro Sada Tela

compr 0

larg -1.0

-2.0

A sala tem 0 de area e -2.0 de perimetro

Nesses dois testes de mesa, podemos observar um comportamento esperado para dados vlidos e um comportamento estranho para dados no esperados. O certo seria fazer uma consistncia dos dados, j que no faz sentido ter valores negativos nem o valor zero para o comprimento e largura das paredes de uma sala, mas isso no importante agora. O importante, caro(a) aluno(a0, voc conseguir encontrar a soluo sem se preocupar com usurios, digamos, pouco honestos. 3. Passo 1: ler e entender Passo 2: variveis de entrada - valor em dlares - cotao do dlar - valor em reais - no tem real dolares, reais, cotacao; imprima (Digite o valor em dolares a ser convertido para reais: ); leia(%f, &dolares); imprima (Digite a cotacao do dolar: ); leia(%f, &cotacao); Passo 7: calcular as sadas reais = dolares*cotacao;

Passo 3: variveis de sada Passo 4: variveis auxiliares Passo 5: declarar todas as variveis Passo 6: inicializar as variveis

Unisa | Educao a Distncia | www.unisa.br

141

Elisamara de Oliveira

Passo 8: imprimir os resultados imprima(O valor %f em dolares corresponde a R$ %f, dolares, reais); Passo 9: montar o algoritmo /*Exerc413.c: Le o valor em dolares e a cotacao do dolar e calcula o valor convertido para reais*/ real dolares, reais, cotacao;
principal () { imprima (Digite o valor em dolares a ser convertido para reais: ); leia(%f, &dolares); imprima (Digite a cotacao do dolar: ); leia(%f, &cotacao); reais = dlares*cotacao; imprima(O valor %f em dolares corresponde a R$ %f, dolares, reais); imprima(Fim do programa); }

Passo 10: testes de mesa dolares 1000.00 cotacao 1.75 reais 1750.00 reais 1660.00 Sada Tela

O valor 1000.00 em dlares corresponde a R$ 1750.00 Sada Tela

dolares 1000.00

cotacao 1.66

O valor 1000.00 em dlares corresponde a R$ 1660.00

7. Passo 1: ler e entender Passo 2: variveis de entrada - v0 - ngulo

142

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 3: variveis de sada - S, que o alcance do projtil - g, que a gravidade real v0, teta, g, S; imprima (Digite o valor de v0: ); leia(%f, &v0); imprima (Digite o angulo teta em radianos: ); leia(%f, &teta); g = 9.8; Passo 7: calcular as sadas Aqui, algo importante seria saber qual operador do PortuC calcula o seno de um ngulo. Nesse caso, voc teria que perguntar ao seu professor, mas aqui vai a dica: a funo que calcula o seno sin(angulo_em_radianos) e o ngulo deve estar em radianos! S = ((v0 * v0) / g) * sin (2*teta); imprima(O alcance do projetil eh %f , S); Passo 4: variveis auxiliares Passo 5: declarar todas as variveis Passo 6: inicializar as variveis

Passo 8: imprimir os resultados Passo 9: montar o algoritmo /*Exerc417.c: Le o valor de v0 e do ngulo e calcula o alcance de um projetil*/
real v0, teta, g, S; principal () { imprima (Digite o valor de v0: ); leia(%f, &v0); imprima (Digite o angulo teta em radianos: ); leia(%f, &teta); g = 9.8; } S = ((v0 * v0) / g) * sin (2*teta); imprima(O alcance do projetil eh %f , S); imprima(Fim do programa);

Unisa | Educao a Distncia | www.unisa.br

143

Elisamara de Oliveira

Passo 10: testes de mesa Para procedermos ao teste de mesa, primeiramente, temos que recorrer aos valores do seno, dados os ngulos mais comuns, mas, para facilitar a nossa vida, seguem os valores nas tabelas a seguir, considerando que ou Pi = 3.14 e que Pi corresponde a um ngulo de 180 graus:

v0 300.0 v0 300.0 9.

teta 3.14 teta 0.785

g 9.8 g 9.8

S 0 S 9183.67

Sada Tela O alcance do projetil eh 0 Sada Tela O alcance do projetil eh 9183.67

Passo 1: ler e entender Passo 2: variveis de entrada - preo do produto - desconto - preo final com desconto Passo 4: variveis auxiliares - no tem real precoini, desconto, precofinal; imprima (Digite o valor do produto ); leia(%f, &precoini); Passo 5: declarar todas as variveis Passo 6: inicializar as variveis Passo 3: variveis de sada

144

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 7: calcular as sadas desconto = precoini * 0.05; precofinal = precoini desconto; imprima(Preo inicial do produto R$ %f , precoini); imprima(Valor do desconto R$ %f , desconto); imprima(Preo final do produto com desconto R$ %f , precofinal); Passo 9: montar o algoritmo /*Exerc419.c: Le o valor de um produto, concede desconto de 5% e apresenta o preo com desconto e o desconto */ real precoini, desconto, precofinal;
principal () { desconto = precoini * 0.05; precofinal = precoini desconto; imprima(Preco inicial do produto R$ %f , precoini); imprima(Valor do desconto R$ %f , desconto); imprima(Preco final do produto com desconto R$ %f , precofinal); imprima(Fim do programa); } imprima (Digite o valor do produto ); leia(%f, &precoini);

Passo 8: imprimir os resultados

Unisa | Educao a Distncia | www.unisa.br

145

Elisamara de Oliveira

Passo 10: testes de mesa precoini 300.00 desconto 15.00 precofinal Sada Tela

285.00

Preco inicial do produto R$ 300.00 Valor do desconto R$ 15.00 Preco final do produto com desconto R$ 285.00 Sada Tela

precoini 1000.00

desconto 50.00

precofinal

950.00

Preco inicial do produto R$ 1000.00 Valor do desconto R$ 50.00 Preco final do produto com desconto R$ 950.00

11. Passo 1: ler e entender Passo 2: variveis de entrada -A -B Passo 3: variveis de sada - no tem Passo 4: variveis auxiliares - varivel para guardar o valor de A Passo 5: declarar todas as variveis inteiro A, B, auxA; Passo 6: inicializar as variveis imprima (Digite o valor do primeiro numero inteiro ); leia(%i, &A); imprima (Digite o valor do segundo numero inteiro ); leia(%i, &B); Passos 7 e 8: calcular as sadas e imprimir os resultados imprima (Valores antes da troca A=%i B=%i , A, B); auxA = A; // valor de A eh salvo na variavel auxA A = B; // valor de B eh copiado para A B = auxA; // valor de A eh copiado para B imprima (Valores depois da troca A=%i B=%i , A, B); Passo 9: montar o algoritmo /*Exerc4111.c: Le dois inteiros A e B e troca seus valores */ inteiro A, B, auxA;

146

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

principal () { imprima (Digite o valor do primeiro numero inteiro leia(%i, &A); leia(%i, &B);

);

imprima (Digite o valor do segundo numero inteiro );

imprima (Valores antes da troca A=%i B=%i , A, B); A = B; auxA = A; // valor de A eh salvo na variavel auxA // valor de B eh copiado para A // valor de A eh copiado para B

imprima (Valores depois da troca A=%i B=%i , A, B); imprima(Fim do programa);

B = auxA;

Passo 10: testes de mesa A 3 15 B 15 3 auxA 3 Sada Tela Valores antes da troca A=3 B=15

Valores depois da troca A=15 B=3

A -4 4

B 4 -4

auxA 4

Sada Tela Valores antes da troca A=-4 B=4

Valores depois da troca A=4 B=-4

14. Passo 1: ler e entender Passo 2: variveis de entrada - temperatura (leitura do termmetro) - no tem - no tem inteiro temp; Passo 3: variveis de sada Passo 4: variveis auxiliares Passo 5: declarar todas as variveis

Unisa | Educao a Distncia | www.unisa.br

147

Elisamara de Oliveira

Passo 6: inicializar as variveis imprima (Digite o valor da temperatura lida no termometro); leia(%i, &temp); Passos 7 e 8: calcular as sadas e imprimir os resultados se (temp < 100) imprima (Temperatura muito baixa ); seno se (temp >=100 e temp <= 200) imprima (Temperatura baixa ); seno se (temp > 200 e temp < 500) imprima (Temperatura normal ); seno imprima (Temperatura muito alta );

Passo 9: montar o algoritmo /*Exerc4114.c: Le a temperatura e imprime mensagem de acordo com o valor */ inteiro temp;
principal () { imprima (Digite o valor da temperatura lida no termometro); leia(%i, &temp); se (temp < 100) imprima (Temperatura muito baixa ); seno se (temp >=100 e temp <= 200) imprima (Temperatura baixa ); seno se (temp > 200 e temp < 500) imprima (Temperatura normal ); seno imprima (Temperatura muito alta );

imprima(Fim do programa); }

148

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 10: testes de mesa temp -200 temp 200 temp 500 temp 300 Sada Tela Temperatura muito baixa Sada Tela Temperatura baixa Sada Tela Temperatura muito alta Sada Tela Temperatura normal

16. Passo 1: ler e entender Passo 2: variveis de entrada - tipo do combustvel que o carro usa - capacidade do tanque do carro - valor gasto para encher o tanque do carro - no tem

Passo 3: variveis de sada Passo 4: variveis auxiliares Passo 5: declarar todas as variveis char tipo; inteiro tanque; real preco; imprima (Digite o tipo de combustivel do carro G=gasolina ou A=alcool ); leia(%c, tipo); imprima (Digite a capacidade do tanque de combustivel: ); leia(%i, &tanque); Passos 7 e 8: calcular as sadas e imprimir os resultados se (tipo == G ou tipo == g) { preco = tanque * 2.60; imprima (Voce gastara R$ %f para encher o tanque de gasolina , preco);
} seno se (tipo == A ou tipo == a)

Passo 6: inicializar as variveis

Unisa | Educao a Distncia | www.unisa.br

149

Elisamara de Oliveira

{ preco = tanque * 1.80; imprima (Voce gastara R$ %f para encher o tanque de alcool , preco);

} seno imprima(Tipo de combustivel invalido);

Passo 9: montar o algoritmo /*Exerc4116.c: Le o tipo de combustivel, a capacidade do tanque e calcula o valor a ser pago para encher o tanque*/ char tipo; inteiro tanque; real preco; principal () { imprima (Digite o tipo de combustivel do carro G=gasolina ou A=alcool ); leia(%c, tipo); imprima (Digite a capacidade do tanque de combustivel: ); leia(%i, &tanque); se (tipo == G ou tipo == g) { preco = tanque * 2.60; imprima (Voce gastara R$ %f para encher o tanque de gasolina , preco); } seno se (tipo == A ou tipo == a) { preco = tanque * 1.80; imprima (Voce gastara R$ %f para encher o tanque de alcool , preco); } seno imprima(Tipo de combustivel invalido); imprima(Fim do programa); }

150

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

Passo 10: testes de mesa tipo A tipo g tipo y tanque 100 tanque 45 tanque 70 preco 180.00 preco 117.00 preco Sada Tela Voce gastara R$180.00 para encher o tanque de alcool Sada Tela Voce gastara R$117.00 para encher o tanque de gasolina Sada Tela Tipo de combustivel invalido

Captulo 5 1.
/* Eleicoes.c: este programa computa os votos de uma eleio e divulga os #include <stdio.h> #include <conio.h> int { int main() numeros obtidos e o candidato vencedor.*/

voto, vencedor, brancos, nulos, eleitores, cont1, cont2, cont3;

printf(\nDigite o seu voto (1,2,3 ou 0(branco) -1 finaliza): ); scanf (%i,&voto); while { (voto != -1) (voto == 1) brancos=nulos=eleitores=cont1=cont2=cont3=0; ++eleitores; if ++cont1;

else if (voto == 2) else if (voto == 3) else if (voto == 0) else ++nulos; ++brancos; ++cont3; ++cont2;

printf(\n Digite o seu voto (1,2,3 ou 0(branco) 1 finaliza): ); } scanf (%i,&voto);

if ((cont1 > cont2) && (cont1 > cont3))

Unisa | Educao a Distncia | www.unisa.br

151

Elisamara de Oliveira

else if ((cont2 > cont1) && (cont2 > cont3)) else vencedor = 3; vencedor = 2;

vencedor = 1;

printf(\n O candidato vencedor foi: %i , vencedor); printf(\n Numero de votos nulos: %i ,nulos); printf(\nFim do programa); getch(); } return 0;

printf(\n Numero de votos em branco: %i , brancos); printf(\n Numero de eleitores: %i ,eleitores);

2.
/* Eleicoes2.c: computa os votos de uma eleio e divulga os numeros obtidos e o candidato vencedor usando o comando switch.*/ #include <stdio.h> #include <conio.h> int voto, vencedor, brancos, nulos, eleitores, cont1, cont2, cont3;

int main () { brancos=nulos=eleitores=cont1=cont2=cont3= 0; { while printf (\nDigite o seu voto (1,2,3 ou 0(branco) -1 finaliza): ); scanf (%d,&voto); if (voto==-1) break; (1)

++eleitores; { case 0: case 1: case 2: case 3:

switch (voto)

break; break; break;

++brancos; ++cont1; ++cont2; ++cont3;

152

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao


} }

default:

break;

++nulos;

if ((cont1 > cont2) && (cont1 > cont3)) else if ((cont2 > cont1) && (cont2 > cont3)) else vencedor = 3; vencedor = 2; vencedor = 1;

printf (\nO candidato vencedor foi: %d , vencedor); printf (\nNumero de votos em branco: %d , brancos); printf (\nNumero de votos nulos: %d ,nulos); printf (\nNumero de eleitores: %d ,eleitores); puts(\nFim do programa); getch(); return 0;

3. Este exerccio j foi resolvido passo a passo em PortuC na quato 3 do captulo 4!


/*exerc513.c: le valor em dolares e converte para reais*/ #include <stdio.h> #include <conio.h> float dolares, reais, cotacao; int main() { printf(\nPrograma para converter dolares em reais\n); printf(\nQual eh a cotacao do dolar? ); scanf(%f,&cotacao); printf(\nQuantos dolares devem ser convertidos para reais? ); scanf(%f,&dolares); reais = dolares*cotacao;

Unisa | Educao a Distncia | www.unisa.br

153

Elisamara de Oliveira

printf(\n%.2f USD convertidos para reais = R$ %.2f ,dolares,reais); printf(\n\nFim do programa); getch(); return 0;

4. Aqui a estratgia a seguinte: hora de entrada, de sada, minuto de entrada e de sada so 4 variveis inteiras diferentes. Se a hora de sada menor que a hora de entrada, h um erro! Caso contrrio, temos que verificar se o minuto de sada maior que o minuto de entrada. Se for, o usurio paga mais 1 hora pela frao.
/*exerc514.c: calcula o valor a ser pago num estacionamento*/ #include <stdio.h> #include <conio.h> int horaent, minent, horasai, minsai, tempo; float valoraserpago; int main() { printf(\nPrograma para calcular o valor a ser pago num estacionamento\n); printf(\nValor do estacionamento: 10.00 por hora ou fracao\n\n); printf(\nQual eh a hora de entrada? ); scanf(%i,&horaent); printf(\nQual eh o minuto de entrada? ); scanf(%i,&minent); printf(\nQual eh a hora de saida? ); scanf(%i,&horasai); printf(\nQual eh o minuto de saida? ); scanf(%i,&minsai); if (horasai >= horaent) {

154

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

tempo = (horasai - horaent); if (minsai > minent) hora ++tempo; // fracao de minutos implica na cobranca de mais 1

valoraserpago = tempo * 10.00; printf(\nTotal a ser pago por %i hora(s) de estacionamento R$ tempo,valoraserpago); } else printf(\nErro nos valores de hora de entrada e saida.); printf(\n\nFim do programa); getch(); return 0; }

%.2f,

5. A estratgia ler o salrio do funcionrio e verificar se vlido. Se for, calculamos o aumento do salrio de acordo com as faixas informadas. Depois, somamos o aumento no salrio original e calculamos o novo salrio, dando a boa notcia ao trabalhador!
/*exerc515.c: calcula o novo valor do salario de um funcionario*/ #include <stdio.h> #include <conio.h> float salario, aumento, novosalario; int main() { printf(\nPrograma para calcular o valor do novo salario reajustado de um funcionario\n);

printf(\nQual eh o valor de seu salario atual? ); scanf(%f,&salario);

Unisa | Educao a Distncia | www.unisa.br

155

Elisamara de Oliveira

if (salario > 0) { if (salario < 500.00) aumento = salario * 0.15; else if (salario >=500.00 && salario <= 1000.00) aumento = salario * 0.10; else aumento = salario * 0.05;

novosalario = salario + aumento; printf(\nVoce teve um reajuste de %.2f e seu novo salrio eh R$ %.2f, aumento,novosalario); } else printf(\nErro no valor do salario. Nao existe salario igual a zero ou negativo.);

printf(\n\nFim do programa); getch(); return 0; }

6. Este problema um caso tpico de uso do comando switch para verificar em qual caso certo valor se enquadra!
/*exerc516.c: apresenta a regiao de procedencia de um produto*/ #include <stdio.h> #include <conio.h> float preco; int codigo; int main() {

156

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

printf(\nPrograma para apresentar a regiao de origem de um produto\n);

printf(\nQual eh o preco do produto? ); scanf(%f,&preco); printf(\nQual eh o codigo da regiao de origem do produto? (1 a 5): ); scanf(%i,&codigo); switch (codigo) { case 1: printf(\nPreco do produto = R$ %.2f - Regiao de origem = SUL, preco); break; case 2: printf(\nPreco do produto = R$ %.2f - Regiao de origem = SUDESTE, preco); break; case 3: printf(\nPreco do produto = R$ %.2f - Regiao de origem = CENTRO-OESTE, preco); break; case 4: printf(\nPreco do produto = R$ %.2f - Regiao de origem = NORTE, preco); break; case 5: printf(\nPreco do produto = R$ %.2f - Regiao de origem = NORDESTE, preco); default: printf(\nCodigo da regiao invalido\n); break;

Unisa | Educao a Distncia | www.unisa.br

157

Elisamara de Oliveira

} printf(\n\nFim do programa); getch(); } return 0;

Captulo 6 1. Voc deve escrever um programa que leia e imprima o nome e as duas notas de vrios alunos. O ltimo aluno ter o nome=FIM. O nico fator um pouco chato na soluo deste problema simples a leitura de strings em C, que deve ser feita usando-se funes da biblioteca <string.h>.
/* notas.c: programa que le e imprime 2 notas de vrios alunos */ #include #include #include #include <stdio.h> <conio.h> <string.h> <stdlib.h>

char nome[15]; float nota1, nota2; int main() { while (1) { printf(\nQual o seu nome? FIM finaliza ); gets(nome); if (strcmp(nome,FIM) == 0) break; printf(\nDigite a primeira nota do aluno: ); scanf(%f,&nota1); printf(\nDigite a segunda nota do aluno: ); scanf(%f,&nota2); %1.2f, } printf(\n%s, sua 1a nota foi: %1.2f e a sua 2a nota foi: nome,nota1,nota2); fflush(stdin); //para no dar problema na leitura de strings

puts(\nFim do programa); getch(); return 0; }

158

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

2. Voc deve escrever um programa que leia 10 nmeros e calcule e imprima a sua soma. A estratgia usar o comando for, pois j sabemos que sero lidos 10 nmeros. importante aplicarmos a regra bsica da programao: TODO SOMADOR E TODO CONTADOR DEVEM SER INICIALIZADOS COM ZERO! Alm disso, importante notar que a impresso da soma dos nmeros feita FORA do comando for. Isso porque preciso terminar a leitura dos dados para que a soma final tenha sido calculada e possa ser impressa.

/* soma10.c: Programa que le e soma 10 numeros */ #include <stdio.h> #include <conio.h> int numero, soma, cont; int main() { cont=soma=0; for ( ; cont < 10; cont++) { printf(\nDigite um numero inteiro: scanf(%i,&numero); soma = soma + numero; } );

printf(\nA soma dos 10 numeros eh: %i,soma); puts(\nFim do programa); getch(); return 0; }

Unisa | Educao a Distncia | www.unisa.br

159

Elisamara de Oliveira

3. Voc deve escrever um programa que calcule e imprima N nmeros pares, comeando do zero. Voc deve perguntar ao usurio quantos nmeros ele deseja gerar (ou seja, pea-lhe para fornecer o valor de N). Nesse caso, vamos tambm usar o comando for, pois sabemos que o usurio quer gerar N nmeros pares!

/* Pares.c: programa que gera e imprime N numeros pares */ #include <stdio.h> #include <conio.h> int n, numeropar, cont; int main() { pritnf(\nQuantos nmeros pares devem ser impressos? ); scanf(%i,&n); numeropar = 0; for (cont=0; cont < n; cont++) { printf(\n%i,numeropar); numeropar = numeropar + 2; } puts(\nFim do programa); getch(); return 0;

Note como os nmeros pares so gerados: inicializa-se a varivel numeropar com zero e depois vai adicionando-se 2 a ela. Dessa forma, so gerados 0, 2, 4, 6... Fcil, no ? 4. X -1 1 -1 1 -1 Y 0 1 2 3 4 1 -2 3 -4 Resultados

Este exemplo, apesar de simples, mostra claramente como fazer um teste de mesa. Na primeira linha da coluna, mostram-se apenas os valores iniciais das variveis X e Y. Na segunda linha, a condio do comando while foi avaliada como verdadeira (0 != 4=Verdadeiro) e os comandos delimitados por { e } do while foram executados: em X, foi colocado o resultado de *-1

160

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

(-1*-1=1), Y foi acrescido de 1 (0+1=1) e a condio do comando if foi avaliada como verdadeira, implicando a impresso do valor de Y (1), o que foi mostrado na coluna Resultado. As outras linhas correspondem execuo do lao do comando while. 5. numero 2 4 6 8 10 12 cont 0 1 2 3 4 5 Resultado 2 -2 4 -4 6 -6 8 -8 10 10

A cada lao do comando for so impressos 2 nmeros numa mesma linha: positivo e negativo. O nmero comea de 2 e vai sendo incrementado de 2. cont comea com zero e vai at 5. 6.
/*exerc621.c: le o angulo e informa o quadrante*/ #include <stdio.h> #include<conio.h> int angulo; int quadrante; int main() { printf(\nPrograma para apresentar a qual quadrante um angulo pertence\n); while (1) { printf(\nDigite o valor do angulo (0 a 360) -1 finaliza: ); scanf(%i,&angulo); if (angulo== -1) break; if (angulo >= 0 && angulo < 90)

Unisa | Educao a Distncia | www.unisa.br

161

Elisamara de Oliveira

printf(\nO angulo %i pertence ao quadrante 1\n, angulo); else angulo); if (angulo >= 90 && angulo < 180) printf(\nO angulo %i pertence ao quadrante 2\n, else if (angulo >= 180 && angulo < 270) 3\n, angulo); printf(\nO angulo %i pertence ao quadrante else drante 4\n, angulo); ); } printf(\n\nFim do programa); getch(); return 0; } if (angulo >= 270 && angulo <= 360) printf(\nO angulo %i pertence ao quaelse printf(\nValor de angulo invalido.\n

8.
/*exerc623.c: realiza uma pesquisa de opinio, computando votos em numero e em percentual */ #include<conio.h> #include<stdio.h> #include<stdlib.h> int opcao, sexo, afavor=0, contra=0, homens=0,mulheres=0, total;

float porcent; int { main() while (1) { system(cls); // limpa a tela

printf (\nReferendo sobre a internacionalizacao da Amazonia. Qual eh sua opiniao?); printf (\n1 - A favor); printf (\n2 - Contra); printf (\n0 - Finaliza); printf (\nDigite a opcao desejada: );

162

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

scanf

(%i,&opcao); break;

if (opcao == 0)

while (1) { printf(\nInforme o seu sexo 1=masculino 2=femini-

no: );

scanf(%i, &sexo); if (sexo == 1) { ++homens; break; } else if (sexo == 2) { ++mulheres; break; } else printf(\nSexo invalido. Por fa}

vor, digite 1 ou 2.\n); case 2: } getch(); } // while 1 total = mulheres + homens; switch (opcao) { case 1:

printf(\nObrigada, voto computado!); ++afavor; break; printf(\nObrigada, voto computado!); ++contra; break;

default: printf(\nOpcao invalida.);

printf(\nResultados da pesquisa\n); printf(----------------------); printf(\n\n%i votante(s) do sexo masculino., homens);

Unisa | Educao a Distncia | www.unisa.br

163

Elisamara de Oliveira

if (total > 0) { } printf(\n\n%i votante(s) do sexo feminino., mulheres); if (total > 0) { } total = afavor + contra; printf(\n\n%i votante(s) a favor., afavor); if (total > 0) { porcent = (float) afavor/total; printf(\n%.1f %% dos votantes sao a favor,porcent*100); } printf(\n\n%i votante(s) contra., contra); if (total > 0) { porcent = (float) contra/total; printf(\n%.1f %% dos votantes sao contra,porcent*100); } getch(); printf(\n\n\nFim do programa); getch(); return 0; porcent = (float) mulheres/total; printf(\n%.1f %% dos votantes sao mulheres,porcent*100); porcent = (float) homens/total; printf(\n%.1f %% dos votantes sao homens,porcent*100);

9.
/*exerc624.c: le n1,n2 e realiza as 4 operacoes*/ #include<stdio.h> #include<conio.h> int n1,n2,soma,subtr,mult; float divisao; int main() {

164

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

while (1) { ); printf(\nDigite um numero inteiro ou -1 para finalizar:

scanf(%i,&n1); if (n1 == -1) break; printf(\nDigte outro numero inteiro ); scanf(%i,&n2); soma=n1+n2; printf(\na soma de %i+%i=%i,n1,n2,soma);

subtr=n1-n2; printf(\na subtracao de %i-%i,n1,n2,subtr);

mult=n1*n2; printf(\na multiplicacao de %i+%i=%i,n1,n2,mult); if (n2!=0)

{ divisao=n1/n2; } else { } printf(\n\nfim do programa); getch(); return 0; } printf(\nnao existe divisao por zero); } printf(\na divisao de %i/%i=.3f,n1,n2,divisao);

Unisa | Educao a Distncia | www.unisa.br

165

Elisamara de Oliveira

11.
/*exerc626.c: gera sequencias numericas*/ #include <stdio.h> #include<conio.h>

int n, cont, termo; int main() { printf(\nPrograma para gerar sequencias numericas\n);

printf(\nDigite o numero de termos da sequencia de potencias de 2: ); scanf(%i,&n); termo = 2; for (cont=0; cont<n; cont++) { printf( %i } ,termo);

termo = termo*2;

printf(\n\n); printf(\nDigite o numero de termos da sequencia de positivos e negativos: ); scanf(%i,&n); cont = 1;

termo = 1; while (cont<=n) { printf( %i ,termo); termo = termo*-1; ++cont;

if (cont % 2 == 1) ++ termo;

// cont eh impar?

166

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

} printf(\n\n);

printf(\n\nFim do programa); getch(); } return 0;

17.
/* exerc6212.c: sua media */ #include <stdio.h> #include<conio.h> int float Soma=0, Valor, Cont=0; Media; Este programa le varios numeros inteiros e calcula

int main( ) { printf(\nPrograma que le varios numeros inteiros e calcula sua media\n\n); while (1) { printf(Forneca um valor inteiro (flag= -1): ); scanf(%d,&Valor); Soma = Soma + Valor; ++Cont; } if (Cont > 0) { Media = Soma/Cont; %i nmeros = %.2f printf(\nValor da Media dos: \n,Cont, Media); } else printf(\nNenhum valor foi fornecido); printf(\nFim do programa... );

Unisa | Educao a Distncia | www.unisa.br

167

Elisamara de Oliveira

getch(); /* para a tela */ return 0; }

18.
/*exerc6213.c: calcula as razes de uma equao do 2o grau*/ #include <stdio.h> #include <conio.h> #include <math.h> float a, b, c; // coeficientes da equacao

float delta, raiz1, raiz2; char resp;

int {

main() printf(\nCalcula as raizes de equacoes do 2o grau\n); for ( ; { ; )

printf(\nDigite o coeficiente a: ); scanf(%f, &a); printf(\nDigite o coeficiente b: ); scanf(%f, &b); printf(\nDigite o coeficiente c: ); scanf(%f, &c); if ( a == 0)

eh zero);

printf(\nNao eh equacao do 2o grau, pois o coeficiente a

else { delta = b*b (4*a*c); if (delta >= 0) { raiz1 = - b + sqrt(delta) / (2*a); raiz2 = - b - sqrt(delta) / (2*a); raiz2); printf(\nRaiz 1 = %.2f Raiz2=%.2f, raiz1,

168

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

} else printf(\nNao existem raizes reais); } printf(\nVoce deseja fornecer novos dados? S/N ); resp = getche(); if (resp==n || resp==N) break; } printf (\n\n\n\n getch(); return 0; } Fim do programa);

19.
/*exerc6214.c: mostra nmeros potencia de 2 menores que 1000000 usando long int e gera numeros impares menores que 100 */ #include <stdio.h> #include <conio.h> long int numlong; int num;

int main() { printf(\n Sequencia de numeros potencia de 2 menores que 1000000); printf(\n ===========================================n\n); numlong=2; while (numlong<1000000) { } printf(%ld\t,numlong); numlong = numlong * 2; // \t corresponde a tabulacao

Unisa | Educao a Distncia | www.unisa.br

169

Elisamara de Oliveira

printf(\n Sequencia de numeros impares menores que 100); printf(\n ===================================\n\n); num=1; while (num<100) { printf(%i\t,num); num = num + 2; } if (num%10==1) getch();

printf (\n\n\n\n getch(); return 0; }

Fim do programa);

20. /*exerc6215.c: aproxima o numero Pi atraves de uma serie */


#include <stdio.h> #include <conio.h> double pi, termo; float num, den; long int n, cont=0;

int main() { printf(\n Aproxima o valor de Pi por uma serie numerica); printf(\n =================================n\n); pi=0; printf(\nDigite o numero de termos da serie: ); scanf(%ld,&n);

170

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

num = 4; den = 1; for (cont=0; cont < n; cont++) { termo = num/den; // se o contador de termos for par, adiif (cont % 2 == 0) ciona o termo else pi = pi termo; den = den + 2; } printf(\nO valor de Pi aproximado pela serie com %ld termos = %lf, n, pi)); printf (\n\n\n\n getch(); return 0; } Fim do programa);

pi = pi + termo;

21.
/*exerc6216.c: le numeros e calcula o digito verificador*/ #include <stdio.h> #include<conio.h> long int n; int d1,d2,d3,d4,d5,dv; int main() { printf(\nPrograma para ler numeros e calcular o digito verificador\n); while (1) { printf(\nDigite um numero inteiro de 5 digitos (-1 finaliza):

Unisa | Educao a Distncia | www.unisa.br

171

Elisamara de Oliveira

); scanf(%ld,&n); if (n == -1) break; if (n >= 10000 && n<=99999) // verifica se o numero tem 5 d{ d1 = n / 10000; d2 = (n % 10000) / 1000; d3 = (n % 1000) / 100; d4 = (n % 100) / 10; d5 = n % 10; printf(\nd1= %i d2=%i d3=%i d4=%i d5=%i,d1,d2,d3,d4,d5); dv = (d1 + d2 + d3 + d4 + d5) % 11; if (dv == 10) printf(\n\n%ld - x , n); else printf(\n\n%ld - %i,n, dv); printf(\n\n); } else printf(\nEste numero nao tem 5 digitos.\n); } printf(\n\nFim do programa); getch(); return 0; }

gitos

172

Unisa | Educao a Distncia | www.unisa.br

Algoritmos e Linguagem de Programao

32.
/*exerc6227.c: le o codigo do produto e apresenta sua classificacao*/ #include <stdio.h> #include<conio.h> int codigo; int main() { printf(\nPrograma para apresentar a classificacao de produtos\n); while (1) { printf(\nQual eh o codigo do produto? (1 a 9 ou 0 para finalizar): ); scanf(%i,&codigo); if (codigo == 0) break; switch (codigo) { case 1: printf(\nClassificacao do produto %i = ALIMENTO NAO PERECIVEL, codigo); break; case 2: case 3: case 4: printf(\nClassificacao do produto %i = ALIMENTO PERECIVEL, codigo); break; case 5: RIO, codigo); case 6: printf(\nClassificacao do produto %i = VESTUAbreak; case 7: printf(\nClassificacao do produto %i = HIGIENE PESSOAL, codigo); break;

Unisa | Educao a Distncia | www.unisa.br

173

Elisamara de Oliveira

case 8: case 9: printf(\nClassificacao do produto %i = LIMPEZA E UTENS. DOMESTICOS, codigo); break; default: printf(\nCodigo do produto invalido\n); } printf(\n); } // while 1 printf(\n\nFim do programa); getch(); return 0; }

174

Unisa | Educao a Distncia | www.unisa.br

REFERNCIAS

AITKEN, P.; JONES, B. C Guia do Programador. Rio de Janeiro: Berkeley Brasil, 1994. ASCENCIO, A. F. G.; VENERUCHI, E. A. Fundamentos da programao de computadores. So Paulo: Prentice Hall, 2007. CALVERT, C. Programando aplicaes em Windows com C e C++. Rio de Janeiro: Berkeley, 2004. FORBELLONE, A. L.; BERSPACHER, H. Lgica de programao. 3. ed. So Paulo: Prentice Hall, 2005. GOTTFRIED, B. S. Programando em C. So Paulo: Makron Books, 2003. KERNIGHAN, B. W.; RITCHIE, D. M. C A linguagem de programao padro ANSI. Rio de Janeiro: Campus, 1989. LOPES, A.; GARCIA, G. Introduo a programao: 500 algoritmos resolvidos. Rio de Janeiro: Campus, 2002. MANZANO, J. A. M. G.; OLIVEIRA, J. F. Algoritmos: lgica para desenvolvimento de programas de computador. 22. ed. So Paulo: rica, 2009. MIZRAHI, V. V. Treinamento em linguagem C. Mdulo 1. 2. ed. So Paulo: Makron Books, 2006. ______. Treinamento em linguagem C. Mdulo 2. 2. ed. So Paulo: Makron Books, 2006. SCHILDT, H. C completo e total. So Paulo: Makron Books, 1997. SEBESTA, R. W. Conceitos de linguagens de programao. 4. ed. Porto Alegre: Bookman, 2000. TENEMBAUM, A. M. Estruturas de dados usando C. So Paulo: Pearson, 1995.

Unisa | Educao a Distncia | www.unisa.br

175

Das könnte Ihnen auch gefallen