Você está na página 1de 45

DCC 119

Algoritmos

Utilizada quando a execuo de uma ao depender de uma inspeo ou teste de uma condio (expresso lgica). Pode ser:
Alternativa Simples Alternativa Dupla Alternativa Mltipla Escolha

Sintaxe:

se (<condio>) { Comando; }

Exemplo 1:

X 10; MAX 20; se (X > MAX) { MAX X; }

Exemplo 2:

X 10; MAX 5; se (X > MAX) { MAX X; }

Analogia:
Pseudolinguagem

Linguagem C if (condio) { C; }

se (<condio>) { C; }

Analogia:
Pseudolinguagem

Linguagem C if (condio) { C; } Obs.: Se houver s um comando no ento, no precisa usar chaves ({bloco}).
7

se (<condio>) { C; }

Analogia: imprimir o MAIOR entre A e B


principal { inteiro a, b, maior; a 9; b 2; maior b; se (a > maior) { maior a; } imprima(maior); } #include <stdio.h> int main() { int a, b, maior; a = 9; b = 2; maior = b; if (a > maior) maior = a; printf ( \nMAIOR = %d , maior); return 0; }

Sintaxe: se (< condio >) { C1 ; } seno { C2 ; }


9

Analogia:
Pseudolinguagem se (< condio >) { C1 ; } seno { C2 ; } Linguagem C if (condio) { C1 ; } else { C2 ; }
10

Analogia: imprimir o MAIOR entre A e B


principal { inteiro A, B, MAIOR; A 9; B 2; se (A > B) { MAIOR A; } seno { MAIOR B; } imprima(MAIOR); } #include <stdio.h> int main() { int a, b, maior; a = 9; b = 2; if (a > b) { maior = a; } else { maior = b; } printf ( \nMAIOR = %d , maior); return 0; }
11

Sintaxe:
escolha (<expresso>) { caso V1 : C1; caso V2 : C2; . . . . . . . .. . . . . . caso Vn : Cn; seno : Cn+1; }
12

Pseudolinguagem escolha (<expresso>) { caso V1 : C1; caso V2 : C2; ............. caso Vn : Cn; seno : Cn+1; }

Linguagem C switch(<expresso>) { case V1: C1; break; case V2: C2; break; ........... case Vn: Cn; break; default: Cn+1; }

13

Exemplo:
principal { inteiro EPOCA; imprima( Digite o nmero do trimestre: ); leia(EPOCA); escolha (EPOCA) { caso 1: imprima( vero ); caso 2: imprima( outono ); caso 3: imprima( inverno ); caso 4: imprima( primavera ); seno: imprima( perodo invlido ); } } #include <stdio.h> int main() { int epoca; printf("Digite o nmero do trimestre:"); scanf("%d , &epoca); switch (epoca) { case 1: printf("vero"); break; case 2: printf ("outono"); break; case 3: printf ("inverno"); break; case 4: printf ("primavera"); break; default: printf( Trimestre invlido"); } return 0; } 14

Construir um algoritmo para ler os coeficientes A, B e C de uma equao do segundo grau e se: Delta for negativo: imprimir a mensagem No h soluo real . Delta for maior ou igual a zero: calcular e imprimir as razes da equao.

Mtodo Direto

15

1) Enunciado est entendido? Para resolver o problema necessrio saber a equao de 2 grau. Esta equao tem a seguinte forma:
(-B raiz(DELTA)) / (2*A) onde DELTA = (B**2 4*A*C)

16

2) Quais variveis sero necessrias? A, B, C e DELTA sero as variveis inteiras que comporo a frmula da equao acima. Sero necessrias mais duas variveis inteiras X1 e X2 que sero as razes da equao.

17

3) Quais mtodos sero utilizados? Por se tratar de uma condio, utilizaremos a estrutura de controle de alternativa.

18

4) Elaborar o Algoritmo para resolver o problema


principal { real A, B, C, DELTA, X1, X2; imprima( Leia os coeficientes A, B e C da equao de 2 grau ); leia(A,B,C); DELTA (B*B 4*A*C); se (DELTA 0) { X1 (-B + raiz(DELTA)) / (2*A); X2 (-B - raiz(DELTA)) / (2*A); imprima( Raizes da equao: , X1, X2); } seno { imprima ( No existem razes reais ); } }
19

5) Testar o algoritmo

Entradas A = 1, B = 5, C = 4 Sadas esperadas: -1 e -4

principal { real A, B, C, DELTA, X1, X2; imprima( Leia os coeficientes A, B e C da equao de 2 grau ); leia(A,B,C); DELTA (B*B 4*A*C); se (DELTA 0) { X1 (-B + raiz(DELTA)) / (2*A); X2 (-B - raiz(DELTA)) / (2*A); imprima( Raizes da equao: , X1, X2); } seno { imprima ( No existem razes reais ); } }
20

5) Testar o algoritmo

Entradas A = 1, B = 5, C = 4 Sadas esperadas: -1 e -4

principal { real A, B, C, DELTA, X1, X2; imprima( Leia os coeficientes A, B e C da equao de 2 grau ); leia(A,B,C); DELTA (5*5 4*1*4); se (DELTA 0) { X1 (-B + raiz(DELTA)) / (2*A); X2 (-B - raiz(DELTA)) / (2*A); imprima( Raizes da equao: , X1, X2); } seno { imprima ( No existem razes reais ); } }
21

5) Testar o algoritmo

Entradas A = 1, B = 5, C = 4 Sadas esperadas: -1 e -4

principal { real A, B, C, DELTA, X1, X2; imprima( Leia os coeficientes A, B e C da equao de 2 grau ); leia(A,B,C); DELTA (5*5 4*1*4); se (9 0) { X1 (-B + raiz(DELTA)) / (2*A); X2 (-B - raiz(DELTA)) / (2*A); imprima( Raizes da equao: , X1, X2); } seno { imprima ( No existem razes reais ); } }
22

5) Testar o algoritmo

Entradas A = 1, B = 5, C = 4 Sadas esperadas: -1 e -4

principal { real A, B, C, DELTA, X1, X2; imprima( Leia os coeficientes A, B e C da equao de 2 grau ); leia(A,B,C); DELTA (5*5 4*1*4); se (9 0) { X1 (-5 + raiz(9)) / (2*1); X2 (-5 - raiz(9)) / (2*1); imprima( Raizes da equao: , X1, X2); } seno { imprima ( No existem razes reais ); } }
23

5) Testar o algoritmo

Entradas A = 1, B = 5, C = 4 Sadas esperadas: -1 e -4

principal { real A, B, C, DELTA, X1, X2; imprima( Leia os coeficientes A, B e C da equao de 2 grau ); leia(A,B,C); DELTA (5*5 4*1*4); se (9 0) { -1 (-5 + raiz(9)) / (2*1); -4 (-5 - raiz(9)) / (2*1); imprima( Raizes da equao: , -1, -4); } seno { imprima ( No existem razes reais ); } }
24

6) Traduzir o algoritmo para um programa


#include <stdio.h> #include <math.h> int main() { float a, b, c, delta, x1, x2; printf("Leia os coeficientes A, B e C da equao de 2 grau: "); scanf("%f %f %f", &a, &b, &c); delta = pow(b,2) - 4*a*c; if(delta >= 0) { x1 = (-b + sqrt(delta)) / (2*a); x2 = (-b - sqrt(delta)) / (2*a); printf("Raizes da equao: %f %f", x1, x2); } else { printf("No existem razes reais"); } return 0; }
25

7) Documentao: O conjunto de documentos produzidos ao longo do mtodo direto constitui a primeira documentao tcnica do programa.

26

1. Ler dois nmeros inteiros e informar se o primeiro valor lido maior, menor ou igual ao segundo.

2. Ler um nmero inteiro e informar se ele divisvel por 2.

3. Altere o algoritmo anterior para que seja informado se o nmero divisvel por 2 e por 3 simultaneamente.

27

4. Altere o algoritmo anterior para que seja informado se o nmero divisvel por 2 e por 3, mas que no seja divisvel por 5. 5. Desenvolver um algoritmo para ler o nmero do dia da semana e imprimir o seu respectivo nome por extenso. Considerar o nmero 1 como domingo, 2 para segunda etc. Caso o dia da semana no exista (menor do que 1 ou maior do que 7), exibir a mensagem Dia da semana invlido". 6. Fazer um algoritmo para ler dois nmeros e um dos smbolos das operaes: +, -, * e /. Imprimir o resultado da operao efetuada sobre os nmeros lidos.
28

7. Os funcionrios de uma empresa receberam um aumento de salrio: tcnicos (cdigo = 1), 50%; gerentes (cdigo = 2), 30%; demais funcionrios (cdigo = 3), 20%. Escrever um algoritmo para ler o cdigo do cargo de um funcionrio e o valor do seu salrio atual, calcular e imprimir o novo salrio aps o aumento. 8. Desenvolver um algoritmo para ler o valor inteiro da idade de uma pessoa e imprimir uma das mensagens: se idade < 13: Criana, se 13 idade < 20: Adolescente, se 20 idade < 60: Adulto e se idade 60: Idoso.

29

9. Elaborar um algoritmo para ler o cdigo de um produto e informar a sua origem: a) Cdigo do produto entre 1 e 20: Europa b) Cdigo do produto entre 21 e 40: sia c) Cdigo do produto entre 41 e 60: Amrica d) Cdigo do produto entre 61 e 80: frica e) Cdigo do produto maior que 80: Paraguai 10. Para auxiliar os vendedores de uma loja na orientao aos clientes sobre as diversas formas de pagamento, desenvolver um algoritmo para:
30

a) Imprimir o seguinte menu: Forma de pagamento: 1. A vista. 2. Cheque para trinta dias. 3. Em duas vezes. 4. Em trs vezes. 5. Em quatro vezes. 6. A partir de cinco vezes. Entre com sua opo: b) Ler o cdigo da opo de pagamento.
31

c) Imprimir uma das mensagens de acordo com a opo lida: Opo = 1: Desconto de 20% Opo = 2, 3 ou 4: Mesmo preo a vista Opo = 5: Juros de 3% ao ms Opo = 6: Juros de 5% ao ms Opo <1 ou opo >6: Opo invlida 11. Desenvolver um programa na linguagem C para cada algoritmo anterior.

