Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage C > malloc pour un double[][] > Lecture du sujet

malloc pour un double[][]

Vous devez être inscrit pour pouvoir poster des messages

RésoluLe problème de ce sujet a été résolu

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne mangeur_de_papaye # Posté le 03/07/2008 à 20:22:38
Groupe : Membres
Bonjour à tous,

Je débute en C et voilà mon problème:
Je veux que l'utilisateur puisse taper sur la console, la dimension n d'un tableau[n][n+1].
Bon, on pense tout de suite au malloc, et après avoir bien relu le cours je vois pas du tout comment je pourrais faire.

Voila, si quelqu' un veut bien m'aiguiller.


Hors ligne double_ZerO # Posté le 03/07/2008 à 20:29:41
tant que tu rames, tu avances
Avatar
Groupe : Membres
Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Salut,

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
int *tab = NULL;
int i = 0;

tab = malloc(n*sizeof(int));

for (i=0;i<n;i++)
{
    tab[i] = malloc(m*sizeof(int));
{ 

for (j=0;j<n;j++)
{
    tab[i][j]=0;
    printf("%d",tab[i][j]);
}


ça peut être une solution où 'n' et 'm' sont la taille de tes dimensions (saisi par l'utilisateur par exemple)...

:magicien:
Édité le 03/07/2008 à 20:31:08 par double_ZerO

Image utilisateur

Tout problème a une solution, le vrai problème est de trouver la solution
 
Hors ligne mangeur_de_papaye # Posté le 03/07/2008 à 20:34:45
Groupe : Membres
Aaaaa ok ok ok ok ok ok ok
MERKI merki
Hors ligne Erosquare # Posté le 03/07/2008 à 20:36:03
Groupe : Membres
Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
int main()
{
    int i, n;
    double **matrice = NULL;
    
    matrice = (double**)malloc(n * sizeof(double*));
    
    for(i = 0; i < n; i++)
        matrice[i] = (double*)malloc((n+1) * sizeof(double));

    return 0;
}
Le contrôle des erreurs n'est pas effectué, à toi de rajouter les contrôles nécessaires.
Édité le 03/07/2008 à 21:46:03 par Erosquare

Image utilisateur
 
Hors ligne mangeur_de_papaye # Posté le 03/07/2008 à 21:07:31
Groupe : Membres
le second code marche mieux car sur visual on affiche:
"un indice requiert un type tableau ou pointeur"
pour une erreur au niveau du deuxieme malloc:le **matrice arrange la chose.
merci a toi erosquare.
Hors ligne Erosquare # Posté le 03/07/2008 à 22:03:27
Groupe : Membres
j'ai corrigé deux petits trucs dans mon code. Si t'as besoin de desallouer ta matrice :

Code : C
1
2
3
4
5
6
7
8
9
void freeMatrice(double** matrice, int n)
{ 
    int i;
    
    for(i = 0; i < n; i++)
        free(matrice[i]);
    
    free(matrice);
}

Image utilisateur
 
Hors ligne mangeur_de_papaye # Posté le 03/07/2008 à 23:01:05
Groupe : Membres
AAAAAAAAAAA ya quand meme un probleme!!!!!

Regarde par toi meme en faisant n=2 sur la console
met des coeff non nuls
Est-ce un free(systeme) ne suffirait po?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>



int main(int argc, char *argv[])

/*DEBUT DU PROGRAMME*/

{
//Declaration de la *matrice
double **systeme = NULL;
int n = 0 ;//dimension de la matrice

//Declaration des variables pour parcourir la matrice
int l=0 /*Pour parcourir les lignes*/,
c=0/*Pour parcourirles colonnes*/,
d=0/*Pour parcourir de gauche a droite et vis versa et appeler le coefficient diagonale*/;
double m=0/*Pour enregistter la valeur divisante*/;

/*TITRE*/

printf (" RESOUDRE UN SYSTEME A N EQUATIONS ET N INCONNUES\n\n");

/*ALLOCATION DYNAMIQUE*/

printf ("Nombre d'equations = Nombre d'inconnues = ");
scanf ("%ld", &n);

systeme = malloc ( n*sizeof(double));

for (l=0; l<n; l++)
{
systeme[l] = malloc ( (n+1)*sizeof(double));
}

/*Comment ca marche??*/
printf (" \n\n\n Rentrer les coefficients comme presente :\n\n ");
printf (" systeme[0][0]*inconnue1 + systeme[0][1]*inconnue2 + ... = systeme[0][n+1]\n ");
printf (" systeme[1][0]*inconnue1 + systeme[1][1]*inconnue2 + ... = systeme[1][n+1]\n ");
printf ("\n ...\n\n ");
printf (" systeme[n-1][0]*inconnue1+ systeme[n-1][1]*inconnue2+ ... = systeme[n-1][n+1]\n");
printf (" systeme[n][0]*inconnue1 + systeme[n][1]*inconnue2 + ... = systeme[n][n+1]\n\n\n ");
printf ( " --> Rentrer des systeme[i][i]=!0\n\n\n");


/*RENTREE DES COEFFICIENTS*/

for (l=0; l<n; l++)
{
for (c=0; c<(n+1); c++)
{

printf ( "systeme[%ld][%ld]= ",l,c);
scanf ( "%lf", &systeme[l][c]);

}
}

/*AFFICHAGE DE LA MATRICE*/

for (l=0; l>n; l++)
{
for (c=0; c<(n+1); c++)
{
if (c<n){ printf( "%lf ",systeme[l][c] );}
else {printf( "%lf\n",systeme[l][c] );}//C'est juste pour revenir à la ligne
}
}
printf ("\n\n");

/*I) L'ALLER : DE GAUCHE A DROITE*/

for (d=0; d<n; d++)
{

//i) Première opération
m=systeme[d][d];
for(c=0; c<(n+1); c++)
{

systeme[d][c]=systeme[d][c]/m;

/*On divise la ligne du coefficient diagonale par celui ci,
en parcourant les colonnes à d constant*/
}


//ii) Deuxième opération
for (l=d+1; l<n; l++)/*On ne touche que les coefficients en dessous du coefficient diagonale de la colonne */
{
m=systeme[l][d];
for(c=0; c<(n+1); c++)//opération sur la ligne l
{
systeme[l][c]=systeme[l][c]-m*systeme[d][c];
/*Chaque ligne reçoit elle même moins
le cofficient de la colonne d de ligne l
fois la ligne d*/

}
}
}

/*II) LE RETOUR : DE DROITE A GAUCHE*/

for (d=(n-1); d>=1; d--)
{

for (l=d-1; l>=0; l--)/*On ne touche que les coefficients au dessus du coefficient diagonale de la colonne */
{
m=systeme[l][d];
for (c=(n+1); c>=0; c--)//opération sur la ligne l
{
systeme[l][c]=systeme[l][c]-m*systeme[d][c];
/*Chaque ligne reçoit elle même moins
le cofficient de la colonne d de ligne l
fois la ligne d*/

}
}
}

/*III) AFFICHAGE DE LA MATRICE PIVOTEE GAUSSEMENT*/

for (l=0; l<n; l++)
{
for (c=0; c<(n+1); c++)
{
if (c<n){ printf( "%lf ",systeme[l][c] );}
else {printf( "%lf\n",systeme[l][c] );}
}
}
printf("\n\n");

/*IV) AFFICHAGE DES SOLUTIONS*/

for (l=0; l<n; l++)
{
printf ( " inconnue%ld = %lf\n", l+1, systeme[l][n+1]);
}



/*FIN DU PROGRAMME*/


for (l=0; l<n; l++)
{
free (systeme[l]);
}
free (systeme);



system("PAUSE");
return EXIT_SUCCESS;
}

Hors ligne candide # Posté le 04/07/2008 à 00:06:51
"In code we trust"
Avatar
Groupe : Membres
Citation : double_ZerO

Code : C
1
2
3
4
5
6
7
8
int *tab = NULL;
int i = 0;

tab = malloc(n*sizeof(int));

for (i=0;i<n;i++)
{
    tab[i] = malloc(m*sizeof(int));


N'importe quoi, tab[i] est un entier.


 
Hors ligne -ed- # Posté le 04/07/2008 à 01:39:01
C is a sharp tool
Avatar
Groupe : Membres
Citation : mangeur_de_papaye
Je débute en C et voilà mon problème:
Je veux que l'utilisateur puisse taper sur la console, la dimension n d'un tableau[n][n+1].
Bon, on pense tout de suite au malloc, et après avoir bien relu le cours je vois pas du tout comment je pourrais faire.

Voila, si quelqu' un veut bien m'aiguiller.

http://mapage.noos.fr/emdel/notes.htm#tabdyn_2d

Emmanuel Delahaye.
Non à la pub sur l'alcool sur Internet.

Des infos sur la programmation et le langage C:
http://bien-programmer.blogspot.com/
http://mapage.noos.fr/emdel/


Image utilisateur
 

Retour au forum "Langage C" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 138 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0661s (0.0491s)