Exercice débutant en C

Résolu/Fermé
south.boy Messages postés 9 Date d'inscription mardi 30 octobre 2012 Statut Membre Dernière intervention 28 décembre 2012 - 30 oct. 2012 à 12:37
south.boy Messages postés 9 Date d'inscription mardi 30 octobre 2012 Statut Membre Dernière intervention 28 décembre 2012 - 30 oct. 2012 à 15:37
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 !!

#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

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
30 oct. 2012 à 14:53
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.
1
south.boy Messages postés 9 Date d'inscription mardi 30 octobre 2012 Statut Membre Dernière intervention 28 décembre 2012
30 oct. 2012 à 15:37
Yesss, merci :D !!
Effectivement, j'avais mal appelé les fonctions (honte à moi...)..

Encore merci, et au revoir :)
0