62
Capítulo IV – Comandos Capítulo IV – Comandos de Controle de Fluxo de Controle de Fluxo 4.1 – Comandos compostos 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos 4.4 – Comandos repetitivos 4.5 – Comandos de escape 4.5 – Comandos de escape 4.6 – Comandos de seleção 4.6 – Comandos de seleção 4.7 – Introdução à metodologia top- 4.7 – Introdução à metodologia top- down down

Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

Embed Size (px)

Citation preview

Page 1: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

Capítulo IV – Comandos Capítulo IV – Comandos de Controle de Fluxode Controle de Fluxo

4.1 – Comandos compostos4.1 – Comandos compostos

4.2 – Comandos condicionais4.2 – Comandos condicionais

4.3 – Expressões condicionais4.3 – Expressões condicionais

4.4 – Comandos repetitivos4.4 – Comandos repetitivos

4.5 – Comandos de escape4.5 – Comandos de escape

4.6 – Comandos de seleção4.6 – Comandos de seleção

4.7 – Introdução à metodologia top-4.7 – Introdução à metodologia top-down down

Page 2: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

4.6 – Comandos de Seleção4.6 – Comandos de Seleção

4.6.1 – Importante estrutura 4.6.1 – Importante estrutura algoritmicaalgoritmica

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

Escolher um de vários caminhos alternativos, conforme o valor da expressão

A expressão e os valores V11, V12, ... , Vnp são inteiros ou caracteres

Page 3: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

Em C Em C

aplainada:aplainada:switch (Expressao) {

V11, V12, ... , V1i : Lista de Comandos;

V21, V22, ... , V2j : Lista de Comandos;

. . . . . .Vn1, Vn2, ... , Vnp : Lista de

Comandos;default: Lista de Comandos;

}

Page 4: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

switch (Expressao) {switch (Expressao) {

case Vcase V1111: case V: case V1212: ... case V: ... case V1i1i::

Lista de comandos; break;Lista de comandos; break;

case Vcase V2121: case V: case V2222: ... case V: ... case V2j2j::

Lista de comandos; break;Lista de comandos; break;

..

..

case Vcase Vn1n1: case V: case Vn2n2: ... case V: ... case Vnpnp::

Lista de comandos; break;Lista de comandos; break;

default:default:

Lista de comandos; Lista de comandos;

}}switch (Expressao) {

V11, V12, ... , V1i : Lista de Comandos;

V21, V22, ... , V2j : Lista de Comandos;

. . . . . . Vn1, Vn2, ... , Vnp : Lista de

Comandos; default: Lista de Comandos;

}

Em C

O comando break é necessário para que somente uma lista de comandos seja executada

Obs.: o ramo default é opcional

Page 5: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

#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 ();

}}

}}

Exemplo: seja o seguinte programa

Resultado para n = 5 Tudo coopera para seu

sucesso

Page 6: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

#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");case 1: printf ("\n\tVoce eh inteligente");

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

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

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

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

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

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

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 ();

}}

}}

Resultado para n = 5 Tudo coopera para seu

sucessoA vida sorri para voceNada pode impedir sua vitoriaO numero deve ser de 1 a 7

Retirando-se os comandos break

Page 7: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

Fluxograma do switch sem usar break:Fluxograma do switch sem usar break:

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

, V22

, ...

,

V 2j

Vn1 , V

n2 , ... ,

Vnp

Outros

Page 8: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

Exemplo: programa para contar diversos Exemplo: programa para contar diversos tipos de caracterestipos de caracteres

Digitar uma Digitar uma frasefrase, guardando-a no , guardando-a no bufferbuffer do do tecladoteclado

Ler Ler cada caracterecada caractere da frase, da frase, classificando-oclassificando-o

Acrescentar 1Acrescentar 1 ao contador da classe do ao contador da classe do caracterecaractere

No final, No final, escreverescrever no vídeo o valor do no vídeo o valor do contadorcontador de cada classe de cada classe

Classes:

1) A ou a 2) E ou e3) I ou i 4) O ou o5) U ou u 6) W ou w7) Y ou y 8) Consoantes9) Dígitos decimais 10) Outros

caracteres

Page 9: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

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

#include <stdlib.h>#include <stdlib.h>

/* Cabecalho e declaracoes *//* Cabecalho e declaracoes */

int main ( ) {int main ( ) {

char c;char c;

int ct_a, ct_e, ct_i, ct_o, ct_u, ct_w, ct_y,int ct_a, ct_e, ct_i, ct_o, ct_u, ct_w, ct_y,

ct_cons, ct_dig, ct_outros;ct_cons, ct_dig, ct_outros;

/* Zerar todos os contadores *//* Zerar todos os contadores */

ct_a = ct_e = ct_i = ct_o = ct_u = ct_w =ct_a = ct_e = ct_i = ct_o = ct_u = ct_w =

ct_y = ct_cons = ct_dig = ct_outros = 0;ct_y = ct_cons = ct_dig = ct_outros = 0;

Page 10: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

/* Ler e classificar cada caractere *//* Ler e classificar cada caractere */

printf ("Digite uma frase:\n\n\t"); scanf ("%c", &c);printf ("Digite uma frase:\n\n\t"); scanf ("%c", &c);

while (c != '\n') {while (c != '\n') {

switch (c) {switch (c) {

case 'a': case 'A': ct_a++; break;case 'a': case 'A': ct_a++; break;

case 'e': case 'E': ct_e++; break;case 'e': case 'E': ct_e++; break;

case 'i': case 'I': ct_i++; break;case 'i': case 'I': ct_i++; break;

case 'o': case 'O': ct_o++; break;case 'o': case 'O': ct_o++; break;

case 'u': case 'U': ct_u++; break;case 'u': case 'U': ct_u++; break;

case 'w': case 'W': ct_w++; break;case 'w': case 'W': ct_w++; break;

case 'y': case 'Y': ct_y++; break;case 'y': case 'Y': ct_y++; break;

default:default:

if (c >= '0' && c <= '9') ct_dig++;if (c >= '0' && c <= '9') ct_dig++;

else if (c >= 'B' && c <= 'Z' || c >= 'b' && c else if (c >= 'B' && c <= 'Z' || c >= 'b' && c <= 'z')<= 'z')

ct_cons++;ct_cons++;

else ct_outros++;else ct_outros++;

}}

scanf ("%c", &c);scanf ("%c", &c);

}}

Page 11: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

/* Imprimir os contadores e fechar a tela*//* Imprimir os contadores e fechar a tela*/

printf ("\nLetra A : %3d\nLetra E : %3d", ct_a, ct_e);printf ("\nLetra A : %3d\nLetra E : %3d", ct_a, ct_e);

printf ("\nLetra I : %3d\nLetra O : %3d", ct_i, ct_o);printf ("\nLetra I : %3d\nLetra O : %3d", ct_i, ct_o);

printf ("\nLetra U : %3d\nLetra W : %3d", ct_u, ct_w);printf ("\nLetra U : %3d\nLetra W : %3d", ct_u, ct_w);

printf ("\nLetra Y : %3d\nConsoantes: %3d", ct_y, ct_cons);printf ("\nLetra Y : %3d\nConsoantes: %3d", ct_y, ct_cons);

printf ("\nDigitos : %3d\nOutros : %3d", ct_dig, ct_outros);printf ("\nDigitos : %3d\nOutros : %3d", ct_dig, ct_outros);

printf ("\n\n"); system ("pause"); return 0;printf ("\n\n"); system ("pause"); return 0;

}}Digite uma frase:

hberoçh 9g59y9 )_Y(HHU 3@$%UDFUYapok

Letra A : 1Letra E : 1Letra I : 0Letra O : 2Letra U : 3Letra W : 0Letra Y : 3Consoantes: 11Digitos : 5Outros : 14

Pressione . . .

Resultado

Page 12: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

Exercícios 4.6:Exercícios 4.6:

1.1.Dizer que características uma frase digitada Dizer que características uma frase digitada deve ter para que o programa do próximo slide deve ter para que o programa do próximo slide a considere corretaa considere correta

Page 13: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

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

#include <stdlib.h>#include <stdlib.h>

intint main ( ) { main ( ) {

charchar c, erro; c, erro; int int c1, c2, c3, c4, c5, c6;c1, c2, c3, c4, c5, c6;

c1 = c2 = c3 = c4 = c5 = c6 = 0; erro = 0; printf ("Digite uma frase: ");c1 = c2 = c3 = c4 = c5 = c6 = 0; erro = 0; printf ("Digite uma frase: ");

dodo { {

scanf ("%c", &c);scanf ("%c", &c);

ifif (c != '\n') { (c != '\n') {

switchswitch (c) { (c) {

case case ' ( ' : c1++; ' ( ' : c1++; break break ;; casecase ' ) ' : c2++; ' ) ' : c2++; break break ;;

casecase ' [ ' : c3++; ' [ ' : c3++; break break ;; case case ' ] ' : c4++; ' ] ' : c4++; break break ;;

casecase ' { ' : c5++; ' { ' : c5++; break break ;; casecase ' } ' : c6++; ' } ' : c6++; break break ;;

}}

if if (c2 > c1 | | c4 > c3 | | c6 > c5) erro = 1; (c2 > c1 | | c4 > c3 | | c6 > c5) erro = 1;

}}

} } whilewhile (c ! = ' \n ' && erro == 0); (c ! = ' \n ' && erro == 0);

if if (erro == 0 && c1 == c2 && c3 == c4 && c5 == c6) printf (erro == 0 && c1 == c2 && c3 == c4 && c5 == c6) printf ("Frase correta");("Frase correta");

elseelse printf ("Frase com erros"); printf ("Frase com erros");

printf ("\n\n"); system ("pause"); return 0;printf ("\n\n"); system ("pause"); return 0;

}}

Page 14: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

Capítulo IV – Comandos Capítulo IV – Comandos de Controle de Fluxode Controle de Fluxo

4.1 – Comandos compostos4.1 – Comandos compostos

4.2 – Comandos condicionais4.2 – Comandos condicionais

4.3 – Expressões condicionais4.3 – Expressões condicionais

4.4 – Comandos repetitivos4.4 – Comandos repetitivos

4.5 – Comandos de escape4.5 – Comandos de escape

4.6 – Comandos de seleção4.6 – Comandos de seleção

4.7 – Introdução à metodologia top-4.7 – Introdução à metodologia top-downdown

Page 15: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

4.7 – Introdução à 4.7 – Introdução à Metodologia Top-downMetodologia Top-down

4.7.1 – Conceito4.7.1 – Conceito

É a decomposição de uma É a decomposição de uma grande tarefagrande tarefa numa numa coleção de coleção de tarefas menorestarefas menores interligadas interligadas

Cada umaCada uma dessas tarefas menores pode ser dessas tarefas menores pode ser decomposta da mesma formadecomposta da mesma forma

No final, chega-se a uma coleção de No final, chega-se a uma coleção de tarefas tarefas triviaistriviais interligadas interligadas

Cada uma delas poderá ser resolvida por um Cada uma delas poderá ser resolvida por um comando típico dos algoritmoscomando típico dos algoritmos

Page 16: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

4.7.2 – Desenvolvimento de um 4.7.2 – Desenvolvimento de um algoritmo para encontrar os n algoritmo para encontrar os n primeiros números naturais primosprimeiros números naturais primos

Método:Método:

Por definição, Por definição, 1 não é primo1 não é primo

Percorrer o campo dos naturais, do nPercorrer o campo dos naturais, do noo 2 em 2 em diante, até encontrar diante, até encontrar n n números primosnúmeros primos

Page 17: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

4.7.2 – Desenvolvimento de um 4.7.2 – Desenvolvimento de um algoritmo para encontrar os n algoritmo para encontrar os n primeiros números naturais primosprimeiros números naturais primos

Método:Método:

Para ver se um número Para ver se um número numnum é primo: é primo:

0 1 2 3 num/2 num

A B

num tem divisor na região B se e somente se tem divisor na região A

Então basta procurar divisores para num na região A

Page 18: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

Desenvolvimento do algoritmo por “top-Desenvolvimento do algoritmo por “top-down”:down”:

1ª Etapa:1ª Etapa:

N_PrimeirosNúmerosPrimos {N_PrimeirosNúmerosPrimos {

Escrever o título da tarefa;Escrever o título da tarefa;

Pedir e ler o valor de n;Pedir e ler o valor de n;

Se (n <= 0) Escrever mensagem de erro;Se (n <= 0) Escrever mensagem de erro;

Senão Senão

Encontrar e Escrever os n 1Encontrar e Escrever os n 1osos números números primos;primos;

}}

int n;Declarações

Page 19: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

N_PrimeirosNúmerosPrimos {N_PrimeirosNúmerosPrimos {

Escrever o título da tarefa;Escrever o título da tarefa;

Pedir e ler o valor de n;Pedir e ler o valor de n;

Se (n <= 0) Escrever mensagem de erro;Se (n <= 0) Escrever mensagem de erro;

Senão Senão

Encontrar e Escrever os n 1Encontrar e Escrever os n 1osos números números primos;primos;

}}

2ª Etapa

int n;Declarações

Page 20: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

N_PrimeirosNúmerosPrimos {N_PrimeirosNúmerosPrimos {

write (“Relacao dos n primeiros numeros write (“Relacao dos n primeiros numeros primos”);primos”);

write (“Digite o valor de n:”); read (n);write (“Digite o valor de n:”); read (n);

Se (n <= 0) Escrever mensagem de erro;Se (n <= 0) Escrever mensagem de erro;

Senão Senão

Encontrar e Escrever os n 1Encontrar e Escrever os n 1osos números números primos;primos;

}}

2ª Etapa

int n;Declarações

Page 21: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

N_PrimeirosNúmerosPrimos {N_PrimeirosNúmerosPrimos {

write (“Relacao dos n primeiros numeros write (“Relacao dos n primeiros numeros primos”);primos”);

write (“Digite o valor de n:”); read (n);write (“Digite o valor de n:”); read (n);

Se (n <= 0) Escrever mensagem de erro;Se (n <= 0) Escrever mensagem de erro;

SenãoSenão

Encontrar e Escrever os n 1Encontrar e Escrever os n 1osos números números primos;primos;

}}

2ª Etapa

int n;Declarações

Page 22: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

N_PrimeirosNúmerosPrimos {N_PrimeirosNúmerosPrimos {

write (“Relacao dos n primeiros numeros write (“Relacao dos n primeiros numeros primos”);primos”);

write (“Digite o valor de n:”); read (n);write (“Digite o valor de n:”); read (n);

if (n <= 0) write (n, “ - valor improprio para n”);if (n <= 0) write (n, “ - valor improprio para n”);

elseelse

Encontrar e Escrever os n 1Encontrar e Escrever os n 1osos números números primos;primos;

}}

2ª Etapa

int n;Declarações

Page 23: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

N_PrimeirosNúmerosPrimos {N_PrimeirosNúmerosPrimos {

write (“Relacao dos n primeiros numeros write (“Relacao dos n primeiros numeros primos”);primos”);

write (“Digite o valor de n:”); read (n);write (“Digite o valor de n:”); read (n);

if (n <= 0) write (n, “ - valor improprio para n”);if (n <= 0) write (n, “ - valor improprio para n”);

else else

Encontrar e Escrever os n 1Encontrar e Escrever os n 1osos números números primos;primos;

}}

2ª Etapa

int n;Declarações

Page 24: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

N_PrimeirosNúmerosPrimos {N_PrimeirosNúmerosPrimos {

write (“Relacao dos n primeiros numeros write (“Relacao dos n primeiros numeros primos”);primos”);

write (“Digite o valor de n:”); read (n);write (“Digite o valor de n:”); read (n);

if (n <= 0) write (n, “ - valor improprio para n”);if (n <= 0) write (n, “ - valor improprio para n”);

else else {{

num = 2; cont = 0;num = 2; cont = 0;

do {do {

Testar se num é primo;Testar se num é primo;

if (num é primo) {if (num é primo) {

write (num); cont++;write (num); cont++;

}}

num++;num++;

} while (cont < n);} while (cont < n);

}}

}}

2ª Etapa

num: número a ser testado

cont: contador de números primos encontrados

Faltam detalhes

int n, num, cont;Declarações

Page 25: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

Desenvolvimento de:Desenvolvimento de:

Testar se num é primo;Testar se num é primo;

if (num é primo)if (num é primo)

Procurar divisor para num, no intervalo Procurar divisor para num, no intervalo [ 2, [ 2, ]; ];

if (não encontrar divisor para num)if (não encontrar divisor para num)

3ª Etapa

Page 26: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

Desenvolvimento de:Desenvolvimento de:

Procurar divisor para num, no intervalo [ 2, Procurar divisor para num, no intervalo [ 2, ]; ];

if (não encontrar divisor para num)if (não encontrar divisor para num)

div = 2;div = 2;

while ((não encontrar divisor) && (divwhile ((não encontrar divisor) && (div22 <= <= num)) {num)) {

Testar div;Testar div;

if (div é divisor de num)if (div é divisor de num)

Encontrou divisor;Encontrou divisor;

else div++;else div++;

}}

if (não encontrar divisor para num)if (não encontrar divisor para num)

4ª Etapa

int n, num, cont, div;Declarações

Page 27: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

div = 2;div = 2;

while ((não encontrar divisor) && (divwhile ((não encontrar divisor) && (div22 <= <= num)) {num)) {

Testar div;Testar div;

if (div é divisor de num)if (div é divisor de num)

Encontrou divisor;Encontrou divisor;

else div++;else div++;

}}

if (não encontrar divisor para num)if (não encontrar divisor para num)

5ª e última Etapa

int n, num, cont, div;Declarações

Page 28: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

div = 2; achou = False;div = 2; achou = False;

while ((achou == False) && (divwhile ((achou == False) && (div22 <= num)) <= num)) {{

Testar div;Testar div;

if (div é divisor de num)if (div é divisor de num)

Encontrou divisor;Encontrou divisor;

else div++;else div++;

}}

if (achou == False)if (achou == False)

int n, num, cont, div;logic achou;

Declarações

5ª e última Etapa

Page 29: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

div = 2; achou = False;div = 2; achou = False;

while ((achou == False) && (divwhile ((achou == False) && (div22 <= num)) <= num)) {{

Testar div;Testar div;

if (div é divisor de num)if (div é divisor de num)

Encontrou divisor;Encontrou divisor;

else div++;else div++;

}}

if (achou == False)if (achou == False)

int n, num, cont, div;logic achou;

Declarações

5ª e última Etapa

Page 30: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

div = 2; achou = False;div = 2; achou = False;

while ((achou == False) && (divwhile ((achou == False) && (div22 <= num)) <= num)) {{

resto = num % div;resto = num % div;

if (resto == 0)if (resto == 0)

achou = True;achou = True;

else div++;else div++;

}}

if (achou == False)if (achou == False)

int n, num, cont, div, resto;logic achou;

Declarações

5ª e última Etapa

Copia-se este trecho no resultado da 2ª Etapa

Page 31: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

N_PrimeirosNúmerosPrimos {N_PrimeirosNúmerosPrimos {

write (“Relacao dos n primeiros numeros write (“Relacao dos n primeiros numeros primos”);primos”);

write (“Digite o valor de n:”); read (n);write (“Digite o valor de n:”); read (n);

if (n <= 0) write (n, “ - valor improprio para n”);if (n <= 0) write (n, “ - valor improprio para n”);

else {else {

num = 2; cont = 0;num = 2; cont = 0;

do {do {

Testar se num é primo;Testar se num é primo;

if (num é primo) {if (num é primo) {

write (num); cont++;write (num); cont++;

}}

num++;num++;

} while (cont < n);} while (cont < n);

}}

}}

Faltam detalhes

int n, num, cont;Declarações

Page 32: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

N_PrimeirosNúmerosPrimos {N_PrimeirosNúmerosPrimos {

int n, num, cont, div, resto; logic achou;int n, num, cont, div, resto; logic achou;

write (“Relacao dos n primeiros numeros primos”);write (“Relacao dos n primeiros numeros primos”);

write (“Digite o valor de n:”); read (n);write (“Digite o valor de n:”); read (n);

if (n <= 0) write (n, “ - valor improprio para n”);if (n <= 0) write (n, “ - valor improprio para n”);

else {else {

num = 2; cont = 0;num = 2; cont = 0;

do {do {

div = 2; achou = False;div = 2; achou = False;

while ((achou == False) && (divwhile ((achou == False) && (div22 <= num)) { <= num)) {

resto = num % div;resto = num % div;

if (resto == 0) achou = True;if (resto == 0) achou = True;

else div++;else div++;

}}

if (achou == False)if (achou == False)

{ write (num); cont++; }{ write (num); cont++; }

num++;num++;

} while (cont < n);} while (cont < n);

}}

}}

Obs.: todos os comandos resolvem problemas triviais e já podem ser traduzidos para a Linguagem C

Page 33: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

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

#include <stdlib.h>#include <stdlib.h>

/*/* Declaracao do tipo e das constantes logicas */Declaracao do tipo e das constantes logicas */

typedef char logic;typedef char logic;

const logic True = 1, False = 0;const logic True = 1, False = 0;

/*/* Cabecalho e declaracoes das variaveis locais */Cabecalho e declaracoes das variaveis locais */

int main () {int main () {

int n, num, cont, div, resto; logic achou; int n, num, cont, div, resto; logic achou;

Page 34: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

/*/* Escrita do titulo e leitura de n */Escrita do titulo e leitura de n */

printf ("Relacao dos n primeiros numeros primos");printf ("Relacao dos n primeiros numeros primos");

printf ("\n\n\tDigite o valor de n: "); scanf ("%d", printf ("\n\n\tDigite o valor de n: "); scanf ("%d", &n);&n);

printf ("\n"); printf ("\n");

/*/* Caso de valor improprio para n */Caso de valor improprio para n */

if (n <= 0) printf ("%d - valor improprio para n", n); if (n <= 0) printf ("%d - valor improprio para n", n);

/*/* Caso de valor correto para nCaso de valor correto para n

Procura dos n primeiros numeros primos */Procura dos n primeiros numeros primos */

else {else {

num = 2; cont = 0;num = 2; cont = 0;

do {do {

Page 35: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

/*/* Procura de divisor para um numero */Procura de divisor para um numero */

div = 2; achou = False;div = 2; achou = False;

while ((achou == False) && (div*div while ((achou == False) && (div*div <= num)) {<= num)) {

resto = num % div;resto = num % div;

if (resto == 0) achou = True;if (resto == 0) achou = True;

else div++;else div++;

}}

/*/* Escrita de cada numero primo encontrado;Escrita de cada numero primo encontrado;

10 numeros em cada linha10 numeros em cada linha */*/

if (achou == False) {if (achou == False) {

printf ("%5d", num); cont++;printf ("%5d", num); cont++;

if (cont % 10 == 0) printf ("\n");if (cont % 10 == 0) printf ("\n");

}}

Não será usado ‘for’, pois o último comando do ‘while’ é um ‘if’

Page 36: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

/*/* Preparando para testar o proximo numero,Preparando para testar o proximo numero,

ate que os n primeiros numeros primos sejam ate que os n primeiros numeros primos sejam encontrados */encontrados */

num++;num++;

} while (cont < n);} while (cont < n);

}}

/*/* Fechamento da tela de execucao */Fechamento da tela de execucao */

printf ("\n\n"); system ("pause"); return 0;printf ("\n\n"); system ("pause"); return 0;

}} Relacao dos n primeiros numeros primos

Digite o valor de n: 26

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101

Digite algo para encerrar:

Resultado para n = 26

Page 37: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

4.7.3 – Desenvolvimento de um 4.7.3 – Desenvolvimento de um algoritmo para encontrar os fatores algoritmo para encontrar os fatores primos de números lidosprimos de números lidos

Requisitos para o Requisitos para o

programa:programa:

Gerar relatórios do Gerar relatórios do

tipo:tipo:

FATORES PRIMOS DE NUMEROS INTEIROS

Fatorar numero? (s/n): s

Digite o numero: 504

Fatores primos de 504: 2^3 3^2 7^1

Fatorar numero? (s/n): s

Digite o numero: 348

Fatores primos de 348: 2^2 3^1 29^1

Fatorar numero? (s/n): s

Digite o numero: 750

Fatores primos de 750: 2^1 3^1 5^3

Fatorar numero? (s/n): n

Pressione qualquer tecla para continuar. . .

Page 38: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

Método: ilustrado com os fatores primos de Método: ilustrado com os fatores primos de 504, 348 e 750504, 348 e 750

504 2252 2

126 263 3

21 3

7 7

1

348 2174 2

87 329 29

1

750 2375 3

125 525 5

5 5

1

Encontrar o próximo primo como divisor é de programação trabalhosa

Mais fácil é testar divisores consecutivos a partir de 2

Page 39: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

Desenvolvimento do algoritmo por “top-Desenvolvimento do algoritmo por “top-down”:down”:

1ª Etapa:1ª Etapa:

FatoresPrimos {FatoresPrimos {

Escrever o título da tarefa;Escrever o título da tarefa;

Perguntar se quer fatorar número;Perguntar se quer fatorar número;

Aguardar a resposta; Aguardar a resposta;

Enquanto a resposta for sim {Enquanto a resposta for sim {

Perguntar qual o número;Perguntar qual o número;

Aguardar o número;Aguardar o número;

Fatorar o número e escrever seus fatores;Fatorar o número e escrever seus fatores;

Perguntar se quer fatorar outro número;Perguntar se quer fatorar outro número;

Aguardar a resposta; Aguardar a resposta;

}}

}}

Page 40: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

FatoresPrimos {FatoresPrimos {

Escrever o título da tarefa;Escrever o título da tarefa;

Perguntar se quer fatorar número;Perguntar se quer fatorar número;

Aguardar a resposta; Aguardar a resposta;

Enquanto a resposta for sim {Enquanto a resposta for sim {

Perguntar qual o número;Perguntar qual o número;

Aguardar o número;Aguardar o número;

Fatorar o número e escrever seus fatores;Fatorar o número e escrever seus fatores;

Perguntar se quer fatorar outro número;Perguntar se quer fatorar outro número;

Aguardar a resposta; Aguardar a resposta;

}}

}}

2ª Etapa

Page 41: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

FatoresPrimos {FatoresPrimos {

write (“FATORES PRIMOS DE NUMEROS write (“FATORES PRIMOS DE NUMEROS INTEIROS”);INTEIROS”);

write (“Fatorar numero? (s/n): ”);write (“Fatorar numero? (s/n): ”);

read (resposta); read (resposta);

Enquanto a resposta for sim {Enquanto a resposta for sim {

Perguntar qual o número;Perguntar qual o número;

Aguardar o número;Aguardar o número;

Fatorar o número e escrever seus fatores;Fatorar o número e escrever seus fatores;

Perguntar se quer fatorar outro número;Perguntar se quer fatorar outro número;

Aguardar a resposta; Aguardar a resposta;

}}

}}

2ª Etapa

char resposta;

Page 42: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

FatoresPrimos {FatoresPrimos {

write (“FATORES PRIMOS DE NUMEROS write (“FATORES PRIMOS DE NUMEROS INTEIROS”);INTEIROS”);

write (“Fatorar numero? (s/n): ”);write (“Fatorar numero? (s/n): ”);

read (resposta);read (resposta);

Enquanto a resposta for sim {Enquanto a resposta for sim {

Perguntar qual o número;Perguntar qual o número;

Aguardar o número;Aguardar o número;

Fatorar o número e escrever seus fatores;Fatorar o número e escrever seus fatores;

Perguntar se quer fatorar outro número;Perguntar se quer fatorar outro número;

Aguardar a resposta; Aguardar a resposta;

}}

}}

2ª Etapa

char resposta;

Page 43: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

FatoresPrimos {FatoresPrimos {

write (“FATORES PRIMOS DE NUMEROS write (“FATORES PRIMOS DE NUMEROS INTEIROS”);INTEIROS”);

write (“Fatorar numero? (s/n): ”);write (“Fatorar numero? (s/n): ”);

read (resposta);read (resposta);

while (resposta == ‘s’ || resposta == ‘S’) {while (resposta == ‘s’ || resposta == ‘S’) {

Perguntar qual o número;Perguntar qual o número;

Aguardar o número;Aguardar o número;

Fatorar o número e escrever seus fatores;Fatorar o número e escrever seus fatores;

Perguntar se quer fatorar outro número;Perguntar se quer fatorar outro número;

Aguardar a resposta; Aguardar a resposta;

}}

}}

2ª Etapa

char resposta;

Page 44: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

FatoresPrimos {FatoresPrimos {

write (“FATORES PRIMOS DE NUMEROS write (“FATORES PRIMOS DE NUMEROS INTEIROS”);INTEIROS”);

write (“Fatorar numero? (s/n): ”);write (“Fatorar numero? (s/n): ”);

read (resposta);read (resposta);

while (resposta == ‘s’ || resposta == ‘S’) {while (resposta == ‘s’ || resposta == ‘S’) {

Perguntar qual o número;Perguntar qual o número;

Aguardar o número;Aguardar o número;

Fatorar o número e escrever seus fatores;Fatorar o número e escrever seus fatores;

Perguntar se quer fatorar outro número;Perguntar se quer fatorar outro número;

Aguardar a resposta; Aguardar a resposta;

}}

}}

2ª Etapa

char resposta;

Page 45: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

FatoresPrimos {FatoresPrimos {

write (“FATORES PRIMOS DE NUMEROS write (“FATORES PRIMOS DE NUMEROS INTEIROS”);INTEIROS”);

write (“Fatorar numero? (s/n): ”);write (“Fatorar numero? (s/n): ”);

read (resposta);read (resposta);

while (resposta == ‘s’ || resposta == ‘S’) {while (resposta == ‘s’ || resposta == ‘S’) {

write (“Digite o numero:”);write (“Digite o numero:”);

read (num);read (num);

Fatorar o número e escrever seus fatores;Fatorar o número e escrever seus fatores;

write (“Fatorar numero? (s/n): ”);write (“Fatorar numero? (s/n): ”);

read (resposta); read (resposta);

}}

}}

2ª Etapa

char resposta;int num;

Page 46: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

FatoresPrimos {FatoresPrimos {

write (“FATORES PRIMOS DE NUMEROS write (“FATORES PRIMOS DE NUMEROS INTEIROS”);INTEIROS”);

write (“Fatorar numero? (s/n): ”);write (“Fatorar numero? (s/n): ”);

read (resposta);read (resposta);

while (resposta == ‘s’ || resposta == ‘S’) {while (resposta == ‘s’ || resposta == ‘S’) {

write (“Digite o numero:”);write (“Digite o numero:”);

read (num);read (num);

Fatorar o número e escrever seus fatores; Fatorar o número e escrever seus fatores;

write (“Fatorar numero? (s/n): ”);write (“Fatorar numero? (s/n): ”);

read (resposta); read (resposta);

}}

}}

2ª Etapa

char resposta;int num;

A ser desenvolvido na próxima etapa

Page 47: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

Desenvolvimento de Desenvolvimento de Fatorar num e escrever Fatorar num e escrever seus fatoresseus fatores::

504 504 % 2 = 02252 252 % 2 = 02

126 126 % 2 = 02

2 * 2 ≤ 504

63 63 % 2 ≠ 03 * 3 ≤ 63

63 % 3 = 03

21 21 % 3 = 03

7 4 * 4 > 77

1

3x

2x

1x

504 = 23 * 32 * 71

7 % 3 ≠ 0

3ª Etapa

Copiar ‘num’ numa variável ‘aux’

Dividir ‘aux’ pelos fatores encontrados

aux

Fatores devem ser procurados em[2, ]

Aqui, aux é primo

Page 48: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

Desenvolvimento de Desenvolvimento de Fatorar num e escrever Fatorar num e escrever seus fatoresseus fatores::

348 348 % 2 = 02174 174 % 2 = 02

87 3

2 * 2 ≤ 348

2987 % 2 ≠ 03 * 3 ≤

8787 % 3 = 0

29

14 * 4 ≤ 29

2x

1x1x

348 = 22 * 31 * 291

29 % 3 ≠ 029 % 4 ≠ 05 * 5 ≤ 29

29 % 5 ≠ 06 * 6 > 29

3ª Etapa

Aqui, aux é primo

aux

Page 49: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

Desenvolvimento de Desenvolvimento de Fatorar num e escrever Fatorar num e escrever seus fatoresseus fatores::

750 750 % 2 = 02375 375 % 2 ≠ 03

125

375 % 3 = 0

5

2 * 2 ≤ 750

25125 % 3 ≠ 0

3 * 3 ≤ 375 125 % 4 ≠ 0

5

5

125 % 5 = 0

5

1

4 * 4 ≤ 1253x

1x1x

750 = 21 * 31 * 53

25 % 5 = 0

5 * 5 ≤ 125

5 % 5 = 0

3ª Etapa

Aqui, aux não é primo

Terminada a procura de fatores em [2, ], se aux > 1, então aux é um fator de expoente 1

aux

Page 50: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

Desenvolvimento de Desenvolvimento de Fatorar num e escrever Fatorar num e escrever seus fatoresseus fatores::

write (“Fatores primos de ”, num, “:”);write (“Fatores primos de ”, num, “:”);

aux = num;aux = num;

Procurar fatores para aux no intervalo [2, Procurar fatores para aux no intervalo [2, ]]Atualizando o valor de aux, ou seja Atualizando o valor de aux, ou seja

Dividindo aux pelos fatores encontradosDividindo aux pelos fatores encontrados

Imprimindo cada fator ao lado de seu Imprimindo cada fator ao lado de seu expoenteexpoente

Testar se aux restante é um fator;Testar se aux restante é um fator;

3ª Etapa

char resposta;int num, aux;

Page 51: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

write (“Fatores primos de ”, num, “:”);write (“Fatores primos de ”, num, “:”);

aux = num;aux = num;

Procurar fatores para aux no intervalo [2, Procurar fatores para aux no intervalo [2, ]]Atualizando o valor de aux, ou seja Atualizando o valor de aux, ou seja

Dividindo aux pelos fatores encontradosDividindo aux pelos fatores encontrados

imprimindo cada fator ao lado de seu imprimindo cada fator ao lado de seu expoenteexpoente

Testar se aux restante é um fator;Testar se aux restante é um fator;

4ª Etapa

char resposta;int num, aux;

Page 52: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

write (“Fatores primos de ”, num, “:”);write (“Fatores primos de ”, num, “:”);

aux = num; aux = num;

fat = 2;fat = 2;

while (fatwhile (fat22 <= aux ) { <= aux ) {

Calcular expoente de fat e atualizar aux;Calcular expoente de fat e atualizar aux;

se expoente de fat > 0se expoente de fat > 0

Escrever fat ao lado do expoente;Escrever fat ao lado do expoente;

fat++;fat++;

}}

Testar se aux restante é um fator;Testar se aux restante é um fator;

4ª Etapa

char resposta;int num, aux, fat;

Page 53: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

write (“Fatores primos de ”, num, “:”);write (“Fatores primos de ”, num, “:”);

aux = num; aux = num;

fat = 2;fat = 2;

while (fatwhile (fat22 <= aux ) { <= aux ) {

Calcular expoente de fat e atualizar aux;Calcular expoente de fat e atualizar aux;

se expoente de fat > 0se expoente de fat > 0

Escrever fat ao lado do expoente;Escrever fat ao lado do expoente;

fat++;fat++;

}}

Testar se aux restante é um fator;Testar se aux restante é um fator;

4ª Etapa

char resposta;int num, aux, fat;

Page 54: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

write (“Fatores primos de ”, num, “:”);write (“Fatores primos de ”, num, “:”);

aux = num; aux = num;

fat = 2;fat = 2;

while (fatwhile (fat22 <= aux ) { <= aux ) {

Calcular expoente de fat e atualizar aux;Calcular expoente de fat e atualizar aux;

se expoente de fat > 0se expoente de fat > 0

Escrever fat ao lado do expoente;Escrever fat ao lado do expoente;

fat++;fat++;

}}

if (aux > 1 || num == 1)if (aux > 1 || num == 1)

write (aux, “^1”);write (aux, “^1”);

4ª Etapa

char resposta;int num, aux, fat;

Page 55: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

write (“Fatores primos de ”, num, “:”);write (“Fatores primos de ”, num, “:”);

aux = num; aux = num;

fat = 2;fat = 2;

while (fatwhile (fat22 <= aux ) { <= aux ) {

Calcular expoente de fat e atualizar aux;Calcular expoente de fat e atualizar aux;

se expoente de fat > 0se expoente de fat > 0

Escrever fat ao lado do expoente;Escrever fat ao lado do expoente;

fat++;fat++;

}}

if (aux > 1 || num == 1)if (aux > 1 || num == 1)

write (aux, “^1”);write (aux, “^1”);

5ª Etapa

char resposta;int num, aux, fat;

Page 56: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

fat = 2;fat = 2;

while (fatwhile (fat22 <= aux ) { <= aux ) {

Calcular expoente de fat e atualizar aux;Calcular expoente de fat e atualizar aux;

se expoente de fat > 0se expoente de fat > 0

Escrever fat ao lado do expoente;Escrever fat ao lado do expoente;

fat++;fat++;

}}

5ª Etapa

char resposta;int num, aux, fat;

Page 57: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

fat = 2;fat = 2;

while (fatwhile (fat22 <= aux ) { <= aux ) {

expo = 0;expo = 0;

while (aux % fat == 0) {while (aux % fat == 0) {

expo++;expo++;

aux /= fat;aux /= fat;

}}

if (expo > 0)if (expo > 0)

write (fat, “^”, expo);write (fat, “^”, expo);

fat++;fat++;

}}

5ª Etapa

char resposta;int num, aux, fat, expo;

Page 58: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

FatoresPrimos {FatoresPrimos {

char resposta; int num, aux, fat, expo; char resposta; int num, aux, fat, expo;

write (“FATORES PRIMOS DE NUMEROS INTEIROS”);write (“FATORES PRIMOS DE NUMEROS INTEIROS”);

write (“Fatorar numero? (s/n): ”); read (resposta);write (“Fatorar numero? (s/n): ”); read (resposta);

while (resposta == ‘s’ || resposta == ‘S’) {while (resposta == ‘s’ || resposta == ‘S’) {

write (“Digite o numero:”); read (num);write (“Digite o numero:”); read (num);

write (“Fatores primos de ”, num, “:”);write (“Fatores primos de ”, num, “:”);

aux = num; fat = 2;aux = num; fat = 2;

while (fat*fat <= aux ) {while (fat*fat <= aux ) {

expo = 0;expo = 0;

while (aux % fat == 0) {while (aux % fat == 0) {

expo++; aux /= fat;expo++; aux /= fat;

}}

if (expo > 0) write (fat, “^”, expo);if (expo > 0) write (fat, “^”, expo);

fat++;fat++;

}}

if (aux > 1 || num == 1) write (aux, “^1”); if (aux > 1 || num == 1) write (aux, “^1”);

write (“Fatorar numero? (s/n): ”); read (resposta); write (“Fatorar numero? (s/n): ”); read (resposta);

}}

}}

Algoritmo final

Page 59: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

FatoresPrimos {FatoresPrimos {

char resposta; int num, aux, fat, expo; char resposta; int num, aux, fat, expo;

write (“FATORES PRIMOS DE NUMEROS INTEIROS”);write (“FATORES PRIMOS DE NUMEROS INTEIROS”);

write (“Fatorar numero? (s/n): ”); read (resposta);write (“Fatorar numero? (s/n): ”); read (resposta);

while (resposta == ‘s’ || resposta == ‘S’) {while (resposta == ‘s’ || resposta == ‘S’) {

write (“Digite o numero:”); read (num);write (“Digite o numero:”); read (num);

write (“Fatores primos de ”, num, “:”);write (“Fatores primos de ”, num, “:”);

aux = num; aux = num;

for (fat = 2; fat*fat <= aux; fat++ ) {for (fat = 2; fat*fat <= aux; fat++ ) {

for (expo = 0; aux % fat == 0; expo++, aux /= for (expo = 0; aux % fat == 0; expo++, aux /= fat);fat);

if (expo > 0) write (fat, “^”, expo);if (expo > 0) write (fat, “^”, expo);

}}

if (aux > 1 || num == 1) write (aux, “^1”); if (aux > 1 || num == 1) write (aux, “^1”);

write (“Fatorar numero? (s/n): ”); read (resposta); write (“Fatorar numero? (s/n): ”); read (resposta);

}}

}}

Algoritmo final, usando comandos for

Page 60: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

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

/*/* Cabecalho e declaracoesCabecalho e declaracoes */*/

int main () {int main () {char resposta, lixo; int num, aux, fat, expo;char resposta, lixo; int num, aux, fat, expo;

/*/* Escrita do titulo da tarefa e oferecimento de servico ao Escrita do titulo da tarefa e oferecimento de servico ao operadoroperador */*/

printf ("FATORES PRIMOS DE NUMEROS INTEIROS");printf ("FATORES PRIMOS DE NUMEROS INTEIROS");printf ("\n\nFatorar numero? (s/n): "); scanf ("%c", printf ("\n\nFatorar numero? (s/n): "); scanf ("%c", &resposta);&resposta);while (resposta == 's' || resposta == 'S') {while (resposta == 's' || resposta == 'S') {

/*/* Solicitacao do numero a fatorar */Solicitacao do numero a fatorar */

printf ("\n\tDigite o numero: "); scanf ("%d%c", &num, printf ("\n\tDigite o numero: "); scanf ("%d%c", &num, &lixo);&lixo);printf ("\n\tFatores primos de %d: ", num);printf ("\n\tFatores primos de %d: ", num);

Programa em C

Page 61: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

/*/* Pesquisa por fatores primos no intervalo [2, sqrt(aux)]Pesquisa por fatores primos no intervalo [2, sqrt(aux)]*/*/

aux = num;aux = num;

for (fat = 2; fat*fat <= aux; fat++) {for (fat = 2; fat*fat <= aux; fat++) {

/*/* Calculo do expoente de um fatorCalculo do expoente de um fator */*/

for (expo = 0; aux % fat == 0; expo++, for (expo = 0; aux % fat == 0; expo++, aux /= fat);aux /= fat);

/*/* Escrita de um fator ao lado de seu expoenteEscrita de um fator ao lado de seu expoente */*/

if (expo > 0) printf ("%d^%d ", fat, expo);if (expo > 0) printf ("%d^%d ", fat, expo);

}}

Page 62: Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos

/*/* Testando se o ultimo aux eh fator primoTestando se o ultimo aux eh fator primo */*/

if (aux > 1 || num == 1) printf ("%d^1", aux);if (aux > 1 || num == 1) printf ("%d^1", aux);

/*/* Novo oferecimento de servico ao operadorNovo oferecimento de servico ao operador */*/

printf ("\n\nFatorar numero? (s/n): "); scanf printf ("\n\nFatorar numero? (s/n): "); scanf ("%c", &resposta);("%c", &resposta);

}}

/*/* Fechamento da tela */Fechamento da tela */

printf ("\n\n"); system ("pause"); return 0;printf ("\n\n"); system ("pause"); return 0;

}}