begin process at 2012 02 10 01:08:39
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 >  TABLEAU AVEC ALLOCATION DYNAMIQUE

TABLEAU AVEC ALLOCATION DYNAMIQUE


 Information sur la source

Note :
Aucune note
Catégorie :Divers Niveau :Débutant Date de création :02/03/2003 Date de mise à jour :04/03/2003 15:48:42 Vu :5 940

Auteur : Fabi1

Ecrire un message privé
Site perso
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

saisie et affichage dun tableau avec une allocation dynamique  

Source

  • #include<iostream.h>
  • void saisie(int,int *);
  • void affich(int,int *);
  • int main()
  • {
  • int *palloc ;
  • int taille;
  • cout<<"Donner la taille du tableau:";
  • cin>>taille;
  • palloc=new int[taille];
  • if(palloc==NULL)
  • cout<<"\n*****Problème d'allocation!!!******\n\n";
  • else
  • {
  • cout<<"\nAllocation réussie!\n\n";
  • saisie(taille,palloc);
  • affich(taille,palloc);
  • }
  • delete[] palloc;
  • return 0;
  • }
  • void saisie(int tail,int *adr)
  • {
  • for(int i=0;i<tail;++i)
  • {
  • cout<<"saisissez un nombre:";
  • cin>>*(adr+i);
  • }
  • }
  • void affich(int taile, int *adre)
  • {
  • for(int j=0;j<taile;++j)
  • {
  • cout<<"tab["<<j<<"]="<<*(adre+j)<<", \n";
  • }
  • }
#include<iostream.h>

void saisie(int,int *);

void affich(int,int *);


int main()
{
	int *palloc ;
	int taille;

	cout<<"Donner la taille du tableau:";
	cin>>taille;

	palloc=new int[taille];

	if(palloc==NULL)
	cout<<"\n*****Problème d'allocation!!!******\n\n";

	else
	{
	cout<<"\nAllocation réussie!\n\n";
	saisie(taille,palloc);
	affich(taille,palloc);
	}

	delete[] palloc;

	return 0;

}


void saisie(int tail,int *adr)
{


	for(int i=0;i<tail;++i)
	{
		cout<<"saisissez un nombre:";
		cin>>*(adr+i);
	}
}

void affich(int taile, int *adre)
{


	for(int j=0;j<taile;++j)
	{
		cout<<"tab["<<j<<"]="<<*(adre+j)<<", \n";
	}
}

 Conclusion

desolé pas de commentaires! ;)  


 Sources du même auteur

Source avec Zip PUISSANCE 4
DICHOTOMIE EN RECURSIF
CONJUGUER UN VERBE
MASTER MIND SIMPLE A COMPRENDRE
RESOLUTIONSIMPLIFIÉE EQUATION 2ND DEGRÉ

 Sources de la même categorie

Source avec Zip ÉDITEUR DE RECTANGLES EN CONSOLE par seoseo
CONVERSION DE FICHIER EN FICHIER BMP par seoseo
Source avec Zip DETECTEUR EJP par idpro
Source avec Zip Source avec une capture SHOP MANAGER CONSOLE SUR WINDOWS par antho974
Source avec Zip JOUR DE NAISSANCE par fredg19

Commentaires et avis

Commentaire de jonathanmcdougall le 03/03/2003 15:00:41

&gt;#include&lt;iostream.h&gt;

Déprécié, préferer &lt;iostream&gt;

# include &lt;iostream&gt;
using namespace std;

&gt;void saisie(int,int);
&gt;void affich(int,int);

Correct, mais il serait meilleur de spécifier le nom des variables, pour une meilleure lisibilité.

&gt;int *palloc = new int;
&gt;int taille;

Variables globales : à éviter.  D'ailleurs, tu n'en as pas besoin.

&gt;void main()

int main()

main() retourne *toujours* un int.

&gt;{
&gt;    cout&lt;&lt;"Donner la taille du tableau:";
&gt;    cin&gt;&gt;taille;

&gt;    saisie(taille,*palloc);
&gt;    affich(taille,*palloc);

pourquoi passes-tu les tableaux si tu ne t'en sers pas?  De plus, l'argument s'appelle 'adr' ou 'adre', pour 'adresse' je suppose, et tu lui passes la valeur de palloc[0] (en lui passant *palloc).  De plus, si 'adr' ou 'adre' doivent contenir une adresse, ils devraient être de type int*, non?

&gt;    delete[] palloc;
&gt;}

Quelques questions : que se passerait-il en cas d'erreur dans saisie() ou affich()?  Par exemple, si saisie() lance une exception?

Ensuite, que se passerait-il si l'utilisateur entrait un nombre négatif?  Si 'cin' plantait? Si 'new' manquait de mémoire?

Question de faire aller les méninges un peu :)

