Boa tarde,
Foi-me proposto um exercício em que o Enunciado é:
Implementar um programa que,
a) Construa um vetor com N elementos do tipo inteiro, para o ficheiro
“Inteiros.AED”;
b) Ordene o vetor por ordem decrescente (usando o algoritmo Bubble Sort);
c) Mostre no ecrã os elementos do vetor ordenado;
d) Determine e mostre no ecrã o maior e menor valores do vetor, usando apenas
instruções de atribuição
Não estou é a entender o que estou a fazer de mal em relação a como é que eu hei-de passar o vetor ordenado em diferentes formas para o ficheiro.
Agradecia ajuda!
Exercício:
#include <stdio.h>
#include <locale.h>
#include "VetorInteiros"
void MaiorMenor(int *V, int N){
int i, maior = 0, menor = 0;
for(i=0;i<N;i++){
if(V[i]>maior){
maior=V[i];
}
}
printf("O maior valor é %d", maior);
menor = V[0];
for (i = 1; i < N; i++){
if (V[i] < menor)
menor = V[i];
}
printf("\n e o menor valor é %d", menor);
}
// mostrar os elementos do vetor numa só linha do monitor
void MostrarVetor (int *V, int N){
int k;
for (k = 0; k < N; k++)
printf("%d ", V[k]);
}
// Seleção - Ordena por ordem decrescente
void OrdenarSelecao_Decrescente (int *V, int N){
int k, kk, pos_menor, aux;
for (k = 0; k < N-1; k++){
pos_menor = k;
for (kk = k+1; kk < N; kk++)
if (V[kk] > V[pos_menor])
pos_menor = kk;
if (pos_menor != k){
aux = V[k];
V[k] = V[pos_menor];
V[pos_menor] = aux;
}
}
}
// Bubblesort - ordena por ordem decrescente
void Bubblesort_Dec (int *V, int N){
int k, l, fim, aux;
fim = N-1;
do{
l = 0;
for (k = 0; k < fim; k++)
if (V[k] < V[k+1]){
aux = V[k];
V[k] = V[k+1];
V[k+1] = aux;
l = k;
}
fim = l;
} while (l != 0);
}
void swap(int *xp, int *yp)
{
int temp = *xp;
*xp = *yp;
*yp = temp;
}
void selectionSort(int *V, int N)
{
int i, j, min_idx;
for (i = 0; i < N-1; i++){
min_idx = i;
for (j = i+1; j < N; j++)
if (V[j] < V[min_idx])
min_idx = j;
swap(&V[min_idx], &V[i]);
}
}
int main(){
setlocale(LC_ALL, "Portuguese");
int V[] = {12, 8, 6, 10, 23, 14};
int tamanho = sizeof(V) / sizeof(int);
printf("Vetor antes da ordenação: \n");
MostrarVetor(V, tamanho);
printf("\n");
printf("Vetor com ordenação decrescente normal: \n");
OrdenarSelecao_Decrescente(V, tamanho);
MostrarVetor(V, tamanho);
printf("\n");
printf("Vetor com ordenação BubbleSort: \n");
Bubblesort_Dec(V, tamanho);
MostrarVetor(V, tamanho);
printf("\n");
selectionSort(V, tamanho);
printf("Vetor com Selection Sort: \n");
MostrarVetor(V, tamanho);
printf("\n");
MaiorMenor(V, tamanho);
return 0;
}
VetorInteiros.h:
#include <stdio.h>
#include <stdlib.h>
int *LerVector (const char *fich, int *N){
int *V, k, aux;
FILE *f;
f = fopen("Inteiros.AED", "r");
if (f == NULL)
return NULL;
V = (int *) malloc(sizeof(int));
if (V == NULL)
return NULL;
*N = 0;
while (fscanf(f, "%d", &aux) == 1){
*N = *N + 1;
V = (int *) realloc(V, (*N)*sizeof(int));
if (V == NULL)
return NULL;
V[*N-1] = aux;
}
fclose(f);
return V;
}