32

DCC 120

Laboratrio de Programao

Declarao de variveis Operadores Expresses Impresso de dados (monitor)


printf("expresso de controle", argumentos);

Leitura de dados (teclado):


scanf("expresso de controle", argumentos);

Exemplos: scanf( %d , &a); scanf( %f , &f1);


34

O comando if uma estrutura de deciso que decide se uma sequncia de comandos ser ou no executada. Sua sintaxe :

if (<expresso>) { <sequncia de comandos> } Ou if (<expresso>) <nico comando>;

A expresso sempre ser avaliada logicamente (verdadeiro ou falso), correspondendo ao FALSO o valor zero (==0) e os demais ao VERDADEIRO (!=0).35

Exemplo: Programa para determinar o maior de dois nmeros fornecidos pelo usurio.
#include <stdio.h> int main() { float a, b, maior; printf("Digite os dois numeros"); scanf("%f %f", &a, &b); maior = a; if (b > a) maior = b; printf("O maior entre numeros %f , %f e' %f ", a, b, maior); return 0; }

36

Exemplo: Ler duas variveis (x e y) e imprim-las na ordem crescente.


#include <stdio.h> int main() { float x, y, aux; printf("Digite os dois numeros"); scanf("%f %f", &x, &y); printf("Conteudos originais de x e de y: %f , %f \n: ", x, y); if (y < x) { aux = x; x = y; y = aux; } printf("Conteudos de x e de y ordenados: %f , %f: \n", x, y); return 0; }
37

O comando if pode decidir entre duas sequncias de comandos qual vai ser a executada, tendo a seguinte sintaxe:

if (<expresso>) { // caso a expresso verificada retorne verdadeiro <sequncia de comandos> } else { // caso a expresso verificada retorne falso <sequncia de comandos> }
38

Exemplo: Verificar a paridade de um nmero.


#include <stdio.h> main() { int x; printf("Digite o numero: "); scanf("%d", &x); if (x % 2 == 0) printf("%d e' par \n", x); else printf("%d e' impar \n", x); return 0; }

Obs.: No exemplo acima no so utilizadas chaves no if e no else pois h apenas um comando a ser executado. Em casos como esse pode-se ou no utilizar as chaves.
39

if (<condio 1>) { <comandos if1> if (<condio 2> ) { <comandos if2> } else { <comandos else2> } } else { <comandos else1> if (<condio 3>) { <comandos if3> } }
40

1. Qual a sada do programa.


int main() { int x = 10, y = 3; if (x < 10) printf( Sada 1 ); else if (y < 4) if (x > 10) printf( Sada 2 ); else printf( Sada 3 );

2. Qual a sada do programa.


int main() { int a = 2, b = 3, c = 4; if ((a<3) && ((b !=3) || (c == 4))) printf( sada 1 ); if ((c ==3) || (b ==4)) printf( Sada 2 ); if ((a < 3) && (b > 4)) printf( Sada 3 ); else if (a == 2) if (b==5) printf( Sada 4 ); else printf( Sada 5 );
return 0;

return 0;
}

41

Utilizado quando uma determinada varivel pode ser igual a diferentes valores que se deseja avaliar
sintaxe: switch (varivel) { case constante1: <comandos> break; case constante2: <comandos> break; default: <comandos> }

42

int main() { int epoca; printf("Digite o trimestre do ano em que estamos: "); scanf("%d",&epoca); switch (epoca) { case 1: printf("vero"); break; case 2: printf("outono"); break; case 3: printf("inverno"); break; case 4: printf("primavera"); break; default: printf("perodo invlido"); }
return 0;

43

1. 2.

3.

Faa um programa para ler dois nmero inteiros, faa a diviso do primeiro pelo segundo (se o segundo for diferente de zero). Faa um programa para ler dois nmeros reais e verificar se ambos so maiores que zero. Caso positivo, informar Valores so vlidos . Caso contrrio, informar Valores invlidos . Tendo como dados de entrada a altura e o sexo de uma pessoa, construa um programa que calcule seu peso ideal, utilizando as seguintes frmulas:
para homens: (72.7*h)-58 para mulheres: (62.1*h)-44.7

4. 5.

Faa um programa que leia 3 comprimentos (x,y e z) e responda se eles formam um tringulo, ou seja, se x < y + z e y < x + z e z < x + y. Fazer um algoritmo para ler dois nmeros e um dos smbolos das operaes: +, -, * e /. Imprimir o resultado da operao efetuada sobre os nmeros lidos.
44

6.

Faa um programa para ler um caracter e imprimir as seguintes mensagens, segundo o caso:

Sinal de Menor Sinal de maior Sinal de Igual Outro caracter


7. Elabore um programa que, dada a idade de um nadador, classifique-o em uma das seguintes categorias:

infantil A = 5 7 anos infantil B = 8 10 anos juvenil A = 11 13 anos juvenil B = 14 17 anos adulto = 18 30 anos snior = maiores de 30 anos
45