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 :

Vecteur - Ordre


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 2
    Par défaut Vecteur - Ordre
    Quelqu'un peut-il m'aider? Je ne trouve vraiment pas mon erreur...

    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
    /* Déterminer si un vecteur v de taille n est trie par ordre croissant ou non */
     
    #include <stdio.h>
     
    void ordre(int v[], int n)
     
    {
        int i, a = 1;
     
        for (i = 0; i < n; i++ )
        {
            if (v[i] <= v[i+1])
                a += 1;
     
        }
     
        if (a == n)
           printf ("Le vecteur est trie par ordre croissant");
     
        else
            printf ("Le vecteur n'est pas trie par ordre croissant");
     
        return;
    }
     
    /* Essayons la fonction avec un exemple concret */
     
    int main ()
     
    #define TAILLE_VECTEUR_MAX 99
     
    {
        int t[TAILLE_VECTEUR_MAX], b;
     
        printf ("Entrez la taille du vecteur: ");
        scanf ("%d", &b);
     
        printf ("Entrez les composantes du vecteurs:");
        scanf ("%d", &t);
     
        ordre (t, b);
     
        return 0;
    }
     
    /* Erreur quelquepart, il dit toujours que le vecteur n'est pas trie par ordre croissant */

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    1) Si ton tableau a n éléments, v[i+1] n'existe pas pour i = n-1
    2) Tu n'enregistres qu'une valeur dans ton tableau. Il te faut une boucle pour lire les n données.

    A part ça, tu peux arrêter la boucle dès que tu trouve deux éléments non triés. Pas la peine de continuer à comparer les éléments suivants, le tableau n'est de toute façon pas trié.

  3. #3
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 2
    Par défaut
    Citation Envoyé par matafan Voir le message
    1) Si ton tableau a n éléments, v[i+1] n'existe pas pour i = n-1
    for (i = 0; i <= n; i++ )
    {
    while (v[i] <= v[i+1])
    a += 1;
    En mettant le "<=" ça irait alors?

    Citation Envoyé par matafan Voir le message
    2) Tu n'enregistres qu'une valeur dans ton tableau. Il te faut une boucle pour lire les n données.
    for (i = 0; i <= b ; i++ )
    ordre (t[i], b);
    De cette façon là il affiche une erreur.
    Je ne vois pas ce que tu veux dire, ou plutôt, comment faire...?!

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Citation Envoyé par Darknesse Voir le message
    En mettant le "<=" ça irait alors?
    Je ne sais pas. Tu devrais essayer de taper des trucs au hasard jusqu'à ce que ça tombe en marche.

    Pour ma deuxième remarque, je parlais du scanf("%d", &t). Il n'enregistre que la première valeur. Il ta faut une boucle pour lire les b valeurs entrées par l'utilisateurs, et les stocker dans les &(t[i]).

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Citation Envoyé par Darknesse Voir le message
    En mettant le "<=" ça irait alors?
    Au contraire: avec ça, la boucle for fera n+1 itérations au lieu de n-1.

    for (i = 0; i < n-1; i++ )

  6. #6
    Membre expérimenté Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Par défaut
    En fait ce qui te manque surtout c'est le vidage du buffer d'entree, je m'explique lorsque que tu fais:
    scanf ("%d", &b);
    ce scanf ne va pas prendre le '\n' qui correspond à la touche entrée que tu vas presser pour signifier la fin de ta saisie.
    Ainsi tu dois faire:
    Pour pouvoir prendre ce caractère. Cela suppose quand même que l'utilisateur sait ce qu'il fait, le mieux est de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(getchar()!='\n');
    dans le cas des entrées érronées.
    Après comme le disent les autres intervenants, il te faut également une boucle pour pouvoir remplir ton tableau.

  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    En fait ce qui te manque surtout c'est le vidage du buffer d'entree, je m'explique lorsque que tu fais:
    ce scanf ne va pas prendre le '\n' qui correspond à la touche entrée que tu vas presser pour signifier la fin de ta saisie.
    ....
    C'est vrai, mais sans importance pour une boucle sur un tel scanf("%d",...) : les 'blancs' qui précèdent le nombre sont ignorés dans la conversion et le '\n' est considéré comme un caractère 'blanc'.
    Par contre, ce '\n' peut poser problème pour un scanf() derrière la boucle avec un format %c ou %[].

Discussions similaires

  1. Trier un vecteur par ordre croissant
    Par amin89 dans le forum Pascal
    Réponses: 5
    Dernier message: 17/11/2009, 21h22
  2. [débutant] tri vecteur string ordre alphabétique
    Par Tom Sawyer dans le forum SL & STL
    Réponses: 2
    Dernier message: 26/07/2004, 17h40
  3. Zoom sur des vecteurs ou lignes
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 25/11/2002, 10h40
  4. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 08h43
  5. matrices * vecteur
    Par delire8 dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 07/09/2002, 14h15

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