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 :

Problème programme tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 1
    Par défaut Problème programme tableau
    Bonsoir/bonjour,

    On me demande dans un devoir de faire un programme qui demande à l'utilisateur d'entrer des valeurs dans un tableau qui seraient rangée par ordre croissant.
    En gros, si mon tableau est de taille 3 et que ses valeurs sont 2 5 7 9
    Et que l'utilisateur rentre le nombre 6, le tableau possède ces valeurs (dans cet ordre): 2 5 6 7
    J'espère avoir été clair.
    Pour le moment j'ai fais 'ça' :
    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
     
    #include <conio.h>
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #define N 10
     
    void insere (int x, int *tab, int n);
     
    int main() {
        int i,a,nelt=0;
        int t[N];
        for(i=0;i<=N;i++)
        t[i]=0;
        do{
        printf("entrer un nombre entier (-1 pour quitter) : ");scanf("%d",&a);
        if(a!=-1){
        insere(a,t,N);
        nelt=nelt++;}
        }
        while((a!=-1)&&(nelt<N));
     
        printf("le tableau contient les elements suivants : ");
        for(i=0;(i<=N);i++){
            printf(" %d ",t[i]);}
     
        getch();
    }
     
     
     
    void insere (int x, int *tab, int n){   // x = a    tab = t    n = N
         int i,j;
     
         for(i=0;i<=n;i++){
            if(tab[i]>=x){
                for(j=n-1;j>=i;j--){
                    tab[j+1]=tab[j];
                }
                tab[i]=x;
            }
         }
    }
    Je pense avoir repérée l'erreur qui est dans la fonction insere.
    Les valeurs du tableau étant toutes égales à 0 au début, la condition
    if(tab[i]>=x)
    ne peut jamais être vraie.
    Malgré tout je ne vois pas comment résoudre ce problème

    Je vous remercie d'avance.

  2. #2
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Citation Envoyé par Chnapy Voir le message
    Bonsoir/bonjour,

    On me demande dans un devoir de faire un programme qui demande à l'utilisateur d'entrer des valeurs dans un tableau qui seraient rangée par ordre croissant.
    En gros, si mon tableau est de taille 3 et que ses valeurs sont 2 5 7 9
    Et que l'utilisateur rentre le nombre 6, le tableau possède ces valeurs (dans cet ordre): 2 5 6 7
    J'espère avoir été clair.
    Bonsoir,

    Déjà {2,5,7,9} c'est un tableau de taille 4 puisqu'il y a 4 éléments
    En gros l'utilisateur entre plusieurs nombres, tu dois garder les N nombres les plus petits entrés. Pour ça on te demande d'utiliser un tableau qui gardera ces N nombres et on t'aiguille en te demandant de garder les nombres dans ce tableau par ordre croissant.

    Citation Envoyé par Chnapy Voir le message
    Pour le moment j'ai fais 'ça' :
    Je pense avoir repérée l'erreur qui est dans la fonction insere.
    Les valeurs du tableau étant toutes égales à 0 au début, la condition
    if(tab[i]>=x)
    ne peut jamais être vraie.
    Malgré tout je ne vois pas comment résoudre ce problème

    Je vous remercie d'avance.
    Pour résoudre ton problème il faut que tu considère que le tableau possède non seulement une capacité N (il peut contenir au plus N éléments), mais aussi une taille utilisée L (une variable qui te dit combien d'éléments sont effectivement dans le tableau).
    Par exemple au départ N=10 dans ton code et L vaut 0 puisque aucun élément n'a été ajouté. Si L=0 le tableau est vide et sinon tes données réelles sont stockées de 0 à L-1. À chaque fois que tu ajoutes un élément tu vas incrémenter L. Quand tu auras atteint la taille maximum L==N alors l'ajout d'un élément va se faire au détriment d'un élément du tableau qui sera perdu par décalage dans certains cas.

    En passant, tu as fais un erreur que beaucoup de débutant font :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int t[N];
        for(i=0;i<=N;i++)
    int t[N] avec un #define N 10, crée un tableau de 10 éléments indicés de 0 à 10-1=9 ... donc ta boucle ne doit pas aller jusqu'à N inclut mais s'arrêter juste avant :
    Néanmoins, pour ta réflexion, il peut s'avérer utile voire malin d'utiliser un tableau de longueur N+1 ....

    Bonne réflexion et essaye d'écrire un algorithme à la main sur du papier et de le tester toujours à la main avec du papier et un crayon

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 18
    Par défaut
    Ton code est dégueulasse à lire :p

    Bref, si ton tableau est alloué en 4, tu devras soit faire un realloc, soit faire un free et mallocquer de 4 + 1 (je te conseille de prendre une variable "taille du tableau" pour pouvoir faire quelque chose de générique.)

    Ensuite, une fois que tu as le chiffre, il faut que tu parcoures ton tableau en partant de ta variable "size" (tu le fais plus ou moins déjà) et tu crées une variable temporaire que tu décrémentes en vérifiant qu'elle est bien supérieure ou égale à 0. Dès que tu l'as insérée, tu return.

  4. #4
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 2
    Par défaut
    Ta fonction insère, tu ne dois pas lui envoyer N, mais le nombre d'éléments actuels.
    Si tu n'a que 4 éléments, tu ne dois pas lui envoyer 10, sinon la fonction ira fouiller dans des cases qui n'ont pas à être utilisées.

Discussions similaires

  1. Problème programme tableau/fonction
    Par Blaze66 dans le forum Débuter
    Réponses: 5
    Dernier message: 11/11/2013, 19h04
  2. Programmation évènementielle et problème de tableau
    Par Foelthanos dans le forum x86 16-bits
    Réponses: 12
    Dernier message: 02/01/2011, 23h22
  3. Problème programmation objet
    Par Contrec dans le forum MFC
    Réponses: 54
    Dernier message: 30/03/2005, 11h30
  4. Problème de tableau
    Par krfa1 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 08/02/2005, 11h09

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