IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Tableau et pointeur


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 13
    Par défaut Tableau et pointeur
    Salut je suis censé faire le "Triangle de Pascal" mais voici donc mon problème (et l'énoncé)

    Nom : Capxture.PNG
Affichages : 427
Taille : 25,6 Ko

    donc j'ai fais la première partie (le triangle de pascal avec les [N][N] donc )
    ensuite

    Nom : Captsure.PNG
Affichages : 521
Taille : 7,8 Ko

    donc les fonctions avec le tableau en paramètre déjà fait les autres il me manque donc celui-ci sur lequel je bloque puisque la base c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     void initTab(int Matrice[N][N])
    {
    	for (int I = 0; I <= N; I++)
    	{
    		Matrice[I][I] = 1;
    		Matrice[I][0] = 1;
    		for (int J = 1; J < I; J++)
    			Matrice[I][J] = Matrice[I - 1][J] + Matrice[I - 1][J - 1];
    	}
     
    }
    je l'ai donc tout naturellement transformé en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     void initTabl(int *Matrice)
    {
    	for (int i = 0; i < N; i++)
    	{
    		Matrice[i],Matrice[i] = 1;
    		Matrice[i],Matrice[0] = 1;
    		for (int j = 1; j < i; j++)
    			Matrice[i], Matrice[j] = Matrice[i - 1][Matrice[j] + Matrice[i - 1][Matrice[j] - 1];
    	}
    }
    mais à la dernière ligne à partir de "[Matrice[j] - 1];" ça m'indique une erreur sous la Matrice qu'il n'il y a pas de pointeurs ... j'ai tout essayé "*" "&" sachant que j'ai très peu de connaissances sur les pointeurs (et le c++ d'ailleurs ) .

    pour l'autre avec les tableau c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void remplirTab(int Matrice [N][N])
    {
     
     
    	for (int I = 0; I < N; I++)
    	{
    		printf(" N=%2d", I);
    		for (int J = 0; J <= I; J++)
    			if (Matrice[I][J])
    				printf("%5d", Matrice[I][J]);
    		printf("\n");
    	}
     
    }
    et sans tableau (en paramètres)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void remplirTabl(int *Matrice)
    {
    	for (int I = 0; I < N ; I++)
    	{
    		cout << "N : " << I << endl;
    		for (int J = 0; J <= N ; J++)
    		{
    			cout << *(Matrice + I * N + J) << endl;
    			cout << "\n" << endl;
    		}	
    	}
    }
    programme principale (main)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     int main()
    {
    	locale::global(locale("fr-FR"));
     
    	int Tab[N][N];
    	cout << "***** TRIANGLE DE PASCAL *****" << endl;
     
     
    	cout << endl << "Triangle de pascal de degré : 13 " << endl;
    	//initTab(Tab);
    	initTabl();
    	//remplirTab(Tab);
    	remplirTabl(*Tab);
     
     
     
    	_getch();
    	return 0;
    }
    c'est un peu long je sais ^^"
    donc voilà si vous avez une idée partagez ! merci
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 764
    Par défaut
    Tu n'auras pas de réponses parce que c'est du code C et ici c'est un forum C++ (d'autant plus les posteurs prônent le C++ moderne qui tente de s'éloigner du C )

    void initTab(int Matrice[N][N]) : Cette signature ne fonctionnera quasiment jamais

    Il faut coder void initTab(int** Matrice, unsigned short /*int*/ N) ou void initTab(int* Matrice, unsigned short /*int*/ N), en fonction si matrice est un tableau de tableaux d'entiers, ou un gros tableau d'entiers.

    Matrice[i],Matrice[i] = 1; ou Matrice[i], Matrice[j] = ... l'opérateur virgule ne fonctionne pas comme tu le penses (sauf lors des déclarations) : évite le autant que faire se peut.

    Et pour ton problème c'est très simple : tu as un double pointeur. Si tu le déférences 1 fois matrice[i] ou *(matrice + i), tu obtiens un pointeur et non pas une valeur

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 13
    Par défaut
    salut et merci pour la réponse mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void initTab(int Matrice[N][N])
    est bien l'un des seul qui fonctionnent , te malheureusement je n'ai pas compris ce que tu a dis à la fin , mais je pense laisser cette partie j'y comprend rien

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Il existe des profs qui présentent ceci comme du C++. C'est du langage C et c'est à éviter en C et à oublier en C++.

    écrire void initTab(int Matrice[N][N]) est un abus de notation qui est trompeur en C et à oublier en C++.
    On ne peut pas passer de tableau en paramètre de fonction, ni en retour de fonction. Le nom d'un tableau est immédiatement converti en un pointeur sur son premier élément.
    Quand on écrit int Tab[N][N]; on déclare un tableau de N tableaux de N entiers. D'où
    Tab est traduit comme un pointeur sur un tableau de N entiers (a le type int (*)[N]).
    Tab[0] est traduit comme un pointeur sur des entiers (a le type int *).
    Tab[0][0] est traduit comme un entier (a le type int).

    On peut écrire une fonction qui va recevoir Tab en paramètre : void initTab(int (*Matrice)[N]) le compilateur tolère une autre notation void initTab(int Matrice[][N]), et une autre à éviter car donne une fausse impression de transmettre un tableau void initTab(int Matrice[unNombreQuelconque][N]). C'est cette dernière que ton prof utilise! Il existe en C un moyen d'indiquer et de vérifier le premier N disparu, mais c'est du C pas du C++.
    Pour l'appeler on écrit : initTab( Tab );.
    A l'intérieur de la fonction on peut accéder à un entier dans la Matrice par : Matrice[i][j] ou bien Matrice[0][i*N+j] ou bien *(Matrice[i]+j). Ce sont trois fois exactement la même chose.
    Car il existe une équivalence tableau/pointeur en C (attention pas toujours en C++) tab[x] <=> *(tab+x).

    Si on veut transmettre à la place un simple pointeur sur un entier. Ça devient :
    On peut écrire une fonction qui va recevoir Tab[0] en paramètre : void initTab(int *Matrice) le compilateur tolère une autre notation void initTab(int Matrice[]), ou void initTab(int Matrice[unNombre]).
    Pour l'appeler on écrit : initTab( Tab[0] ); ou initTab( &Tab[0][0] ); car veut transmettre l'adresse du premier élément.
    A l'intérieur de la fonction on peut accéder à un entier dans la Matrice par : Matrice[i*N+j] ou bien *(Matrice+i*N+j) en vertu de l'équivalence tableau/pointeur. C'est la formule que t'as donné ton prof.

    Et pour écrire le corps de ta fonction, il suffit de "bêtement" remplacer le code de la fonction, le texte Matrice[i][j] devient le texte *(Matrice+i*N+j) ou le texte Matrice[i*N+j]

  5. #5
    Invité
    Invité(e)
    Par défaut
    En français de quel façon tu veut stocker ton triangle , et comment tu veut l'afficher , moi je le voie plus sous un arbres qu'un tableau.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 13
    Par défaut
    Merci à vous tous pour vos réponse j'étais un peu occupé avec les cours ^^ , donc au final j'ai essayé le code de dalfab qui a fonctionné à moitié puis-qu’à la fin je n'avais que des 1 c'est déjà mieux que ce que moi je faisait du coup je l'ai rendu comme tel et je me rassure en me disant que dans la classe j'étais un des plus avancés !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tableau de pointeur de fonction
    Par Gryzzly dans le forum C
    Réponses: 7
    Dernier message: 31/12/2005, 10h47
  2. Tableau de pointeurs sur objets
    Par bassim dans le forum C++
    Réponses: 11
    Dernier message: 13/12/2005, 19h45
  3. [GCC] Tableau de pointeurs pour accès multiples en asm
    Par Flo. dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 12/12/2005, 08h47
  4. tableau de pointeurs
    Par seal3 dans le forum C++
    Réponses: 7
    Dernier message: 01/11/2005, 20h51
  5. Tableau de pointeurs de fonctions
    Par Alp dans le forum C++
    Réponses: 7
    Dernier message: 29/10/2005, 13h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo