Résultat incorrect

Fermé
programmation - Modifié par Chris 94 le 3/03/2016 à 16:15
 Utilisateur anonyme - 4 mars 2016 à 12:07
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]);
 }
}

A voir également:

2 réponses

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>
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
3 mars 2016 à 21:35
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.
0
Utilisateur anonyme
3 mars 2016 à 23:06
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 ?
0
programmation > Utilisateur anonyme
4 mars 2016 à 10:59
je 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)
0
programmation
4 mars 2016 à 12:00
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 */

}
}
0
Utilisateur anonyme
4 mars 2016 à 12:07
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]...
0