Remplir un tableau en C d'après un fichier .txt

Discutez d'informatique ici !
coqp-ox
Membre Naturel
Messages: 52
Enregistré le: 22 Nov 2013, 10:00

par coqp-ox » 10 Déc 2013, 11:35

Voila les erreurs que j'ai constaté, si je crée juste un fichier que j'essaye de compiler CB m'indique ceci :

if ((A[i] = calloc(*col, sizeof(**A))) == NULL)
error: invalid conversion from `void*' to `double*'|

Ensuite, si je crée un nouveau projet alors il m'indique ca :


-------------- Build: Debug in lire_matrice ---------------

Linking stage skipped (build target has no object files to link)
Nothing to be done.

:stupid_in

EDIT : Alleluja ! J'ai réussi à faire compiler le projet. Bon seul petit bémol, j'ai "pd d'ouverture fichier" en output :(



Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 10 Déc 2013, 11:52

Cela signifie que tu n'as pas rentré le bon chemin pour ton fichier.

PS : personnellement, je code sous vim, je n'ai rien trouvé de mieux =).

coqp-ox
Membre Naturel
Messages: 52
Enregistré le: 22 Nov 2013, 10:00

par coqp-ox » 10 Déc 2013, 11:57

ampholyte a écrit:Cela signifie que tu n'as pas rentré le bon chemin pour ton fichier.

PS : personnellement, je code sous vim, je n'ai rien trouvé de mieux =).


Effectivement, donc je l'ai mis dans le dossier du projet pour corriger l'erreur (c'est suffisant ?) et finalement le programme compile sauf qu'il m'affiche "1 lignes et 0 colonnes" alors qu'avec mes doigts j'arrive à compter (plus ou moins vu que mes doigts ne sont pas tous de la meme taille) 32 lignes/colonnes :cry:

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 16:31

par joel76 » 10 Déc 2013, 12:02

Essaye déjà avec mon fichier, ça fonctionnait !

coqp-ox
Membre Naturel
Messages: 52
Enregistré le: 22 Nov 2013, 10:00

par coqp-ox » 10 Déc 2013, 12:06

joel76 a écrit:Essaye déjà avec mon fichier, ça fonctionnait !


Effectivement, ca fonctionne bien avec ton fichier !

Voila le mien, peut-etre qu'il contient trop de membres et qu'il y a un problème de buffer (je ne comrpends que la moitié de ce que je dis :marteau: )

1 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1.41421 4 0.585786 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0.585786 2.07055 0.44949 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0.44949 1.65685 0.378937 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0.378937 1.42558 0.333851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0.333851 1.27135 0.301824 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0.301824 1.15876 0.277556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0.277556 1.0718 0.258343 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0.258343 1.00197 0.242641 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0.242641 2.58301 1.04886 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1.04886 2.82843 0.365352 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0.365352 1.41699 0.343146 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0.343146 1.3354 0.324555 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0.324555 2.14214 0.746512 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0.746512 3.59897 1.05297 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.05297 3.29346 0.593759 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.593759 2.51359 0.663034 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.663034 3.34901 1.01147 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.01147 3.32906 0.653056 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.653056 3.04814 0.871014 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.871014 2.72863 0.493298 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.493298 2.09021 0.551808 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.551808 1.41041 0.153396 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.153396 0.458849 0.0760289 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0760289 0.303244 0.0755932 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0755932 0.301516 0.0751649 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0751649 0.299817 0.0747438 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0747438 0.445992 0.148252 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.148252 0.443548 0.0735217 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0735217 0.293298 0.0731275 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0731275 0.43645 0.145097
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 1


EDIT : Ahhhh ! J'ai compris, les 3 et 4 sur ton .txt représente le nombre de lignes/colonnes :marteau:

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 10 Déc 2013, 12:06

coqp-ox a écrit:Effectivement, donc je l'ai mis dans le dossier du projet pour corriger l'erreur (c'est suffisant ?) et finalement le programme compile sauf qu'il m'affiche "1 lignes et 0 colonnes" alors qu'avec mes doigts j'arrive à compter (plus ou moins vu que mes doigts ne sont pas tous de la meme taille) 32 lignes/colonnes :cry:


Pourrais-tu mettre à disposition ton fichier si possible ici ou par un site d'upload ?

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 16:31

par joel76 » 10 Déc 2013, 13:14

Il faut tout lire dans les posts :ptdr:

coqp-ox
Membre Naturel
Messages: 52
Enregistré le: 22 Nov 2013, 10:00

par coqp-ox » 10 Déc 2013, 14:12

Juste une petite question Joel :

Est-ce que ton programme marche de la même façon pour une matrice formée d'une seule colonne ?

:ptdr:

Edit: C'est bon je pense avoir résolu mon problè-me, pour l'instant !

coqp-ox
Membre Naturel
Messages: 52
Enregistré le: 22 Nov 2013, 10:00

par coqp-ox » 11 Déc 2013, 10:36

Après avoir réussi à lire un tableau .txt en C, j'aimerais maintenant que vous m'aidiez à faire le contraire, c'est à dire...écrire un tableau dans un fichier .txt !

J'ai essayé tout seul, le programme compile et tout, et tout, le problème c'est qu'arrivé au moment ou je vais écrire dans le fichier, ca bug...
Voila le code que j'avais fait
[HTML]void ecrirex(double *x, int n)
{
int i;
FILE* fichier = NULL;

fichier = fopen("ValeursM.txt", "w");
if (fichier != NULL)
{
for(i=0;i<n;i++)
{
fprintf(fichier, "%0.5lf", x[i]);
}
fclose(fichier);
}

}[/HTML]

Merci d'avance pour l'aide que vous m'apporterez ! :we:

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 11 Déc 2013, 10:43

coqp-ox a écrit:Après avoir réussi à lire un tableau .txt en C, j'aimerais maintenant que vous m'aidiez à faire le contraire, c'est à dire...écrire un tableau dans un fichier .txt !

J'ai essayé tout seul, le programme compile et tout, et tout, le problème c'est qu'arrivé au moment ou je vais écrire dans le fichier, ca bug...
Voila le code que j'avais fait
[HTML]void ecrirex(double *x, int n)
{
int i;
FILE* fichier = NULL;

fichier = fopen("ValeursM.txt", "w");
if (fichier != NULL)
{
for(i=0;i<n;i++)
{
fprintf(fichier, "%0.5lf", x[i]);
}
fclose(fichier);
}

}[/HTML]

Merci d'avance pour l'aide que vous m'apporterez ! :we:


Bonjour,

Comment appelles-tu ta fonction ? Peux-tu rajouter la condition suivante ?
Code: Tout sélectionner
void ecrirex(double *x, int n)
{
    int i;
    FILE* fichier = NULL;

    fichier = fopen("ValeursM.txt", "w");

    if (x == NULL) {
        fprintf(stderr, "error x is null\n");
        return;
    }

    if (fichier != NULL)
    {
        for(i=0;i<n;i++)
        {
        fprintf(fichier, "%0.5lf", x[i]);
        }
        fclose(fichier);
    }

}

coqp-ox
Membre Naturel
Messages: 52
Enregistré le: 22 Nov 2013, 10:00

par coqp-ox » 11 Déc 2013, 10:48

J'ai bien rajouté la condition et rien n'a changé, donc je suppose que le problème de vient pas de mon tableau x, c'est ca ?

Je l'appelle comme :
Code: Tout sélectionner
  ecrirex(x,n);

:marteau:

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 11 Déc 2013, 11:10

coqp-ox a écrit:J'ai bien rajouté la condition et rien n'a changé, donc je suppose que le problème de vient pas de mon tableau x, c'est ca ?

Je l'appelle comme :
Code: Tout sélectionner
  ecrirex(x,n);

:marteau:


Peux-tu montrer comment as-tu construit x et n ?

Tu essayes peut-être de lire plus loin que ton tableau.

coqp-ox
Membre Naturel
Messages: 52
Enregistré le: 22 Nov 2013, 10:00

par coqp-ox » 11 Déc 2013, 11:15

En fait x est un tableau qui comporte les "résultats" d'un système AX=B, n est le nombre d'inconnues (je n'ai pas créé ce code, j'ai juste modifié quelques parties pour l'adapter à mes besoins) :
Code: Tout sélectionner
void gauss(double **A, double **b, double *x, int n)
{
    int i, j, k ;
    int imin ;
    double p ;
    double sum, valmin, tump1, tump2 ;

    for (k = 0 ; k  -1 ; i--)
    {
        sum = 0 ;

        for (j = n-1 ; j > i ; j--)
        {
            sum = sum + A[i][j]*x[j] ;
        }
        x[i] = (b[i][0] - sum)/A[i][i] ;
    }
}


Le tableau x est affiché à un moment dans le programme de cette façon :
Code: Tout sélectionner
void affich_sol(double *x, int n)
{
    int i ;
    printf(" ===>Affichage de la solution : \n\n\n");

    for (i = 0 ; i < n ; i++)
    {
        printf("(X%d)   =",i+1);
        printf("\t%.8f",x[i]);
        printf("\n\n");
    }
}

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 11 Déc 2013, 11:31

Essaye de rajouter dans ta fonction d'écritures des traces (printf) dans ta boucle for par exemple, pour que tu puisses savoir à quel moment et à quel indice de ton tableau, ton programme crash.

Sinon essaye d'executer ton programme pas à pas en mettant des breakpoints.

coqp-ox
Membre Naturel
Messages: 52
Enregistré le: 22 Nov 2013, 10:00

par coqp-ox » 11 Déc 2013, 11:40

ampholyte a écrit:Essaye de rajouter dans ta fonction d'écritures des traces (printf) dans ta boucle for par exemple, pour que tu puisses savoir à quel moment et à quel indice de ton tableau, ton programme crash.

Sinon essaye d'executer ton programme pas à pas en mettant des breakpoints.


Apparemment le programme survient juste après la ligne :
Code: Tout sélectionner
 fichier = fopen("ValeursM.txt", "w");

J'ai essayé de créer un fichier .txt avec ce nom mais ca ne change rien :dodo:

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 11 Déc 2013, 12:11

Peux-tu rajouter cela dans ton code :

Code: Tout sélectionner
/* Ne pas oublié d'inclure */
#include

fichier = fopen("ValeursM.txt", "w");
if (fichier == NULL) {
    fprintf(stderr, "fopen : %s\n", strerror(errno));
    return;
}
for (i = 0; i < n; i++) {
    fprintf(fichier, "%0.5lf", x[i]);
}
fclose(fichier);

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 16:31

par joel76 » 11 Déc 2013, 12:16

Petit détail, je mettrais un espace entre le lf et le guillement :
Code: Tout sélectionner
for (i = 0; i < n; i++) {
    fprintf(fichier, "%0.5lf ", x[i]);
}
fputs("", fichier); // pour aller à la ligne

coqp-ox
Membre Naturel
Messages: 52
Enregistré le: 22 Nov 2013, 10:00

par coqp-ox » 11 Déc 2013, 12:16

ampholyte a écrit:Peux-tu rajouter cela dans ton code :

Code: Tout sélectionner
/* Ne pas oublié d'inclure */
#include

fichier = fopen("ValeursM.txt", "w");
if (fichier == NULL) {
    fprintf(stderr, "fopen : %s\n", strerror(errno));
    return;
}
for (i = 0; i < n; i++) {
    fprintf(fichier, "%0.5lf", x[i]);
}
fclose(fichier);


Olé ! :ptdr:

Un grand merci ca marche parfaitement !

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 7 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite