Bien programmer en langage C
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le deal à ne pas rater :
Funko POP! Jumbo One Piece Kaido Dragon Form : où l’acheter ?
Voir le deal

Tableau a deux dimensions.

2 participants

Aller en bas

Tableau a deux dimensions. Empty Tableau a deux dimensions.

Message  frager50 Dim 9 Mai 2010 - 13:54

Bonjour,

Ce code est-il correct ?

main.c
Spoiler:


matrice.c

Spoiler:


matrice.h

Spoiler:



Merci !


Dernière édition par frager50 le Lun 10 Mai 2010 - 22:02, édité 7 fois

frager50
Bavard
Bavard

Messages : 17
Date d'inscription : 25/03/2009

Revenir en haut Aller en bas

Tableau a deux dimensions. Empty Re: Tableau a deux dimensions.

Message  -ed- Lun 10 Mai 2010 - 14:13

Non.
Code:

-------------- Build: Debug in hello ---------------

Compiling: main.c
Linking console executable: bin\Debug\hello.exe
C:\dev\hello\main.c:9: warning: function declaration isn't a prototype
C:\dev\hello\main.c: In function `main':
C:\dev\hello\main.c:10: error: syntax error before ';' token
Process terminated with status 1 (0 minutes, 1 seconds)
1 errors, 1 warnings
Je conseille de lire ceci d'urgence :

http://www.bien-programmer.fr/notes.php#tabdyn_2d
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Tableau a deux dimensions. Empty Re: Tableau a deux dimensions.

Message  frager50 Lun 10 Mai 2010 - 19:04

En fait ce code est extrait d'un plus gros projet et je ne voulais pas mettre les 36000 fichiers. C'est mieux comme sa ?

frager50
Bavard
Bavard

Messages : 17
Date d'inscription : 25/03/2009

Revenir en haut Aller en bas

Tableau a deux dimensions. Empty Re: Tableau a deux dimensions.

Message  -ed- Lun 10 Mai 2010 - 19:11

Non, ça n'a aucune chance de fonctionner.
Code:

-------------- Build: Debug in hello ---------------

Compiling: main.c
Linking console executable: bin\Debug\hello.exe
C:\dev\hello\main.c:9: warning: function declaration isn't a prototype
C:\dev\hello\main.c: In function `main':
C:\dev\hello\main.c:10: warning: 'matrice' might be used uninitialized in this function
obj\Debug\main.o: In function `main':
C:/dev/hello/main.c:11: undefined reference to `_createM'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 4 seconds)
1 errors, 2 warnings
Essaye de poster un code complet (compilable, mais réduit au minimum).

As-tu lu l'article dont j'ai donné la référence ? Les réponses à tes interrogations s'y trouvent ...
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Tableau a deux dimensions. Empty Re: Tableau a deux dimensions.

Message  frager50 Lun 10 Mai 2010 - 19:13

Voila j'ai envoyé le projet. Oui j'ai essayer de m'appuyer sur l'article pour faire ce programme.

frager50
Bavard
Bavard

Messages : 17
Date d'inscription : 25/03/2009

Revenir en haut Aller en bas

Tableau a deux dimensions. Empty Re: Tableau a deux dimensions.

Message  -ed- Lun 10 Mai 2010 - 19:17

Je n'ai pas le temps de tout regarder maintenant, mais déjà, il ne devrait pas y avoir de 'main.h", car main.c, par définition, n'exporte rien. La seule fonction publique est main() et elle n'a pas besoin de prototype.

En principe, un seul fichier suffit pour exposer le problème (voire 3 si on fait de la programmation modulaire).



Je regarde ça demain matin...


Dernière édition par -ed- le Lun 10 Mai 2010 - 19:18, édité 1 fois
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Tableau a deux dimensions. Empty Re: Tableau a deux dimensions.

Message  frager50 Lun 10 Mai 2010 - 19:18

Merci beaucoup de prendre un peu de temps pour m'aider !

Pour le main.h ne je savais pas ! En plus dans mon fichier il n'y a qu'un include... je corrige sa !

frager50
Bavard
Bavard

Messages : 17
Date d'inscription : 25/03/2009

Revenir en haut Aller en bas

Tableau a deux dimensions. Empty Re: Tableau a deux dimensions.

Message  -ed- Mar 11 Mai 2010 - 19:09

Pour le moment, ça donne
Code:


-------------- Build: Debug in hello ---------------

Compiling: matrice.c
Compiling: main.c
Linking console executable: bin\Debug\hello.exe
C:\dev\hello\main.c:7: warning: function declaration isn't a prototype
Output size is 21.37 KB
Process terminated with status 0 (0 minutes, 4 seconds)
0 errors, 1 warnings
Ce qui est plutôt encourageant. Par contre, je trouve qu'il y a beaucoup d'étoiles. En principe, pour mettre à jour une variable, on préfère retourner la valeur et l'affecter

Code:
x := f()

c'est nettement plus clair et plus simple à coder ... Les fonctions createM() et freeM() pourraient utiliser ce principe. Les autres fonctions n'auraient plus alors besoin de 3 *, mais simplement de 2 ...

Autre chose qui ne va pas. Les constantes qui définissent la taille ne doivent pas se trouver dans le header (sinon, autant faire des tableaux de taille fixe), mais passées en paramètres à la fonction de création. En fait, l'idéal est de placer leurs valeurs dans une structure qui contient ce qu'il faut pour définir la matrice, à savoir :

- adresse de base
- dimensions.

ensuite, on ne fait que manipuler l'adresse de la structure.

Je te laisse revoir le code en conséquences.

On peut déjà rendre la taille autonome comme ceci :
Spoiler:
J'ai un peu amélioré la fonction d'affichage :
Code:

Creation de la matrice
Matrice initialisee
 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1|
 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1|
 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1|
 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1|
 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1| 1 1 1|

Matrice afficher
Matrice libre
Process returned 0 (0x0)  execution time : 0.043 s
Press any key to continue.
On peut ensuite réduire le nombre d'étoiles comme ceci :
Spoiler:
Enfin, on peut introduire la structure :
Spoiler:


Dernière édition par -ed- le Mar 11 Mai 2010 - 20:32, édité 3 fois
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Tableau a deux dimensions. Empty Re: Tableau a deux dimensions.

Message  frager50 Mar 11 Mai 2010 - 20:09

Merci d'avoir pris un peu de temps pour me répondre ! C'est vrai qu'il y a beaucoup d'étoiles mais en fait c'est un petit projet pour m'entrainer a manipuler les pointeurs.

C'est vrai que pour les lignes et les colonnes le but était que l'utilisateur choisisse la taille du tableau donc c'est mieux ainsi !

Merci beaucoup !

frager50
Bavard
Bavard

Messages : 17
Date d'inscription : 25/03/2009

Revenir en haut Aller en bas

Tableau a deux dimensions. Empty Re: Tableau a deux dimensions.

Message  -ed- Mar 11 Mai 2010 - 20:35

J'ai complété mes réponses j'espère que tu as compris le cheminement vers le code final. C'est essentiel, car ce principe est très utilisé...

On peut même aller plus loin en rendant la structure 'opaque' :
Spoiler:
On est alors dans le mécanisme de l'ADT : http://www.bien-programmer.fr/tad.htm
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Tableau a deux dimensions. Empty Re: Tableau a deux dimensions.

Message  frager50 Mar 11 Mai 2010 - 21:44

C'est un peu comme la programmation orientée objet , non ?

frager50
Bavard
Bavard

Messages : 17
Date d'inscription : 25/03/2009

Revenir en haut Aller en bas

Tableau a deux dimensions. Empty Re: Tableau a deux dimensions.

Message  -ed- Mar 11 Mai 2010 - 21:53

Presque. C'est le principe de base de la POO (l'encapsulation et la protection des données)
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Tableau a deux dimensions. Empty Re: Tableau a deux dimensions.

Message  frager50 Dim 16 Mai 2010 - 14:05

J'ai un nouveau soucis : quand je demande des "grandes" matrice la mémoire ne se libère pas correctement......

Le code est un peu modifier et j'ai pris les valeurs de ligne et colonnes arbitrairement pour l'exemple :


Spoiler:

Le programme plante dans la fonction freeM.

frager50
Bavard
Bavard

Messages : 17
Date d'inscription : 25/03/2009

Revenir en haut Aller en bas

Tableau a deux dimensions. Empty Re: Tableau a deux dimensions.

Message  -ed- Dim 16 Mai 2010 - 15:19

Qu'est-ce que "lecture.h" et surtout, qu'est-ce que "lecture.c" et pourquoi est-il inclus ? Même si c'est techniquement possible, on inclue pas un .c

OK; j'ai utilisé mes propres fonctions :

http://www.bien-programmer.fr/clib/ed/inc/io.h
http://www.bien-programmer.fr/clib/ed/inc/io.c

Ceci fonctionne (testé avec 200 x 200, 100 poissons et 20 requins):

Spoiler:
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Tableau a deux dimensions. Empty Re: Tableau a deux dimensions.

Message  frager50 Dim 16 Mai 2010 - 20:49

Euh oui c'était juste un test. Au final je m'en suis pas servis...

Le code marche....mais je ne comprends pas pourquoi cela plantais cette après-midi......

frager50
Bavard
Bavard

Messages : 17
Date d'inscription : 25/03/2009

Revenir en haut Aller en bas

Tableau a deux dimensions. Empty Re: Tableau a deux dimensions.

Message  -ed- Dim 16 Mai 2010 - 21:57

C'est parce que tu avais laissé un 'COLONNE' en 'dur' qui n'avait pas la bonne valeur, d'où un débordement ...
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Tableau a deux dimensions. Empty Re: Tableau a deux dimensions.

Message  frager50 Dim 16 Mai 2010 - 22:38

Ok !!! J'ai passé du temps a chercher l'erreur pourtant.....


Merci pour ton aide précieuse !

frager50
Bavard
Bavard

Messages : 17
Date d'inscription : 25/03/2009

Revenir en haut Aller en bas

Tableau a deux dimensions. Empty Re: Tableau a deux dimensions.

Message  -ed- Dim 16 Mai 2010 - 23:02

... et j'avais fourni du code qui évitait ce genre de problème "par construction". Ce qu'on appelle la "programmation défensive". On peut s'en passer mais preuve est faite que c'est à ses risques et périls ...
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Tableau a deux dimensions. Empty Re: Tableau a deux dimensions.

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser