CES-10 INTRODUÇÃO À
COMPUTAÇÃO
Aulas Práticas – 2013
Capítulo V
Comandos For e Switch-Case
Outro comando repetitivo: for
Sejam os seguintes
comandos:
Eles podem ser escritos usando-se o
comando
for:+= num;
soma
int n, i, num, soma;
scanf (“%d”, &n);
soma = 0; i = 1;
while (i <= n) {
scanf (“%d”, &num);
soma += num;
i++;
}
equivale
a = 0;
scanf (“%d”, &n);
soma
for (i = soma
1; i <==n;
i++)+{num;
soma
scanf (“%d”, &num);
soma += num;
}
i++;
equivale a
ou:
i = i + 1;
scanf (“%d”, &n);
for (soma = 0, i = 1; i <= n; i++) {
scanf (“%d”, &num);
Ou outras
soma += num;
formas
}

Forma geral do comando for:
for ( Inicializações ; Expressão ; Atualizações )
Comando


Inicializações e Atualizações:

Listas de zero ou mais CmdAtribuição’s, CmdEntrada’s,
CmdSaída’s ou ChamadaFunção’s

Separados por vírgula e não por ponto e vírgula
O CmdFor acima equivale a
Inicializações
while ( Expressão ) {
Comando
Atualizações
}
Fluxograma do comando for:

for ( Inicializações ; Expressão ; Atualizações ) Comando
#include <stdio.h>
Programa 5.1:
#include <conio.h>
Números perfeitos
void main () {
int n, i, div, soma;
printf ("Digite um numero inteiro positivo: "); scanf ("%d", &n);
printf ("\nNumeros perfeitos entre 1 e %d:\n\n", n);
i = 1;
Número perfeito: a soma de
while (i <= n) {
seus divisores próprios é igual
soma = 0; div = 1;
a si mesmo. Exemplos:
while (div*2 <= i) {
6=1+2+3
if (i % div == 0) soma += div;
28 = 1 + 2 + 4 + 7 + 14
div++;
}
if (soma == i) printf ("%12d", i);
i++;
Usar comando for ao
invés de while
}
printf ("\n\nDigite algo para encerrar: "); getch (); Salvar e executar
}
Comando condicional de várias alternativas:
Expressão
Lista de
comandos
Lista de
comandos
Lista de
comandos
Lista de
comandos
#include <stdio.h>
Programa 5.2:
#include <conio.h>
Levantar o astral
void main ( ) {
char c; int n;
printf ("Levantar o astral? (s/n): "); c = getche();
Salvar e executar
while (c == 's' || c == 'S') {
printf ("\n\n\tDigite um numero de 1 a 7: "); scanf ("%d", &n);
switch (n) {
case 1: printf ("\n\tVoce eh inteligente"); break;
case 2: printf ("\n\tVoce eh campeao"); break;
case 3: printf ("\n\tVoce estah com tudo"); break;
case 4: printf ("\n\tSeu destino eh vencer"); break;
case 5: printf ("\n\tTudo coopera para seu sucesso"); break;
case 6: printf ("\n\tA vida sorri para voce"); break;
case 7: printf ("\n\tNada pode impedir sua vitoria"); break;
default: printf ("\n\tO numero deve ser de 1 a 7");
}
printf ("\n\nLevantar o astral? (s/n): "); c = getche (); Eliminar alguns
ou todos os
}
Trocar o esquema while por for
break’s e executar
}
Exercício 5.1: Resolução de 3 problemas matemáticos
Escrever um programa amigável em C para resolver os três
seguintes problemas matemáticos escolhidos perante um
menu de problemas:
1. Cálculo da média aritmética ponderada de vários números
reais
2. Cálculo da soma dos termos de uma progressão aritmética
de números reais
3. Cálculo do fatorial de um número inteiro
A escolha do problema deve usar o comando switch-case
Para cada problema a ser resolvido, o programa deve pedir
dados específicos para o operador

Media ponderada:
–
–
Usarinsistir
o comando
O programa deve
para ofor
sempre
que puder
operador digitar
os dados
corretamente
Pedir o número de elementos n a participarem da média (n > 0)
Pedir cada elemento acompanhado de seu peso (os elementos devem
ser reais mas os pesos devem ser inteiros positivos)
■ Soma da progressão aritmética:
■ Pedir o primeiro termo (tipo real), o número de termos (tipo inteiro)
e a razão (tipo real)
■ Não usar a fórmula da soma
A seguir, sugestão para
saída de resultados
■ Fatorial: Pedir o número do qual se deseja o fatorial (deve ser inteiro e
 0 e < 13)
