une Base Solide en Programmation

C++/Java/Delphi/Assembleur
 
AccueilPortailFAQRechercherS'enregistrerMembresGroupesConnexion
Autopassion.net le site dédié à l'automobile créé par ses utilisateurs
Partagez | 
 

 tableaux dynamiques

Aller en bas 
AuteurMessage
Admin
Administrateur
Administrateur
avatar

Masculin
Nombre de messages : 232
Age : 31
Localisation : A COTé 2MON PC
Loisirs : KUNG FU
Date d'inscription : 05/03/2007

MessageSujet: tableaux dynamiques   Mar 1 Jan - 1:35

Un des intérêts des pointeurs et de l'allocation dynamique est de permettre de décider de la taille d'une variable au moment de l'exécution, comme par exemple pour les tableaux. Ainsi pour allouer un tableau de n entiers (n étant connu à l'exécution), on déclare une variable de type pointeur sur entier à laquelle on alloue une zone mémoire correspondant à n entiers :

Code:
int * alloue_tableau(int n, size_t taille)
{
    return malloc(n * taille);
}
 
/* Ailleurs dans le programme */
int * tableau = alloue_tableau(256, sizeof *tableau);
if (tableau  != NULL)
{
    /* opérations sur le tableau */
    /* ... */
    free( tableau );
}
Cet exemple alloue un tableau de 256 cases. Bien que la variable soit un pointeur, il est dans ce cas permis d'accéder aux cases de 0 à 255, soit entre les adresses &tableau[0] et &tableau[255], incluses.

_________________
www.abdoullah.co.cc(en construction)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://hbpcclub.forumactif.fr
nawal
soldat
soldat


Féminin
Nombre de messages : 55
Age : 31
Localisation : chlef
Loisirs : lecture
Date d'inscription : 28/03/2007

MessageSujet: Re: tableaux dynamiques   Mar 1 Jan - 22:16

Lors de la declaration d'un tableau de n entiers sans indiquer le nombres d'elements de ce tableau dns un programme,,j'ai eu droit a un message d'erreure,mais si je precise la valeur de n tous va bien,,donc d'aprés ce que j'ai compris pour resoudre le problemme j'utilise les pointeurs c'est ca??
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Benayada Houari
Administrateur
Administrateur
avatar

Masculin
Nombre de messages : 89
Age : 32
Localisation : Chlef
Loisirs : Sport
Date d'inscription : 14/03/2007

MessageSujet: Re: tableaux dynamiques   Mar 1 Jan - 23:11

C'est exactement l'intéret de l'allocation dynamique...
On ne peut jamais mettre une variable comme une taille d'un tableau...
cad on ne peut pas mettre :
Code:
int t[n];

PS: Ce code marche peut-être sur certains compilateurs mais il est recommandé de ne pas l'utiliser ...Il est préférable d'utiliser l'allocation dynamique

Implémentation:
 On va créer un tableau dynamiquement (ou manuellement) d'entier:
Tout d'abord il faut créer un pointeur de type entier, ce pointeur est comme un point de départ dans la mémoire (faut l'imaginer comme ça):
Code:
 int *tableau;
ensuite, par exemple l'utilisateur de notre programme a besoin de 5 cases, alors on va allouer 5 cases de la mémoire pour notre tableau.
Supposons que la nombre de cases demandées est:
Code:
 nbreCases;
et dans notre exemple, le nbreCases vaut 5...Alors pour allouer 5 cases dans la mémoire faut utiliser la fonction qui réserve l'espace dans la mémoire malloc( ): en donnant à elle (dans ses parenthèses) la taille de la variable pour qu'elle puisse connaitre l'espace qu'elle va réserver (est ça se fait par le mot clé sizeof())...
Code:
 tableau=malloc(sizeof(int));
mais comme ça, notre tableau ne contient que 1 élément de type int, puisque la fonction malloc n'a fait réservée que 1 case de type int...
Alors, maitenant c'est facile, ça reste juste de multiplier la fonction malloc par notre variable nbreCases
Code:
 tableau=malloc(sizeof(int)*nbreCases);

Reste maitenant que on peut l'utiliser juste comme un tableau normale:
par exemple, sa lecture:
Code:

int i=0;
for (i=0;i<5;i++)
{
printf("Donner la valeur de premiere case ");
scanf("%d",&tableau[i]);
}


Dernière édition par le Ven 11 Jan - 0:00, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
nawal
soldat
soldat


Féminin
Nombre de messages : 55
Age : 31
Localisation : chlef
Loisirs : lecture
Date d'inscription : 28/03/2007

MessageSujet: Re: tableaux dynamiques   Mer 2 Jan - 15:10

Merci pour l'explication maintenant c'est trés claire,,mais une chose!! est ce que les termes réservation et allocation ont le même sens ??() dans la programmation bien sur.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Benayada Houari
Administrateur
Administrateur
avatar

Masculin
Nombre de messages : 89
Age : 32
Localisation : Chlef
Loisirs : Sport
Date d'inscription : 14/03/2007

MessageSujet: Re: tableaux dynamiques   Mer 2 Jan - 18:45

Oui Biensur Réservation et Allocation signifie le meme sens...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
nawal
soldat
soldat


Féminin
Nombre de messages : 55
Age : 31
Localisation : chlef
Loisirs : lecture
Date d'inscription : 28/03/2007

MessageSujet: Re: tableaux dynamiques   Jeu 10 Jan - 22:57

Toujours dans l'allocation dynamique:
Code:
char**tab;
tab=malloc(sizeof(*tab)*taille* taille2);
Quelqu'un peut m'expliquer ce code!!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
nadia
soldat
soldat


Féminin
Nombre de messages : 14
Age : 32
Localisation : chlef
Loisirs : informatique
Date d'inscription : 28/03/2007

MessageSujet: Re: tableaux dynamiques   Jeu 10 Jan - 23:44

HOUARI dans l'exemple précedent normalement
tableau=malloc(sizeof(int)*nbrcases);
et non pas

tableau=malloc(sizeof(int))*nbrcases;
non ? Rolling Eyes
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Benayada Houari
Administrateur
Administrateur
avatar

Masculin
Nombre de messages : 89
Age : 32
Localisation : Chlef
Loisirs : Sport
Date d'inscription : 14/03/2007

MessageSujet: Re: tableaux dynamiques   Jeu 10 Jan - 23:58

Oh...excactement je le vois....Merci Nadia ....
désolé pour l'erreur...
Maintenant ça y est, j'ai corrigée l'erreur...

Et une autre fois désolé pour l'erreur et Merci NADIA pour ta remarque...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Benayada Houari
Administrateur
Administrateur
avatar

Masculin
Nombre de messages : 89
Age : 32
Localisation : Chlef
Loisirs : Sport
Date d'inscription : 14/03/2007

MessageSujet: Re: tableaux dynamiques   Ven 11 Jan - 0:47

hmmm...
Nawal t'es sur ce que t'as écrite la dessous...
Puisque je pense que c'est faux ce code la...
En fait, je pense que tu veux construire une matrice manuellement (ou dynamiquement)...mais normalement ça se fait comme ça:
Code:

