2 programe 1 ne marche pas.

Résolu/Fermé
Pandor31 Messages postés 7 Date d'inscription lundi 7 mai 2012 Statut Membre Dernière intervention 9 mai 2012 - 9 mai 2012 à 15:33
LeChikito Messages postés 1589 Date d'inscription lundi 19 mars 2012 Statut Membre Dernière intervention 3 août 2012 - 9 mai 2012 à 20:22
Salut :),

Bon sa fait 2 jour que j'essais de corriger mon programe. (le voila:)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int tableau[5]={7,5,6,2,4},i=0,tampon=0,verifier=0;
    printf("\t\tTableau avant changement.\n\n");
    for (i=0; i<5; i++)
    {
        printf("%d\n",tableau[i]);
    }
    do
    {
        verifier=1;
        for (i=0; i<5; i++)
        {
            if (tableau[i]>tableau[i+1])
            {
                verifier=0;
                tampon=tableau[i];
                tableau[i]=tableau[i+1];
                tableau[i+1]=tampon;
            }
        }
    }
    while (verifier !=1);
    printf("\t\t Tableau ranger\n\n");
    for (i=0; i<5; i++)
    {
        printf("%d\n",tableau[i]);
    }
    return 0;
}


Ce programme est senser replacer le tableau initial en ordre numérique. Mais le résultat final que j'ai est 24444. Et si je change la variable 2 par 5 par exemple dans le tableau, le résultat final va me donner 44444. Alors ce que je présume s'est que a 1 point les variable au dessus de la variable maximum de i qui est supposer indiquer un adresse.

Ce que je trouve bizarre maintenant.

S'est que l'opération fonctionne jusqu'à un certain point. Elle transporte le 2 au début de l'opération. Donc elle a du faire:
7,5,6,2,4
5,7,6,2,4
5,6,7,2,4
5,6,2,7,4
5,2,6,7,4
2,5,6,7,4

Mais le résultat final me donne 24444.

Ce qui me laisse présumer que le résultat est changer a la fin de l'opération, est que la valeur de i est initialiser a 0 au début de l'opération. donc toute les valeur aurait du être mise a 0 car elle étais tous plus grande que la valeur initial i...

Donc, qu'est ce qui cloche dans mon programme?

Ha et voici le programme qui ma inspirer pour celui ci. Mais lui par contre fonctionne. (Il est presque identique je comprend pas comment lui fonctionne et pas le mien...)

/*
Solution à l'exercice 5
du tutoriel sur les tableau en C
par Mi@ow
*/
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int tableau[5] = {1,11,3,7,5};//création d'un tableau dans le desordre
    int temporaire = 0;//création d'une variale "tampon" utilisée pour stoquer un nombre pendent un court moment
    int i = 0;//variable pour parcourire les tableaux
    int verifier = 0;//boléen: 1 = le tableau est dans l'ordre//2 = le tableau est encord en desordre

    printf("\t\ttableau AVANT le rangement\n\n");

    for(i = 0 ; i < 5 ; i++ )
    {
        printf("%d\n", tableau[i]);// boucle d'affichage du tableau
    }
    do
    {
        verifier = 1;// on innitialise le bolleen a "1".
        for(i = 0 ; i < 5 ; i++ )
        {
            if(tableau[i] > tableau[i + 1])//si un case est plus grande que la prochaine,
            {
                verifier = 0;// on innitialise le bolléen a "0" ( tableau en desordre )
                temporaire = tableau[i];//on copie la case dans la memoire tampon
                tableau[i] = tableau[i + 1];//on met dans la case la valeure qui se trouve dans la case d'apres
                tableau[i + 1] = temporaire;//on remet la memoire tampon dans la 2 eme case
            }
        }// et on fait sa avec la 2 eme et la 3 eme... puis avec la 3 eme et la 4 eme ...ect...
    }while(verifier != 1);//jusqu'au moment ou le tableau sera en ordre.

    printf("\t\ttableau RANGE\n\n");

    for(i = 0 ; i < 5 ; i++ )
    {
        printf("\n%d", tableau[i]);//on affiche le tableau rangé pour verifier
    }
        return 0;
}



A voir également:

2 réponses

LeChikito Messages postés 1589 Date d'inscription lundi 19 mars 2012 Statut Membre Dernière intervention 3 août 2012 322
9 mai 2012 à 16:22
Essaye ceci
for(t = 1; t < tailleTableau; t++) 
{ 
   for(i=0; i < tailleTableau - 1; i++) 
   { 
      if(tableau[i] > tableau[i+1]) 
      { 
         temporaire= tableau[i] - tableau[i+1]; 
         tableau[i] = tableau[i+1]; 
         tableau[i+1] += temporaire; 
      } 
   } 
} 
1
Pandor31 Messages postés 7 Date d'inscription lundi 7 mai 2012 Statut Membre Dernière intervention 9 mai 2012
9 mai 2012 à 17:18
Sa marche :D Merci beaucoup :) Mais sa reste un mystere pourquoi le soluce que j'ai essayer precedement fonctionnait...
0
LeChikito Messages postés 1589 Date d'inscription lundi 19 mars 2012 Statut Membre Dernière intervention 3 août 2012 322
9 mai 2012 à 20:22
^_^
N'oublie pas de marquer le sujet comme résolu
0
LeChikito Messages postés 1589 Date d'inscription lundi 19 mars 2012 Statut Membre Dernière intervention 3 août 2012 322
9 mai 2012 à 15:48
Bonjour,
Avez-vous tester le 2ème programme?
Cordialement,
0
Pandor31 Messages postés 7 Date d'inscription lundi 7 mai 2012 Statut Membre Dernière intervention 9 mai 2012
9 mai 2012 à 16:05
oui, les 2 programme sont tester et le 2eme me rend un bon résultat(1,3,5,7,11). et le premier me rend se que jexplique dans le poste d'ouverture(2,4,4,4,4). :/
0
LeChikito Messages postés 1589 Date d'inscription lundi 19 mars 2012 Statut Membre Dernière intervention 3 août 2012 322
9 mai 2012 à 16:08
Etrange car la ligne
if(tableau[i] > tableau[i + 1])
est normalement censée buguer lorsque i = 4 (on essaye d'accéder à la case tableau[5] qui n'existe pas...)
0
Pandor31 Messages postés 7 Date d'inscription lundi 7 mai 2012 Statut Membre Dernière intervention 9 mai 2012
9 mai 2012 à 16:24
Hmm oui je comprend se que tu veut dire... Le i++ de la boucle est suposer de continuer a grimper a chaque boucle... alors pourquoi le sien fonctionne...
0
LeChikito Messages postés 1589 Date d'inscription lundi 19 mars 2012 Statut Membre Dernière intervention 3 août 2012 322
9 mai 2012 à 16:25
Je ne sais pas. Tout ce que je sais, c'est qu'il est un peu bancale (utiliser un int à la place d'un bool, bof bof...)
0
Pandor31 Messages postés 7 Date d'inscription lundi 7 mai 2012 Statut Membre Dernière intervention 9 mai 2012
Modifié par Pandor31 le 9/05/2012 à 16:31
Ha oui le i est reinitialise au debut de la boucle par i=0 :p

ha oui je comprend ce que tu veut dire. s'est quand il verifie la derniere variable du tableau...
0