Probleme de C

Résolu
Bonjour,

je dois faire un programme en C, je vous explique: on a un tableau de 10 cases ou on y entre des valeurs manuellement, les valeurs sont lues puis a la fin le programme doit dire si la suite de nombre est egale, croissante, decroissant ou differente.
voici des exemples:
1 1 1 1 1 1 1 1 1 1 = egaux
1 1 1 1 1 1 1 1 1 2 = croissants
1 2 3 4 5 6 7 8 9 10 = croissants
2 2 2 2 2 1 1 1 1 1 = decroissants
3 9 3 7 8 5 2 6 7 9 = differents

Et voici mon programme qui va pas comme il le devrait... pourriez vous m'aider svp???

#include <stdio.h>
void main ()
{
	int v[10],i,a,b,c;
	printf("Veuillez entrer des entiers\n");
	for(i=0;i<10;i++)
	{
		printf("Entrer la valeur de la case %d: ",i+1);
		scanf("%d",&v[i]);
	}
	for(i=0;i<=9;i++)
	{
		if(v[i]==v[i+1])
		{	
			a++;
		}
		if(v[i]<v[i+1])
		{
			b++;
		}
		if (v[i]>v[i+1])
		{
			c++;
		}
	}
	if(a==9 && b==0 && c==0)
	{
		printf("Les nombres sont egaux");
	}
	else
	{
		if(a>=0 && b!=0 && c==0)
		{
			printf("Les nombres sont croissants");
		}
		else
		{
			if(a>=0 && b==0 && c!=0)
			{	
				printf("Les nombres sont decroissats");
			}
			else
			{
				if(a!=0 && b!=0 && c!=0)
				{
					printf("Les nombres sont differents\n");
				}
			}
		}
	}
}<code>Configuration: Windows Vista
Internet Explorer 7.0
</code>

17 réponses

  1. Je veux pas dire de betises , mais je crois que tes "else" sont en causes,

    je fais quelques tests
    1. Contributeur
      Salut,
      J'ai jeté un coup rapidement. Dis-moi si ceci marche.
      Sinon, tu peux utiliser plutôt des switch, au lieu de if pour augmenter la lisibilité. Enfin, c'est pas ça qui fait que ça marche mieux ^^.
      Cdlt
      #include <stdio.h>
      int main (void) {
          int v[10],i,a,b,c;
          printf("Veuillez entrer des entiers\n");
      
          for(i=0;i<10;i++)
          {
              printf("Entrer la valeur de la case %d: ",i+1);
              scanf("%d",&v[i]);
          }
      
          a=b=c=0;
          for(i=0;i<9;i++)
          {
              if(v[i]==v[i+1])
              {   
                  a++;
              }
              if(v[i]<v[i+1])
              {
                  b++;
              }
              if (v[i]>v[i+1])
              {
                  c++;
              }
          }
          if(a==9 && b==0 && c==0)
          {
              printf("Les nombres sont egaux");
          }
          else
          {
              if(a>=0 && b!=0 && c==0)
              {
                  printf("Les nombres sont croissants");
              }
              else
              {
                  if(a>=0 && b==0 && c!=0)
                  {   
                      printf("Les nombres sont decroissats");
                  }
                  else
                  {
                      if(a!=0 && b!=0 && c!=0)
                      {
                          printf("Les nombres sont differents\n");
                      }
                  }
              }
          }
          return 0;
      }
      
      1. J'ai oublier.....

        Et je vien de trouver une autre erreur pour le else final les != faut les mettre en >=
        1. Peut être un cas où B n'est jamais incrémenté? du coup il ne rentre pas dans la 3eme condition...
        2. Contributeur
          T'as testé le code que je t'ai donné plus haut ?
          Cdlt
      2. fiddy j'ai corriger dans le tien comme ce que tu avais corriger etait bon
        1. Contributeur
          Ce que je veux dire, c'est que sur ma machine ça marche.
          Donc, qu'est-ce qui ne va pas dans le code au final ?
      3. Bin quand dans le dernier else a et b et c =!=0 sa bugguais sa n'affichais rien
        maintenant que j'ai modifier de != en sa >= sa va
        il tourne bien la
        1. d'après ce que je vois, ... tu est trop restrictif sur tes tests,

          tu coups tu ne rentre pas dans tes if car au moment ou tu incrémente a, b ou c tu va jusqu'a la case 11, de ton tableau soit une valeur que tu connais pas ... du coup sa peu soit incrementé a, b ou c

          par exemple la suite 1,2,3,4,5,6,7,8,9,10

          -> a=0, b=9 et c=1 et du coup tu ne peux entrer dans aucun "if"

          je sais pas si j'ai été assez clair,

          j'essaye de corriger ton programe
          1. Shinji7800

            Je vien de tester la suite de nombre que tu as marquer 1 2 3 4 5 6 7 8 9 10
            Le programme me dis qu'il est croissant
            1. en faite je parlais de ton programme initial :)
          2. Contributeur
            Re,
            J'en ai profité pour épurer ton programme ;)
            #include <stdio.h>
            
            #define MAX 10
            int main (void) {
                int v[MAX],i,a,b,c;
                puts("Veuillez entrer des entiers");
            
                for(i=0;i<MAX;i++)
                {
                    printf("Entrer la valeur de la case %d: ",i+1);
                    scanf("%d",&v[i]);
                }
            
                a=b=c=0;
                for(i=0;i<MAX-1;i++){
                    if(v[i]==v[i+1])
                        a++;
                    else if(v[i]<v[i+1])
                        b++;
                    else if (v[i]>v[i+1])
                        c++;
            
                }
            
                if(a==MAX-1 && b==0 && c==0)
                    puts("Les nombres sont egaux");
                else if(b && !c)
                    puts("Les nombres sont croissants");
                else if(!b && c)
                    puts("Les nombres sont decroissants");
                else
                    puts("Les nombres sont differents");
            
                return 0;
            }
            
            

            Cdlt
            1. #include <stdio.h>
              
              
              void main ()
              {
                   int v[10],i,a=0,b=0,c=0;
                   printf("Veuillez entrer des entiers\n");
                   for(i=0;i<10;i++)
                   {
                        printf("Entrer la valeur de la case %d: ",i+1);
                        scanf("%d",&v[i]);
                   }
                   
                   for(i=0;i<9;i++)
                   {
                        if(v[i]==v[i+1])
                             a++;
                        else if(v[i]<v[i+1])
                             b++;
                        else if (v[i]>v[i+1])
                             c++;
                   }
                   printf("a=%d",a);
                   printf("b=%d",b);
                   printf("c=%d\n",c);
                   
                   if(a==9 && b==0 && c==0)
                        printf("Les nombres sont egaux\n");   
                   else if(a>=0 && b!=0 && c==0)
                        printf("Les nombres sont croissants\n");
                   else if(a>=0 && b==0 && c!=0)
                        printf("Les nombres sont decroissants\n");
                   else if(a>=0 && b>=0 && c>=0)
                        printf("Les nombres sont differents\n");
              
              
              system("pause");
              }
              


              j'arrive trop tard :D
              pense a le mettre en resolu
              1. Merci a vous 2 de bien avoir voulu me consacrer un peu de votre temps ;)
                1. initialise d'abord a,b et c puis compile et essai encore.en fait si tu n'initialise pas les variables non globales elles ont des valeurs qui sont aléatoires,c'est peut etre à cause de cela.
                  1. je veux juste savoir si ça donne du résultats correctes ;
                    si ça marche c'est bien, sinon je vais essayer de faire un programme .