char **tab;
on a crée un pointeur qui pointe sur une autre pointeur ( désolé mais c'est obligatoire).... ce pointeur la on va le pointer sur un tableau de pointeur, cad on va le marquer comme un point de départ d'un tableau, mais pas n'importe quel tableau, un tableau dont les élément des pointeurs simples de type char, cad (char*), et dans notre cas notre variable est (*tab)
Alors
Code:

tab=malloc(sizeof(*tab)*taille1);
MAIS PRKOI (*tab) ???
Ok, j'ai dit que ces élément sont des pointeurs simples, cad des pointeurs pointent vers des variables réeles et pas vers des pointeurs ...
alors si on a fait (**tab), comme ça on a réserver comme des élément de notre tableau des pointeurs mais des pointeurs sur d'autres pointeurs, et nous nous voulons pas ça...
et si on a fait (tab), comme ça on a crée juste un tableau dont les élément ni des pointeurs sur des pointeurs, ni des pointeurs simples mais des élément des variables réels,
Alors on a choisit (*tab), puisque c'est un pointeur vers une autre variable réel, et c'est quoi ce variable....C'est un autre tableau...beh oui...chaque élément d'un tableau(donc chaque pointeur) est un point de départ d'un nouveau tableau de char, j'espère bien que vous l'avez imaginez dans votre tete...
Alors pour chaque élément(chaque pointeur de notre tableau) on le réserve un tableau (cad on le marque comme un point de départ d'un tableau)...et ça c'est simple...puisque c'est ne que création d'un tableau dynamique dans une boucle...et maintenant quand on réserve dans le sizeof of fait (tab) puisque nous voulons des tableaux dont les éléments des variables réeles.
Code:

for (i=0;i<taille1;i++)
tab[i]=malloc(sizeof(tab)*taille2);
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
nawal
soldat
soldat


Féminin
Nombre de messages : 55
Age : 31
Localisation : chlef
Loisirs : lecture
Date d'inscription : 28/03/2007

MessageSujet: Re: tableaux dynamiques   Ven 11 Jan - 19:43

Bonsoir,,
Pardon j'ai oublier de donner plus de précision sur ce que j'ai écrit,,
éfféctivement,,je veux allouer dynamiquement une matrice,,
Code:
char**tab;
tab=malloc(sizeof(*tab)*taille* taille2);
Question:est ce qu'il faut donner la valeur de (taille et taille2) au debut ???
et merci pour les éxplications
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Benayada Houari
Administrateur
Administrateur
avatar

Masculin
Nombre de messages : 89
Age : 32
Localisation : Chlef
Loisirs : Sport
Date d'inscription : 14/03/2007

MessageSujet: Re: tableaux dynamiques   Ven 11 Jan - 20:33

Nawal, si nous devons donner la valeurs de taille1(les lignes) et taille2(les colonnes), la méthode de l'allocation dynamique est inutile, et il est rien d'autre que l'allocation automatique(statique)...
Et comme j'ai dit cca l'interet de l'allocation dymanique, l'allocation de la mémoire se fait en cours de l'éxcution de notre programme (aprés la compilation), et non comme dans l'allocation automatique, dont l'allocation de la mémoire se fait en cours de la compilation...
PS: Et Nawal, pour votre écriture
Code:

char **tab;
tab=malloc(sizeof(*tab)*taille1*taille2);
comme ça t'as crée une tableau d'une seule dimension, contenant de pointeurs, ce tableau a une longueur de taille1*taille2.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
nawal
soldat
soldat


Féminin
Nombre de messages : 55
Age : 31
Localisation : chlef
Loisirs : lecture
Date d'inscription : 28/03/2007

MessageSujet: Re: tableaux dynamiques   Ven 11 Jan - 22:18

oui j'ai compris ce que tu veux dire,,mais lors de la compilation un message d'erreure apparait!! c'est qu'en donnant les valeurs de taille et taille2 que je passe!!
Code:
comme ça t'as crée une tableau d'une seule dimension, contenant de pointeurs, ce tableau a une longueur de taille1*taille2.
oui c'est comme ca que je veux representer ma matrice; aurais-je faut par hasard????
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: tableaux dynamiques   

Revenir en haut Aller en bas
 
tableaux dynamiques
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» A propos du tutoriel "3 tableaux à onglets", comment rajouter un onglet ?
» Problème de tableaux
» Attribut style de balise html ( ou bbcode tableaux ) utilisées à mauvais escients
» 3 tableaux à onglets pour le message d'accueil [RÉSOLU]
» Tableaux : Plusieurs cellules le long d'une grande cellule

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
une Base Solide en Programmation :: HBPCCLUB ACADEMY :: C-
Sauter vers: