Вы находитесь на странице: 1из 24

Curso Tcnico Subseqente em Informtica Mdulo I LGICA DE PROGRAMAO

Prof. MSc. Antonio da Luz Jr.

Apresentao Programar um computador no uma tarefa to difcil. Difcil programar as nossas cabeas. O computador, na realidade, uma rplica bastante simplificada de nossa mente, com apenas uma diferena essencial: a AUTO-PROGRAMAO. Ao longo de nossas vidas, aprendemos coisas a partir de alguns elementos fundamentais como: cores, smbolos, sons, cheiros, e sentimentos. Esses elementos vo se combinando atravs de um processo conhecido como aprendizado. O processo de aprendizado nada mais do que uma auto-programao de nossas mentes. Algum diz para nosso crebro o que ele tem que fazer ao se deparar com uma situao especfica, tal como: dobrar uma esquina, parar ao perceber o sinal vermelho, escovar os dentes ao acordar, em fim - tudo o que fazemos regido por programas que, um dia, ns mesmos desenvolvemos. Ora, se somos capazes de desenvolver programas para um aparelho to complexo e genial como o nosso crebro, por que no um simples computador? Este o nosso desafio. Desenvolver as tcnicas necessrias para conseguirmos codificar programas em um computador digital. As dificuldades de programar Programar um computador, assim como a nossa mente, requer duas exigncias bsicas: Conhecer a linguagem na qual se vai programar; Estruturar o raciocnio de forma a saber combinar os comandos desta linguagem, dentro de uma seqncia lgica, ou seja, de modo a atingirmos o objetivo perseguido. A linguagem de programao utilizada pelas nossas mentes composta de comandos (olhe, escute, memorize, decida, sinta, ame, odeie...), elementos (cores, tipos de cheiros, notas musicais, smbolos sonoros, smbolos visuais...) e capaz de reconhecer e utilizar os recursos disponveis no organismo (olho, ouvido, crebro, nariz, boca...), sem os quais se torna impossvel a execuo de um programa. A linguagem de programao utilizada pelos computadores composta tambm por comandos (receba, escreva, some, multiplique...) e elementos (nmeros, palavras e smbolos), e tambm capaz de reconhecer e utilizar os recursos disponveis no computador e perifricos (impressora, monitor de vdeo, mouse, teclado, memria...). Ao aprendermos uma receita de bolo, colocamos uma poro de comandos em nossa mente. Estes comandos so gravados de uma forma analgica e, logo em seguida, consolidamos o processo de aprendizagem atravs da execuo daquele programa. Claro, da primeira vez que fazemos algo podemos cometer erros, que so automaticamente ajustados pela nossa mente para que, da prxima vez, no voltem a acontecer.

Da mesma maneira, sempre que um programador desenvolve a primeira verso de seu programa, h uma fase de testes, quando os erros aparecem e so ajustados necessidade do usurio. A esta fase damos o nome de DEPURAO. A metodologia de aprendizagem Como vemos, a programao de computadores bastante semelhante a programao de nossas mentes, o que torna suas dificuldades e caractersticas tambm similares. Aplicaremos as tcnicas e recursos existentes aos elementos inerentes a computadores, interagindo com variveis de memria, comandos de entrada e sada de dados, alm de comandos que controlaro a repetio de blocos de comandos.

Os tpicos iniciais foram extrados, integralmente, da apostila: FLP (Fundamentos de Introduo a Informtica) Tcnicas de Desenvolvimento da Lgica, obtida na Internet, de autoria desconhecida.

1. Algoritmos Quando no restar nada, ento escreves um pequeno crculo para que esse lugar no permanea vazio (Al-Khorezmi explicando o zero, Sc IX). O termo Algoritmo derivado do nome do matemtico rabe Al-Khorezmi, que viveu no sculo IX, na regio do Oriente Mdio. Algoritmos e Estruturas de Dados so os componentes bsicos de qualquer software. Algoritmo a abstrao, ou seja, a representao lgica da resoluo de um problema. Os algoritmos fazem parte do dia-a-dia de qualquer pessoa. Exemplos: bula de medicamentos, manuais de instruo, receitas culinrias. Observe que todos esses objetos tm por caracterstica a definio de uma seqncia de passos para a realizao de uma dada atividade. Um algoritmo pode ser visto como uma seqncia de aes executveis para a obteno de uma soluo para um determinado problema. (Ziviani, Projeto de Algoritmos, 2006). A tarefa a ser executada por um algoritmo pode ser computacional ou no. Como exemplo, observe o seguinte: Exemplo: Receita de Bolo Problema: Fazer um bolo de chocolate Entrada: Ingredientes Sada: Bolo pronto Ingredientes: 2 xcaras de ch de farinha de trigo 4 ovos 2 xcaras de ch de acar 1 xcara de ch de leite 100g de manteiga sem sal 1 xcara de chocolate em p colher de sopa de fermento em p Cobertura 1 lata de leite condensado 1 colher de sopa de manteiga xcara de chocolate em p 100g de chocolate granulado Modo de Preparo: 1. 2. 3. 4. Misture todos os ingredientes muito bem; Coloque em uma forma meio untada; Leve ao forno microondas, em potncia alta, por 14 minutos; cobertura: misture tudo. Leve ao microondas, em potncia mdia, por 5 minutos; jogue por cima do bolo, coloque tambm o chocolate granulado.

A maior dificuldade ao se construir um algoritmo conseguir interpretar corretamente o problema que se deseja representar. A seguir so apresentadas algumas observaes que devem ser consideradas durante a elaborao de qualquer algoritmo: Analise com cuidado o problema; Identifique o objetivo; Identifique os dados de entrada; Identifique a sada esperada; Observe se a seqncia de passos adequada para atender aos objetivos. O algoritmo computacional uma abstrao de algum evento do mundo real. No criamos nada de miraculoso, apenas representamos no mundo digital situaes vivenciadas no mundo real. Programas so um tipo especial de algoritmos, capazes de serem compreendidos por computadores. (Ziviani, Projeto de Algoritmos, 2006). Exerccios: 1) Reflita sobre como age todas as manhs. Crie um algoritmo para representar essa rotina. 2) Observe qual o processo que realiza quando vai lavar o cabelo. Descreva a seqncia de passos.

2. Linguagem C A linguagem C foi inicialmente implementada por Dennis Ritchie, na dcada de 70. Foi criada como uma evoluo da linguagem B. Em 1983 a ANSI (American National Standards Institute) elaborou um padro para os cdigos desenvolvidos em C, denominado C ANSI. Com isso, possibilitou, entre outras coisas, a portabilidade de cdigo. Por portabilidade entende-se a caracterstica de poder executar em uma mquina, ou ambiente, um cdigo desenvolvido em outra mquina, ou ambiente. Outros padres existentes so: C para UNIX e C para Windows, por exemplo. Mas no h garantia de compatibilidade entre programas desenvolvidos segundo essas especificaes. O C uma linguagem de mdio nvel, ou seja, une elementos de linguagens de alto nvel, como: Pascal, Java, Cobol, Delphi, e da linguagem Assemly, que de baixo nvel. Essa caracterstica possibilita ao C um grande poder de gerenciamento do hardware, memria e perifricos, sem dificultar muito a tarefa de elaborao dos algoritmos por parte do programador. A linguagem C classificada como uma linguagem Estruturada. Isso significa que ela possibilita o uso de Rotinas ou Funes e segue um processo de execuo seqencial, partindo da funo principal, main. Uma outra caracterstica importante nessa linguagem a possibilidade da definio de blocos de cdigo, que podem ser construdos com o uso de chaves, {}. A linguagem C case sensitive, ou seja, faz diferenciao entre palavras escritas em maisculo e minsculo. 2.1 Compilao A etapa de compilao uma parte necessria quando se est desenvolvendo programas utilizando a linguagem C. Essa tarefa realizada por um compilador. Um compilador um software capaz de ler um cdigo-fonte, que a descrio de um algoritmo estruturado segundo alguma linguagem de programao, e converte-lo em um cdigo-objeto, que a traduo do algoritmo da linguagem de programao para a linguagem de mquina, de forma que o computador possa executar o programa diretamente. Caso haja a necessidade de realizar alguma modificao no cdigo-fonte, existe a necessidade proceder com uma nova compilao. Alguns dos principais compiladores utilizados para a converso de cdigos gerados em linguagem C so: gcc, gratuito e utilizado em plataformas UNIX; icc, produzido pela Intel e possui bom desempenho em equipamentos com processadores Intel; mingw, uma verso para Windows do compilador gcc, gratuito; borland, produzido pela Borland e utilizado por aplicaes desenvolvidas em ambientes C++ Biulder. 2.2 Bibliotecas So arquivos que contm referncias a conjuntos de funes padres, definidas pela ANSI. Algumas das bibliotecas existentes so: stdio.h, possui funes para operaes de entrada e sada de dados; stdlib.h, possui funes para a realizao de operaes bsicas; 5

math.h, possui funes para a realizao de operaes matemticas; time.h, possui funes para a realizao de operaes de manipulao de dados de tempo; string.h, possui funes para a realizao de operaes de manipulao de dados textuais. Para uma lista mais bem detalhada sobre todas as bibliotecas disponveis no padro C ANSI e as funes existentes em cada uma delas, bem como exemplos de utilizao, consulte: http://www.cplusplus.com/reference/clibrary/ (site em ingls). 2.3 Variveis Variveis so posies nomeadas de memria, utilizadas para guardar um valor temporariamente, para que este possa ser acessado ou modificado pelo programa durante sua execuo. Interprete a memria do computador como sendo um armrio, onde so armazenados livros. Cada bloco do armrio pode ser considerado como sendo uma posio na memria do computador e os livros armazenados nesses blocos como sendo os valores armazenados na memria. Para uma melhor organizao do contedo, necessrio que se conhea o tipo dos objetos armazenados em cada uma das posies e, para possibilitar o acesso a esse contedo, necessrio que cada posio seja identificada atravs de um rtulo nico. De modo semelhante para a organizao do contedo na memria do computador necessrio que seja definido o tipo de contedo que ser armazenado em cada posio e, tambm, um identificador para a posio de memria que ir guardar esse valor. Para tal necessrio realizar a declarao de variveis. Na linguagem C, essa etapa segue a seguinte estrutura: tipo nome_identificador; Onde, tipo representa o tipo de dado que ser armazenado e nome_identificador o nome que ser atribudo a posio de memria que ir armazen-lo. Quando se pretende declarar mais de uma varivel de um mesmo tipo, a declarao dessas variveis pode ser realizada de modo simplificado: tipo nome_identificador_1, nome_identificador_2, nome_identificador_3; Exemplos: int a; float numero; double a, b, c, d; 2.3.1 Tipos de Dados Bsicos

