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 :

Récupérer a la sortie d'une fonction une matrice de taille inconnue


Sujet :

C

  1. #21
    Nouveau membre du Club

    Inscrit en
    Juin 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 25
    Points : 39
    Points
    39
    Par défaut
    Ca y est j'ai debuggé le code permettant d'utiliser une matrice avec relativement de transparence :

    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
    20
     
    int main(int argc, char *argv[])
    {
     
    int nb_ligne=2;
    int nb_colonne=3;
    int i;
     
    int ** matrix = malloc(nb_ligne * sizeof(int *));
    for(i = 0; i < nb_ligne; i++)
        matrix[i] = malloc(nb_colonne * sizeof(int));
     
     
    matrix[1][1]=4; // on impose la valeur a matrix[1][1]
    printf ("%d \n",matrix[1][1]); // impression de la valeur de matrix[1][1]
    printf ("%d \n",&matrix[1][1]);  // impression de l'adresse ou est contenu  matrix[1][1]
     
    return 0;
     
    }
    Cher auteur de la réponse précédente, je vous remercie de veiller "a mon information". C'est en tout cas une belle preuve d'humilité de votre part.

    J'ai juste ouvert la porte sur la question de la légitimité de C (désormais que la gestion de la mémoire est "accessoire") si on cherche une vision globale en prenant en compte des critères comme le temps d'apprentissage du langage, le temps de programmation, et bien entendu les répercutions économiques de tout ceci.

    Je n'empêche personne d'exprimer ses arguments, mais que personne ne me dise "ne venez pas parler de ce que vous ne connaissez pas" ca je ne l'accepte pas, c'est la réponse primaire des gens qui n'ont pas d'arguments.
    Si mes mots irritent ces gens sans arguments, libre a eux de ne pas me lire ... et encore moins de répondre pour etre autant anti constructif.

    Je me doute messieurs que vous êtes des spécialistes dans vos domaines, mais visiblement certains d'entre vous manquent de recul, ne cracher pas sur quelqu'un qui apporte une vision extérieur et donc différente de la votre.

    Et oui je le revendique, ca me gonfle de devoir utilisé C, mais c'est un avis purement subjectif, j'ai jamais eu (contrairement a certains) la volonté d'imposer mon avis comme vérité unique.


    Et pour ceux qui douterais qu'une matrice est un espace vectoriel et non une fonction mathematique, un oeil ici : http://mathsv.univ-lyon1.fr/cours/pd...e/al3_tout.pdf



    Merci donc Sve@r d'avoir pris le temps de repondre a mes questions techniques, et d'avoir eu l'ouverture d'esprit d'etre constructif dans tes reponses.

  2. #22
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lapinoufly Voir le message
    Pendant que j'y suis, j'ai testé le code suivant trouvé sur un forul, quelque'un saurait me dire pourquoi il bug, et encore mieux le faire marcher:

    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
    20
     
    int main()
    {
     
    int nblignes=2;
    int nbcolonnes=2;
     
     
    int i;
     
    int ** tableau2d = malloc(nblignes*sizeof(int));
    for( i = 0; i < nblignes; i++)
    {
        tableau2d[i] = malloc(nbcolonnes*sizeof(int));
    }
     
     
    tableau2d[1][1]=0;
    printf(tableau2d[1][1]);
    }
    Merci
    En dehors des fonctions malloc et printf non déclarées (et donc considérées par défaut de type "int" ce qui n'est pas réellement un bug mais une simple maladresse car ça fonctionne quand-même), le code possède 2 défauts
    1) le printf final qu'il aurait fallu écrire printf("%d\n", tableau2d[1][1]). Ca n'affichera donc rien mais c'est pas très grave.
    2) le premier malloc. Ca c'est hyper important. Parce que "tableau2d" est un pointeur sur un tableau de pointeurs. Donc il aurait fallu écrire int ** tableau2d = malloc(nblignes*sizeof(int *)). Hé oui, il faut allouer une taille suffisante pour stocker nblignes "pointeurs" et non nblignes "entiers" !!!

    Citation Envoyé par lapinoufly Voir le message
    Pendant que j'y suis, j'ai testé le code suivant trouvé sur un forul
    Ouaip. C'est ça quand on traine sur les foruls des programmeurs du bac à sable

    Tiens, voici ton code rectifié, débuggué et complété pour ressembler à un vrai code C tel qu'on le voit sur les foruls de ceux qui respectent le métier de la programmation...

    Code C : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    #include <stdlib.h>
    #include <stdio.h>
    #include <errno.h>
     
    void free_tab(int **tab, size_t nblignes)
    {
    	size_t i;
     
    	if (tab == NULL) return;
     
    	for (i=0; i < nblignes && tab[i] != NULL; i++)
    		free(tab[i]);
    	free(tab);
    }
     
    int main()
    {
     
    	size_t nblignes=5;
    	size_t nbcolonnes=5;
     
    	size_t i, j;
     
    	int ** tableau2d;
     
    	tableau2d=malloc(nblignes*sizeof(int*));
    	if (tableau2d == NULL)
    	{
    		fprintf(stderr, "erreur malloc(%lu) - %s\n", nblignes * sizeof(int*), strerror(errno));
    		exit(1);
    	}
     
    	// Remplissage
    	for( i = 0; i < nblignes; i++)
    	{
        		tableau2d[i] = malloc(nbcolonnes*sizeof(int));
    		if (tableau2d[i] == NULL)
    		{
    			// On libère ce qui a déjà été alloué (donc les "i" lignes correctement allouées)
    			free_tab(tableau2d, i);
    			fprintf(stderr, "erreur malloc(%lu) - %s\n", nbcolonnes * sizeof(int), strerror(errno));
    			exit(2);
    		}
     
    		for (j=0; j < nbcolonnes; j++)
    		{
    			tableau2d[i][j]=i * j;
    		}
    	}
     
    	// Affichage
            for( i = 0; i < nblignes; i++)
            {
    		// Affichage de l'adresse de la ligne (pour mieux comprendre comment marchent les pointeurs)
                    printf("ligne[%lu]=0x%04x: ", i, tableau2d[i]);
     
    		// Affichage de la valeur de la case et de son adresse (là aussi pour bien piger les pointeurs)
                    for (j=0; j < nbcolonnes; j++)
                    {
                            printf("%lu (0x%04x), ", tableau2d[i][j], &tableau2d[i][j]);
                    }
     
    		// La ligne est finie => fin de ligne
                    fputc('\n', stdout);
            }
     
    	// Nettoyage
    	free_tab(tableau2d, nblignes);
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #23
    Invité
    Invité(e)
    Par défaut
    Bonjour Sve@r,
    Je constate que vous devez être aussi vieux-jeu que moi, et que vous ne confondez pas matrice et tableau.
    Une matrice est une représentation d'une application dans un espace vectoriel à n dimensions. Le cours cité un peu plus haut explique très bien cela.
    Il est vrai que dans les premières lignes de ce cours, il est écrit "une matrice est un tableau". Par contre j'ai tout lu et je n'ai pas vu "Un tableau est une matrice".
    Pourquoi j'ai insisté sur ce point de langage, tout simplement parce que le jour où un membre posera la question "Quelle est la matrice de transformation pour ..." ou comment inverser la matrice, plus personne n'y comprendra rien.

    Il en est à peu près de même pour d'autre termes, comme "vecteur", "distance". Je me suis demandé pourquoi, j'ai cherché sur différents sites, et je n'ai trouvé aucune explication. Sur Wikipédia, les définitions correspondent à ce que ces mots représentaient pour moi. La seule explication que je peux imaginer est que ces termes existent à l'identique dans la langue anglaise, mais je ne sais pas s'ils ont strictement le même sens qu'en Français. Donc, je suppose que les auteurs en langue anglaise ne disposaient pas d'autre terme, et que la traduction en français a été un peu bâclée.

    D'ailleurs, à lire les post, l'orthographe semble évoluer, j'admets des fautes de frappe, mais on a le droit de se relire, par contre, je n'admet pas des fautes de grammaire, et je constate avec plaisir que je ne suis pas le seul.

    Cordialement.

  4. #24
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Pierre Dolez Voir le message
    Bonjour Sve@r,
    Je constate que vous devez être aussi vieux-jeu que moi, et que vous ne confondez pas matrice et tableau.
    Une matrice est une représentation d'une application dans un espace vectoriel à n dimensions. Le cours cité un peu plus haut explique très bien cela.
    Il est vrai que dans les premières lignes de ce cours, il est écrit "une matrice est un tableau". Par contre j'ai tout lu et je n'ai pas vu "Un tableau est une matrice".
    Pourquoi j'ai insisté sur ce point de langage, tout simplement parce que le jour où un membre posera la question "Quelle est la matrice de transformation pour ..." ou comment inverser la matrice, plus personne n'y comprendra rien.

    Il en est à peu près de même pour d'autre termes, comme "vecteur", "distance". Je me suis demandé pourquoi, j'ai cherché sur différents sites, et je n'ai trouvé aucune explication. Sur Wikipédia, les définitions correspondent à ce que ces mots représentaient pour moi. La seule explication que je peux imaginer est que ces termes existent à l'identique dans la langue anglaise, mais je ne sais pas s'ils ont strictement le même sens qu'en Français. Donc, je suppose que les auteurs en langue anglaise ne disposaient pas d'autre terme, et que la traduction en français a été un peu bâclée.
    On peut de façon générale convenir d'une certaine similitude entre matrice et tableau 2D. Certes tout dépend du degré de profondeur que l'on veut atteindre car il est clair qu'à un moment donné, les deux concepts divergeront. Mais je pense que dans ce cas précis, l'emploi du terme "matrice" est seulement destiné à illustrer une idée, une notion et ne doit pas être pris au premier degré.
    De plus, et c'est ce qui fait la force du français, un mot peut parfois être utilisé à la place d'un autre. Le mot utilisé n'est pas forcément le plus approprié mais donnera un certain effet à la phrase. On peut citer par exemple "Le dormeur du val" de Rimbaud et son fameux vers "la nuque baignant dans le frais cresson bleu". Qui a jamais vu du cresson bleu ? Mais qui ira décrier l'emploi de cet adjectif ???
    Dans le cas le plus extrême, on arrivera à l'oxymore et cette "obscure clarté" de Corneille ou ce "silence assourdissant" de Camus.
    Et donc c'est cette force du français que d'utiliser parfois un mot pour un autre sans pour autant perdre le sens général. Force qui peut aussi devenir faiblesse si le mot utilisé est pris ensuite au premier degré. C'est peut-être ce qui s'est passé avec les termes "matrice" et "tableaux". Et encore, s'il y avait eu un gynéco dans le coin, peut-être aurait-il tiqué lui aussi sur le mot "matrice" mais pour une autre raison...
    Donc à mon avis, on peut pas s'arrêter à ce détail. Parfois des mots sont mis là où d'autres auraient mieux valu mais l'important, dans ce topic comme dans les autres de ce forum programmation, est d'essayer de rester dans l'idée générale.

    Citation Envoyé par Pierre Dolez Voir le message
    D'ailleurs, à lire les post, l'orthographe semble évoluer, j'admets des fautes de frappe, mais on a le droit de se relire, par contre, je n'admet pas des fautes de grammaire, et je constate avec plaisir que je ne suis pas le seul.
    Arf, on essaye de bien écrire mais parfois, on se rate un peu (j'ai d'ailleurs mis un accent en trop sur un "ou" dans mon post précédent). Mais là encore c'est pareil. On est dans un forum informatique, pas littéraire. Tant que les phrases sont relativement bien faites, les mots correctement orthographiés, tant qu'on entre pas dans le style SMS si caractéristique des loosers de l'Education Nationale, on peut laisser filer la faute. Ou même s'en moquer gentiment comme pour "forul" (avec le l tellement trop à coté du m)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #25
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Citation Envoyé par lapinoufly Voir le message
    au defi peux tu coder un mario en python je repondrais peux tu coder un systeme de guidage de missile en moins d'un mois... avec python i did it.
    You are marvellous. Il ne s'agit pas de défi, mais de prise de conscience. Ton système de missiles, l'utiliserais-tu pour défendre ton pays? Python j'utilise tous les jours. Oh, certes, pas pour sauver le monde, juste quelques outils de développement bien terre à terre, python est idéal pour ça. Mais ça ne devrait pas aller plus loin.

    Citation Envoyé par lapinoufly Voir le message
    cette vieille dame quarantenaire qu'on appelle C mériterais qu'on la remplace par une fraiche demoiselle comportant ce qu'il faut la ou il faut.
    Ben ça tombe bien, on n'attendait que toi pour le faire. Sinon, renvoyer une structure au lieu d'un pointeur, non?

    A+

    Pfeuh

  6. #26
    Invité
    Invité(e)
    Par défaut
    Bonjour pfeuh,
    Ben ça tombe bien, on n'attendait que toi pour le faire.
    J'ai fait une petite recherche, et cette suggestion a déjà été faite il y a près d'un an à Lapinoufly.
    J'ai remarqué que le C++ en a pris autant pour son grade que le C
    Je suis surpris et déçu que Lapinoufly n'ait pas plus avancé dans ses recherches. Serait-ce uniquement par manque de temps?.

    Le mieux c'est de bien se former, par exemple avec les cours et tutoriels C et la FAQ C.

  7. #27
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pfeuh Voir le message
    You are marvellous. Il ne s'agit pas de défi, mais de prise de conscience. Ton système de missiles, l'utiliserais-tu pour défendre ton pays? Python j'utilise tous les jours. Oh, certes, pas pour sauver le monde, juste quelques outils de développement bien terre à terre, python est idéal pour ça. Mais ça ne devrait pas aller plus loin.
    Je ne suis pas d'accord. Es-tu en train de dire que Python n'est pas fiable ???
    Si un langage est assez fiable pour gérer un commerce (vente, achat, commandes, etc), il est aussi assez fiable pour guider des missiles (après tout, dans les deux cas, il ne fait que manipuler des bits !!!).
    Les seuls critères à prendre en compte sont "est-ce que ce langage permettra de répondre au cahier des charges" (style temps de réaction et vitesse de calcul, etc) et donc on ne peut pas l'exclure sous prétexte qu'on s'en sert aussi pour programmer quelques outils de développement bien terre à terre.

    Par ailleurs, dans les applis vraiment critiques (pilotage automatique, guidage missile, etc), aucun langage n'est considéré comme assez fiable. C'est pour ça que généralement les calculateurs sont dédoublés et indépendants...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #28
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Es-tu en train de dire que Python n'est pas fiable ???
    Non. Je dis juste qu'il est lent.

  9. #29
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pfeuh Voir le message
    Non. Je dis juste qu'il est lent.
    Ah ok. De ce point de vue là, effectivement il ne peut pas servir de base à
    - un système de guidage missile
    - un os

    C'est probablement pour ça que lapinoufly recode son appli en C (cf post initial). Mais je le plains parce qu'il y a des outils Python (comme le yield ou les list comprehension) qui sont pas évident à retranscrire en C...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. appliquer une fonction à une fonction
    Par stracoma dans le forum C++
    Réponses: 6
    Dernier message: 20/03/2015, 16h35
  2. Réponses: 2
    Dernier message: 14/01/2011, 11h05
  3. Récupérer le nom du fichier qui appelle une fonction
    Par DeezerD dans le forum Langage
    Réponses: 2
    Dernier message: 24/03/2007, 14h37
  4. Réponses: 2
    Dernier message: 08/10/2006, 11h44
  5. passer en paramettre d'une fonction une fonction
    Par RoM3Ro dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/06/2006, 15h54

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