Programme en c probleme de boucles

Fermé
heno - 23 mars 2008 à 20:37
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 - 24 mars 2008 à 11:04
Bonjour,
je dois faire:
Écrire un programme structuré en fonctions auxquelles le tableau est passé en paramètre, qui permet :
 de lire 10 nombres et de bâtir le tableau des 10 nombres
 d'afficher les 4 listes suivantes :
• la liste des nombres dans l'ordre dans lequel on les a lus (du premier au dernier)
• la liste des nombres dans l'ordre inverse de leur lecture (du dernier au premier)
• la liste des nombres impairs
• la liste des nombres d’indice pair (indice 0, 2, 4, 6 ….)

j'ai ecris mon programme:

/* T.p.2 Numero 3

*/

#include <stdio.h>
#include <ctype.h>

// Fonctions

// Affichage du message d'entrée des nombres par l'usager
#include <stdio.h>

void affichermessage ()
{
int nb, // Nombre
cpt; // Compteur

for (cpt=1; cpt<=10; cpt++)
{
printf ("Entrez le nombre %d : ", cpt);
scanf ("%d", &nb);
}
}

// Fin de l'affichage du message

// Affichage
void main ()
{


affichermessage ();
int nb,cpt;
const NB_MAX=10;


printf("\n*****Resultats \n Vos chiffres dans l'ordre : %d", nb);
for ( cpt= 0; cpt< NB_MAX; cpt++)
{
printf(" , %d", nb);
}


printf("\nVos chiffres dans le desordre : %d", nb);
for ( cpt= 10; cpt< NB_MAX; cpt--)
{
printf(" , %d", nb);
}



if (nb=2 || nb/2==0)
{
printf ("\n Vos chiffres pairs: %d", nb );
}
else
{
printf ("\n Vos chiffres impairs: %d", nb);
}


getch();
}
voila l'affichage:

Entrez le nombre 1 : 2
Entrez le nombre 2 : 3
Entrez le nombre 3 : 1
Entrez le nombre 4 : 4
Entrez le nombre 5 : 5
Entrez le nombre 6 : 7
Entrez le nombre 7 : 6
Entrez le nombre 8 : 8
Entrez le nombre 9 : 10
Entrez le nombre 10 : 9

*****Resultats
Vos chiffres dans l'ordre : 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2
Vos chiffres dans le desordre : 2
Vos chiffres pairs: 1

3 réponses

vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
23 mars 2008 à 21:41
Salut,

Il y a plusieurs fautes ....

Le premier problème est le fait que nb est uniquement une variable, et non un tableau de variable ; ça implique que quand tu fais une affectation, la valeur précédente est supprimée ... et c'est pas exactement ce que tu veux je crois ...