Em C existem cinco tipos de dados bsicos:


Nome char int float double void Descrio Um nico caractere Inteiro Nmero com ponto-flutuante (Casa decimal) Nmero com ponto-flutuante de preciso dupla Sem Valor Tamanho Faixa de Valores signed: -128 to 127 1byte unsigned: 0 to 255 signed: -2.147.483.648 to 2.147.483.647 4bytes unsigned: 0 to 4.294.967.295 4bytes 3.4e +/- 38 (7 dgitos) 8bytes 1.7e +/- 308 (15 dgitos) ---

Os valores apresentados para Tamanho e Faixa de Valores podem sofrer alteraes de acordo com a plataforma utilizada para o desenvolvimento do programa. Para ter certeza de quais os valores corretos utilize o seguinte comando para identificar o Tamanho: printf(O tamanho e: %d, sizeof(tipo); onde, o valor de tipo deve ser setado com o nome do tipo de dado desejado. 2.3.2 Nomes de Identificadores Os nomes de variveis, funes e demais objetos definidos pelo programador, so chamados de identificadores. Para a definio desses nomes devem ser seguidas algumas restries impostas pelo padro C ANSI: o primeiro caractere deve ser uma letra ou um sublinhado (underline) e os demais podem ser letras, nmeros ou sublinhados; devem ser limitados a 31 caracteres; maisculo e minsculo fazem diferena: int X; e int x;, so declaraes de duas variveis diferentes. 2.3.3 Inicializao de Variveis Em C, uma varivel pode ser declarada inicialmente com um valor indeterminado ou j ser inicializada diretamente com um valor predefinido. int a; //declarao com valor indeterminado int a=0; //declarao inicializando a varivel com o valor 0 2.3.4 Escopo de Variveis Local: so variveis declaradas dentro de funes. S podem ser acessadas dentro do bloco de cdigo em que foram declaradas. Assim que se encerra o bloco de cdigo, essas variveis deixam de existir. Global: so declaradas externamente as funes contidas no programa, podem ser manipuladas de qualquer local do cdigo. 7

Exemplo: #include <stdio.h> int count; //declarao de varivel global void main(){ int a = 10; //declarao de varivel local count = a; printf(%d, count); } 2.4 Operadores Os operadores so elementos definidos pela linguagem e utilizados para a realizao de uma determinada tarefa. Os operadores podem ser de diferentes tipos. 2.4.1 Atribuio O operador de atribuio utilizado para indicar que um determinado valor ser armazenado em uma varivel. Esse operador representado pelo smbolo de igual, =. Exemplo: A = 10; 2.4.2 Aritmticos Os operadores aritmticos so utilizados para indicar a realizao de alguma operao aritmtica. Os operadores suportados pela linguagem C so:
Operador + * / % Descrio Soma Subtrao Multiplicao Diviso Mdulo, ou resto, da Diviso.

2.4.3 Relacionais Os operadores relacionais so utilizados para verificar a existncia de relao entre valores ou variveis. Os operadores suportados pela linguagem C so:
Operador == != < > <= >= Descrio Igualdade Diferena Menor que Maior que Menor ou igual que Maior ou igual que

2.4.4 Simplificados A linguagem C possui alguns operadores que podem ser utilizados para facilitar o trabalho por parte do programador, unindo a funo de dois outros operadores. Os operadores simplificados suportados pela linguagem C so:
Operador += -= *= /= ++ -Descrio Soma e armazena Subtrai e armazena Multiplica e armazena Divide e armazena Incrementa em 1 o valor da varivel Decrementa em 1 o valor da varivel

2.5 Estrutura Bsica de um Programa em C Um programa descrito atravs da linguagem C possui duas partes principais: declarao de bibliotecas e funo main. Na parte de declarao das bibliotecas devem ser indicadas todas as bibliotecas definidas pelo padro C ANSI que sero utilizadas dentro do programa. A funo main, como o prprio nome sugere, a parte principal de um programa em C. a primeira funo a ser executada. nela onde se inicia e finaliza a seqncia de passos seguida para a realizao dos objetivos do programa. #include <stdio.h> //declarao da biblioteca stdio.h int main(){ /*declarao da funo main, observe a abertura de chaves indicando o incio do bloco de cdigo da funo.*/ printf(Ola!!!); return 0; } 2.6 Funo de Entrada e Sada de Dados A biblioteca que possui as funes de entrada e sada de dados a stdio.h. std Standard Padro i Input Entrada o Output Sada

2.6.1 Entrada de Dados A funo para a leitura dos dados informados pelo teclado a scanf. A estrutura dessa funo a seguinte: 9

scanf(tipo_de_dado, &nome_varivel); Os tipos de dados possveis so:


Nome char int float double Smbolo %c ou %s %d %f %f ou %lf

Exemplo: scanf(%d,&nota); //l um valor do tipo inteiro e armazena na varivel nota. 2.6.2 Sada de Dados A funo utilizada para apresentar a sada de dados atravs do monitor a printf. Essa funo possui a seguinte estrutura: printf(mensagem); // mensagem representa qualquer mensagem que necessita ser exibida na tela. Quando necessrio exibir o valor contido em alguma varivel em uma mensagem na tela, preciso indicar na mensagem, o local e o tipo de dado que se deseja exibir. Os smbolos para tipos so os mesmos que o scanf. printf(mensagem, nome_variveis); Exemplo: printf(Ola!!!); //ir imprimir Ola!!! na tela do monitor. printf(O resultado e %d, resultado); // ir imprimir na tela a mensagem especificada, incluindo o valor contido na varivel
resultado na posio indicada pelo smbolo %d, que indica ainda que o valor impresso ser do tipo inteiro.

Exerccios
1) Classifique as variveis abaixo em Vlidas e Invlidas, considerando a declarao realizada para cada uma delas. Explique os motivos da classificao. a) int Numero; c) int cd_aluno; e) float num_C; b) Tipo1 int; d) char 1Valor; 2) Construa um algoritmo que calcule a mdia final de um aluno que realizar quatro provas. Apresente o resultado. 3) Faa um algoritmo para calcular o estoque mdio de uma pea, sendo que:

EM =

qtd _ min + qtd _ max 2

4) Faa um algoritmo que receba o valor da cotao do dlar e converta o valor desejado para real. Apresente o valor convertido. 5) Faa um algoritmo que leia 3 nmeros, multiplique o primeiro pelo segundo e divida o resultado pelo terceiro. Apresente o resultado.

2.7 Expresses Lgicas

10

As expresses lgicas so utilizadas durante a avaliao condicional, por comandos de seleo ou repetio. Essas expresses podem ser de dois tipos: Simples ou Compostas. As expresses lgicas so construdas a partir da utilizao de operadores Relacionais ou Lgicos. 2.7.1 Operadores Lgicos Os operadores lgicos so utilizados na construo de expresses lgicas. Os principais so:
Operador && || ! Descrio E OU NO

Para entender melhor como ser o comportamento de cada um destes operadores em uma expresso lgica, necessrio conhecer a Tabela Verdade para cada um deles. Uma Tabela Verdade contm os valores de sada, VERDADEIRO ou FALSO, para os operadores de acordo com os valores das sub-expresses. A seguir so apresentadas essas tabelas. Operador && A B A && B V V V V F F F V F F F F Operador || A B A || B V V V V F V F V V F F F Operador ! A !A V F F V

O resultado de uma expresso composta que utiliza o operador && s ser VERDADE se todas as sub-expresses forem VERDADEIRAS. Caso contrrio, ser FALSO. Ou seja, se uma sub-expresso for FALSA toda a expresso FALSA. O resultado de uma expresso composta que utiliza o operador || ser VERDADE sempre que pelo menos uma de suas sub-expresses for VERDADEIRA. Caso contrrio, ser FALSO. Ou seja, a expresso s ser FALSA se todas as sub-expresses forem FALSAS. O operador lgico ! utilizado para negar o valor de uma expresso. Ou seja, se a expresso VERDADEIRA, ao ser unida ao operador ! ela se tornar FALSA. E se a expresso FALSA ao se unir ao operador ! ela se torna VERDADEIRA. 2.7.2 Expresses Lgicas Simples Uma Expresso Lgica Simples aquela composta apenas operadores Relacionais ou pelo operador Lgico ! (No). Observe a seo 2.4 para aprender um pouco mais sobre os tipos de operadores Relacionais. Exemplo: Para construir uma expresso indicando que um valor A maior que um valor B. A>B 2.7.3 Expresses Lgicas Compostas

11

Uma Expresso Lgica Composta aquela construda com a utilizao de operadores Relacionais e Lgicos. Exemplos: Para construir uma expresso indicando que um valor A maior que um valor B ou maior que um valor C. (A > B) || (A > C) Para construir uma expresso indicando que um valor A maior que um valor B e maior que um valor C. (A > B) && (A > C) Deve ser observado que os resultados a serem obtidos com as expresses destes dois exemplos MUITO diferente. Para entender um pouco melhor isso, necessrio conhecer a Tabela Verdade para os operadores Lgicos. 2.8 Comandos de Seleo 2.8.1 Condicional Simples - IF A palavra IF, se traduzido para o portugus, tem o significado de SE. A seleo de uma ao feita a partir da especificao de uma alternativa e dirigida por uma condio. Existem duas possibilidades para o resultado da avaliao da condio, VERDADEIRO ou FALSO. Quando o resultado da condio VERDADEIRO, executa-se os comandos do bloco de cdigo do IF. Caso contrrio, resultado da condio = FALSO, continua com a execuo do restante do algoritmo. Desta forma, o fluxo de execuo condicionado por uma tomada de deciso (ou seja, o teste de uma condio) e alguns passos (comandos) podem no ser executados de acordo com o resultado do teste realizado. Estrutura: if(condio){ seqncia de comandos... } O bloco de cdigo, ou seqncia de comandos, a ser executado caso a condio testada seja verdadeira determinado pela abertura e fechamento de chaves, indicando o incio e fim da seqncia. Exemplo: Faa um algoritmo para ler dois valores e dizer se so iguais ou qual deles maior que o outro. #include <stdio.h> #include <stdlib.h> int main(){ int A, B; printf(Digite o valor 1: ); scanf(%d, &A);

