Ca ne marche tjs pas, je vais donc devoir te passer le reste du code.
En tout cas, merci pour ta patience !!
L'implémentation :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
/*sad.c*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "sad.h"
#define POIDS_MAX 30
static int nb_elemt(table t){
return t.nb_elemt;
}
static
int compare(const void* a, const void* b){
struct objet const *pa=(struct objet *)a;
struct objet const *pb=(struct objet *)b;
return pb->rapport - pa->rapport;
}
struct objet{
int id;
int poids;
int valeur;
float rapport;
};
struct table{
objet* tab;
int nb_elemt;
};
table CreerTable(){
table t=malloc(sizeof(struct table));
t->nb_elemt=0;
return t;
}
table CreerObjet(int id, int poids, int valeur, table t){
objet o=malloc(sizeof(struct objet));
t=realloc(t->tab,sizeof(t->tab)+1);
assert(o!=NULL);
o->id=id;
o->poids=poids;
o->valeur=valeur;
o->rapport=valeur/poids;
t->tab[nb_elemt(t)]=o;
t->nb_elemt++;
return t;
}
void TableTrie(table t){
qsort(t->tab,t->nb_elemt,sizeof(t->tab),compare);
}
int tableauID(table t){
int tableauId[t->nb_elemt];
int poidsReel=0;
int valeurSac=0;
for (int i=0 ; i<t->nb_elemt ; i++){
if(poidsReel+(t->tab[i]->poids)<=POIDS_MAX){
tableauId[i]=t->tab[i]->id;
valeurSac+=t->tab[i]->valeur;
poidsReel+=t->tab[i]->poids;
}
}
return tableauId;
} |
Et les entêtes :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
/*sad.h*/
#ifndef SAD_H_
#define SAD_H_
typedef struct objet* objet;
typedef struct table* table;
table CreerTable();
table CreerObjet(int, int ,int, table);
void TableTrie(table);
int tableauID(table t);
#endif |
Enfin, les options de compilations :
gcc -std=c99 -Wall -Werror sad.h sad.c -o test
(et Krieg est un putain de bon musicos !)
Partager