Language C Probleme sur les Tableaux

dossier15 Messages postés 2 Statut Membre -  
cchristian Messages postés 928 Statut Membre -
Bonjour,

je veux cree un tableau de taille avec une dimension dynamique mais je suis bloque

voici mon programme

void ajout_tab(int T[100],int* N)
{
printf("T[%d]=",(*N));
scanf("%d",T[*N]);
(*N)++;
}

void affich_tab(int T[100],int N)
{
int i;
for(i=0;i<N;i++)
printf("T[%d] = %d\n",i,T[i]);

}

void main()
{ int T[100],i,N;
N=0;
clrscr();
for(i=0;i<5;i++)
ajout_tab(T,&N);
affich_tab(T,N);
getch();
}

Merci
Configuration: Windows XP
Opera 9.26

1 réponse

  1. cchristian Messages postés 928 Statut Membre 131
     
    Bonsoir,

    Je te propose cette correction, dis-moi ce que tu en penses. Ca tourne chez moi en environnement C++, il se peut qu'il y ait une ou deux incompatibilités, je crois que tu développes dans un environnement C, à tout hasard j'ai laissé les principales instructions C++.
    //Rappel :
    // L'expression *T signifie : acces a l'emplacement memoire dont
    //     T contient l'adresse.
    // & : obtention de l'adresse d'un objet occupant un emplacement de la memoire.
    
    
    //Ici il faut passer l'adresse de N (&N) car la fonction modifiesa valeur (N++). 
    //Valeur max. pouvant être contenue dans une variable de type int:
    //    2147483647. Prévoir également un contrôle de numéricité..... 	
    
        void ajout_tab(int (*T), int &N) 
            { 
             printf   ( " T[%d]=", N  )                               ; 
             scanf    ( "%d", &T  [N] )                               ; 
             N++                                                            ;
            } 
    //Ici ce n'est pas nécessaire de passer l'adresse de N.
         void affich_tab (int (*T), int N) 
            {          
             int i               = 0                                  ; 
             for   ( i = 0;   i  < N;    i++) 
                 {
                    printf  ( "T[%d] = %d\n", i, T [i] )               ;  
                 }
            } 
    // int (main)  permet de gérer un code retour (return)
    int   main  () 
     { 
    	int I                     =  0                                 ;
    	int N                    =  0                                 ;
                   clrscr                        ()                                          ; 
    	
                    int nb_elemts_T          =  100                               ;
    //Valeur 5 pour tester
    	int nb_val_T                =  5                                 ;
    //Affectation des ressources mémoire au tableau.
                  int * T                          =  NULL                              ;
                  T        = (int*) malloc (nb_elemts_T * sizeof (int*))        ;
    
    //Spécifique C++ (à tout hasard) remplacé ici par malloc
    //	int * T		 =  NULL		                  ;
    //             T  		 =  new int	[nb_elemts_T]         ;
    //Fin spécifique C++
    
    	IF (T		==  NULL)		
    	  {printf ("nom_pgm: Probleme a la creation du tableau T")    ;
    	   return 	(1)											      ;}
                  N                               =  0                                  ; 
    
    	for  ( I = 0;  I  <  nb_val_T;  I++)
                       {
       	    printf ("\n\nSaisissez l'element %i du tableau ", I + 1) ;   
                        ajout_tab          (T, N)                                ; 
                        affich_tab         (T, N)                                ; 
                       }
    
    //Libération des ressources mémoire affectées au tableau.
    	free			  (T) ;
    
    //Spécifique C++ (à tout hasard) remplacé ici par free
    //	delete				  [] T         							 ;
    //Fin spécifique C++
    
    	IF (T					== NULL)		
    	  {printf ("\nom_pgm: Probleme a la destruction du tableau T");
    	   return             (2)							         ;}
    
    	printf ("\n nom_pgm: tableau T entieremnt renseigne: "
    		    "(%i elements).\n\n", nb_val_T)                      ;
    	printf ("\n       Fin du traitement nom_du_pgm.\n\n" )        ;
    
        getch                 ()                                     ;
    
        return                (0)                                    ;
    }

    La mise en page c'est pas ça !.............
    0
    1. dossier15
       
      Merci Cchristian
      je voudrais te remercier pour votre attention
      Desole pour le retard.
      0
      1. cchristian Messages postés 928 Statut Membre 131 > dossier15
         
        Bonsoir ou bonjour,

        Merci pour le retour, ce n'est pas grave pour le retard,
        0
      2. cchristian Messages postés 928 Statut Membre 131 > dossier15
         
        Bonsoir ou bonjour,

        Merci pour le retour, ce n'est pas grave pour le retard,
        0
      3. cchristian Messages postés 928 Statut Membre 131 > dossier15
         
        Bonsoir ou bonjour,

        Merci pour le retour, ce n'est pas grave pour le retard,
        0