Programme en c probleme de boucles
heno
-
vlmath Messages postés 794 Date d'inscription Statut Contributeur Dernière intervention -
vlmath Messages postés 794 Date d'inscription Statut Contributeur Dernière intervention -
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
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
A voir également:
- Programme en c probleme de boucles
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Message programmé iphone - Guide
- Programme word gratuit - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
3 réponses
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) :
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 :
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 :
nb/2 ne peut jamais être nul, sauf si nb vaut 0. Tu dois mettre :
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
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
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!
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!
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
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 :
Normalement ça devrait aller comme ça.
@Bientôt