&gt;void saisie(int tail,int adr)
&gt;{

Comme j'ai dis plus haut, tu ne te sers pas de 'adr'.  Il serait plus avantageux de mettre tes variables globales locales au main() et de les passer en argument dans ces deux fonctions.

&gt;    int i;
&gt;    palloc=new int[taille];
&gt;    for(i=0;i&lt;taille;i++)

Deux choses : il est mieux de définir 'i' dans le for puisque 1) cela améliore la visibilité et 2) cela permet de restreindre la durée de vie de 'i' à la boucle.  Deuxièmement, préférer ++i à i++ puisque ce dernier requiert une copie et, donc, plus de temps d'exécution.

&gt;    {
&gt;        cout&lt;&lt;"saisissez un nombre:";
&gt;        cin&gt;&gt;*(palloc+i);

Mauvais.  Pourquoi ne pas utiliser palloc[i]?

&gt;    }
&gt;}

&gt;void affich(int taile, int adre)

Même chose concernant 'adre'.

&gt;{
&gt;    int j;
&gt;    for(j=0;j&lt;taille;j++)

Même chose concernant la définition et l'incrémentation de 'j'.

&gt;    {
&gt;        cout&lt;&lt;"tab["&lt;&lt;j&lt;&lt;"]="&lt;&lt;*(palloc+j)&lt;&lt;",
";

Mauvais aussi, préférer palloc[j].

&gt;    }
&gt;}

C'est bon, la seul source de problèmes est l'usage de variables globales. Là où l'on fait

int variable_globale;

void f()
{
std::cout &lt;&lt; variable_globale;
}

int main()
{
variable_globale = 20;
f();
}

il faut préférer

void f(int variable_locale)
{
std::cout &lt;&lt; variable_locale;
}

int main()
{
int variable_locale = 20;
f(variable_locale);
}

Mais la structure est très intéressante et très efficiente : une fonction, une tâche.  Pour ce court programme, c'est très bien, mais il serait encore mieux d'ajouter un

void* allouer(int* adr, int taille);

qui s'occupera du new et en retournera l'adresse.  Ainsi, il sera plus facile d'ajouter, par exemple, des tests sur la taille, la création d'objets...

Finalement, il serait bon d'avoir un peu plus de constance dans les noms : 'taile' et 'tail', 'adr' et 'adre'.

Amuses-toi bien!

Jonathan Mcdougall
Montréal, Québec
mcdougalljonathan@hotmail.com
http://www.multimania.com/utopiasoftware

Commentaire de jonathanmcdougall le 03/03/2003 16:13:19

&gt;void* allouer(int* adr, int taille);

désolé, c'est plutôt

int* allouer(int* adr, int taille);

Commentaire de leneuf22 le 04/03/2003 02:20:45

    int *palloc = new int;


Pourquoi tu l'alloues alors que tu vas l'allouer juste après ?
vu que tu fais 2 fois new sur le même pointeur, ya 4 octets qui se sont enfuis...

Commentaire de jonathanmcdougall le 05/03/2003 01:47:56

&gt;#include&lt;iostream.h&gt;

Déprécié, préferer &lt;iostream&gt; :

# include &lt;iostream&gt;
using namespace std;

&gt;void saisie(int,int *);
&gt;void affich(int,int *);

Préférer spécifier le nom des variables pour plus de lisibilité.

&gt;  palloc=new int[taille];
&gt;  if(palloc==NULL)
&gt;    cout&lt;&lt;"
*****Problème d'allocation!!!******

";

La logique est bonne, mais le problème est que new ne retourne pas 0 si l'allocation a échoué, il lance une exception.  La façon de le forcer à retourner 0 est de spécifier (nothrow) :

palloc = new (nothrow) int[taille];

Ou tout simplement d'attraper l'exception :

try
{
palloc = new int[taille];
}catch (...)
{
cout &lt;&lt; "l'allocation a échoué";
}


&gt;   cin&gt;&gt;*(adr+i);
&gt;   cout&lt;&lt;"tab["&lt;&lt;j&lt;&lt;"]="&lt;&lt;*(adre+j)&lt;&lt;",
";

Cette syntaxe est à éviter, préférer

cin &gt;&gt; adr[i];
cout&lt;&lt; adre[j];

qui sont beaucoup plus lisibles et sécuritaires.

Finalement, on dirait que tu ne veux pas nommer tes arguments du même nom.  Sache que c'est légal :

int f(int mavariable);
int g(int mavariable);
int h(int mavariable);

Les arguments de fonctions différentes peuvent avoir le même nom.  Je te recommande ces noms :

void saisie(int taille,int *adresse);

À part ça, tout est bien!

Jonathan

Commentaire de Fabi1 le 05/03/2003 21:45:06

en ce qui concerne les noms de variables e et  
&gt;cin&gt;&gt;*(adr+i);
&gt;   cout&lt;&lt;"tab["&lt;&lt;j&lt;&lt;"]="&lt;&lt;*(adre+j)&lt;&lt;", ";

c est une consigne qu on m a donné!!!


merci pour le reste!!

Commentaire de AmK le 24/03/2003 10:06:56

merci tout le monde ça ma permis de comprendre un peu tout ça !

Commentaire de AmK le 24/03/2003 10:06:57

merci tout le monde ça ma permis de comprendre un peu tout ça !

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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,655 sec (4)

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