begin process at 2012 05 30 18:09:10
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Maths

 > 

tableau a taille variable en C


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

tableau a taille variable en C

vendredi 28 novembre 2008 à 18:55:54 | tableau a taille variable en C

fandestargate

Voila, je cherhcer a programmer un tableau dont la taille serait définit par une variable qu'on pourrait choisir au debut du programme:

taille=0;
scanf ("%lf", &taille);
long x[taille];

et ensuite je rempli mon tableau.

Pourquoi faire une taille variable me direz vous?
Simplement car le but de la manip est de calculer une itération dont on pourrait choisir le pas.
Plus le pas est élevée, et plus la résolution va produire de valeures à stocker dans le tableau.

Ma question est donc existe t-il une commande permettant de définir un tableau à taille variable?
Si oui laquelle?
vendredi 28 novembre 2008 à 19:01:41 | Re : tableau a taille variable en C

BruNews

Administrateur CodeS-SourceS
long *xtab;

xtab = (long*) malloc(taille * sizeof(long));
if(!xtab) ERREUR MEMOIRE;

ciao...
BruNews, MVP VC++
vendredi 28 novembre 2008 à 19:20:42 | Re : tableau a taille variable en C

coucou747

Administrateur CodeS-SourceS
salut

pourquoi taille n'est pas un size_t (enfin un int quoi...) ?

taille ne doit pas etre un double...

int taille;
scanf ("%d", &taille);

