Allocution de memoire

Fermé
Ryu - 14 juin 2005 à 16:10
 Nashouille - 16 juin 2005 à 11:41
Salut,
J'aimerais savoir comment déclarer un tableau dont je connais pas le nombre de colonne. Je dois en fait reservé de la mémoire mais je ne connai pas la taille du tableau. Ce tableau est est rempli grace a une boucle for mai je ne prend pas forcement toute les valeur donc je connai pas exactement le nombre de colonne;

8 réponses

maily Messages postés 7556 Date d'inscription lundi 26 juin 2000 Statut Contributeur Dernière intervention 23 juin 2023 453
14 juin 2005 à 16:11
Bonjour!

Quel langage?
0
oui pour quel langage, en c je peux essayer d t'aider
0
p.legal Messages postés 88 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 21 mars 2008 24
14 juin 2005 à 22:45
Salut,
premier point, on dit allocation de mémoire.
ensuite, pour ton problème, il suffit de faire deux tours de boucle.
au premier tour tu compte le nbre de colonne, puis tu dimensionne ton tableau et enfin tu refais un passage pour le remplir.

Voici un shema de ce que ça doit donner :

            compteur=0
            for i=1 to nbreBoucle
                if (condition verifiée) then
                    compteur=compteur+1
                end if
            next i
            dim tableau$(compteur)
            compteur=0
            for i=1 to nbreBoucle
                if (condition verifiée) then
                    compteur=compteur+1
                    tableau$(compteur)=variable$
                end if
            next i


Ce code est basé sur la syntaxe de Liberty BASIC mais tu peux l'adapter à nimporte quel langage.

@++

Liberty BASIC France : http://lbasic.atomysk.com
Le forum d'aide :http://lbasic.atomysk.com/forum/
0
ryu34 Messages postés 15 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 8 juillet 2005
16 juin 2005 à 09:52
Merci je travaille en c. Ca me semble bien la solution de p.legal mais ca implique de faire 2 fois la meme boucle une pour trouver le nombre de solution et une pour remplir mon tableau, c un peu repétitif je trouve mais n'ayant pas d'autre solution pour l'instan je vai faire cet methode.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
en c tu peux definir une structure exemple

par exemple:

typedef struct tdoublet
{
int (ou ce que tu veux) variable;
tdoublet *suivant;
}

cette structure te permet de créer chaque élément 1 à un ( en utilisant l'allocation memoire).

par exemple pour creer un element a chaque saisie:

main()
{
int element;
tdoublet *pointeur;
pt=NULL;
for(int i=0;i<8;i++)
{
printf("veuillez entrez un élément");
scanf("%d",element);
pointeur=saisie(pointeur,element);
}
free(pt);
}

et la fonction saisie :

tdoublet *saisie(tdoublet *pt,int nombre )
{
tdoublet *pt2;
if(pt==NULL)
{
pt=(tdoublet*)malloc(1*sizeof(tdoublet));
pt->variable=nombre;
pt->suivant=NULL;
return(pt);
}
else
{
pt2=(tdoublet*)malloc(1*sizeof(tdoublet));
pt2->variable=nombre;
pt2->suivant=NULL;
pt->suivant=&pt2;
pt2=pt;
return(pt2);
}
}

je sais pas si ca repond a ta question mais ce permet donc de créer un élément em mémoire à chaque sasie.
0
ou encore faire une fonction qui te permet de définir le nombre de cases de ton tableau(lignes et colonnes) que tu veux creer, puis une fonction qui te permet de créer ce tableau et retourne une adresse sur celui ci.

je pense que ca peut marcher
0
ryu34 Messages postés 15 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 8 juillet 2005
16 juin 2005 à 10:40
Ce n'est pas exactement ca. Je vais me m'expliquer je dois aller d'un point A à un point B avec un pas. Je réalise une boucle while pour déterminer toutes les valeurs intermédiaires (boucle while obligatoire car je ne connais pas le nombre de pas qu'il faut pour y aller). Si il existe une solution ce qui n'est sur a tout les coup ds mon probleme (contrainte de butée de mon bras manipulateur) alors j'autorise le déplacement pour cela je dois disposer de toute mes valeurs intermediaire pour les envoyer. Je souhaite mettre ces valeur dans un tableau (dont au départ je ne connai pas la taille) pour ensuite les récuperer. Je ne veut pas me déplacer en meme temps car si ce n'est plus possible d'aller au point B ca nira pas.
0
p.legal Messages postés 88 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 21 mars 2008 24
16 juin 2005 à 10:58
Si tu connais le nombre maxi de deplacements, tu peux aussi allouer de la memoire à un tableau intermediaire de taille maximum, puis faire ta recherche et une fois obtenu une reponse valide, creer un tableau à la bonne dimension puis recopier les valeurs à partir de ton tableau intermediaire que tu supprime aussitôt après.

@++

Liberty BASIC France : http://lbasic.atomysk.com
Le forum d'aide :http://lbasic.atomysk.com/forum/
0
Tu peux aussi utiliser un vecteur. Tu crée une sctruture ou tu met tes variables et tu fais un vecteur de la structure, à chaque tour dans la boucle while un push_back, là il n'y a pas besoin de connaitre la taille de quoi que ce soit, et ce sera moins couteux en mémoire que de dupliquer le tableau.
Autrement peut-être qu'avec des truc genre char** tab[] tu peux t'en sortir mais là je maitrise pas bien le sujet encore ;)
Et autrement si tu utilise des malloc (probable que non) tu peux faire des realloc.
0