12

printf(Digite o valor 2: ); scanf(%d, &B); if(A == B){ printf(Os valores sao iguais!); } if(A > B){ printf(O valor 1 e maior que o valor 2); } if(A < B){ printf(O valor 2 e maior que o valor 1); } } 2.8.2 Bifurcao - IF-ELSE As palavras IF e ELSE, se traduzidas para o portugus, tm o significado de SE e SENO, respectivamente. Nesta estrutura, a seleo de qual o caminho a seguir feita a partir da especificao de duas alternativas e definida por uma condio. Se a condio for VERDADEIRA, uma seqncia de comandos executada; caso contrrio, outra seqncia que ser executada. Desta forma, o fluxo de execuo condicionado por uma tomada de deciso (ou seja, o teste de uma condio) e alguns passos (comandos) podem no ser executados de acordo com o resultado do teste realizado. Sintaxe: if(condio){ seqncia de comandos... }else{ seqncia de comandos... } O incio da estrutura est no teste da condio. Aps a avaliao, uma das alternativas (VERDADEIRA ou FALSA) ser executada. Se for verdadeira, o bloco de cdigo definido para o IF ser executado; caso contrrio, o bloco de cdigo definido para o ELSE ser executado. Cabe observar que apenas um dos dois blocos de cdigo ser executado, pois uma condio s pode ter um dos dois possveis valores: Verdadeiro ou Falso. Exemplo: Faa um algoritmo para ler dois valores e dizer se so iguais ou qual deles maior que o outro. #include <stdio.h> #include <stdlib.h> int main(){ int A, B; printf(Digite o valor 1: ); scanf(%d, &A); printf(Digite o valor 2: ); scanf(%d, &B); if(A == B){ printf(Os valores sao iguais!);

13

}else{ if(A > B){ printf(O valor 1 e maior que o valor 2); }else{ printf(O valor 2 e maior que o valor 1); } } } Exemplo: Faa um algoritmo que calcula X = ( A + B ) / ( A B ), evitando o problema gerado quando o denominador for igual a 0 (zero). #include <stdio.h> #include <stdlib.h> int main(){ int A, B; float X; printf(Digite o valor 1: ); scanf(%d, &A); printf(Digite o valor 2: ); scanf(%d, &B); if(A == B){ printf(Invalido - Divisao por Zero!!!); }else{ X = (A + B) / (A - B); printf(o resultado e %f, X); } } 2.8.3 IFs Aninhados De acordo com a exigncia apresentada para a soluo de alguns problemas, pode haver a necessidade de se utilizar uma seqncia de passos onde uma estrutura IF-ELSE pode conter outras estrutura de deciso. Quando isso ocorre, dizemos que houve um aninhamento de IFs. Exemplo: Apresente o maior de trs valores lidos, sem considerar a possibilidade de existirem valores iguais. #include <stdio.h> #include <stdlib.h> int main(){ int A, B, C, maior; printf (Entre com o primeiro valor: ); scanf(%d, &A); printf(Entre com o segundo valor: ); scanf(%d,&B); printf(Entre com o terceiro valor: );

14

scanf(%d,&C); if(A > B){ if(A > C){ maior = A; else{ maior = C; } } else{ if(B > C){ maior = B; } else{ maior = C; } } printf (o maior valor lido foi: %d, maior); system(PAUSE); } 2.8.4 Seleo Mltipla - Switch O comando SWITCH usado como alternativa ao aninhamento de IF-ELSE. Com ele o cdigo se torna mais elegante e legvel. Este comando bastante utilizado quando necessrio apresentar algum menu ao usurio para que este selecione uma das opes. Forma geral: switch (expresso constante) { case constante1: comandos; break; case constante2: comandos; break; case constante3: comandos; break; case constante4: comandos; break; default: comandos; } Este comando possui algumas restries: como expresso constante, ele s aceita valores inteiros e caracteres; como expresso condicional, s so aceitas igualdades (se a constante1 for igual ao valor da expresso constante, executa comandos; e assim por diante).

15

Para cada case existe um conjunto de comandos que s sero executados caso a condio seja verdadeira. Se a expresso constante no casar com nenhum case, ento os comandos do bloco default sero executados. Exemplo: Construa uma calculadora que seja capaz de realizar as quatro operaes bsicas: Adio, Subtrao, Multiplicao e Diviso. O usurio dever informar os 2 valores a serem processados e a operao a ser executada. #include <stdio.h> #include <stdlib.h> int main() { float n1, n2; char op; printf("*** Calculadora ***\n"); printf("Digite um numero: "); scanf("%f", &n1); printf("Digite outro numero: "); scanf("%f", &n2); printf("Digite o operador (+ - * /): "); scanf("%c", &op); switch(op) { case '+': printf("Adicao: %.2f\n", n1+n2); break; case '-': printf("Subtracao: %.2f\n", n1-n2); break; case '*': printf("Multiplicacao: %.2f\n", n1*n2); break; case '/': if (n2 == 0) { printf("Erro: impossvel dividir por zero!\n"); } else { printf("Divisao: %.2f\n", n1/n2); break; } default: printf("Operador invalido: %c ", op); } system(PAUSE); } Observe como ficaria o mesmo exemplo resolvido utilizando apenas IF-ELSE: #include <stdio.h>

16

#include <stdlib.h> int main() { float n1, n2; char op; printf("*** Calculadora ***\n"); printf("Digite um numero: "); scanf("%f", &n1); printf("Digite outro numero: "); scanf("%f", &n2); printf("Digite o operador (+ - * /): "); scanf("%c", &op); if (op=='+'){ printf("Adicao: %.2f\n", n1+n2); } else{ if (op=='-'){ printf("Subtracao: %.2f\n", n1-n2); } else{ if (op=='*'){ printf("Multiplicacao: %.2f\n", n1*n2); } else{ if (op=='/'){ if (n1==0){ printf("Erro: impossvel dividir por zero!"); } else{ printf("Divisao: %.2f\n", n1/n2); } } else{ printf("Operador invalido: %c ", op); } } } } system(PAUSE); } Exerccios 1) Construa um algoritmo que apresente o peso ideal de uma pessoa. O algoritmo dever solicitar o sexo e utilizar uma das seguintes frmulas, de acordo com o sexo da pessoa: Mulheres: peso = (62.1 * altura) 44.7 Homens: peso = (72.7 * altura) 58 2) Construa um algoritmo que leia um valor, positivo ou negativo, e apresente o mdulo deste valor. O mdulo de um nmero o nmero ignorando-se o sinal. Ex.: o mdulo de 1 1 e o mdulo de -1 1.

17

3) Construa um algoritmo que leia trs valores numricos e apresente o Maior e o Menor deles. 4) Construa um algoritmo que leia trs valores numricos e os apresente ordenados de modo crescente. 5) Leia 4 notas, calcule a mdia e informe se o aluno est Aprovado ou Reprovado, sabendo que a mdia mnima para aprovao 5.0. 6) Construa uma calculadora. O usurio deve informar dois valores e a operao a ser realizada. Para indicar a operao deve ser utilizado: + Adio - Subtrao * Multiplicao / Diviso 7) Efetue o clculo do reajuste de salrio de um funcionrio. Considere que o funcionrio dever receber um reajuste de 15% caso se salrio seja menor que R$ 500,00, se o salrio for maior ou igual a R$ 500,00 mas menor ou igual a R$ 1000,00, seu reajuste ser de 10%, caso seja maior que R$ 1000,00, o reajuste ser de 5%. 8) Escreva um algoritmo para calcular e apresentar o salrio mensal de um trabalhador. Se o nmero de horas trabalhado for a inferior a 40, a pessoa recebe R$ 8,00 por hora, seno a pessoa recebe R$ 320,00 mais R$ 12,00 para cada hora trabalhada acima de 40 horas. O programa deve pedir o nmero de horas trabalhadas como entrada e deve apresentar o salrio como resultado. 9) Uma loja est realizando uma promoo de Natal. Os descontos variam de acordo com o valor total das compras do cliente. Compras acima de R$ 100,00, mas menores que R$ 200,00, recebem desconto de 10%. Compras entre R$ 200,00 e R$ 300,00, inclusive, esto com descontos de 20%. Compras acima de R$ 300,00 esto com descontos de 30%. Construa um programa para calcular e apresentar o valor a ser pago por um cliente depois de realizar uma compra nessa loja. 10) Construa um algoritmo que leia um valor numrico inteiro e informe se este valor Par ou mpar.

18

2.9 Comandos de Repetio 2.8.1 FOR O comando for uma estrutura de repetio controlada por varivel, onde devemos saber de antemo a quantidade de iteraes. O comando for tem a seguinte forma geral:
for (inicializao; teste condicional; incremento ou decremento) { comandos; }

Veja este exemplo:


#include <stdio.h> int main(){ int i, num; for (i=0; i<100; i++) { printf("Digite um nmero: "); scanf("%d", &num); if ((num %3) == 0){ printf(" mltiplo de 3\n"); }else{ printf("no mltiplo de 3\n"); } } }

Veja em detalhes o exemplo anterior: O lao for contm 3 expresses entre parnteses, que controlaro o modo que o nosso lao trabalhar: o Na expresso de inicializao, atribumos valor inicial varivel de controle. No exemplo acima, inicializamos i com 0; o Em teste condicional, temos uma expresso relacional/lgica que definir o critrio de parada do nosso lao. No nosso detector de mltiplos de 3, o lao for ficar repetindo o bloco de comandos enquanto a varivel i for menor que 100. Quando i tiver o valor 100, o lao no executar mais os comandos do bloco de comandos, e o programa continuar sua execuo (neste exemplo encerrar o programa.); o A expresso incremento ou decremento deve dizer para o comando for como a varivel vai "andar", se de 1 em 1, de 2 em 2, de 10 em 10, etc. No exemplo acima, a expresso i++ faz a varivel i ser incrementada de 1 em 1. Resumindo, no exemplo apresentado, a varivel i ser inicializada com 0, andar de 1 em 1, e quando chegar a 100 sair do lao de repetio. A cada iterao, ou seja, a cada execuo do lao, ser solicitado ao usurio um nmero inteiro e verificado se este ou no mltiplo de 3.

