REDIM [Algorithmie]

Fermé
PRK Messages postés 799 Date d'inscription mardi 4 septembre 2007 Statut Membre Dernière intervention 6 décembre 2015 - 4 sept. 2008 à 11:00
PRK Messages postés 799 Date d'inscription mardi 4 septembre 2007 Statut Membre Dernière intervention 6 décembre 2015 - 4 sept. 2008 à 20:08
Bonjour,

J'ai un petit conflit avec ma prof de dvpt en algo.

J'aurais aimé savoir lorsque l'on souhaite redimensionner un tableau si l'on peut le faire de la sorte (de maniere officielle ?)


Tableau Notes() en Numérique
Variable nb en Numérique
Début
Ecrire "Combien y a-t-il de notes à saisir ?"
Lire nb
Redim Notes(nb)


Merci d'avance


2 réponses

Le problème est que je ne comprends pas très bien ce que tu veux dire par "de façon officielle". Enfin, je devine.

La question est-elle: peut-on dimensionner un tableau de façon dynamique (c'est-à-dire ne pas connaître la taille du tableau a priori, mais en cours d'exécution, comme ton bout d'algorithme le laisse comprendre) ?

En fait, non.

Non, parce que normalement ("officiellement" ;-)), un programme doit savoir a priori quelle taille allouer à ses variables : par exemple pour un tableau réservé pour 10 nombres flottants sur 4 octets, etc. Le type de tableau dont on parle ici s'implémente en mémoire par la réservation préalable d'un espace contigu, de 10 x 4 octets en l'occurrence.

Peux-tu utiliser redim sans utiliser dim au préalable ? Je n'ai pas essayé. Mais de toute façon, je pense que VB ou autre langage de script te réserve d'abord un espace fixe, mais qu'à chaque demande de redimensionnement explicite, il recrée pour toi un nouveau tableau à la taille désirée (avec éventuellement une recopie des éléments par l'option redim preserve). Alors qu'en java par exemple, lorsqu'on veut redimensionner des tableaux, on doit écrire soi-même tout le code : création d'un tableau vierge de la nouvelle taille + recopie éventuelle des éléments de l'ancien tableau vers le nouveau, et suppression de l'ancien tableau. Cela doit être analogue en C, avec des instruction malloc (memory allocation).

C'est bien la preuve que ta prof pourrait bien avoir "officiellement" raison, mais surtout, pour une bonne compréhension de la programmation, qu'il faut se méfier des "facilités" qu'apportent les langages de script comme VB, utiles pour la programmation, mais qui te masquent tous les mécanismes sous-jacents.

Cela dit, le système de réservation d'un espace contigu n'est pas le seul utilisé. En C par exemple, les tableaux peuvent être implémentés comme des listes par des pointeurs. Les chaînes de caractères sont des tableaux de genre. L'espace n'a pas besoin d'être contigu, donc la taille peut être inconnue à l'avance. Les listes dynamiques contient des éléments composés 1) d'une valeur, 2) de l'adresse mémoire de la valeur suivante.
0
PRK Messages postés 799 Date d'inscription mardi 4 septembre 2007 Statut Membre Dernière intervention 6 décembre 2015 113
4 sept. 2008 à 15:13
Ouki merci pour ta reponse !

Donc si l'on doit se soucier de l'espace memoire reservé pour le tableau.

Il faudrait au prealable declarer un tableau auquel on lui affectera lors de sa declaration une valeur (par exemple 100 ce qui fera 100 cellules) et par la suite alors je pourrais tout de même le redimensionner avec un "redim" pour que cela soit plus "juste" ou "officiel" ;) ?

Car oui comme tu dis dans certains langages il y a des fonctions pre-faite pour accellerer & economiser des lignes de code. mais par exemple en C (console) il me semble que l'on peut pas declarer un tableau vide par exemple..


Merci de ton aide en tout cas :)
-1
Oui, on peut tjrs redimensionner un tableau en VB, mais sache seulement qu'en réalité, dans la mémoire, ce ne sera sans doute pas dans le même emplacement, même si tu ne le vois pas (sauf peut-être si tu le redim avec un nombre inférieur d'éléments !)
0
PRK Messages postés 799 Date d'inscription mardi 4 septembre 2007 Statut Membre Dernière intervention 6 décembre 2015 113
4 sept. 2008 à 20:08
Oui je suis daccord avec toi.

Moi apres c'est juste pour savoir si je peut l'utiliser. Je ne suis pas dans une section de prog, mais plutot de réseaux. Donc voila je voulais juste savoir si ca s'utilisais car un de nos ancien prof me l'avais apris, mais cette année notre nouveau etait etonné d'entendre parler de ça (pas tres coordonné tout ça) ^^'
-1