case

Propaganda
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.5 – Comandos de escape
4.6 – Comandos de seleção
4.7 – Introdução à metodologia top-down
expressão
e os valores
4.6 – Comandos Ade
Seleção
Escolher um de vários
caminhos alternativos,
conforme o valor da
4.6.1
– Importante estrutura
expressão
V11, V12, ... , Vnp são inteiros
ou caracteres
algoritmica
Expressão
Lista de
comandos
Lista de
comandos
Lista de
comandos
Lista de
comandos
Em C
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;
}
switch (Expressao) {
Em C
case V11: case V12: ... case V1i:
Lista de comandos; break;
case V21: case V22: ... case V2j:
O comando break é
Lista de comandos; break;
necessário para que
.
somente uma lista de
.
comandos seja executada
case Vn1: case Vn2: ... case Vnp:
Lista de comandos; break;
default:
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;
Obs.: o ramo default
é opcional
}
#include <stdio.h>
Resultado para n = 5
#include <conio.h>
Tudo coopera
para seu seja
sucesso
Exemplo:
o
void main ( ) {
seguinte programa
char c; int n;
printf ("Levantar o astral? (s/n): "); c = getche();
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 ();
}
}
#include <stdio.h>
Resultado para n = 5
#include <conio.h>
TudoRetirando-se
coopera para seu sucesso
os
void main ( ) {
A vida sorri para voce
break
Nadacomandos
pode impedir sua
vitoria
char c; int n;
printf ("Levantar o astral? (s/n): "); c = getche(); O numero deve ser de 1 a 7
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");
case 2: printf ("\n\tVoce eh campeao");
case 3: printf ("\n\tVoce estah com tudo");
case 4: printf ("\n\tSeu destino eh vencer");
case 5: printf ("\n\tTudo coopera para seu sucesso");
case 6: printf ("\n\tA vida sorri para voce");
case 7: printf ("\n\tNada pode impedir sua vitoria");
default: printf ("\n\tO numero deve ser de 1 a 7");
}
printf ("\n\nLevantar o astral? (s/n): "); c = getche ();
}
}
Fluxograma do switch sem usar break:
Expressão
Lista de
comandos
Lista de
comandos
Lista de
comandos
Lista de
comandos
Exemplo: programa para contar diversos tipos de
caracteres

Digitar uma frase, guardando-a no buffer do teclado

Ler cada caractere da frase, classificando-o

Acrescentar 1 ao contador da classe do caractere

No final, escrever no vídeo o valor do contador de cada
classe
Classes:
1) A ou a
3) I ou i
5) U ou u
7) Y ou y
9) Dígitos decimais
2) E ou e
4) O ou o
6) W ou w
8) Consoantes
10) Outros caracteres
#include <stdio.h>
#include <stdlib.h>
/* Cabecalho e declaracoes */
int main ( ) {
char c;
int ct_a, ct_e, ct_i, ct_o, ct_u, ct_w, ct_y,
ct_cons, ct_dig, ct_outros;
/* Zerar todos os contadores */
ct_a = ct_e = ct_i = ct_o = ct_u = ct_w =
ct_y = ct_cons = ct_dig = ct_outros = 0;
/* Ler e classificar cada caractere */
printf ("Digite uma frase:\n\n\t"); scanf ("%c", &c);
while (c != '\n') {
switch (c) {
case 'a': case 'A': ct_a++; break;
case 'e': case 'E': ct_e++; break;
case 'i': case 'I': ct_i++; break;
case 'o': case 'O': ct_o++; break;
case 'u': case 'U': ct_u++; break;
case 'w': case 'W': ct_w++; break;
case 'y': case 'Y': ct_y++; break;
default:
if (c >= '0' && c <= '9') ct_dig++;
else if (c >= 'B' && c <= 'Z' || c >= 'b' && c <= 'z')
ct_cons++;
else ct_outros++;
}
scanf ("%c", &c);
}
/* Imprimir os contadores e fechar a tela*/
printf ("\nLetra A : %3d\nLetra E : %3d", ct_a, ct_e);
printf ("\nLetra I : %3d\nLetra O : %3d", ct_i, ct_o);
printf ("\nLetra U : %3d\nLetra W : %3d", ct_u, ct_w);
printf ("\nLetra Y : %3d\nConsoantes: %3d", ct_y, ct_cons);
printf ("\nDigitos : %3d\nOutros : %3d", ct_dig, ct_outros);
printf ("\n\n"); system ("pause"); return 0;
}
Resultado
Digite uma frase:
hberoçh
Letra A
:
Letra E
:
Letra I
:
Letra O
:
Letra U
:
Letra W
:
Letra Y
:
Consoantes:
Digitos
:
Outros
:
1
1
0
2
3
0
3
11
5
14
Pressione . . .
9g59y9
)_Y(HHU
3@$%UDFUYapok
Exercícios 4.6:
1. Dizer que características uma frase digitada deve ter para que
o programa do próximo slide a considere correta
#include <stdio.h>
#include <stdlib.h>
int main ( ) {
char c, erro; int c1, c2, c3, c4, c5, c6;
c1 = c2 = c3 = c4 = c5 = c6 = 0; erro = 0; printf ("Digite uma frase: ");
do {
scanf ("%c", &c);
if (c != '\n') {
switch (c) {
case ' ( ' : c1++; break ;
case ' ) ' : c2++; break ;
case ' [ ' : c3++; break ;
case ' ] ' : c4++; break ;
case ' { ' : c5++; break ;
case ' } ' : c6++; break ;
}
if (c2 > c1 | | c4 > c3 | | c6 > c5) erro = 1;
}
} while (c ! = ' \n ' && erro == 0);
if (erro == 0 && c1 == c2 && c3 == c4 && c5 == c6) printf ("Frase correta");
else printf ("Frase com erros");
printf ("\n\n"); system ("pause"); return 0;
}
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.5 – Comandos de escape
4.6 – Comandos de seleção
4.7 – Introdução à metodologia top-down
4.7 – Introdução à Metodologia Topdown
4.7.1 – Conceito

É a decomposição de uma grande tarefa numa coleção de
tarefas menores interligadas

Cada uma dessas tarefas menores pode ser decomposta da
mesma forma

No final, chega-se a uma coleção de tarefas triviais
interligadas

Cada uma delas poderá ser resolvida por um comando típico
dos algoritmos
4.7.2 – Desenvolvimento de um algoritmo para
encontrar os n primeiros números naturais primos
Método:

Por definição, 1 não é primo

Percorrer o campo dos naturais, do no 2 em diante, até
encontrar n números primos
4.7.2 – Desenvolvimento de um algoritmo para
encontrar os n primeiros números naturais primos
Método:

Para ver se um número num é primo:
A
0 1 2 3
B
num tem divisor na
região B se e somente
se tem divisor na
região A
num/2
num
Então basta procurar
divisores para num na
região A
Desenvolvimento do algoritmo por “top-down”:
1ª Etapa:
N_PrimeirosNúmerosPrimos {
Declarações
Escrever o título da tarefa;
int n;
Pedir e ler o valor de n;
Se (n <= 0) Escrever mensagem de erro;
Senão
Encontrar e Escrever os n 1os números primos;
}
N_PrimeirosNúmerosPrimos {
Escrever o título da tarefa;
Pedir e ler o valor de n;
Se (n <= 0) Escrever mensagem de erro;
Senão
Encontrar e Escrever os n 1os números primos;
}
2ª Etapa
Declarações
int n;
N_PrimeirosNúmerosPrimos {
write (“Relacao dos n primeiros numeros primos”);
write (“Digite o valor de n:”); read (n);
Se (n <= 0) Escrever mensagem de erro;
Senão
Encontrar e Escrever os n 1os números primos;
}
2ª Etapa
Declarações
int n;
N_PrimeirosNúmerosPrimos {
write (“Relacao dos n primeiros numeros primos”);
write (“Digite o valor de n:”); read (n);
Se (n <= 0) Escrever mensagem de erro;
Senão
Encontrar e Escrever os n 1os números primos;
}
2ª Etapa
Declarações
int n;
N_PrimeirosNúmerosPrimos {
write (“Relacao dos n primeiros numeros primos”);
write (“Digite o valor de n:”); read (n);
if (n <= 0) write (n, “ - valor improprio para n”);
else
Encontrar e Escrever os n 1os números primos;
}
2ª Etapa
Declarações
int n;
N_PrimeirosNúmerosPrimos {
write (“Relacao dos n primeiros numeros primos”);
write (“Digite o valor de n:”); read (n);
if (n <= 0) write (n, “ - valor improprio para n”);
else
Encontrar e Escrever os n 1os números primos;
}
2ª Etapa
Declarações
int n;
N_PrimeirosNúmerosPrimos {
2ª Etapa
write (“Relacao dos n primeiros numeros primos”);
write (“Digite o valor de n:”); read (n);
if (n <= 0) write (n, “ - valor improprio para n”);
else {
num: número a ser
num = 2; cont = 0;
testado
do {
cont: contador de
Testar se num é primo;
números primos
if (num é primo) {
encontrados
write (num); cont++;
Faltam detalhes
}
num++;
Declarações
} while (cont < n);
int n, num, cont;
}
}
Desenvolvimento de:
3ª Etapa
Testar se num é primo;
if (num é primo)
Procurar divisor para num, no intervalo [ 2, 
if (não encontrar divisor para num)
 ];
Desenvolvimento de:
4ª Etapa
Procurar divisor para num, no intervalo [ 2, 
if (não encontrar divisor para num)
div = 2;
while ((não encontrar divisor) && (div2 <= num)) {
Testar div;
if (div é divisor de num)
Encontrou divisor;
Declarações
else div++;
int n, num, cont, div;
}
if (não encontrar divisor para num)
 ];
div = 2;
while ((não encontrar divisor) && (div2 <= num)) {
Testar div;
5ª e última
if (div é divisor de num)
Etapa
Encontrou divisor;
else div++;
}
if (não encontrar divisor para num)
Declarações
int n, num, cont, div;
div = 2; achou = False;
while ((achou == False) && (div2 <= num)) {
Testar div;
5ª e última
if (div é divisor de num)
Etapa
Encontrou divisor;
else div++;
}
if (achou == False)
Declarações
int n, num, cont, div;
logic achou;
div = 2; achou = False;
while ((achou == False) && (div2 <= num)) {
Testar div;
5ª e última
if (div é divisor de num)
Etapa
Encontrou divisor;
else div++;
}
if (achou == False)
Declarações
int n, num, cont, div;
logic achou;
div = 2; achou = False;
while ((achou == False) && (div2 <= num)) {
resto = num % div;
5ª e última
if (resto == 0)
Etapa
achou = True;
else div++;
}
if (achou == False)
Copia-se este trecho no
resultado da 2ª Etapa
Declarações
int n, num, cont, div, resto;
logic achou;
N_PrimeirosNúmerosPrimos {
write (“Relacao dos n primeiros numeros primos”);
write (“Digite o valor de n:”); read (n);
if (n <= 0) write (n, “ - valor improprio para n”);
else {
num = 2; cont = 0;
do {
Testar se num é primo;
if (num é primo) {
write (num); cont++;
Faltam detalhes
}
num++;
Declarações
} while (cont < n);
int n, num, cont;
}
}
N_PrimeirosNúmerosPrimos {
int n, num, cont, div, resto; logic achou;
write (“Relacao dos n primeiros numeros primos”);
write (“Digite o valor de n:”); read (n);
if (n <= 0) write (n, “ - valor improprio para n”);
else {
num = 2; cont = 0;
do {
div = 2; achou = False;
while ((achou == False) && (div2 <= num)) {
resto = num % div;
if (resto == 0) achou = True;
else div++;
}
Obs.: todos os comandos
if (achou == False)
resolvem problemas triviais
{ write (num); cont++; }
e já podem ser traduzidos
num++;
para a Linguagem C
} while (cont < n);
}
}
#include <stdio.h>
#include <stdlib.h>
/*Declaracao do tipo e das constantes logicas */
typedef char logic;
const logic True = 1, False = 0;
/*Cabecalho e declaracoes das variaveis locais */
int main () {
int n, num, cont, div, resto; logic achou;
/*Escrita do titulo e leitura de n */
printf ("Relacao dos n primeiros numeros primos");
printf ("\n\n\tDigite o valor de n: "); scanf ("%d", &n);
printf ("\n");
/*Caso de valor improprio para n */
if (n <= 0) printf ("%d - valor improprio para n", n);
/*Caso de valor correto para n
Procura dos n primeiros numeros primos */
else {
num = 2; cont = 0;
do {
/*Procura de divisor para um numero */
div = 2; achou = False;
while ((achou == False) && (div*div <= num)) {
resto = num % div;
if (resto == 0) achou = True;
else div++;
Não será usado
}
‘for’, pois o último
/*Escrita de cada numero primo encontrado;
10 numeros em cada linha
*/
comando do
‘while’ é um ‘if ’
if (achou == False) {
printf ("%5d", num); cont++;
if (cont % 10 == 0) printf ("\n");
}
/*Preparando para testar o proximo numero,
ate que os n primeiros numeros primos sejam encontrados */
num++;
} while (cont < n);
}
/*Fechamento da tela de execucao */
printf ("\n\n"); system ("pause"); return 0;
}
Relacao dos n primeiros numeros primos
Digite o valor de n: 26
Resultado
para n = 26
2
31
73
3
37
79
5
41
83
7
43
89
11
47
97
Digite algo para encerrar:
13
53
101
17
59
19
61
23
67
29
71
4.7.3 – Desenvolvimento de um algoritmo para
encontrar os fatores primos de números lidos
Requisitos para o
programa:
FATORES PRIMOS DE NUMEROS INTEIROS
Fatorar numero? (s/n): s
Digite o numero: 504
Fatores primos de 504:

Gerar relatórios do
tipo:
2^3
3^2
7^1
2^2
3^1
29^1
2^1
3^1
5^3
Fatorar numero? (s/n): s
Digite o numero: 348
Fatores primos de 348:
Fatorar numero? (s/n): s
Digite o numero: 750
Fatores primos de 750:
Fatorar numero? (s/n): n
Pressione qualquer tecla para continuar. . .
Método: ilustrado com os fatores primos de 504, 348 e 750
504
252
2
2
348
174
2
2
750
375
2
3
126
63
2
3
87
29
3
29
125
25
5
5
21
3
1
5
5
7
7
1
1
Encontrar o próximo primo como divisor é de programação
trabalhosa
Mais fácil é testar divisores consecutivos a partir de 2
Desenvolvimento do algoritmo por “top-down”:
1ª Etapa:
FatoresPrimos {
Escrever o título da tarefa;
Perguntar se quer fatorar número;
Aguardar a resposta;
Enquanto a resposta for sim {
Perguntar qual o número;
Aguardar o número;
Fatorar o número e escrever seus fatores;
Perguntar se quer fatorar outro número;
Aguardar a resposta;
}
}
FatoresPrimos {
Escrever o título da tarefa;
Perguntar se quer fatorar número;
Aguardar a resposta;
Enquanto a resposta for sim {
Perguntar qual o número;
Aguardar o número;
Fatorar o número e escrever seus fatores;
Perguntar se quer fatorar outro número;
Aguardar a resposta;
}
}
2ª Etapa
FatoresPrimos {
write (“FATORES PRIMOS DE NUMEROS INTEIROS”);
write (“Fatorar numero? (s/n): ”);
read (resposta);
2ª Etapa
Enquanto a resposta for sim {
Perguntar qual o número;
Aguardar o número;
Fatorar o número e escrever seus fatores;
Perguntar se quer fatorar outro número;
Aguardar a resposta;
}
}
char resposta;
FatoresPrimos {
write (“FATORES PRIMOS DE NUMEROS INTEIROS”);
write (“Fatorar numero? (s/n): ”);
read (resposta);
2ª Etapa
Enquanto a resposta for sim {
Perguntar qual o número;
Aguardar o número;
Fatorar o número e escrever seus fatores;
Perguntar se quer fatorar outro número;
Aguardar a resposta;
}
}
char resposta;
FatoresPrimos {
write (“FATORES PRIMOS DE NUMEROS INTEIROS”);
write (“Fatorar numero? (s/n): ”);
read (resposta);
2ª Etapa
while (resposta == ‘s’ || resposta == ‘S’) {
Perguntar qual o número;
Aguardar o número;
Fatorar o número e escrever seus fatores;
Perguntar se quer fatorar outro número;
Aguardar a resposta;
}
}
char resposta;
FatoresPrimos {
write (“FATORES PRIMOS DE NUMEROS INTEIROS”);
write (“Fatorar numero? (s/n): ”);
read (resposta);
2ª Etapa
while (resposta == ‘s’ || resposta == ‘S’) {
Perguntar qual o número;
Aguardar o número;
Fatorar o número e escrever seus fatores;
Perguntar se quer fatorar outro número;
Aguardar a resposta;
}
}
char resposta;
FatoresPrimos {
write (“FATORES PRIMOS DE NUMEROS INTEIROS”);
write (“Fatorar numero? (s/n): ”);
read (resposta);
2ª Etapa
while (resposta == ‘s’ || resposta == ‘S’) {
write (“Digite o numero:”);
read (num);
Fatorar o número e escrever seus fatores;
write (“Fatorar numero? (s/n): ”);
read (resposta);
}
}
char resposta;
int num;
FatoresPrimos {
write (“FATORES PRIMOS DE NUMEROS INTEIROS”);
write (“Fatorar numero? (s/n): ”);
read (resposta);
2ª Etapa
while (resposta == ‘s’ || resposta == ‘S’) {
write (“Digite o numero:”);
read (num);
Fatorar o número e escrever seus fatores;
write (“Fatorar numero? (s/n): ”);
A ser desenvolvido
read (resposta);
na próxima etapa
}
}
char resposta;
int num;
Desenvolvimento de Fatorar num e escrever seus fatores:
504
252
2
2
126
aux 63
2
3
21
3
7
7
2 * 2 ≤ 504
3x
504 % 2 = 0
252 % 2 = 0
126 % 2 = 0
2x
3 * 3 ≤ 63
63 % 32 =
≠0
21 % 3 = 0
1x
4*4 > 7
7%3≠0
1
Aqui, aux
Fatores
devem
é primo
ser
procurados em
[2, 
]
3ª Etapa
504 = 23 * 32 * 71
Copiar ‘num’ numa
variável ‘aux’
Dividir ‘aux’ pelos
fatores encontrados
Desenvolvimento de Fatorar num e escrever seus fatores:
aux
348
174
2
2
2x
2 * 2 ≤ 348
348 % 2 = 0
174 % 2 = 0
87
29
3
29
1x
1x
3 * 3 ≤ 87
87 % 32 =
≠0
654 * 654 >
≤ 29
29 % 543 ≠ 0
1
Aqui, aux é primo
3ª Etapa
348 = 22 * 31 * 291
Desenvolvimento de Fatorar num e escrever seus fatores:
750
375
2
3
125
aux 25
5
5
5
5
1x
1x
2 * 2 ≤ 750
3 * 3 ≤ 375
750 % 2 = 0
375 % 32 =
≠0
54 * 54 ≤ 125
125 % 543 =
≠0
3x
25 % 5 = 0
5%5=0
1
Aqui, aux não é
primo
3ª Etapa
750 = 21 * 31 * 53
Terminada a
procura de fatores
em [2, 
 ],
se aux > 1, então
aux é um fator de
expoente 1
Desenvolvimento de Fatorar num e escrever seus fatores:
write (“Fatores primos de ”, num, “:”);
aux = num;
Procurar fatores para aux no intervalo [2, 
]
Atualizando o valor de aux, ou seja
Dividindo aux pelos fatores encontrados
Imprimindo cada fator ao lado de seu expoente
Testar se aux restante é um fator;
char resposta;
int num, aux;
3ª Etapa
write (“Fatores primos de ”, num, “:”);
aux = num;
Procurar fatores para aux no intervalo [2, 
]
Atualizando o valor de aux, ou seja
Dividindo aux pelos fatores encontrados
imprimindo cada fator ao lado de seu expoente
Testar se aux restante é um fator;
char resposta;
int num, aux;
4ª Etapa
write (“Fatores primos de ”, num, “:”);
aux = num;
fat = 2;
while (fat2 <= aux ) {
Calcular expoente de fat e atualizar aux;
se expoente de fat > 0
Escrever fat ao lado do expoente;
fat++;
}
Testar se aux restante é um fator;
char resposta;
int num, aux, fat;
4ª Etapa
write (“Fatores primos de ”, num, “:”);
aux = num;
fat = 2;
while (fat2 <= aux ) {
Calcular expoente de fat e atualizar aux;
se expoente de fat > 0
Escrever fat ao lado do expoente;
fat++;
}
Testar se aux restante é um fator;
char resposta;
int num, aux, fat;
4ª Etapa
write (“Fatores primos de ”, num, “:”);
aux = num;
fat = 2;
while (fat2 <= aux ) {
Calcular expoente de fat e atualizar aux;
se expoente de fat > 0
Escrever fat ao lado do expoente;
fat++;
}
if (aux > 1 || num == 1)
char resposta;
write (aux, “^1”);
int num, aux, fat;
4ª Etapa
write (“Fatores primos de ”, num, “:”);
5ª Etapa
aux = num;
fat = 2;
while (fat2 <= aux ) {
Calcular expoente de fat e atualizar aux;
se expoente de fat > 0
Escrever fat ao lado do expoente;
fat++;
}
if (aux > 1 || num == 1)
char resposta;
write (aux, “^1”);
int num, aux, fat;
fat = 2;
while (fat2 <= aux ) {
Calcular expoente de fat e atualizar aux;
se expoente de fat > 0
Escrever fat ao lado do expoente;
fat++;
}
5ª Etapa
char resposta;
int num, aux, fat;
fat = 2;
while (fat2 <= aux ) {
expo = 0;
while (aux % fat == 0) {
expo++;
aux /= fat;
}
if (expo > 0)
write (fat, “^”, expo);
fat++;
}
5ª Etapa
char resposta;
int num, aux, fat, expo;
FatoresPrimos {
char resposta; int num, aux, fat, expo;
write (“FATORES PRIMOS DE NUMEROS INTEIROS”);
write (“Fatorar numero? (s/n): ”); read (resposta);
while (resposta == ‘s’ || resposta == ‘S’) {
write (“Digite o numero:”); read (num);
write (“Fatores primos de ”, num, “:”);
aux = num; fat = 2;
while (fat*fat <= aux ) {
expo = 0;
while (aux % fat == 0) {
expo++; aux /= fat;
}
if (expo > 0) write (fat, “^”, expo);
fat++;
}
if (aux > 1 || num == 1) write (aux, “^1”);
write (“Fatorar numero? (s/n): ”); read (resposta);
}
}
Algoritmo
final
FatoresPrimos {
char resposta; int num, aux, fat, expo;
write (“FATORES PRIMOS DE NUMEROS INTEIROS”);
write (“Fatorar numero? (s/n): ”); read (resposta);
while (resposta == ‘s’ || resposta == ‘S’) {
Algoritmo
write (“Digite o numero:”); read (num);
final, usando
write (“Fatores primos de ”, num, “:”);
comandos for
aux = num;
for (fat = 2; fat*fat <= aux; fat++ ) {
for (expo = 0; aux % fat == 0; expo++, aux /= fat);
if (expo > 0) write (fat, “^”, expo);
}
if (aux > 1 || num == 1) write (aux, “^1”);
write (“Fatorar numero? (s/n): ”); read (resposta);
}
}
#include <stdio.h>
#include <stdlib.h>
/* Cabecalho e declaracoes
Programa
em C
*/
int main () {
char resposta, lixo; int num, aux, fat, expo;
/* Escrita do titulo da tarefa e oferecimento de servico ao operador
printf ("FATORES PRIMOS DE NUMEROS INTEIROS");
printf ("\n\nFatorar numero? (s/n): "); scanf ("%c", &resposta);
while (resposta == 's' || resposta == 'S') {
/* Solicitacao do numero a fatorar
*/
printf ("\n\tDigite o numero: "); scanf ("%d%c", &num, &lixo);
printf ("\n\tFatores primos de %d: ", num);
*/
/* Pesquisa por fatores primos no intervalo [2, sqrt(aux)]
*/
aux = num;
for (fat = 2; fat*fat <= aux; fat++) {
/* Calculo do expoente de um fator
*/
for (expo = 0; aux % fat == 0; expo++, aux /= fat);
/* Escrita de um fator ao lado de seu expoente
*/
if (expo > 0) printf ("%d^%d ", fat, expo);
}
/* Testando se o ultimo aux eh fator primo
*/
if (aux > 1 || num == 1) printf ("%d^1", aux);
/* Novo oferecimento de servico ao operador
*/
printf ("\n\nFatorar numero? (s/n): "); scanf ("%c", &resposta);
}
/* Fechamento da tela */
printf ("\n\n"); system ("pause"); return 0;
}
Download