/* Programa: primeiros_primos */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n, valor, divisor;
printf("\nPrimos ate': ");
scanf("%d", &n);
/* E' escusado testar o 2, que sabemos ser primo... */
printf("2\n");
for(valor = 3; valor <= n; valor++)
{
divisor = 2;
while(divisor < valor && valor % divisor != 0)
divisor = divisor + 1;
if(divisor == valor)
printf("%d\n", valor);
}
return EXIT_SUCCESS;
}
/* Maximo divisor comum (algoritmo de Euclides): */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a, b, temp;
printf("\nMdc de: ");
scanf("%d%d", &a, &b);
do
{
temp = b;
b = a % b;
a = temp;
}
while(b != 0);
printf("%d\n", a);
return EXIT_SUCCESS;
}
Ver solução da Alínea 1.a)!
Embora o enunciado não o peça, a ordenação dos valores será feita dentro da própria matriz.
Assim, o algoritmo de ordenação de uma matriz com n elementos é, de acordo com as sugestões feitas:
i da matriz excepto o
último (porquê?), isto é, para i de 0 a n-2:
i e o final da
matriz (índice n-1). Guardar o seu
valor numa variável minimo e a sua
posição (índice) na variável k
(algoritmo já bem conhecido...). i
e k, se necessário. Ou seja:
OrdenaPorSeleccao
inicio
inteiro valores[10], n, i, j, k, minimo;
n <- 10; (* para evitar explicitar os valores nos ciclos. *)
(* Ler valores: *)
escrever linha, "Introduza 10 valores: ";
para i <- 0, n-1:
ler para valores[i];
fim para;
(* Ordenar a matriz: *)
(* Para cada elemento i desde 0 a n-2: *)
para i <- 0, n-2:
(* Procurar o elemento com o valor mi'nimo entre i e n-1: *)
minimo <- valores[i];
k <- i;
para j <- i + 1, n-1:
se valores[j] < minimo:
minimo <- valores[j];
k <- j;
fim se;
fim para;
(* Trocar elemento i com elemento k (se forem diferentes!): *)
se i <> k:
valores[k] <- valores[i];
valores[i] <- minimo;
fim se;
fim para;
(* Escrever os valores da matriz: *)
para i <- 0, n-1:
escrever valores[i], " ";
fim para;
escrever linha;
fim.
Traduzindo para C:
/* Ordena matriz por seleccao: */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int valores[10], n, i, j, k, minimo;
n = 10; /* para evitar explicitar os valores nos ciclos. */
/* Ler valores: */
printf("\nIntroduza 10 valores: ");
for(i = 0; i < n; i++)
scanf("%d", &valores[i]);
/* Ordenar a matriz: */
/* Para cada elemento i desde 0 a n-2: */
for(i = 0; i < n - 1; i++)
{
/* Procurar o elemento com o valor mínimo entre i e n-1: */
minimo = valores[i];
k = i;
for(j = i + 1; j < n; j++)
if(valores[j] < minimo)
{
minimo = valores[j];
k = j;
}
/* Trocar elemento i com elemento k (se forem diferentes!): */
if(i != k)
{
valores[k] = valores[i];
valores[i] = minimo;
}
}
/* Escrever os valores da matriz: */
for(i = 0; i < n; i++)
printf("%d ", valores[i]);
printf("\n");
return EXIT_SUCCESS;
}
| Página
concebida e mantida por Eng. Manuel Menezes de Sequeira (última actualização 2006/07/07) Copyright © 1996-2001 ISCTE |
||||