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 :

Opérations sur les matrices...


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Points : 25
    Points
    25
    Par défaut Opérations sur les matrices...
    salut!
    Je suis en plein TD sur les matrices, on a géré la base (saisie de matrice, désallocation, matrice unité, affichage d'une matrice), mais là je bloque sur une fonction où je dois effectuer la transposée d'une matrice(m,n) (inversement ligne / colonne).

    Voilà mon code source :


    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
    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
     
     
    float ** rempmat(int Nbl,int nbc)
    {
     
    float ** tab;
    int i,j;
    float nbre,tmp ;
     
    /*Initialisation matrice*/
     
    tab = (float**)malloc(Nbl*sizeof(float*));
    for (i=0;i<Nbl;i++)
    {
        *(tab+i) = (float*)malloc(nbc*sizeof(float));
        for (j=0;j<nbc;j++)
        {
            *(*(tab+i)+j)=0;
        }
    }
     
    /*Saisie d'une matrice par l'utilisateur*/
     
    for (i=0;i<Nbl;i++)
    {
        *(tab+i) = (float*)malloc(nbc*sizeof(float));
        for (j=0;j<nbc;j++)
        {
        printf("saisir nombre reel \n") ;
        scanf("%f",&nbre) ;
            *(*(tab+i)+j)=nbre ;
        }
    }
     
    /*Transposée matrice*/
     
    for (i=0;i<Nbl;i++)
    {
        *(tab+i) = (float*)malloc(nbc*sizeof(float));
        for (j=0;j<nbc;j++)
        {
            tmp=*(*(tab+i)+j) 
            *(*(tab+i)+j) = *(*(tab+j)+i) ;
            *(*(tab+j)+i) = tmp;
        }
    }
     
    return tab ;
     
    }

    Je dois gérer le cas de toutes les matrices, pas seulement des matrices carrées, mais même pour ces dernières ca ne fonctionne pas.
    Si quelqu'un a une idée...

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2004
    Messages : 66
    Points : 90
    Points
    90
    Par défaut Re: Opérations sur les matrices...
    Opinion personnelle : la notation *(*(tab+i) +j) est difficile à lire : tu devrais utiliser des tab[i] et tab[i][j] qui donne le même résultat mais sera bien plus lisible ...

    Bon, mes commentaires dans ton code ..

    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
    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
     
     
    float ** rempmat(int Nbl,int nbc)
    {
     
    float ** tab;
    int i,j;
    float nbre,tmp ;
     
    /*Initialisation matrice*/
     
    tab = (float**)malloc(Nbl*sizeof(float*));
    if ( !tab )
    {
       return NULL;
    }
    for (i=0;i<Nbl;i++)
    {
        *(tab+i) = (float*)malloc(nbc*sizeof(float));
       if ( !tab[i] )
       {
           for ( ; i >= 0 ; i--) 
           {
               free ( tab[i]);
           }
           free ( tab );
           return NULL;
       }
       /*  Inutile, tu fais un scanf pour chaque valeur !!! for (j=0;j<nbc;j++)
        {
            *(*(tab+i)+j)=0;
        } */
    }
     
    /*Saisie d'une matrice par l'utilisateur*/
     
    for (i=0;i<Nbl;i++)
    {
        // *(tab+i) = (float*)malloc(nbc*sizeof(float)); // tu réalloues ce que tu as déjà alloué précédemment ...
        for (j=0;j<nbc;j++)
        {
        printf("saisir nombre reel \n") ;
        scanf("%f",&nbre) ;
            *(*(tab+i)+j)=nbre ;
        }
    }
     
    /*Transposée matrice*/
     
    for (i=0;i<Nbl;i++)
    {
        //*(tab+i) = (float*)malloc(nbc*sizeof(float)); // Et encore une allocation
        for (j=0;j<nbc;j++)
        {
            tmp=*(*(tab+i)+j)  // tu prends une valeur non initialisée
            *(*(tab+i)+j) = *(*(tab+j)+i) ; // ça ne peut marcher que si Nbl = nbc .. dangereux :)
            *(*(tab+j)+i) = tmp;
        }
    }
     
    return tab ;
     
    }
    Le problème pour les matrices carrées est la réallocation de tab[i] qui écrase les valeurs à chaque fois
    - Je suis fascine par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre....Et les avions aussi....
    - Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien.
    JC Vandamme.

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Opérations sur les matrices...
    Citation Envoyé par DavG
    Le problème pour les matrices carrées est la réallocation de tab[i] qui écrase les valeurs à chaque fois
    Non. realloc() preserve les valeurs de la précedente allocation, heureusement... Par contre, la zone nouvellement allouée n'est pas initialisée, ce qui peut surprendre parfois!
    Pas de Wi-Fi à la maison : CPL

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2004
    Messages : 66
    Points : 90
    Points
    90
    Par défaut Re: Opérations sur les matrices...
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par DavG
    Le problème pour les matrices carrées est la réallocation de tab[i] qui écrase les valeurs à chaque fois
    Non. realloc() preserve les valeurs de la précedente allocation, heureusement... Par contre, la zone nouvellement allouée n'est pas initialisée, ce qui peut surprendre parfois!
    Je reformule : les "ré - allocations" .. en utilisant malloc et pas realloc, j'avoue que je me suis assez mal exprimé, mais comment dirais-tu de quelqu'un qui fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tab = malloc ( ...
    ...
    tab = malloc ( ...
    ...
    tab = malloc ( ...
    A part dire une réallocation de la mémoire ???
    - Je suis fascine par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre....Et les avions aussi....
    - Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien.
    JC Vandamme.

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Opérations sur les matrices...
    Citation Envoyé par DavG
    Opinion personnelle : la notation *(*(tab+i) +j) est difficile à lire : tu devrais utiliser des tab[i] et tab[i][j] qui donne le même résultat mais sera bien plus lisible ...

    Bon, mes commentaires dans ton code ..
    Voici une version plus modulaire. Je ne suis pas convaincu par l'effet de la 'transposition'...
    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
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
     
    #include <stdlib.h>
    #include <stdio.h>
     
    static float get_f (void)
    {
       char s[16];
     
       fgets (s, sizeof s, stdin);
       return (float) strtod (s, NULL);
    }
     
    /* Creation matrice */
    float **cree_mat (int n)
    {
       float **tab = malloc (n * sizeof *tab);
     
       if (tab != NULL)
       {
          int i;
     
          for (i = 0; i < n; i++)
          {
             tab[i] = malloc (n * sizeof *tab[i]);
     
             if (!tab[i])
             {
                for (; i >= 0; i--)
                {
                   free (tab[i]);
                }
                free (tab), tab = NULL;
                break;
             }
          }
       }
       return tab;
    }
     
    /* suppression matrice */
    void del_mat (float **tab, int n)
    {
       if (tab != NULL)
       {
          int i;
          for (i = 0; i < n; i++)
          {
             free (tab[i]);
          }
          free (tab);
       }
    }
     
    /* Saisie d'une matrice par l'utilisateur */
    void fill_mat (float **tab, int n)
    {
       if (tab != NULL)
       {
          int i;
     
          for (i = 0; i < n; i++)
          {
             int j;
     
             for (j = 0; j < n; j++)
             {
                printf ("saisir nombre reel \n");
                tab[i][j] = get_f ();
             }
          }
       }
    }
     
    void aff_mat (float  *const*tab, int n)
    {
       if (tab != NULL)
       {
          int i;
     
          printf ("matrice %d x %d\n", n, n);
          for (i = 0; i < n; i++)
          {
             int j;
             for (j = 0; j < n; j++)
             {
                printf ("%5.2f", tab[i][j]);
             }
             printf ("\n");
          }
          printf ("\n");
       }
    }
     
    /* Transposee matrice */
    void trans_mat (float **tab, int n)
    {
       int i;
       for (i = 0; i < n; i++)
       {
          int j;
          for (j = 0; j < n; j++)
          {
             float tmp = tab[i][j];
             tab[i][j] = tab[j][i];
             tab[j][i] = tmp;
          }
       }
    }
     
    int main (void)
    {
       int n = 3;
       float **mat = cree_mat (n);
     
       if (mat != NULL)
       {
          fill_mat (mat, n);
          aff_mat (mat, n);
     
          printf ("transpose\n");
          trans_mat (mat, n);
          aff_mat (mat, n);
     
          del_mat (mat, n);
       }
       return 0;
    }
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Opérations sur les matrices...
    Citation Envoyé par DavG
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par DavG
    Le problème pour les matrices carrées est la réallocation de tab[i] qui écrase les valeurs à chaque fois
    Non. realloc() preserve les valeurs de la précedente allocation, heureusement... Par contre, la zone nouvellement allouée n'est pas initialisée, ce qui peut surprendre parfois!
    Je reformule : les "ré - allocations" .. en utilisant malloc et pas realloc, j'avoue que je me suis assez mal exprimé, mais comment dirais-tu de quelqu'un qui fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tab = malloc ( ...
    ...
    tab = malloc ( ...
    ...
    tab = malloc ( ...
    A part dire une réallocation de la mémoire ???
    Ok, désolé. J'ai compris ce que tu voulais dire en lisant son code...

    une sur-allocation ?
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2004
    Messages : 66
    Points : 90
    Points
    90
    Par défaut Re: Opérations sur les matrices...
    Citation Envoyé par Emmanuel Delahaye
    J'ai compris ce que tu voulais dire en lisant son code...

    une sur-allocation ?
    Ça me va
    - Je suis fascine par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre....Et les avions aussi....
    - Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien.
    JC Vandamme.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Points : 25
    Points
    25
    Par défaut Re: Opérations sur les matrices...
    C'est vrai que pour la notation c'est moins clair, mais comme depuis quelques temps ils veulent des versions pointeur, j'ai écrit comme ca. :/

    Pour les multiples allocations, c'est vrai qu'elles sont inutiles, je les enlève.

    Le code d'échange ligne colonne en utilisant tmp, ne peut marcher qu'avec des matrices carrés, je m'en était rendu compte, mais je voulais au moins tester si ca marché pour celles-ci, puisque j'ai pas d'idée pour des matrices autres. :/


    J'ai testé le codé que tu m'a donné, Emmanuel, mais je ne peux pas le compiler, il y a une erreur dans la fonction de création de la matrice,
    "invalid conversion from "void" to float"", concernant ces deux lignes là :

    Citation Envoyé par Emmanuel Delahaye
    float **tab = malloc (n * sizeof *tab);
    Citation Envoyé par Emmanuel Delahaye
    tab[i] = malloc (n * sizeof *tab[i]);
    Il y a confusion de types, mais je ne vois pas bien d'où ca peut venir...

    Il y a également cette fonction que je ne comprend pas bien, tu peux me dire à quoi elle sert?

    Citation Envoyé par Emmanuel Delahaye


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    static float get_f (void)
    {
       char s[16];
     
       fgets (s, sizeof s, stdin);
       return (float) strtod (s, NULL);
    }
    Merci à tous ,c'est sympa de répondre.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2004
    Messages : 66
    Points : 90
    Points
    90
    Par défaut Re: Opérations sur les matrices...
    Citation Envoyé par aokiseiichiro
    J'ai testé le codé que tu m'a donné, Emmanuel, mais je ne peux pas le compiler, il y a une erreur dans la fonction de création de la matrice,
    "invalid conversion from "void" to float"", concernant ces deux lignes là :

    Citation Envoyé par Emmanuel Delahaye
    float **tab = malloc (n * sizeof *tab);
    Tu dois utiliser un compilateur C++, donc il te faut caster le malloc en (float *).
    - Je suis fascine par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre....Et les avions aussi....
    - Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien.
    JC Vandamme.

  10. #10
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut Re: Opérations sur les matrices...
    Citation Envoyé par DavG
    Tu dois utiliser un compilateur C++, donc il te faut caster le malloc en (float *).
    Où plutot utiliser un compilateur C (vérifie l'extension du fichier source qui doit être *.c et non *.cpp ni *.C ).

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Opérations sur les matrices...
    Citation Envoyé par aokiseiichiro
    J'ai testé le codé que tu m'a donné, Emmanuel, mais je ne peux pas le compiler, il y a une erreur dans la fonction de création de la matrice,
    "invalid conversion from "void" to float"", concernant ces deux lignes là :
    Citation Envoyé par Emmanuel Delahaye
    float **tab = malloc (n * sizeof *tab);
    Citation Envoyé par Emmanuel Delahaye
    tab[i] = malloc (n * sizeof *tab[i]);
    Il y a confusion de types, mais je ne vois pas bien d'où ca peut venir...
    Ce code est du C. Pour invoquer le compilateur C, il faut que l'extension soit .c et non .cpp ni .C.
    Il y a également cette fonction que je ne comprend pas bien, tu peux me dire à quoi elle sert?
    Citation Envoyé par Emmanuel Delahaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    static float get_f (void)
    {
       char s[16];
     
       fgets (s, sizeof s, stdin);
       return (float) strtod (s, NULL);
    }
    Elle sert à saisir un float. Elle n'est pas parfaite, mais elle couvre les cas principaux et ne laisee pas trainer de '\n' (sauf insistance maladive sur le clavier)
    Pas de Wi-Fi à la maison : CPL

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Opérations sur les matrices...
    Citation Envoyé par DavG
    Tu dois utiliser un compilateur C++, donc il te faut caster le malloc en (float *).
    Mauvaise réponse. On ne compile pas du C avec un compilateur C++. Ce sont 2 langages différents.

    http://david.tribble.com/text/cdiffs.htm
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Il ne faut quand même pas exagérer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(void)
    {
    	puts("Hello World");
    	return 0;
    }
    Ce pur programme C a été créé dans le fichier foo.cpp, compilé donc par le compilateur C++ et fonctionne parfaitement.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2004
    Messages : 66
    Points : 90
    Points
    90
    Par défaut Re: Opérations sur les matrices...
    Citation Envoyé par Emmanuel Delahaye
    Mauvaise réponse. On ne compile pas du C avec un compilateur C++. Ce sont 2 langages différents.
    C'est plus que du purisme ta réponse : tu peux prendre un fichier .c, le renommer .cpp et le compiler .. j'appelle ça compiler du C avec un compilateur c++ et pas "faire" du c++
    - Je suis fascine par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre....Et les avions aussi....
    - Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien.
    JC Vandamme.

  15. #15
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut Re: Opérations sur les matrices...
    Citation Envoyé par Emmanuel Delahaye
    Ce code est du C. Pour invoquer le compilateur C, il faut que l'extension soit .c et non .cpp ni .C.
    Non. Enfin, du moins pas si tu sais régler tes compilateurs : ça doit prendre 10 secondes pour demander à BC++ de compiler un source C (en mode C, bien sûr) dont l'extension serait ".PDF". Quant à la distinction majuscules/minuscules... Encore faut-il que l'OS en tienne compte.

    Citation Envoyé par Emmanuel Delahaye
    Mauvaise réponse. On ne compile pas du C avec un compilateur C++. Ce sont 2 langages différents.
    Pas remarqué. Mes modules compilent indifféremment en C ou en C++, ça c'est de la vraie portabilité : non seulement entre plate-formes, mais carrément entre langages...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2004
    Messages : 66
    Points : 90
    Points
    90
    Par défaut Re: Opérations sur les matrices...
    Citation Envoyé par Mac LAK
    Mes modules compilent indifféremment en C ou en C++,
    La seule contrainte est que tu dois mettre tous les cast pour les type void en cpp .. mais bon, si tu utilises un outil comme flexlint il te dit de les mettre de toute façon et après tu compiles indifféremment dans l'un ou l'autre !
    - Je suis fascine par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre....Et les avions aussi....
    - Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien.
    JC Vandamme.

  17. #17
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut Re: Opérations sur les matrices...
    Citation Envoyé par DavG
    Citation Envoyé par Mac LAK
    Mes modules compilent indifféremment en C ou en C++,
    La seule contrainte est que tu dois mettre tous les cast pour les type void en cpp .. mais bon, si tu utilises un outil comme flexlint il te dit de les mettre de toute façon et après tu compiles indifféremment dans l'un ou l'autre !
    Mettre les casts explicites, c'est une habitude que j'ai prise depuis bien longtemps.
    Y'a deux écoles sur le sujet, perso ça me vrille d'omettre un cast de ce type, même en C => donc, aucun problème.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  18. #18
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Trap D
    Il ne faut quand même pas exagérer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(void)
    {
    	puts("Hello World");
    	return 0;
    }
    Ce pur programme C a été créé dans le fichier foo.cpp, compilé donc par le compilateur C++ et fonctionne parfaitement.
    Et ça prouve quoi ?

    En tout cas c'est du mauvais C++.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <cstdio>
     
    int main()
    {
    	puts("Hello World");
    	return 0;
    }
    Pas de Wi-Fi à la maison : CPL

  19. #19
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Opérations sur les matrices...
    Citation Envoyé par DavG
    Citation Envoyé par Emmanuel Delahaye
    Mauvaise réponse. On ne compile pas du C avec un compilateur C++. Ce sont 2 langages différents.
    C'est plus que du purisme ta réponse :
    Non, c'est du bon sens.
    tu peux prendre un fichier .c, le renommer .cpp et le compiler .. j'appelle ça compiler du C avec un compilateur c++ et pas "faire" du c++
    Ben si, parce que c'est la sémantique du C++ qui va s'appliquer, et il peut y avoir des surprises. Moi, je me contente de mettre les gens en garde contres les mauvaiuses pratiques, après, ils font ce qu'ils veulent, je m'en tape. J'ai la conscience tranquille, ils ne pourront pas dire 'je ne savais pas', 'on m'a rien dit' etc.
    Pas de Wi-Fi à la maison : CPL

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2004
    Messages : 66
    Points : 90
    Points
    90
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Trap D
    Ce pur programme C a été créé dans le fichier foo.cpp, compilé donc par le compilateur C++ et fonctionne parfaitement.
    Et ça prouve quoi ?

    En tout cas c'est du mauvais C++.
    Je pense que c'est exactement ce qu'il dit : c'est du C et pas du C++, mais en renommant le .c en .cpp tu peux le compiler sans problème .. comme bien souvent les environnements sont des compilateurs C++ qui ouvrent des .cpp sans te le demander, rien ne t'empêche de faire du C compilé en mode C++ !
    - Je suis fascine par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre....Et les avions aussi....
    - Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien.
    JC Vandamme.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/04/2013, 11h53
  2. GUI affichage et opération sur les matrices
    Par ED2912 dans le forum MATLAB
    Réponses: 5
    Dernier message: 14/01/2013, 16h09
  3. Opérations sur les matrices
    Par mister3957 dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 01/11/2007, 23h47

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