Exercice débutant en C
Résolu
south.boy
Messages postés
10
Statut
Membre
-
south.boy Messages postés 10 Statut Membre -
south.boy Messages postés 10 Statut Membre -
Bonjour, je doit ecrire un programme qui realise les opérations suivantes :
1 : Prend une constante n donnée par l'utilisateur;
2 : Remplie un tableau t1 de n valeurs aléatoires de 0à20
3 : Affiche les n valeurs de t1;
4 : Calcul et affiche la moyenne de t1;
5 : Remplie un tableau t2 des éléments de t1 mais dans l'ordre inverse;
6 : Affiche t2;
7 : Rempli un tableau t3 avec le reste de la division euclidienne par 4 des valeurs de t2;
8 : Affiche t3;
9 : Donne le nombre de fois où il y a la valeur 0 dans t3;
10 : Remplie un 4eme tableau t4 avec uniquement les valeurs pairs de t3;
11 : Affiche t4;
Voila ce que j'ai déja codé, tout se compil, mais le programme ne fonctionne pas, sauf pour n=25, où il affiche le tableau t1 puis bug :/ .
Je n'arrive pas à voir mes erreurs, help !!
Merci de votre aide
1 : Prend une constante n donnée par l'utilisateur;
2 : Remplie un tableau t1 de n valeurs aléatoires de 0à20
3 : Affiche les n valeurs de t1;
4 : Calcul et affiche la moyenne de t1;
5 : Remplie un tableau t2 des éléments de t1 mais dans l'ordre inverse;
6 : Affiche t2;
7 : Rempli un tableau t3 avec le reste de la division euclidienne par 4 des valeurs de t2;
8 : Affiche t3;
9 : Donne le nombre de fois où il y a la valeur 0 dans t3;
10 : Remplie un 4eme tableau t4 avec uniquement les valeurs pairs de t3;
11 : Affiche t4;
Voila ce que j'ai déja codé, tout se compil, mais le programme ne fonctionne pas, sauf pour n=25, où il affiche le tableau t1 puis bug :/ .
Je n'arrive pas à voir mes erreurs, help !!
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void remp_tab_alea(int t[], int n) //fonction pour remplir le tableau
{
int i=0;
for (i=0 ; i<n ; i++)
{
t[i]=rand()%21; //le tableau doit contenir des valeurs aléatoires de [0;20]
}
return;
}
void affiche_tab(int t[], int n) //fonction pour afficher le contenu du tableau
{
int i=0;
printf("Les valeurs du tableau sont : ");
for (i=0 ; i<n ; i++)
{
printf("%2d ", t[i]);
}
printf("\n");
return;
}
double moyenne (int t[], int n) //fonction pour calculer la moyenne des nombres du tableau
{
int i=0;
double moy=0.0;
for (i=0 ; i<n ; i++)
{
moy=moy+t[i];
}
moy=moy/n;
printf("La moyenne est de %.2lf", moy);
return moy;
}
void div_entier(int t3[], int t2[], int n) //fonction pour remplir un tableau du reste de la div. euclidienne par 4 d'un autre tableau
{
int i=0;
for (i=0 ; i<n ; i++)
{
t3[i]=t2[i]%4;
printf("%d", t3[i]);
}
return;
}
int main() //fonction principale
{
srand(time(0)); //on initie le générateur de nombre aléatoire
int n=0, i=0, j=0;
printf("Donnez n : ");
scanf("%d", &n); //On prend le nombre n voulu par l'utilisateur.
int t[n],t2[n], t3[n], t_pair[n]; //On déclare les tableaux
remp_tab_alea(t[n],n); //On rempli le 1er tableau...
affiche_tab(t[n],n);//...On l'affiche...
moyenne(t[n],n);//...Et on affiche sa moyenne.
printf("\nOn remplit un 2eme tableau, qui est en fait le premier mais inverse.\n");
/* Cette opération sert à inverser les valeurs du 1er tableau et à les mettrent dans le 2eme. */
j=n-1;
for (i=0 ; i<n ; i++)
{
t2[i]=t[j];
j--;
}
affiche_tab(t2[n],n);//On affiche le 2eme tableau
printf("\nOn donne a present le tableau 3 contenent le reste des valeurs du tab 2 dividees par 4. \n");
div_entier(t3[n], t2[n],n); //On rempli le tableau 3 avec les restes.
int nb=0;
for (i=0 ; i<n ; i++)
{
if (t3[i]==0)
{
nb=nb+1;
}
}//On vient de calculer combien de fois il y avait 0 dans le tableau
affiche_tab(t3[n],n);//On affiche le 3eme tableau...
printf("\nIl y a %d fois le nombre 0 dans le 3eme tableau.\n", nb);//...Le nombre de 0.
printf("On prend maintenant un 4eme tableau , qui ne contient QUE les valeurs PAIRS de t3.\n");
/*On prend les valeurs pair du 3eme tableau pour les mettrent dans un 4eme. */
j=0;
for (i=0 ; i<n ; i++)
{
if (t3[i]%2==0)
{
t_pair[j]=t3[i];
j++;
}
}
affiche_tab(t_pair[n],n);//On affiche ce 4eme tableau.
printf("\n\n\nMerci et au revoir !\n\n\n");//On informe de la fin du programme.
return 0;//On fini le main.
}
Merci de votre aide
1 réponse
Bonjour,
S'il s'agit d'un exo :
int t[n],t2[n], t3[n], t_pair[n]; //On déclare les tableaux
C'est correct, mais probablement pas pour les raisons que tu penses.
Je te conseille d'utiliser plutôt : malloc.
int *t;
t=malloc(n*sizeof (*t));
remp_tab_alea(t[n],n);
Pour envoyer en paramètre un tableau (en fait un pointeur), il faut mettre : remp_tab_alea(t,n); tout simplement. Pareil pour toutes les fonctions.
Tu n'as pas besoin de mettre "return" en fin de tes fonctions retournant void.
S'il s'agit d'un exo :
int t[n],t2[n], t3[n], t_pair[n]; //On déclare les tableaux
C'est correct, mais probablement pas pour les raisons que tu penses.
Je te conseille d'utiliser plutôt : malloc.
int *t;
t=malloc(n*sizeof (*t));
remp_tab_alea(t[n],n);
Pour envoyer en paramètre un tableau (en fait un pointeur), il faut mettre : remp_tab_alea(t,n); tout simplement. Pareil pour toutes les fonctions.
Tu n'as pas besoin de mettre "return" en fin de tes fonctions retournant void.
Effectivement, j'avais mal appelé les fonctions (honte à moi...)..
Encore merci, et au revoir :)