Résultat incorrect

Bonjour,

cet algorithme ne me donne pas un résultat correct tous les valeurs sont 0
#include<stdio.h>
#include <stdlib.h>
# include <math.h>
#include <malloc.h>
void tab (int *tab2, int nb)
{
   int i;
   for (i = 1; i <= nb; i++)
   {printf ("entrer les  elements  ", tab2[i]);
      scanf ("%d", &tab2[i]);
   }
}
int main( )
{int n,nb,i,j,B[n],x[n],t[n],v[n];
/*int** h;*/
int m[100]={2,5,4,3,9,8};
printf("enter le nombre des elements \n ",nb);
   scanf("%d",&nb);
    tab(B,nb);
    printf("enter le nombre des elements \n ",n);
   scanf("%d",&n);
 tab(x,n);
/*h=(int **)malloc(n*sizeof(int*));*/
 /* *(h+i)=(int*)malloc(n*sizeof(int));*/
 for (i=1;i<=n;i++)
 {t[i]=x[i];
 printf("%d\n",t[i]);
 }
 v[1]=t[1];
 printf("la pemiére sorite est %d \n",v[1]);
 for (i=2;i<=n;i++)
 {
 for(j=i;j<=n;j++)
 for(int k=1;k<=6;k++)
 {t[j]=((t[j]-t[i-1])*m[k])%B[j];
}
 printf("la sortie est  %d \n",t[i]);
 }
}

2 réponses

  1. Bonjour.

    Pourrais-tu :
    1- Mettre un peu d'ordre dans ton programme, sauter des lignes, aérer et l'entrer avec les balises code c et /code.
    2- Nous expliquer, eventuellement, ce qu'il est censé faire (à travers des commentaires, ou pas).

    Merci.

    EDIT : Je me suis permis de mettre un minimum d'ordre pour ceux qui voudraient également aider :

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <malloc.h>
    
    void tab (int *tab2, int nb)
    {
        int i;
    
        for (i = 1; i <= nb; i++)
        {
            printf ("Entrez les elements", tab2[i]);
            scanf ("%d", &tab2[i]);
        }
    }
    
    int main()
    {
        int n, nb, i, j, B[n], x[n], t[n], v[n];
        /*int** h;*/
        int m[100]= {2, 5, 4, 3, 9, 8};
    
        printf("Entrez le nombre des elements\n ", nb);
        scanf("%d", &nb);
    
        tab(B, nb);
    
        printf("Entrez le nombre des elements\n ", n);
        scanf("%d", &n);
    
        tab(x, n);
    
        /*h=(int **)malloc(n*sizeof(int*));*/
        /* *(h+i)=(int*)malloc(n*sizeof(int));*/
    
        for (i = 1; i <= n; i++)
        {
            t[i] = x[i];
            printf("%d\n", t[i]);
        }
    
        v[1] = t[1];
    
        printf("La premiere sortie est %d\n", v[1]);
    
        for (i = 2; i <= n; i++)
        {
        for(j = i; j <= n; j++)
        for(int k = 1; k <= 6; k++)
        {
            t[j] = ((t[j]-t[i-1])*m[k])%B[j];
        }
    
        printf("la sortie est %d\n", t[i]);
        }
    }

    <\EchoIsON>
    1. Bonjour,

      int n, nb, i, j, B[n], x[n], t[n], v[n];

      Si tu penses que cette ligne va déclarer le tableau B[n] comme tu le désires, eh bien, c'est pas du gâteau!
      Comment veux-tu que B[n] soit correct alors qu'aucune valeur n'a été attribuée à n. Dans un cas de non-initialisation, la valeur de n est quelconque; ainsi la taille de ton tableau est elle aussi quelconque. Il arrivera, dans certains cas, que ton programme plante.
      D'autre part, le tableau B doit plutôt avoir la taille de nb.

      for (i = 1; i <= n; i++)

      Pour explorer un tableau de taille n, en C l'indice doit aller de 0 à n-1.

      printf ("Entrez les elements", tab2[i]);

      tab2[i] ne sera jamais affiché, il faut plutôt écrire:
      printf("Entrez l'element n° %d : \n ", nb);.

      Sans doute d'autres erreurs...

      Bon courage.
      1. Bonsoir.

        Pour explorer un tableau de taille n, en C l'indice doit aller de 0 à n-1.
        Ou alors le compteur doit être strictement inférieur à n.

        Sinon oui, le programme plante dés le début.

        printf("Entrez le nombre des elements\n ", n);

        devrais être :
        printf("Entrez le nombre des elements\n ");

        tout simplement non ?
        Ou alors ajouter un "%d" pour afficher n, même s'il ne vaut rien à ce point du programme.

        Pour l'auteur du sujet, qu'essaies-tu de faire exactement ?
      2. @Utilisateur anonymeje vous répond: je donne au programme une base b (m1,m2.....mn) sous forme d'un tableau , et un nombre x =(x1,x2,...xn) donc je vais calculer les coefficients du nombre x on appliquant cet algorithme .
        en fin je vais avoir comme résultat un tableau x'=(x'1,x'2,....x'n)
      3. Bonjour,
        mais mon problème n'est pas dans l'affichage d'un tableau , même que je fais votre méthode le programme m'a donne toujours le même résultat qui est 0
        #include<stdio.h>
        #include <stdlib.h>
        # include <math.h>
        #include <malloc.h>
        void tab (int *tab2, int nb)/*procedure pour saisir un tableau */
        {
        int i;
        for (i = 1; i <= nb; i++)
        {printf ("entrer l'element numero \n ", tab2[i]);
        scanf ("%d", &tab2[i]);
        }
        }
        int main( )
        {int n,nb,i,j,B[4],x[4],t[4],v[4];
        int m[10]={2,5,4,3,9,8};

        printf("entrer le nombre des elements \n ");
        scanf("%d",&nb);
        tab(B,nb);/*saisir un premier tableau*/

        printf("entrer le nombre des elements \n ");
        scanf("%d",&n);/*saisiir un deuxième tableau*/
        tab(x,n);

        for (i=1;i<=n;i++)
        {
        t[i]=x[i];
        printf("%d\n",t[i]);/* on met les valeurs du deuxième tableau dans t[i]*/
        }
        v[1]=t[1];
        printf("la premiere sorite est %d \n",v[1]);/*la première sortie égal à t[1]*/
        for (i=2;i<=n;i++)
        {

        for(j=i;j<=n;j++)
        {
        for(int k=1;k<=6;k++)
        {
        t[j]=((t[j]-t[i-1])*m[k])%B[j];
        }
        }
        printf("la sortie est %d \n",t[i]);/* afficher t2,t3 et t4 */

        }
        }
      4. Il y a toujours un problème au niveau de la syntaxe :

        printf("la sortie est %d \n",t[i]);

        Tu veux afficher chaque élément de t ? Alors fait une boucle for avec i variant de du premier au dernier terme, parce-que tu ne peux pas écrire ça comme cela, et même si tu pouvais tu aurais l'affichage d'un seul terme, non de plusieurs

        printf ("entrer l'element numero \n ", tab2[i]); 

        Pareil, tu dois ajouter %d, sinon tab2 ne sera pas affiché
        A mon avis tu devrais plutot écrire quelque chose comme : Entrez l'element numero 1 etc. puis l'utilisateur entre les valeurs, parce-que tu ne peux pas demander d'entrer l'element numero tab2[i]...