SOLUCAO DE PROBLEMAS MATEMATICOS
Resolver problema? (s/n): s
Escolha o problema; Digite
1 - para Media aritmetica ponderada
2 - para Soma de PA
3 - para Fatorial
Sua opcao: 1
Media Aritmetica Ponderada
Digite o numero de elementos (>0): 0
Numero nao positivo! Digite novamente: 3
Digite o 1o. elemento e seu peso: 3.4 4
Digite o 2o. elemento e seu peso: 5.2 4
Digite o 3o. elemento e seu peso: 9.1 2
Media ponderada = 5.26
Em amarelo a digitação
do operador
Resolver problema? (s/n): s
Escolha o problema; Digite
1 - para Media aritmetica ponderada
2 - para Soma de PA
3 - para Fatorial
Sua opcao: 2
Soma de uma Progressao Aritmetica
Digite o primeiro termo, o numero de termos e a razao: 3.5 5 2.3
Soma PA = 40.5
Resolver problema? (s/n): s
Escolha o problema; Digite
1 - para Media aritmetica ponderada
2 - para Soma de PA
3 - para Fatorial
Sua opcao: 3
Fatorial de um numero
Digite o numero (>=0): -1
Numero negativo! Digite novamente: 7
Fatorial(7) = 5040
Resolver problema? (s/n): n
Digite algo para encerrar:
Completar o
programa a seguir
#include <stdio.h>
#include <conio.h>
void main () {
char c;
int problema, nelem, npa, nfat, fat, - - - - - ;
float mediapond, a1, razao, somapa - - - - - ;
- - - - printf ("SOLUCAO DE PROBLEMAS MATEMATICOS");
printf ("\n\nResolver problema? (s/n): "); c = getche ();
while (c == 's' || c == 'S') {
printf ("\n\nEscolha o problema; Digite");
printf ("\n\n\t1 - para Media aritmetica ponderada");
printf ("\n\t2 - para Soma de PA");
printf ("\n\t3 - para Fatorial");
printf ("\n\nSua opcao: "); scanf ("%d", &problema);
switch (problema) {
case 1:
printf ("\n\nMedia Aritmetica Ponderada");
printf ("\n\n\tDigite o numero de elementos (>0): ");
scanf ("%d", &nelem);
while (nelem <= 0) {
- - - - }
- - - - - // digitacao dos elementos e seus pesos
- - - - - // calculo da media ponderada (mediapond)
printf ("\n\tMedia ponderada = %g", mediapond);
break;
case 2:
printf ("\n\nSoma de uma Progressao Aritmetica");
printf ("\n\n\tDigite o primeiro termo, o numero de termos
e a razao: ");
scanf ("%f%d%f", &a1, &npa, &razao);
- - - - - // calculo da soma da PA (somapa)
printf ("\n\tSoma PA = %g", somapa);
break;
case 3:
}
printf ("\n\nFatorial de um numero");
printf ("\n\n\tDigite o numero (>=0): ");
scanf ("%d", &nfat);
while (nfat < 0 || nfat >= 13) {
- - - - }
- - - - - // calculo do fatorial (fat)
printf ("\n\tFatorial(%d) = %d", nfat, fat);
break;
default:
printf ("\n\nErro na opcao\nDigite novamente:");
}
// final do switch
printf ("\n\nResolver problema? (s/n): "); c = getche ();
}
// final do while
printf ("\n\nDigite algo para encerrar: "); getch ();
// final do programa
Substituir todos os
comandos while por for
Exercício do Lab 5: Resolução de vários problemas
matemáticos
Acrescentar ao programa anterior a opção de resolver os
seguintes problemas:
 Cálculo de ex por série de MacLaurin
 Cálculo de sin(x), por série de MacLaurin (x em graus)
 Cálculo de cos(x), por série de MacLaurin (x em graus)
 Cálculo de logbx, usando a função log (logaritmo neperiano)
do math.h
 Cálculo de RaizQuadrada(x) sem usar a função sqrt do
math.h

Série de MacLaurin para ex:
Usar o comando for para
calcular a somatória
■ Ou seja,
■ Cada novo termo deve ser acrescentado à somatória enquanto
ele não for igual a zero
■ Cada novo termo da somatória pode ser calculado em função
do termo anterior

Séries de MacLaurin para sin(x) e cos(x) com x em radianos:
■ Ou seja,
■ Cada novo termo deve ser acrescentado à somatória enquanto
ele não for igual a zero
O ângulo deve ser digitado em graus e
convertido para radianos
■ Cada novo termo da somatória pode ser calculado em função
do termo anterior
Usar o comando for para calcular
a somatória
Cálculo de logbx:
■ Sabe-se que logbx = logex / logeb
■ O arquivo math.h tem a declaração da função log(y) que
calcula logey
■ É só usar essa função
Cálculo da raiz quadrada de x sem usar a função sqrt:

Estipula-se uma precisão (por exemplo, 0.000001)

Dá-se um chute inicial para a raiz (por exemplo, 1)

Enquanto o chute estiver fora da precisão (por exemplo,
|chute2 - x| > 0.000001) calcular um novo chute usando a
seguinte fórmula:
NovoChute = (ChuteAnterior + x/ChuteAnterior) / 2
■ Ver exemplo a seguir
x = 72
sqrt =
1.00000000;
sqrt =
1.00000000 + 72 /
sqrt =
36.50000000 + 72 /
sqrt =
19.23630137 + 72 /
sqrt =
11.48961232 + 72 /
sqrt =
8.87807115 + 72 /
sqrt =
8.49397041 + 72 /
sqrt =
8.48528582 + 72 /
Raiz Quadrada (72) =
|sqrt^2 - x| =
71.00000000
1.00000000 = 36.50000000;
|sqrt^2 - x| = 1260.25000000
36.50000000 = 19.23630137;
|sqrt^2 - x| =
298.03529039
19.23630137 = 11.48961232;
|sqrt^2 - x| =
60.01119125
11.48961232 =
8.87807115;
|sqrt^2 - x| =
6.82014729
8.87807115 =
8.49397041;
|sqrt^2 - x| =
0.14753337
8.49397041 =
8.48528582;
|sqrt^2 - x| =
0.00007542
8.48528582 =
8.48528137;
|sqrt^2 - x| =
0.00000000
Usar o comando for
8.48528137 para as repetições
Download

CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013