ces-10 introduÇÃo À computaÇÃo aulas práticas – 2013

21
CES-10 INTRODUÇÃO À CES-10 INTRODUÇÃO À COMPUTAÇÃO COMPUTAÇÃO Aulas Práticas – 2013 Aulas Práticas – 2013 Capítulo V Capítulo V Comandos For e Switch- Comandos For e Switch- Case Case

Upload: viveca

Post on 12-Jan-2016

26 views

Category:

Documents


0 download

DESCRIPTION

CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013. Capítulo V Comandos For e Switch-Case. Sejam os seguintes comandos: int n, i, num, soma; scanf (“%d”, &n); soma = 0; i = 1; while (i

TRANSCRIPT

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

CES-10 INTRODUÇÃO CES-10 INTRODUÇÃO À COMPUTAÇÃOÀ COMPUTAÇÃO

Aulas Práticas – 2013Aulas Práticas – 2013

Capítulo V Capítulo V

Comandos For e Switch-Comandos For e Switch-CaseCase

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

Outro comando repetitivo: forOutro comando repetitivo: for

Sejam os seguintes comandos:

int n, i, num, soma;scanf (“%d”, &n); soma = 0; i = 1; while (i <= n) { scanf (“%d”, &num); soma += num; i++;}

Eles podem ser escritos usando-se o comando for:

scanf (“%d”, &n); soma = 0;for (i = 1; i <= n; i++) { scanf (“%d”, &num); soma += num; }

ou:

scanf (“%d”, &n); for (soma = 0, i = 1; i <= n; i++) { scanf (“%d”, &num); soma += num; }

Ou outras formas

soma += num;

equivale a

soma = soma + num;

i++; equivale a

i = i + 1;

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

Forma geral do comando for:Forma geral do comando for:

for ( Inicializações ; Expressão ; for ( Inicializações ; Expressão ; Atualizações ) Atualizações )

ComandoComando

Inicializações Inicializações e e Atualizações:Atualizações:

Listas de zero ou mais Listas de zero ou mais CmdAtribuição’sCmdAtribuição’s,, CmdEntrada’sCmdEntrada’s, , CmdSaída’sCmdSaída’s ou ou ChamadaFunção’s ChamadaFunção’s

Separados por Separados por vírgula vírgula e não por e não por ponto e ponto e vírgulavírgula

O O CmdFor CmdFor acima equivale aacima equivale a

Inicializaçõeswhile ( Expressão ) {

Comando

Atualizações}

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

Fluxograma do comando for:Fluxograma do comando for:

for ( Inicializações ; Expressão ; for ( Inicializações ; Expressão ; Atualizações ) Comando Atualizações ) Comando

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

#include <stdio.h>#include <stdio.h>

#include <conio.h>#include <conio.h>

void main () {void main () {

int n, i, div, soma;int n, i, div, soma;

printf ("Digite um numero inteiro positivo: "); scanf ("%d", printf ("Digite um numero inteiro positivo: "); scanf ("%d", &n);&n);

printf ("\nNumeros perfeitos entre 1 e %d:\n\n", n);printf ("\nNumeros perfeitos entre 1 e %d:\n\n", n);

i = 1;i = 1;

while (i <= n) {while (i <= n) {

soma = 0; div = 1;soma = 0; div = 1;

while (div*2 <= i) {while (div*2 <= i) {

if (i % div == 0) soma += div;if (i % div == 0) soma += div;

div++;div++;

}}

if (soma == i) printf ("%12d", i);if (soma == i) printf ("%12d", i);

i++;i++;

}}

printf ("\n\nDigite algo para encerrar: "); getch ();printf ("\n\nDigite algo para encerrar: "); getch ();

}}

Programa 5.1: Números perfeitos

Usar comando for ao invés de while

Salvar e executar

Número perfeito: a soma de seus divisores próprios é igual a si mesmo. Exemplos:

6 = 1 + 2 + 328 = 1 + 2 + 4 + 7 + 14

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

Comando condicional de várias alternativas:Comando condicional de várias alternativas:

Expressão

Lista de comand

os

Lista de comand

os

Lista de comand

os

Lista de comand

os

V 11, V 12

, ... ,

V 1i

V 21, V

22, .

.. ,

V 2j

Vn1 , V

n2 , ... ,

Vnp

Outros

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

#include <stdio.h>#include <stdio.h>

#include <conio.h>#include <conio.h>

void main ( ) {void main ( ) {

char c; int n;char c; int n;

printf ("Levantar o astral? (s/n): "); c = getche();printf ("Levantar o astral? (s/n): "); c = getche();

while (c == 's' || c == 'S') {while (c == 's' || c == 'S') {

printf ("\n\n\tDigite um numero de 1 a 7: "); scanf ("%d", printf ("\n\n\tDigite um numero de 1 a 7: "); scanf ("%d", &n);&n);

switch (n) {switch (n) {

case 1: printf ("\n\tVoce eh inteligente"); break;case 1: printf ("\n\tVoce eh inteligente"); break;

case 2: printf ("\n\tVoce eh campeao"); break;case 2: printf ("\n\tVoce eh campeao"); break;

case 3: printf ("\n\tVoce estah com tudo"); break;case 3: printf ("\n\tVoce estah com tudo"); break;

case 4: printf ("\n\tSeu destino eh vencer"); break;case 4: printf ("\n\tSeu destino eh vencer"); break;

case 5: printf ("\n\tTudo coopera para seu sucesso"); case 5: printf ("\n\tTudo coopera para seu sucesso"); break;break;

case 6: printf ("\n\tA vida sorri para voce"); break;case 6: printf ("\n\tA vida sorri para voce"); break;

case 7: printf ("\n\tNada pode impedir sua vitoria"); case 7: printf ("\n\tNada pode impedir sua vitoria"); break;break;

default: printf ("\n\tO numero deve ser de 1 a 7");default: printf ("\n\tO numero deve ser de 1 a 7");

}}

printf ("\n\nLevantar o astral? (s/n): "); c = getche ();printf ("\n\nLevantar o astral? (s/n): "); c = getche ();

}}

}}

Programa 5.2: Levantar o astral

Salvar e executar

Eliminar alguns ou todos os break’s e executar

Trocar o esquema while por for

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

Exercício 5.1: Resolução de 3 problemas Exercício 5.1: Resolução de 3 problemas matemáticosmatemáticos

Escrever um programa amigável em C para Escrever um programa amigável em C para resolver os três seguintes problemas matemáticos resolver os três seguintes problemas matemáticos escolhidos perante um menu de problemas:escolhidos perante um menu de problemas:

1.1.Cálculo da Cálculo da médiamédia aritmética aritmética ponderadaponderada de de vários números reaisvários números reais

2.2.Cálculo da soma dos termos de uma Cálculo da soma dos termos de uma progressão progressão aritméticaaritmética de números reais de números reais

3.3.Cálculo do Cálculo do fatorial fatorial de um número inteirode um número inteiro

A escolha do problema deve usar o comando A escolha do problema deve usar o comando switch-caseswitch-case

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

Para cada problema a ser resolvido, o programa deve Para cada problema a ser resolvido, o programa deve pedir dados específicos para o operadorpedir dados específicos para o operador

Media ponderada: Media ponderada:

– Pedir o número de elementos Pedir o número de elementos n n a participarem da média a participarem da média ((n > 0n > 0) )

– Pedir cada elemento acompanhado de seu peso (os Pedir cada elemento acompanhado de seu peso (os elementos devem ser reais mas os pesos devem ser elementos devem ser reais mas os pesos devem ser inteiros positivos)inteiros positivos)

■ Soma da progressão aritmética:Soma da progressão aritmética:

■ Pedir o primeiro termo (tipo real), o número de termos Pedir o primeiro termo (tipo real), o número de termos (tipo inteiro) e a razão (tipo real)(tipo inteiro) e a razão (tipo real)

■ Não usar a fórmula da somaNão usar a fórmula da soma

■ Fatorial: Fatorial: Pedir o número do qual se deseja o fatorial Pedir o número do qual se deseja o fatorial (deve ser inteiro e (deve ser inteiro e 0 e < 13 0 e < 13))

A seguir, sugestão para saída de resultados

Usar o comando for sempre que puder

O programa deve insistir para o operador digitar os dados corretamente

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

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

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

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

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

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

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

#include <stdio.h>#include <stdio.h>

#include <conio.h>#include <conio.h>

void main () {void main () {

char c;char c;

int problema, nelem, npa, nfat, fat, - - - - - ;int problema, nelem, npa, nfat, fat, - - - - - ;

float mediapond, a1, razao, somapa - - - - - ;float mediapond, a1, razao, somapa - - - - - ;

- - - - -- - - - -

printf ("SOLUCAO DE PROBLEMAS MATEMATICOS");printf ("SOLUCAO DE PROBLEMAS MATEMATICOS");

printf ("\n\nResolver problema? (s/n): "); c = getche ();printf ("\n\nResolver problema? (s/n): "); c = getche ();

while (c == 's' || c == 'S') {while (c == 's' || c == 'S') {

printf ("\n\nEscolha o problema; Digite");printf ("\n\nEscolha o problema; Digite");

printf ("\n\n\t1 - para Media aritmetica ponderada");printf ("\n\n\t1 - para Media aritmetica ponderada");

printf ("\n\t2 - para Soma de PA");printf ("\n\t2 - para Soma de PA");

printf ("\n\t3 - para Fatorial");printf ("\n\t3 - para Fatorial");

printf ("\n\nSua opcao: "); scanf ("%d", &problema);printf ("\n\nSua opcao: "); scanf ("%d", &problema);

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

switch (problema) {switch (problema) {

case 1:case 1:

printf ("\n\nMedia Aritmetica Ponderada");printf ("\n\nMedia Aritmetica Ponderada");

printf ("\n\n\tDigite o numero de elementos (>0): ");printf ("\n\n\tDigite o numero de elementos (>0): ");

scanf ("%d", &nelem);scanf ("%d", &nelem);

while (nelem <= 0) {while (nelem <= 0) {

- - - - -- - - - -

}}

- - - - - // digitacao dos elementos e seus pesos- - - - - // digitacao dos elementos e seus pesos

- - - - - // calculo da media ponderada (mediapond)- - - - - // calculo da media ponderada (mediapond)

printf ("\n\tMedia ponderada = %g", mediapond);printf ("\n\tMedia ponderada = %g", mediapond);

break;break;

case 2:case 2:

printf ("\n\nSoma de uma Progressao Aritmetica");printf ("\n\nSoma de uma Progressao Aritmetica");

printf ("\n\n\tDigite o primeiro termo, o numero de termos e a printf ("\n\n\tDigite o primeiro termo, o numero de termos e a razao: ");razao: ");

scanf ("%f%d%f", &a1, &npa, &razao);scanf ("%f%d%f", &a1, &npa, &razao);

- - - - - // calculo da soma da PA (somapa)- - - - - // calculo da soma da PA (somapa)

printf ("\n\tSoma PA = %g", somapa);printf ("\n\tSoma PA = %g", somapa);

break;break;

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

case 3:case 3:

printf ("\n\nFatorial de um numero");printf ("\n\nFatorial de um numero");

printf ("\n\n\tDigite o numero (>=0): ");printf ("\n\n\tDigite o numero (>=0): ");

scanf ("%d", &nfat);scanf ("%d", &nfat);

while (nfat < 0 || nfat >= 13) {while (nfat < 0 || nfat >= 13) {

- - - - -- - - - -

}}

- - - - - // calculo do fatorial (fat)- - - - - // calculo do fatorial (fat)

printf ("\n\tFatorial(%d) = %d", nfat, fat); printf ("\n\tFatorial(%d) = %d", nfat, fat);

break;break;

default:default:

printf ("\n\nErro na opcao\nDigite novamente:");printf ("\n\nErro na opcao\nDigite novamente:");

}} // final do switch// final do switch

printf ("\n\nResolver problema? (s/n): "); c = getche ();printf ("\n\nResolver problema? (s/n): "); c = getche ();

}} // final do while// final do while

printf ("\n\nDigite algo para encerrar: "); getch ();printf ("\n\nDigite algo para encerrar: "); getch ();

}} // final do programa// final do programa

Substituir todos os comandos while por for

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

Exercício do Lab 5: Resolução de vários Exercício do Lab 5: Resolução de vários problemas matemáticosproblemas matemáticos

Acrescentar ao programa anterior a opção de Acrescentar ao programa anterior a opção de resolver os seguintes problemas:resolver os seguintes problemas:

Cálculo de Cálculo de eexx por série de MacLaurinpor série de MacLaurin Cálculo de Cálculo de sin(x)sin(x), por série de MacLaurin (, por série de MacLaurin (xx

em graus)em graus) Cálculo de Cálculo de cos(x)cos(x), por série de MacLaurin (, por série de MacLaurin (xx

em graus)em graus) Cálculo de Cálculo de loglogbbxx, usando a função , usando a função loglog

(logaritmo neperiano) do (logaritmo neperiano) do math.hmath.h Cálculo de Cálculo de RaizQuadrada(x)RaizQuadrada(x) sem usar a sem usar a

função função sqrtsqrt do do math.hmath.h

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

Série de MacLaurin para Série de MacLaurin para eexx::

■ Ou seja, Ou seja,

■ Cada novo termo deve ser acrescentado à Cada novo termo deve ser acrescentado à somatória enquanto ele não for igual a somatória enquanto ele não for igual a zerozero

■ Cada novo termo da somatória pode ser Cada novo termo da somatória pode ser calculado em função do termo anteriorcalculado em função do termo anterior

Usar o comando for para calcular a somatória

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

Séries de MacLaurin para Séries de MacLaurin para sin(x) sin(x) e e cos(x)cos(x) com com x x em radianos:em radianos:

■ Ou seja, Ou seja,

■ Cada novo termo deve ser acrescentado à Cada novo termo deve ser acrescentado à somatória enquanto ele não for igual a somatória enquanto ele não for igual a zerozero

■ Cada novo termo da somatória pode ser Cada novo termo da somatória pode ser calculado em função do termo anteriorcalculado em função do termo anterior

Usar o comando for para calcular a somatória

O ângulo deve ser digitado em graus e convertido para radianos

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

Cálculo de Cálculo de loglogbbxx::

■ Sabe-se que Sabe-se que loglogbbx = logx = logeex / logx / logeebb

■ O arquivo O arquivo math.h math.h tem a declaração da função tem a declaração da função log(y)log(y) que calcula que calcula loglogeeyy

■ É só usar essa funçãoÉ só usar essa função

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

Cálculo da raiz quadrada de Cálculo da raiz quadrada de xx sem usar a função sem usar a função sqrtsqrt::

Estipula-se uma precisão (por exemplo, Estipula-se uma precisão (por exemplo, 0.0000010.000001))

Dá-se um chute inicial para a raiz (por exemplo, Dá-se um chute inicial para a raiz (por exemplo, 11))

Enquanto o chute estiver fora da precisão (por Enquanto o chute estiver fora da precisão (por exemplo, exemplo, |chute|chute22 - x| > 0.000001 - x| > 0.000001) calcular um ) calcular um novo chute usando a seguinte fórmula:novo chute usando a seguinte fórmula:

NovoChute = (ChuteAnterior + NovoChute = (ChuteAnterior + x/ChuteAnterior) / 2x/ChuteAnterior) / 2

■ Ver exemplo a seguirVer exemplo a seguir

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

x = 72x = 72

sqrt = 1.00000000; sqrt = 1.00000000; |sqrt^2 - x| = 71.00000000|sqrt^2 - x| = 71.00000000

sqrt = 1.00000000 + 72 / 1.00000000 = 36.50000000; sqrt = 1.00000000 + 72 / 1.00000000 = 36.50000000;

|sqrt^2 - x| = 1260.25000000|sqrt^2 - x| = 1260.25000000

sqrt = 36.50000000 + 72 / 36.50000000 = 19.23630137; sqrt = 36.50000000 + 72 / 36.50000000 = 19.23630137;

|sqrt^2 - x| = 298.03529039|sqrt^2 - x| = 298.03529039

sqrt = 19.23630137 + 72 / 19.23630137 = 11.48961232; sqrt = 19.23630137 + 72 / 19.23630137 = 11.48961232;

|sqrt^2 - x| = 60.01119125|sqrt^2 - x| = 60.01119125

sqrt = 11.48961232 + 72 / 11.48961232 = 8.87807115; sqrt = 11.48961232 + 72 / 11.48961232 = 8.87807115;

|sqrt^2 - x| = 6.82014729|sqrt^2 - x| = 6.82014729

sqrt = 8.87807115 + 72 / 8.87807115 = 8.49397041; sqrt = 8.87807115 + 72 / 8.87807115 = 8.49397041;

|sqrt^2 - x| = 0.14753337|sqrt^2 - x| = 0.14753337

sqrt = 8.49397041 + 72 / 8.49397041 = 8.48528582; sqrt = 8.49397041 + 72 / 8.49397041 = 8.48528582;

|sqrt^2 - x| = 0.00007542|sqrt^2 - x| = 0.00007542

sqrt = 8.48528582 + 72 / 8.48528582 = 8.48528137; sqrt = 8.48528582 + 72 / 8.48528582 = 8.48528137;

|sqrt^2 - x| = 0.00000000|sqrt^2 - x| = 0.00000000

Raiz Quadrada (72) = 8.48528137Raiz Quadrada (72) = 8.48528137Usar o comando for para as repetições