/* 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 |