Le deuxième problème vient de ceci (sans compter avec le fait que nb n'est pas un tableau) :
printf("\n*****Resultats \n Vos chiffres dans l'ordre : %d", nb); 
for ( cpt= 0; cpt< NB_MAX; cpt++) 
{ 
printf(" , %d", nb); 
}

La boucle devrait commencer à 1, du fait que t'as déjà printer le premier (toujours un imaginant que tu mettes un tableau...).

Il y a un problème avec cette boucle :
printf("\nVos chiffres dans le desordre : %d", nb); 
for ( cpt= 10; cpt< NB_MAX; cpt--) 
{ 
printf(" , %d", nb); 
}

La condition de boucle n'est pas bonne : tu dois boucler tant que cpt est suppérieur ou égal à 0 => cpt<=0


Cette condition n'est pas bonne non plus :
if (nb=2 || nb/2==0)

nb/2 ne peut jamais être nul, sauf si nb vaut 0. Tu dois mettre :
if( nb%2 == 0 )

Cette ligne contrôle que le reste de la division de nb par 2 vaut 0 (c'est le modulo en mathématique).
Une fois que t'auras remplacé nb par un tableau, il te faudras mettre deux boucles de parcours pour dire si c'est paire ou impaire, et pas implement une condition avec un else ; la première print le nombre s'il est paire, et passe à la suite s'il est impaire, et respectivement le contraire pour la deuxième boucle.

En esspérant avoir pu t'aider un peu ...
Si t'as des questions, n'hesite surtout pas ...

@Bientôt
0
voila jai corrigée pas mal d'erreurs... mais là il m'affiche:
invalid operands to binary % (pour la ligne 25 et 31)

// FoncTabl: utilisation de tableaux de type simple avec max et min
#include <stdio.h>


// lit au clavier les nombres

void lireTableau(int nombre[ ] , int limite)
{
int i;
for ( i= 0; i < limite; i++)
{
printf("Entrer le nombre %d :", (i+1) );
scanf("%d", &nombre[i]);
}
} // fin lireTableau

// trouve les chiffres pairs et impairs

void pairs (int nombre[ ])
{
do
{
printf("\nVos chiffres pairs : %d", nombre[0]);
}
while (nombre%2!= 0);
do
{
printf("\nVos chiffres impairs : %d", nombre[0]);
}
while (nombre%2= 0);
} // fin lireTableau


void main ( )
{
const int MAX_NB = 10; // nombre de nombres
int i, // compteur
nombre[MAX_NB];

// lecture des nombres
lireTableau(nombre, MAX_NB);

// affichage des résultats
printf("\n*****Resultats \n Vos Nombres : %6.2d", nombre[0]);
for ( i= 1; i < MAX_NB; i++)
printf(" , %6.2d", nombre[i]);


printf( "\nAppuyer sur une touche pour continuer " );
getch();
} // fin du main
0
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160 > heno
24 mars 2008 à 11:04
C'est normal, tu fais le modulo "sur le tableau", mais pas sur le nombre dans une case.
Dans tes boucles, tu dois encore ajouter une variable de contrôle.

Le plus simple cependant est de mettre une boucle for pour le parcourir du début à la fin :
void pairs( int nombre[] )
{
  int taille = sizeof(nombre)/sizeof(*nombre), i=0;
  
  printf("Vos chiffres pairs : ");
  for( i=0; i<taille ; i++ )
  {
    if( i != 0 ) printf(", ");
    if( nombre[i] % 2 == 0 )  printf("%d ",nombre[i]);
  }

  printf("Vos chiffres impairs : ");
  for( i=0; i<taille ; i++ )
  {
    if( i != 0 ) printf(", ");
    if( nombre[i] % 2 == 1 )  printf("%d ",nombre[i]);
  }
}


Normalement ça devrait aller comme ça.

@Bientôt
0
Bonsoir,
tu veux écrire un programme avec parametre d'entrée un tableau mais je ne vois pas ce tableau ni la methode en paramettre un tableau.
Voici un exemple:
#include <stdio.h>
typedef int composante;
void lecture(composante *t,int *nb)
{
int i;
puts("nombre de valeurs à entrer ? ");
scanf("%d",nb);
for(i=1;i<=*nb;i++)
{
printf("%dième valeur : ",i);
scanf("%d",t++);
}
}
void affiche(composante *t, int max)
{
int i;
for(i=0;i<max;i++) printf("%d ",*t++);
puts(" ");
}
void decale_bas(composante *deb, int max)
{
composante c,*t;
t=deb+(max-1);
c=*t;
while (t>deb) {*t=*(t-1);t--;}
*t=c;
}
void decale_haut(composante *t, int nb)
{
composante c;int i;
c=*t;
for (i=1;i<nb;i++) {*t=*(t+1);t++;}
*t=c;
}
void main(void)
{
composante tableau[10];
int nombre;
lecture(tableau,&nombre);
puts("tableau initial :");
affiche(tableau,nombre);
decale_haut(tableau,nombre);
puts("décalage vers le haut :");
affiche(tableau,nombre);
decale_bas(tableau,nombre);
puts("décalage vers le bas :");
affiche(tableau,nombre);
}

void decale_haut(composante *t, int nb)
{
composante c;int i;
c=*t;
for (i=1;i<nb;i++) {*t=*(t+1);t++;}
*t=c;
}

Bon courage!
0
Il te suffira de faire la methode pour afficher les nombre paires et impaires je n'ai pas assez de temps.
0