19

2.8.1.1 - Flexibilidades do comando for As 3 expresses do comando podem conter vrias instrues separadas por vrgula. Exemplo:
#include <stdio.h> int main() { int i, j, num; for (i=0, j=0; i+j <100; i++, j++){ printf("%d \n", i+j); } }

Veja que na inicializao, temos duas variveis sendo atribudas com 0: i e j, separadas por vrgula. Na parte de incremento, i e j so incrementadas com 1, tambm separadas por vrgula. Isto torna o comando for bastante flexvel, onde o limite a sua criatividade. Alm disso, podemos omitir qualquer uma das expresses do comando for. Veja no exemplo a seguir um caso onde no haver a inicializao:
for ( ; i<100; i++) { comandos; }

Em outro exemplo, um caso onde no haver o incremento:


for (i=0; i<100; ) { comandos; }

Em um outro exemplo, uma situao onde no repasso nenhum parmetro. Isto ir fazer com que o lao seja repetido infinitamente:
for ( ; ; ) { comandos; }

2.8.2 WHILE O comando while uma estrutura de repetio que s repetir o bloco de cdigo se a condio, entre parnteses, for VERDADEIRA. Esta condio pode ser qualquer expresso, onde falso igual a 0 e verdadeiro diferente de 0. Se a condio for falsa logo no incio do while, o comando no ser executado. Forma geral:
while (condio) { comandos; }

Quando o programa chega no while, ele verifica a condio entre parnteses. Se for verdadeira, ele executa o bloco de cdigos. Quando termina de executar os comandos do bloco de cdigo, ele volta para o while novamente, testa a condio de novo e, se for verdadeira, executa o bloco de cdigo novamente. Faz isso at a condio entre parnteses ser falsa, momento em que o programa continua a execuo normalmente, depois do bloco de cdigo definido dentro do while. 20

Vamos ver alguns exemplos:


#include <stdio.h> int main() { int i=0, num, res= 0; while (i < 5) { printf("Digite um nmero: "); scanf("%d", &num); res= res+num; i++; } printf("Somatria: %d\n", res); }

Este exemplo apresenta uma tcnica bastante utilizada: a somatria de um conjunto de nmeros. Funciona assim: ao entrar no while, o usurio digita um nmero, que ser armazenado na varivel num. Esse nmero somado com o valor da varivel res (que na primeira iterao 0) e armazenado em res. Na prxima iterao, o valor da varivel res (a soma da iterao passada) somada com num e armazenada em res novamente, assim sucessivamente at acabar o lao. Ao final do lao, o que temos em res a somatria de todos os nmeros digitados. Mais uma tcnica: imagine que voc queira somar os nmeros digitados at que seja digitado um nmero maior que 100. Voc pode criar uma varivel que muda de valor quando essa condio for satisfeita. o que chamamos de flag. Exemplo:
#include <stdio.h> int main(){ int num; int flag= 0; while (flag == 0) { printf("Digite um nmero: "); scanf("%d", &num); if (num > 100) flag= 1; /* flag muda de valor (indica que loop deve parar) */ } }

Lembrando que estas tcnicas podem ser exploradas em qualquer tipo de lao, desde que sejam adaptadas para cada situao. Assim como no for, podemos fazer um lao infinito com o while tambm. Basta fazer o seguinte:
while(1) /* 1 verdadeiro em C */ { comandos; }

claro que em comandos deve haver alguma forma de sair do while, como um break, um return, um exit(), etc. OBS: Evite usar comandos como return, break ou exit() dentro de laos, pois uma prtica pouco elegante. S use quando no houver outro jeito. 21

2.8.3 DO_WHILE Diferente do while, que testa a condio antes de executar o seu bloco de cdigo, o dowhile primeiro executa o seu bloco de cdigo para depois testar a condio. Ele til quando temos que executar no mnimo UMA VEZ o bloco de cdigo do lao. Forma geral:
do { comandos; } while(condio);

Exemplo:
#include <stdio.h> int main() { int num; do { printf(Digite um numero:); scanf("%d", &num); } while(num < 50); }

Neste programa, que no faz nada de til, o bloco de cdigo deve ser executado pelo menos uma vez, j que dependemos do valor da varivel num para processar a condio, no final do lao. Aqui, o programa s encerra o lao quando for digitado algum nmero maior ou igual a 50. Em um exemplo mais prtico:
#include <stdio.h> int main() { int opt; do { do { printf("**** Menu ****\n"); printf("1) Cadastrar\n"); printf("2) Buscar\n"); printf("3) Sair\n"); printf("Digite sua opo: "); scanf("%d", &opt); } while ((opt < 1) || (opt > 4)); /* o cara fica preso at digitar um nmero vlido */ switch(opt) { case 1: cadastra(); break; case 2: busca(); break; } } while (opt != 3); /* lao principal, s sai quando opt for igual a 3 */ }

