Probleme de C

Résolu/Fermé
StrikerX Messages postés 11 Date d'inscription mercredi 19 novembre 2008 Statut Membre Dernière intervention 23 juin 2009 - 19 nov. 2008 à 14:11
marouendjerbien Messages postés 35 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 19 novembre 2008 - 19 nov. 2008 à 19:40
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

shinji7800 Messages postés 297 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 30 septembre 2010 47
19 nov. 2008 à 14:17
Bonjour,

laisse moi 5 min je jette un oeil :)
0
StrikerX Messages postés 11 Date d'inscription mercredi 19 novembre 2008 Statut Membre Dernière intervention 23 juin 2009
19 nov. 2008 à 14:19
Merci
0
shinji7800 Messages postés 297 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 30 septembre 2010 47
19 nov. 2008 à 14:22
Je veux pas dire de betises , mais je crois que tes "else" sont en causes,

je fais quelques tests
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
19 nov. 2008 à 14:24
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;
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
shinji7800 Messages postés 297 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 30 septembre 2010 47
19 nov. 2008 à 14:29
petite precision tu n'initialise pas les valeurs de a, b, c
0
StrikerX Messages postés 11 Date d'inscription mercredi 19 novembre 2008 Statut Membre Dernière intervention 23 juin 2009
19 nov. 2008 à 14:31
J'ai oublier.....

Et je vien de trouver une autre erreur pour le else final les != faut les mettre en >=
0
sennin Messages postés 286 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 9 avril 2011 35
19 nov. 2008 à 14:34
Peut être un cas où B n'est jamais incrémenté? du coup il ne rentre pas dans la 3eme condition...
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
19 nov. 2008 à 14:36
T'as testé le code que je t'ai donné plus haut ?
Cdlt
0
StrikerX Messages postés 11 Date d'inscription mercredi 19 novembre 2008 Statut Membre Dernière intervention 23 juin 2009
19 nov. 2008 à 14:37
fiddy j'ai corriger dans le tien comme ce que tu avais corriger etait bon
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
19 nov. 2008 à 14:41
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 ?
0
StrikerX Messages postés 11 Date d'inscription mercredi 19 novembre 2008 Statut Membre Dernière intervention 23 juin 2009
19 nov. 2008 à 14:43
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
0
StrikerX Messages postés 11 Date d'inscription mercredi 19 novembre 2008 Statut Membre Dernière intervention 23 juin 2009
19 nov. 2008 à 14:44
en tout cas MERCI BEAUCOUP de votre aide^^
0
shinji7800 Messages postés 297 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 30 septembre 2010 47
19 nov. 2008 à 14:47
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
0
StrikerX Messages postés 11 Date d'inscription mercredi 19 novembre 2008 Statut Membre Dernière intervention 23 juin 2009
19 nov. 2008 à 14:51
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
0
shinji7800 Messages postés 297 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 30 septembre 2010 47
19 nov. 2008 à 14:55
en faite je parlais de ton programme initial :)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
19 nov. 2008 à 14:52
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
0
StrikerX Messages postés 11 Date d'inscription mercredi 19 novembre 2008 Statut Membre Dernière intervention 23 juin 2009
19 nov. 2008 à 14:54
merci beaucoup
0
shinji7800 Messages postés 297 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 30 septembre 2010 47
19 nov. 2008 à 14:54
#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
0
StrikerX Messages postés 11 Date d'inscription mercredi 19 novembre 2008 Statut Membre Dernière intervention 23 juin 2009
19 nov. 2008 à 14:57
Merci a vous 2 de bien avoir voulu me consacrer un peu de votre temps ;)
0
marouendjerbien Messages postés 35 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 19 novembre 2008 1
19 nov. 2008 à 19:15
Bonjour,
ton programme est-il résolu ??
0
tapsaid Messages postés 60 Date d'inscription samedi 26 avril 2008 Statut Membre Dernière intervention 8 juillet 2009 1
19 nov. 2008 à 19:24
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.
0
marouendjerbien Messages postés 35 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 19 novembre 2008 1
19 nov. 2008 à 19:40
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 .
0