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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236
| #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 20
typedef struct {
/* Les variables données par l'utilisateur. */
unsigned int type;
char name[MAX];
float paddock_size;
float hauteur_mesuree;
float hauteur_prec;
//char *commentaire;
/* Les variables différentes pour chaque paddock */
float hauteur_utile;
int stock_disponible;
float pousse; /* cm */
int pousse_2; /* kg MS/ha/j */
int production_disponible;
}Paddock;
/* Les fonctions export sous format linéaire dans un csv (revoir) */
void export_row(int number_of_data,char const *fileName, int data_array){
for (int i = 0 ; i < number_of_data ; i++)
{
FILE *fic = fopen(fileName, "a");
if (fic == NULL)
{
exit(1);
}
fprintf(fic, "%d ;", data_array);
//printf("P%d : %d\n", i+1, paddock_data[i].paddock_size);
fclose(fic);
}
}
int main(int argc, char** argv)
{
/* La fonction temps */
time_t seconds = time(NULL);
struct tm * timeinfo = localtime(&seconds);
/*
* Partie 0 : Introduction
*/
printf("\n");
printf("\t\tMESURES De la CROISSANCE de l'HERBE\n\t\t%02d-%02d-%04d %02d:%02d:%02d\n", timeinfo->tm_mday, timeinfo->tm_mon+1, 1900+timeinfo->tm_year, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
printf("\t\tQuitter : \"ctrl + c\"\n");
printf("\n");
printf("\t Bonjour, je suis un petit programme test \n\t sur l estimation de la croissance de l herbe en paturage.\n\t Actuellement, je n enregistre pas de donnees car ma\n\t fonction \"exporter\" n est pas encore au point. Neanmoins je calcul\n\t , avec vous, simplement et rapidement vos mesures d'herbes. :)\n\n");
/*
* Partie 1 : Les variables d'exploitation.
*/
Paddock *paddock_data = NULL;
unsigned int number_of_paddock = 0;
unsigned int i, nombre_de_jour, nombre_de_VL, ingestion ;
float hauteur_paturage = 0 ;
char c;
int densite = 220;
/* Les variables communes à tout les paddocks */
int somme_des_stocks_disponibles = 0;
int jours_d_avance = 0;
int temps_de_pousse = 0;
int surface_disponible = 0;
int production_totale = 0;
/*
* Partie 2 : Début du questionnaire.
*/
printf("\t1.- Combien de jours depuis la derniere mesure d'herbe ? ");
scanf("%d", &nombre_de_jour);
printf("\n");
do{
printf("\t2.- Acceptez vous une densite de 220 kgMS/cm/ha (o ou n) ? ");
scanf(" %c", &c);
}while(c != 'o' && c != 'n');
//printf("\n");
if(c=='n')
{
printf("\t2-bis.- Si non, quel densite souhaite vous utiliser ? ");
scanf("%d",&densite);
}
c = 'x'; //juste préparé 'c' à être réutilisé.
printf("\n");
printf("\t3.- Nombre de vaches laitieres ? ");
scanf("%d", &nombre_de_VL);
printf("\n");
printf("\t4.- Ingestion par vache laitiere (kgMS /cm/ha) ? ");
scanf("%d", &ingestion);
printf("\n");
printf("\t5.- Hauteur de paturage (cm) ? ");
scanf("%f", &hauteur_paturage);
printf("\n");
printf("\t6.- Combien de parcelles ? ");
scanf("%d", &number_of_paddock);
if(number_of_paddock > 0)
{
paddock_data = malloc(sizeof(Paddock)*number_of_paddock);
/* si l`allocation a echoue, on quitte le programme. */
if(paddock_data == NULL)
exit(1);
/* Premier paramètre : la taille des parcelles */
for (i = 0 ; i < number_of_paddock ; i++)
{
//do{
if(i+1 == 1)
printf("\t%dere parcelle", i + 1);
else
printf("\t%deme parcelle", i + 1);
printf("\n");
printf("\ta. - Donnez la taille (ha), son nom et son type (ex: 2 Charlotte 3) ? ");
scanf("%f %s %d", &paddock_data[i].paddock_size, &paddock_data[i].name, &paddock_data[i].type);
//}while((int)(paddock_data[i].paddock_size)%10 == 0 && (int)(paddock_data[i].type)%10 == 0);
//printf("\n");
//do{
printf("\tb. - Hauteur d'herbe mesuree ? ");
scanf("%f", &paddock_data[i].hauteur_mesuree);
//}while(paddock_data[i].hauteur_mesuree%10 > 0);
//printf("\n");
printf("\tc. - Connaissez vous la hauteur precedente (o ou n) ? ");
do{
scanf("%c", &c);
}while(c != 'o' && c != 'n');
if(c == 'o')
{
printf("\tc_bis. - Quel est cette hauteur precedente ? ");
scanf("%f",&paddock_data[i].hauteur_prec);
}
c = 'x'; //juste préparé 'c' à être réutilisé.
printf("\n");
/* A moins que le programme évolue vers une utilisation quotienne, il n'y a pas besoin d'enregistrer de commentaires
printf("\td. - Evenement de la semaine (commentaire) ? ");
scanf("%s", &paddock_data[i].commentaire[i]);
printf("\n");
*/
/*
* Partie 3 : Début des analyses (parcelle par parcelle).
*/
paddock_data[i].hauteur_utile = paddock_data[i].hauteur_mesuree - hauteur_paturage;
paddock_data[i].stock_disponible = densite * paddock_data[i].paddock_size - paddock_data[i].hauteur_utile;
somme_des_stocks_disponibles += paddock_data[i].stock_disponible;
paddock_data[i].pousse = paddock_data[i].hauteur_mesuree - paddock_data[i].hauteur_prec;
paddock_data[i].pousse_2 = ( paddock_data[i].pousse * densite ) / temps_de_pousse ;
paddock_data[i].production_disponible = paddock_data[i].paddock_size * paddock_data[i].pousse_2 ;
surface_disponible += paddock_data[i].paddock_size ;
production_totale += paddock_data[i].production_disponible ;
}
//export_row(number_of_paddock,"Data.csv",paddock_data[i].paddock_size);
}
printf("\tAinsi nous pouvons derteminer : ");
printf("\n\t1. - Hauteurs utiles : \n");
for(i=0; i < number_of_paddock; i++){
printf("\t\t%s [%.2f ha] : %.2f cm\n", paddock_data[i].name, paddock_data[i].paddock_size, paddock_data[i].hauteur_utile);
}
printf("\n");
printf("\n\t2. - Stock disponible : \n");
for(i=0; i < number_of_paddock; i++){
printf("\t\t%s [%.2f ha] : %d kg MS\n", paddock_data[i].name, paddock_data[i].paddock_size, paddock_data[i].stock_disponible);
}
printf("\n");
printf("\n\t3. - Somme des stocks disponible : \n");
printf("\t%d kg MS\n", somme_des_stocks_disponibles);
printf("\n");
printf("\n\t4. - Nombre de jours d'avance : \n");
jours_d_avance = somme_des_stocks_disponibles / ( nombre_de_VL * ingestion );
printf("\t%d jours\n", jours_d_avance);
printf("\n");
printf("\n\t5. - Temps de pousse : \n");
temps_de_pousse = nombre_de_jour;
if(!temps_de_pousse)
printf(" - \n");
else
printf("\t%d jour(s)\n", temps_de_pousse);
printf("\n");
printf("\n\t6. - Pousses : \n");
for(i=0; i < number_of_paddock; i++){
printf("\t\t%s [%.2f ha] : %.2f cm | ", paddock_data[i].name, paddock_data[i].paddock_size, paddock_data[i].pousse);
printf(" %d kg MS/ha/jour.\n", paddock_data[i].pousse_2);
if(paddock_data[i].pousse < 0)
printf("Ne pas tenir compte d'une pousse négative.");
}
printf("\n");
printf("\n\t7. - Production disponible : \n");
for(i=0; i < number_of_paddock; i++){
printf("\t\t%s [%.2f ha] : %d kg MS/ha/jour.\n", paddock_data[i].name, paddock_data[i].paddock_size, paddock_data[i].production_disponible );
}
printf("\n");
printf("\n\t8. - Surface disponible : \n");
printf("\t\t%d ha", surface_disponible);
printf("\n");
printf("\n\t9. - Croissance : \n");
printf("\t\t%d kg MS/ha/jour.", production_totale/surface_disponible);
printf("\n");
free(paddock_data);
return 0;
} |
Partager