22

Neste exemplo temos dois do-while. O mais externo e principal fica vigiando se o usurio digitou 3 (ou seja, se quer sair). Caso contrrio, volta e executa tudo novamente. O lao mais interno uma tcnica usada quando o usurio tem um menu, e tem que digitar uma opo para definir para que caminho o programa deve seguir. Neste caso, se o usurio digitar algum nmero maior que 4 ou menor que 1 (invlidos), o lao volta e apresenta tudo de novo na tela, esperando o "esperto" do usurio escolher a opo certa. As funes cadastra() e busca() so fictcias e s serviram para ilustrar a situao. 2.9 Aninhamentos de Comandos Para verificar se o aninhamento de comandos est vlido necessrio observar se os comandos mais internos esto completamente envolvidos pelos comandos mais externos. Caso contrrio, o aninhamento de comandos construdos estar invlido e provavelmente no ser aceito pelo compilador. Observe na figura abaixo um exemplo:

Figura 2.9.1: a) Aninhamento Vlido; b) Aninhamento Invlido.

Exerccios
1) Apresentar a soma obtida dos cem primeiros nmeros inteiros (1+2+3+4+5+6+7+... +98+99+100). 2) Escreva um programa que apresente a srie de Fibonacci at o dcimo quinto termo. A srie de Fibonacci formada pela seqncia: 1, 1, 2, 3, 5, 8, 13, 21, 34, ... . 3) Reescreva o programa anterior e apresente o resultado da soma dos 15 primeiros termos da srie de Fibonacci. 4) Escreva um algoritmo que gere at o trigsimo termo da srie: 1, 3, 6, 10, ... . 5) Construa um algoritmo que permita ao usurio entrar com dados cadastrais de uma pessoa: Identificador, Sexo e Idade. O usurio ir cadastrar pessoas at selecionar a opo de encerramento de cadastro. O algoritmo dever apresentar: o Homem mais idoso, a Mulher mais idosa, a Mdia de Idade para Homens, a Mdia de Idade para Mulheres e qual sexo possui a maior mdia. 6) Ler um nmero N qualquer maior ou igual a 1 e menor ou igual a 50 e apresentar o valor obtido da multiplicao sucessiva de N por 2, enquanto o produto for menor que 500 (N*2; N*2*2: N*2*2*2; etc). O valor N dever ser checado quanto a sua validade. Caso o usurio informe um valor fora da faixa, o programa dever informar atravs de uma mensagem que o valor digitado no vlido. 7) Construa um algoritmo que apresente ao usurio a opo de fornecer um valor entre 1 e 10. O algoritmo dever checar a validade do valor fornecido. O algoritmo dever calcular e apresentar o resultado da tabuada para esse valor. O algoritmo dever solicitar novo valor ao usurio at que ele fornea o valor 0, indicando que deseja encerrar a execuo. 8) Construa um algoritmo que permita ao usurio ir fornecendo valores e apresente o resultado da mdia aritmtica desses valores fornecidos. O critrio para indicar a finalizao do conjunto de valores fornecidos pelo usurio a entrada do valor 0.

23

9) Construa um algoritmo que informe se um nmero qualquer, fornecido pelo usurio ou no um nmero primo. Para que um nmero seja primo, no pode haver nenhum nmero entre 2 e N-1, inclusive, que seja divisor desse nmero. 10) Construa um algoritmo que leia um conjunto de nmeros at que seja encontrado um valor negativo e apresente a diferena entre o maior e o menor dos nmeros lidos. 11) Um banco tem muitos clientes e quer entrar em contato com todos os clientes que tem saldo maior ou igual a R$ 10.000,00. Escreva um algoritmo que leia o Identificador do Cliente, o Telefone e o Saldo de cada um destes clientes, e escreva o Identificador e o Telefone de todos os clientes que devem ser contatados, assim como a quantidade de clientes com saldo inferior a R$ 100,00, a quantidade de clientes com saldo entre R$ 100,00 e 999,99, inclusive, e a quantidade de clientes com saldo entre R$ 1.000,00 e R$ 9.999,99, inclusive. 12) Foi feita uma pesquisa para determinar o ndice de mortalidade infantil em certo perodo. Faa um algoritmo que:

Leia o sexo de cada criana morta (1 = masculino, 2 = feminino) e o nmero de meses de vida da criana. Para finalizar a incluso de dados ser informado o valor 0 no lugar do sexo. Determine e imprima: o A porcentagem de crianas do sexo feminino mortas no perodo; o A porcentagem de crianas do sexo masculino mortas no perodo. o A porcentagem de crianas que viveram 12 meses ou menos no perodo.

13) Construa um algoritmo para simular uma mquina caa-nquel. Devero ser gerados 3 valores aleatrios entre 0 e 10, inclusive. Caso os 3 valores sejam iguais, dever ser apresentada a mensagem: Parabns, voc ganhou!. Caso 2 valores sejam iguais, apresente a mensagem: Passou perto, tente novamente!. Caso todos sejam diferentes, imprima: Hoje no o seu dia!. O programa dever ser executado, repetidamente, at que o usurio selecione a opo de sair.

24