ensuite :
long x[taille];
ceci fonctionne en C99 (mais c'est pas un truc super propre...)


sinon, pour le C89, ou pour faire propre, comme le disait brunews :
long *xtab = malloc(taille * sizeof(long));
if(!xtab) ERREUR MEMOIRE;

(les casts, c'est vraiment utile ? c'est pas en CPP qu'on en a besoin pour pouvoir convertir un void* en long* ?)
vendredi 28 novembre 2008 à 19:44:37 | Re : tableau a taille variable en C

BruNews

Administrateur CodeS-SourceS
En C ça compilerait sans cast (avec averto du compilo si correctement réglé) mais il faut prendre l'habitude du cast explicite, ça force à bien penser ce qu'on produit.

ciao...
BruNews, MVP VC++
vendredi 28 novembre 2008 à 22:54:42 | Re : tableau a taille variable en C

fandestargate

ça a l'air sympa vos idées, mais personnes ne pourrait me détailler un peu votre série de commandes, je suis débutant^^. Par exemple sizeof??? !xtab???

PS: dsl pour l'oubli de int pour la definition de taille^^.

vendredi 28 novembre 2008 à 22:56:46 | Re : tableau a taille variable en C

BruNews

Administrateur CodeS-SourceS
Les bases d'un langage s'apprennent dans un bouquin.

ciao...
BruNews, MVP VC++
samedi 29 novembre 2008 à 01:44:06 | Re : tableau a taille variable en C

coucou747

Administrateur CodeS-SourceS
Réponse acceptée !
!xtab c'est equivalent a xtab != NULL (donc a xtab != 0)

ensuite, sizeof est un operateur qui renvoie la taille d'un element. on peut effectuer cet operateur sur une variable ou sur un type.

les syntaxes sont differentes si on l'utilise sur une variable ou sur un type :

en effet, on peut faire :
sizeof variable
mais :
sizeof(type)

(pour les types, les parentheses sont obligatoires)
dimanche 30 novembre 2008 à 18:00:48 | Re : tableau a taille variable en C

slashbrus

Bonsoir,

Relativement au problème posé, je me permets de vous soumettre à votre étude un code, somme toute assez complet.

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

/* Nous souhaitons gérer dynamiquement la taille d'un tableau unidimentionnel de type "long".
 * cette taille est le résultat d'une saisie clavier récupérée par un scanf
 */
 
int main(int argc, char * argv[], char * envp[])
{
    size_t uiTaille;
    int mainReturnValue = EXIT_SUCCESS;

     if (scanf("%u", &uiTaille) == 1)
     {
         /* La ligne de code suivant est somme toute la plus importante.
          * Elle déclare un pointeur constant, ce qui endigue toute tentative d'en modifier la valeur.
          * Ce pointeur correspond indirectement au nom du tableau dont nous avons besoin.
          * La fonction "malloc" demande au système de concéder, à ce programme, une partie de la RAM
          * dont il assure la gestion.
          * C'est dans cette RAM allouée que seront implantés les éléments du tableau.
          * L'argument indiquant un nombre d'octets, sachant que sizeof(long) fournit le nombre d'octets
          * occupés par un tel type, en le multipliant par le nombre d'éléments du tableau, cela contribue
          * à demander le juste nombre nécessaire
          */
      long * const aTab = malloc(sizeof(long) * uiTaille);
      if (aTab != NULL)
      {
          long index;

          /* Initialisation des éléments du tableau à zéro, par exemple
           */
          for (index = 0; index < uiTaille; index++)
              aTab[index] = 0;

          printf("Le premier élément du tableau est initialié à : %ld\n", aTab[0]);
          printf("Le dernier élément du tableau est initialié à : %ld\n", aTab[uiTaille -1 ]);

          /* La fonction "free" restitue au système la mémoire qu'il lui a concédée (temporairement)
           */
          free(aTab);

          putchar('\n');
      }
      else
      {
          puts("L'allocation dynamique de mémoire a échoué.");
       mainReturnValue = EXIT_FAILURE;
      }
  }
  else
  {
      puts("La saisie de la taille est incorrecte");
      mainReturnValue = EXIT_FAILURE;
  }

 return mainReturnValue;
}

   Cordialement.



Cette discussion est classée dans : taille, variable, tableau, choisir


Répondre à ce message

Sujets en rapport avec ce message

Tableau de grande taille [ par LuckyNut ] Slut,J'ai un problème pour créer un tableau de grande taille à 2 dimensions : int tab[100][62000];Le programme plante sur un "stack overflow"Cette var tableaux dynamique (à taille variable) : petite précision [ par Amanobuo ] Salut ! J aimerai une petite précision sur les tableau dynamique, créé avec un new et un pointeur. Quant j'allou la memoire avec le pointeur : tableau declarer un tableau de taille variable [ par Seb33300 ] Bonjourcomment déaclarer un tableau avec un taille déclaré dans une variable ?taille = 10;tableau[taille]; ne marche pasmerci Agrandir la taille d'un tableau ? [ par ndubien ] Bonjour, Je cherche à agrandir un tableau ainsi:int variable = malloc( sizeof(int)*taille );Pour qu'elle devienne: int variable = malloc( sizeof(int)* tableau de taille variable en c++ [ par petitlapino ] Bonjour à tous, J'ai un petit soucis de débutant : comment déclarer un tableau de taille variable car j'ai récupérer des entiers à partir d'un fichier Taille de tableau de string de taille variable [ par laurent134 ] Bonjour, J'ai un petit soucis de débutant : comment determiner la taille (nombre d'élément) d'un tableau de string, sachant que les string n'ont pas tableau ou liste chainée [ par leFeu ] j'ai un programme a faire et je dois choisir les structures de données a utiliser.normalement un tableau dynamiqe me suffit car la taille de ma liste Tableau à 3 dimensions = erreur size of variable is too large - comment éviter ? [ par wincpp ] Salut à tous.Voilà j'ai un problème quand je veux allouer un tableau à 3 dimensions du genreint tableau[1024][768][1000];Mon compilateur DevC++ me dit Tableau statique de taille importante -> seg fault [ par vinc1008881 ] Bonjour à tous, Je rencontre un problème pour le moins bizarre concernant des tableaux statique de "grande" taille en 3D. Voilà deux codes : doub sizeof pour determiner automatiquement la taille d'un tableau [ par Chatbour ] Salut à tous et à toutes, je me remets a C++ après une longue pause, donc soyez indulgents ^^ je me demande pourquoi ce code donne un résultat faux


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,140 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales