O PROBLEMA DA MOCHILA FRACION RIA EXPLICADO EM C

523 palavras 3 páginas
O PROBLEMA DA MOCHILA FRACIONÁRIA EXPLICADO EM C

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

#define TAM 150
#define HORA 8

/* Vetor para os dados. */ struct vetor{ char *nome; double frequencia; double tempo;

}; typedef struct vetor Vetor;

/* Funcao para ler o arquivo e alocar no vetor. */
Vetor *leVetor(FILE *f, int n);

/* Funcao quicksort. */ void quickSort(Vetor *v, int inicio, int fim);

/* Retorna 1 se verdadeiro e 0 se falso. */ int maiorQue(Vetor *v1, Vetor *v2);

/* Retorna a posicao do pivot apos o rearranjo do vetor. */ int partition(Vetor *v, int inicio, int fim);

/* Troca os elementos de um vetor. */ void troca(Vetor *v1, Vetor *v2);

/* Funcao para imprimir o vetor. */ void imprimeV(Vetor *v, int n);

int main(){ char nomeArquivo[TAM]; scanf("%s", nomeArquivo); int qtdade_linha;

FILE *f; f = fopen(nomeArquivo, "r"); fscanf(f, "%d", &qtdade_linha);

leVetor(f, qtdade_linha); fclose(f);

return 0;
}

void imprimeV(Vetor *v, int n){ int i=0; double total = 0, hora = 0;

/* O vetor é impresso até que seja contemplado todos os nomes ou até * que seja preenchida todas as horas. */ while(i < n && hora < HORA){ /* Em caso do valor ser menor do que o tempo restante. */ if(v[i].tempo <= (HORA-hora)){ total += v[i].frequencia*v[i].tempo; hora += v[i].tempo; if(i != 0) printf(",%s", v[i].nome); else printf("%s", v[i].nome); i++; if(i==n)break; } if(v[i].tempo > HORA){ /* Em caso do valor ser maior do que o tempo restante. */ total += v[i].frequencia*(HORA-hora); hora += (HORA-hora);

Relacionados

  • Algoritmos gulosos
    16403 palavras | 66 páginas