IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

tableaux ou non ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par seriousme
    c'est un .cpp.

    Le truc par defaut.
    Donc tu compiles en C++, ce qui évidemment fausse les résultats.

    Je te conseille de renommer ton fichier en .c, ce qui invoquera le compilateur C.

  2. #2
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Algorithmiquement, ça se fait généralement avec un arbre rouge-noir je crois.
    Si tu fais référence à la méthode de stoquage des bases de données, généralement il s'agit soit d'un arbre B (le plus utilisé) soit d'un hachage dynamique.

    e &, il en faut un pour les scanf("%d") et il n'en faut pas pour les scanf("%s").
    Encore une bonne raison de ne pas utiliser scanf lorsqu'on ne le maitrise pas ...

  3. #3
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par jive
    oui effectivement c'est ce qui pourrait correspondre à ma recherche, je n'étais pas sur qu'on pouvait faire une liaison entre deux structures.

    Dans un projet informatique les tableaux statiques sont très peu utilisés.
    On utilise des structures dynamiques telles que les listes chainées en C.
    En C++ il y a les vector, list,deuque etc... de la STL.
    Ce que tu veux faire c'est un peu lourd à faire en C pur et dur mieux vaut prendre un SGBD comme MySQL qui permettra de faire des requêtes de tri sur les clients.
    On peut parfaitement interfacer MySQL avec programme en C ou tout autre langage

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Dans son cas il serait peut-être plus pratique de prendre SQLite.

  5. #5
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 116
    Par défaut
    Ce sera en C parce que c'est la contrainte suprême.

    J'avais déjà à l'idée que mon projet serait lourd étant donné mon faible niveau mais ici seul le résultat comptera.

    Autrement je rassure je connais bien le printf, mais pour moi cela permet d'afficher keklkechose à l'écran. Le scanf permettrais de mettre ce qui est indiqué par l'uilisteur en mémoire que l'on fera apparaitre si on veut ensuite par un printf.

    le & s'applique aussi bien pour %d que pour un %s ou encore un %c ou un %f à ma conaissance. C'est une question de référence à la mémoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int i=0;
    printf("%d\n", &i);

    Avec ceci on affiche l'adresse mémoire où est stocké i.

    il faut faire cela

    Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int i=0;
    printf("%d\n", i);
    Avec devc++, je confirme il faut enregistrer avec l'extension c et pas cpp.

    Moi ce que je veux c'est que lorsque un type entre une valeur, cela s'enregistre dans une cellule d'un 1er tableau (par un scanf donc) et que en même temps ca génére une valeur automatiquement qui s'insérera dans une cellule d'un deuxiéme tableau un peu à la maniére d'une indexation automatque puisque on parle de base de données.

    Mais voilà en C y a t'il un moyen d'indiquer cà ?.


    Aprés cà, je réfléchirais à la facon de récupérer les index des valeurs qui seraient ne liaison (qui dabs ce cas correspondrait à la valeur inséré par l'utilisateur + la valeur inséré automatiquement).


  6. #6
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par loufoque
    Dans son cas il serait peut-être plus pratique de prendre SQLite.
    oui ou tout autre SGBD

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par jive
    Le scanf permettrais de mettre ce qui est indiqué par l'uilisteur en mémoire que l'on fera apparaitre si on veut ensuite par un printf.
    L'usage de scanf() est complexe et déconseillé si on ne maitrise pas...

    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers

    le & s'applique aussi bien pour %d que pour un %s ou encore un %c ou un %f à ma conaissance. C'est une question de référence à la mémoire.
    ... la preuve

    "%s" attend l'adresse d'un char. Le nom d'un tableau de char est exactement ça. L'adresse du premier char du tableau. Donc, pas de &.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       char s[10 + 1];
     
       if (scanf ("%10s", s) == 1)
       {
          ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int i=0;
    printf("%d\n", &i);
    Avec ceci on affiche l'adresse mémoire où est stocké i.
    Non. Comportement indéfini. Ceci est correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int i=0;
    printf("%p\n", (void *) &i);
    Moi ce que je veux c'est que lorsque un type entre une valeur, cela s'enregistre dans une cellule d'un 1er tableau (par un scanf donc) et que en même temps ca génére une valeur automatiquement qui s'insérera dans une cellule d'un deuxiéme tableau un peu à la maniére d'une indexation automatque puisque on parle de base de données.

    Mais voilà en C y a t'il un moyen d'indiquer cà ?.
    Certainement. Il suffit d'écrire le code qui va bien.

  8. #8
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    En fait, je dois être super intelligent ou alors c'est l'heure mais je ne vois pas trop ou tu bloques ?

    Comme l'a très bien dis emmanuel, il te suffit d'écrire le code qui correspond à ton problème et le tour est joué ...

    En ce que je crois que tu cherches, c'est s'il existe une fonction spécifique qui répondrait à ton problème, dans ce cas, à ma connaissance non, il faut l'écrire.

    Ainsi, lorsque tu lis une valeur, ça n'est pas sorcier de la mettre dans un tableau puis ensuite appeler une fonction qui va te créer un index sur ton deuxième tableau.

  9. #9
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 116
    Par défaut
    oui mais voilà je sais faire cà

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("veuillez saisir votre prenom :\n");
    scanf("%s", client.prenom);
    et là je sais que ca va direct dans mon tableau

    mais si je veux que ca insérer une valeur sans la taper avant comment ca ce passe ?

    je voudrais un truc comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("veuillez saisir un nombre :\n");
    scanf("%d", &client.numero);
    mais sans avoir l'étape printf avant; faire que ca s'insécrémente dans le tableau tout seul.


    Bon j'édite ici, j'ai un début de solution et c'est plutôt con ! mais ca marche pas encore.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <stdio.h>
    #include <string.h>
     
     
    int nbclient=0;
    int nbarticle=0;
     
    void saisie();
    void affichage();
     
    struct acheteur {
           char nom[20];
           char prenom[20];
           int age;
           };
     
           struct acheteur client, tabclient[100];
     
    struct produit {
           int numprdt;
                  };
           struct produit article, tabarticle[100];
     
    main()
    {
          int choix;
          int num;
     
          choix=-1;
     
          while (choix!=0)
          {
                         printf("-1- Veuillez saisir vos données\n");
                         printf("-2- affichage de vos données\n");
                         printf("-3- Quitter le programme\n");
                         printf("choix\n");
                         scanf("%d", &choix); 
     
     
                         switch(choix)
                         {
                                      case 1 : saisie();
                                      break;
                                      case 2 : affichage();
                                      break;
                                      case 3 : printf("au revoir\n");
                                      break;
                                      default : printf("erreur\n");
                                      }
                                      }
    }
     
    void saisie()
     
    {
    struct produit article;
            int i;
            int v;
            int depart=1;
     
            i=nbclient;
            v=nbarticle;
     
            while(strcmp(client.nom, "fin")!=0)
            {      
             printf("veuillez saisir votre nom, (fin pour terminer) :\n");
             scanf ("%s", client.nom);
     
             if (strcmp (client.nom, "fin")!=0)
             {
     
     
     
                        article.numprdt=depart;
     
                        tabclient[i++]=client;
                        tabarticle[v++]=article;
                        }
                        }
                        nbclient=i;
                        nbarticle=v;
    }
     
     
    void affichage ()
    {
         struct produit article;
              int i;
     
              for (i=0; i<nbclient; i++)
              {
                  client=tabclient[i];
                  printf ("voici ce que on obtient : %s %d\n", client.nom, article.numprdt);
                  }
    }
    et à l'affichage malheureusement mon article.numprdt vaut un chiffre trés long au lieu de valoir juste 1.

  10. #10
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Voici ce que me donne la compilation :

    test.c:8: warning: function declaration isn't a prototype
    test.c:9: warning: function declaration isn't a prototype
    test.c:25: warning: return type defaults to 'int'
    test.c:25: warning: function declaration isn't a prototype
    test.c: In function 'main':
    test.c:27: warning: unused variable 'num'
    test.c: At top level:
    test.c:55: warning: function declaration isn't a prototype
    test.c: In function 'saisie':
    test.c:56: warning: declaration of 'article' shadows a global declaration
    test.c:22: warning: shadowed declaration is here
    test.c: At top level:
    test.c:86: warning: function declaration isn't a prototype
    test.c: In function 'affichage':
    test.c:87: warning: declaration of 'article' shadows a global declaration
    test.c:22: warning: shadowed declaration is here
    test.c:93: warning: 'article.numprdt' is used uninitialized in this function
    test.c: In function 'main':
    test.c:51: warning: control reaches end of non-void function
    Bon ton problème d'affichage vient du fait que tu affiches ta variable locale au lieu de la variable globale (c'est ce qui correspond à cette ligne: "declaration of 'article' shadows a global declaration").

    Je n'ai pas regardé le reste.

  11. #11
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 116
    Par défaut
    effectivement j'ai viré mes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct produit article;
    du local et ca marche.

    merci.

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/05/2015, 07h39
  2. Excel > ppt : des tableaux et non pas des graphes
    Par nat54 dans le forum VBA PowerPoint
    Réponses: 2
    Dernier message: 14/11/2008, 08h38
  3. [Tableaux] Variable non considéré comme un chiffre
    Par Merlon dans le forum Langage
    Réponses: 7
    Dernier message: 27/06/2007, 12h08
  4. [Tableaux] Variable non reconnue
    Par oceane751 dans le forum Langage
    Réponses: 31
    Dernier message: 05/01/2007, 23h22
  5. [Tableaux] Retour non conforme
    Par Mister Nono dans le forum Langage
    Réponses: 3
    Dernier message: 03/11/2005, 12h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo