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 :

Que fait ce programme de matrices ?


Sujet :

C

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut Que fait ce programme de matrices ?
    Salut,

    j'aurais besoin d'aide pour comprendre ce que fait ce programme et en particulier les fonctions cc et p
    J'ai essayé en utilisant un dessin mais je n'arrive pas à trouver.
    Si quelqu'un pouvait m'aider.
    Merci

    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
    #include<stdio.h>
    #include<stdlib.h>
     
    void a(int ***r, size_t n){
      unsigned int i,j,k;
      for(i=0U; i<n; ++i){
        for(j=0U; j<n; ++j){
          for(k=0U; k<n; ++k) printf("%d ",r[i][j][k]);
          printf("\n");
        }
        printf("\n\n");
      }
    }
     
    void cc(int ****r, size_t n){
      unsigned int i,j,k;
      *r = malloc(n * sizeof(int **));
      for(i=0U; i<n; ++i){
        (*r)[i] = malloc(n *size(int *));
        for(j=0U; j<n; ++j){
          (*r)[i][j] = malloc(n * sizeof(int));
          for(k=0U; k<n; ++k)
            (*r)[i][j][k] = i*n*n+j*n+k;
          }
       }
    }
     
    void cl(int ****r, size_t n){
      unsigned int i,j;
      for(i=0U; i<n; ++i){
        for(j=0U; j<n; ++j) free((*r)[i][j]);
        free((*r)[i]);
      }
      free((*r));
      *r = NULL;
    }
     
    void * c2(void *c) { return *(int ***)c; }
    void * c1(void *c) { return *(int **)c; }
     
     
    void p(void *c, size_t s, unsigned int l){
      static size_t ts[] = { sizeof(int), sizeof(int*), sizeof(int**)};
      static void * (*tf[])(void *) = {&c1, &c2};
      unsigned int i,j;
      for(i=0U; i<s/2U; ++i){
        for(j=0U; j<ts[l]; ++j){
          char tmp;
          tmp = *((char *)c+i*ts[l]+j);
          *((char *)c+i*ts[l]+j) = *((char *)c+(s-1-i)*ts[l]+j);
          *((char *)c+(s-1-i)*ts[l]+j) = tmp;
        }
      }
      if(l!=0U)
        for(i=0U; i<s; ++i, c=(void *)(((char *)c)+ts[l]))
          p( (*(tf[l-1U]))(c), s, l-1U);
    }
     
     
    void pA(int ***m, size_t s){ p(m,s,2U); }
     
    int main(void){
      int ***m; cc(&m,3); a(m,3); pA(m,3); cl(&m,3);
      return EXIT_SUCCESS;
    }

  2. #2
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    la fonction cc alloue de la place pour une matrice de taille n (3 ici) et remplie ta matrice avec
    Ri,j,k = i*9+j*3+k;

    par contre la fonction p ... c'est du vaudou
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  3. #3
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Salut

    Ce programme de matrices nous fait prendre conscience que les commentaires c'est important

    cc() alloue un tableau 3 dimensions, alloue chaque dimensions, et initialise chaque case à un numero
    Apres, pour le p(), alors là .. en plus p() est recursif
    Celui qui a ecrit ça connait bien le langage c, mais c'est vraiment illisible

  4. #4
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Mais c'est dingue ce truc !
    Pardonnez mon ignorance, c'est quoi le OU dans les boucles ?
    Et les 1U et 2U ?
    Pour la fonction p(), je ne comprends pas grand chose, c'est bourré de cast...
    Je me rends compte que je connais encore peu le C...
    Mais cette manie de faire des fonctions avec des noms non explicites, et sans commenter !
    C'est le concours du plus goret ou quoi ?
    Aucune réponse à une question technique par MP.
    Ce qui vous pose problème peut poser problème à un(e) autre

    http://thebrutace.labrute.fr

  5. #5
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    C'est pas OU mais 0U
    On peut mettre des suffixes aux constantes numeriques pour leur donner un type precis
    comme L qui signifie "long", U signifie unsigned, on a aussi LL, UL, ULL, yen a ptet d'autres

  6. #6
    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
    Question déjà posée sur le forum hardware où je t'ai déjà répondu , j'ai rajouté des explications que tu aurais pu trouver en testant comme je l'ai fait, ce code est volontairement imbitable, il faut le tracer pour comprendre ce qu'il fait.
    Au passage, tu n'as pas corrigé toutes les erreurs que j'avais signalé.
    "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

  7. #7
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    LOL bah au moins c'est un bon exemple pour voir ce qu'il ne faut PAS faire !

    J'aime bien la fonction p récursive avec des appels de fonctions pour inverser des éléments de la matrice

    Si si c'est commenté

    ts -> tableau de taille (size)
    tf -> tableau de fonctions


    et les 0U (pour optimisation ? ou pour faire encore + jolie ), vu comment c codé LOL

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est de l'IOCCC ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    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
    The International Obfuscated C Code Contest
    A contest to write the most obscure/obfuscated C program
    Ça veut tout dire
    "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

  10. #10
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Je pense pas qu'il est encore le niveau même si il est bien partit pour...
    J'ai vu une fois du code IOCCC

    Et le gars faisait de l'appel récursif du main....

    7 fois pour raconter la création du monde (en 7 jours) vu par dieux, le tout avec beaucoup d'hexa... Et la c'est franchement super méga illisible, faut sortir le décrypteur hexa de la poche et décrypter 2 lignes qui représente le tout

  11. #11
    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
    Ça c'est un exemple pour ecrire Hello World :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\
    o, world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}
    "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

Discussions similaires

  1. Que fait ce programme ( les structures?)
    Par autoin dans le forum Débuter
    Réponses: 4
    Dernier message: 04/04/2008, 21h36
  2. que fait ce programme java?
    Par freemasons dans le forum Langage
    Réponses: 5
    Dernier message: 17/01/2008, 16h45
  3. Que fait ce programme ?
    Par lebossejames dans le forum Assembleur
    Réponses: 3
    Dernier message: 08/03/2007, 05h32
  4. que fait ce programme?
    Par minen dans le forum C
    Réponses: 15
    Dernier message: 31/12/2006, 18h08
  5. Que fait ce programme ?
    Par babar56 dans le forum C
    Réponses: 32
    Dernier message: 16/01/2006, 21h31

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