Optimiser F10 en conservant la fin du rapport

This commit is contained in:
rabot
2026-10-21 11:23:07 +02:00
parent 3f98548446
commit f2eb2c2f1e
12 changed files with 590 additions and 123 deletions
+16 -25
View File
@@ -300,23 +300,13 @@ int categorie(const Transaction *t)
}
/* F10 : ajoute une ligne à la fin du rapport */
int longueur(const char *s)
/* fin_rapport désigne le '\0' courant ; l'appelant conserve la nouvelle fin. */
char *ajouter_ligne(char *fin_rapport, const char *ligne)
{
int n = 0;
while (s[n] != '\0')
n++;
return n;
}
void ajouter_ligne(char *rapport, const char *ligne)
{
int fin = longueur(rapport);
int i = 0;
while (ligne[i] != '\0') {
rapport[fin + i] = ligne[i];
i++;
}
rapport[fin + i] = '\0';
while (*ligne != '\0')
*fin_rapport++ = *ligne++;
*fin_rapport = '\0';
return fin_rapport;
}
/* ------------------------------------------------------------------ */
@@ -339,6 +329,7 @@ int main(void)
char *rapport = malloc(1 << 20);
char ligne[128];
rapport[0] = '\0';
char *fin_rapport = rapport;
/* recherches par id, dans l'ordre d'origine */
static const Transaction *index_ids[NB_TRANSACTIONS];
@@ -374,30 +365,30 @@ int main(void)
/* rapport */
snprintf(ligne, sizeof(ligne), "clients distincts;%d\n", nb_clients);
ajouter_ligne(rapport, ligne);
fin_rapport = ajouter_ligne(fin_rapport, ligne);
snprintf(ligne, sizeof(ligne), "somme des requetes;%ld\n", somme_requetes);
ajouter_ligne(rapport, ligne);
fin_rapport = ajouter_ligne(fin_rapport, ligne);
snprintf(ligne, sizeof(ligne), "meilleure periode;%d;%d;%ld\n", debut, fin, meilleure);
ajouter_ligne(rapport, ligne);
fin_rapport = ajouter_ligne(fin_rapport, ligne);
snprintf(ligne, sizeof(ligne), "paires opposees;%ld\n", nb_paires);
ajouter_ligne(rapport, ligne);
fin_rapport = ajouter_ligne(fin_rapport, ligne);
snprintf(ligne, sizeof(ligne), "facons de rendre %d;%ld\n", MONTANT_MONNAIE, nb_facons);
ajouter_ligne(rapport, ligne);
fin_rapport = ajouter_ligne(fin_rapport, ligne);
for (int c = 0; c < 12; c++) {
snprintf(ligne, sizeof(ligne), "categorie;%d;%d\n", c, categories[c]);
ajouter_ligne(rapport, ligne);
fin_rapport = ajouter_ligne(fin_rapport, ligne);
}
for (int c = 0; c < NB_CLIENTS; c++) {
snprintf(ligne, sizeof(ligne), "client;%d;%ld\n", c, totaux_clients[c]);
ajouter_ligne(rapport, ligne);
fin_rapport = ajouter_ligne(fin_rapport, ligne);
}
for (int j = 0; j < NB_JOURS; j++) {
snprintf(ligne, sizeof(ligne), "jour;%d;%ld\n", j, totaux_jours[j]);
ajouter_ligne(rapport, ligne);
fin_rapport = ajouter_ligne(fin_rapport, ligne);
}
for (int i = 0; i < NB_TRANSACTIONS; i += 10) {
snprintf(ligne, sizeof(ligne), "rang;%d;%d;%ld\n", i, t[i].id, t[i].montant);
ajouter_ligne(rapport, ligne);
fin_rapport = ajouter_ligne(fin_rapport, ligne);
}
FILE *f = fopen("rapport.txt", "w");