Dev C++

Immma -  
 Saiid -
Bonjour,

Je suis coincée sur un exo sur le Dev C++, je manipule pas vraiment ce logiciel, juste des ABC qui me font défaut devant ce probleme : Ecrire un programme qui vérifie que le contenu du fichier est trié par rapport au jour, mois et an..
Quelqu'un peut avoir l'aimable attention de m'eclaircir davantage le probleme sinon des solutions pareilles ou la solution exacte carrément du probleme :d je vous serai reconnaissante ;)

Merci d'avance.
A voir également:

5 réponses

mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
En fait je n'ai pas très bien compris l'énoncé. Peux-tu nous donner quelques exemples (brefs) de fichiers, et le résultat que tu attends.

Bonne chance
0
liba
 
Oui... tout à fait, moi aussi j'ai pas bien saisi le contenu de l'enoncé mais faute que je suis pas forte en Language C++, j'ai cru que ceux du domaine vont bien saisir le probleme... Bref, Le prof nous demander alors de rédiger un fichier tel que celui énoncé en dessous, la différence c'est que ce fichier doit etre trié en jour, mois et an... c'est encore ambigu ??? n'est ce pas..
voilà un exemple du cours même, j'espère que ca vous aide à m'aider... Merci mamiemando, on se dit à plutard :


#include <stdio.h>
main()
{
FILE *P_FICHIER; /* déclaration */
char NOM_FICHIER[30], NOM_PERS[30];
int C,NB_ENREG, val;
/* Première partie : Créer et remplir le fichier */
printf("Entrez le nom du fichier à créer : ");
scanf("%s", NOM_FICHIER);
P_FICHIER = fopen(NOM_FICHIER, "w"); /* write */
printf("Nombre d'enregistrements à créer : ");
scanf("%d", &NB_ENREG);
C = 0;
while (C<NB_ENREG)
{
printf("Entrez le nom de la personne : ");
scanf("%s", &val);
fprintf(P_FICHIER, "%s\n", val);
C++;
}
fclose(P_FICHIER);
}
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Bon franchement je sias pas qui a écrit le morceau de code que tu as donné mais c'est pas top. Voici les corrections que je te propose :
#include <stdio.h>

int main(){ // une fonction DOIT avoir un type de retour, eventuellement void 
    FILE *fp; /* déclaration */
    char nom_fichier[30], nom_pers[30];
    int c,nb_enreg;

    /* première partie : créer et remplir le fichier */
    printf("entrez le nom du fichier à créer : ");
    scanf("%s",nom_fichier);
    fp = fopen(nom_fichier, "w"); /* write */
    if (fp){ // Verifier que le fichier peut être ouvert en écriture
        printf("nombre d'enregistrements à créer : ");
        scanf("%d",&nb_enreg);
        for(c=0;c<nb_enreg;++c){ // boucle for plus élégante que le while
            printf("entrez le nom de la personne : ");
            scanf("%s",nom_pers);
            fprintf(fp,"%s\n",nom_pers);
        }
        fclose(fp); // le fermer si et seulement si il est ouvert
    }else{
        fprintf(stderr,"le fichier %s ne peut pas être ouvert",nom_fichier);
    }
    return 0; // un main return 0 quand tout va bien
}

On compile, on exécute :
(mando@polgara) (~) $ gcc -W -Wall plop.c
(mando@polgara) (~) $ ./a.out
entrez le nom du fichier à créer : plop.txt
nombre d'enregistrements à créer : 5
entrez le nom de la personne : a1
entrez le nom de la personne : a2
entrez le nom de la personne : a3
entrez le nom de la personne : a4
entrez le nom de la personne : a5
(mando@polgara) (~) $ cat plop.txt
a1
a2
a3
a4
a5

Bonne chance
0
Immma
 
Merci amigo pour ton assistance...
Le fichier que je t'ai envoyé, écrit sur C++ était un exemple d'un autre probleme qui n'a rien avoir avec celui là car l'enoncé qui fait l'objet de ma présence sur le forum "commentcamarche" c'est plutot pour rédiger un fichier où c'est trié par rapport au jour, mois et an... donc le principe je pense est le même mais le théme est différent... tu me suis ??

Donc, c'est voir comment réussir un fichier sur le language C++ qui vérifie un tri en jour, mois et an...

Est ce évident??
je cesse de chercher des solutions et des idées et je tombe vraiment pas sur la clé... Si t'as une idée??
Merci encore une fois mamiemando..
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Hum le plus simple ce serait d'avoir un champ jour, un champ mois etc... En fait c'est assez facile à faire avec des std::map.
#include <iostream>
#include <set>
#include <map>
#include <string>

typedef unsigned annee_t;
typedef unsigned mois_t;
typedef unsigned jour_t;
typedef std::string data_t;

// La clé
struct cle_t{
    annee_t annee;
    mois_t mois;
    jour_t jour;
};

// la relation d'ordre entre les différentes clés
struct trier_cle{
    inline bool operator()(const cle_t & k1,const cle_t & k2){
        return  k1.annee <  k2.annee
            || (k1.annee == k2.annee && k1.mois <  k2.mois)
            || (k1.annee == k2.annee && k1.mois == k2.mois && k1.jour < k2.jour);
    }
};

typedef std::map<cle_t,data_t,trier_cle> datas_t;


int main(){
    datas_t datas;
    unsigned nb_evenements;

    // Demander les evenements
    std::cout << "Nb evenements ? ";
    std::cin >> nb_evenements;
    for(unsigned int i=0;i<nb_evenements;++i){
        struct cle_t k;
        data_t d;
        std::cout << "Evenement [" << (i+1) << '/' << nb_evenements << ']' << std::endl;
        std::cout << "Annee ? ";
        std::cin >> k.annee;
        std::cout << "Mois ? ";
        std::cin >> k.mois;
        std::cout << "Jour ? ";
        std::cin >> k.jour;
        std::cout << "Evenement ? ";
        std::cin >> d;
        datas[k] = d;
    }

    // Les afficher de manière ordonnée
    datas_t::const_iterator dit(datas.begin()),dend(datas.end());
    for(;dit!=dend;++dit){
        const cle_t & k = dit->first;
        const data_t & d = dit->second;
        std::cout << k.jour << '/' << k.mois << '/' << k.annee << '\t' << d << std::endl;
    }
    return 0;
}

Ce qui donne à l'exécution
(mando@polgara) (~) $ ./a.out
Nb evenements ? 3
Evenement [1/3]
Annee ? 2005
Mois ? 11
Jour ? 2
Evenement ? plop
Evenement [2/3]
Annee ? 1983
Mois ? 03
Jour ? 18
Evenement ? naissance
Evenement [3/3]
Annee ? 2007
Mois ? 05
Jour ? 08
Evenement ? maintenant
18/3/1983       naissance
2/11/2005       plop
8/5/2007        maintenant

Donc là tu vois qu'on peut ordonner des événements dans l'ordre qui nous arrange avec la structure trier_cle. Ainsi si le but est de trier un fichier, il suffit de le lire, de le trier sur le même principe, et de le réecrire. S'il s'agit juste de vérifier qu'il est trié, il suffit de lire les lignes les unes après les autres, et de vérifier que la clé nouvellement lue est toujours "supérieure" à la précédente.

Bonne chance
0
Immma
 
Ouais ouais... ça roule bien mamiemando... je te remercie sincerement fort bien... t'es genial.. rien à dire ;) bravo...

J'espere garder ta connaissance, tu comptes sur moi si jamais je peux t"aider un jour...

Bonne soirée
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Oula je vais rougir ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Saiid
 
Bonjour,

Je cherchais sur le forum et j'ai tombé sur ce programme qui m'interessait moi aussi.

J'ai pris alors la permission de l'utiliser et de l'exécuter sur ma machine, le probleme qui se pose c'est qu'au moment de l'exécution, avant qu'il m'affiche tous les événements ordonnés, ca se ferme... Je sais que c'est l'astuce d'une mauvaise utilisation mais je sais pas pourquoi, puisque je copie le programme tel qu'il est écrit et je l'exécute ... si quelqu'un sait pourquoi, qu'il me secoue avant de se nouer ;)
0