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 :

inverser tableau C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2013
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 12
    Par défaut inverser tableau C
    Bonsoir,
    je veux ecrire un code qui sert a faire le codage d'un nombre float ( norme IEE754) , j'ai ecris un code mais mon probleme ( 127+exposant en binaire sa s'affiche inversé et j'ai pas arrivé a l'affecté au tableau comme il le faut)
    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
    int c=0,cn=0,d=0;
    void Binary(int nbr,int *rest,int indic){
    c=0;
    if (indic==1)
        c=1;
            do
        {
            rest[c]=abs(nbr)%2;
            nbr/=2;
            c++;
        }while(nbr!=0);
    }
    int main()
    {
       float monFloat=-13.99,partfloat;
        int  temp,k=0,j,manti=0,partEntiere,i,precision=2,rest[100]={0},*code=calloc(100,sizeof(int)),*test=calloc(100,sizeof(int));
    manti=c+1 ;
    puts("");
    Binary(c-1+127,code,1);
    if(monFloat<0)
        code[0]=1;
    for(i=0,j=c;i<manti;i++)
    {
        code[j]=rest[i];
        j++;
    }
    for(i=0;i<32;i++)
    printf("%d",code[i]);
    puts("");
    }
    merci de m'aider car apres affecté partie des 8 bit je vais faire des conditions pour 64 bit et aussi le transformer en hexa veuillez m'aider et merci infiniment.

  2. #2
    Membre expérimenté Avatar de moins1
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 85
    Par défaut
    C'est pas vraiment clair ce que tu veux faire. Bon c'est peut être juste moi.


  3. #3
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Comme moins1 : ce que j'ai du mal à comprendre ce sont tes mallocs de 100 integers... pour y mettre des bouts de flottants ?....
    Et ton for ne fait pas explicitement 100 tours non plus...
    Bref... je vais aérer ton code pour pouvoir lire quelque chose...

    Code aéré :
    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
    int c = 0;
    int cn = 0;
    int d = 0;
     
    void Binary(int nbr, int *rest, int indic)
    {
      c = 0;
      if (indic == 1)
        c = 1;
        do
        {
          rest[c] = abs(nbr) % 2;
          nbr /= 2;
          c++;
        } while(nbr != 0);
    }
     
    int main()
    {
      float partfloat, monFloat = -13.99;
      int temp, i, j, k = 0;
      int partEntiere, manti = 0, precision = 2;
      int *code,*test, rest[100] = {0};
     
      code = calloc(100, sizeof (int));
      test = calloc(100, sizeof (int));
      manti = c + 1 ;
      puts("");
      Binary(c - 1 + 127, code, 1);
      if (monFloat < 0)
        code[0] = 1;
      for(i = 0, j = c; i < manti; i++)
      {
        code[j] = rest[i];
        j++;
      }
      for(i = 0; i < 32; i++)
        printf("%d", code[i]);
      puts("");
    }
    EDIT2 : Pour tout te dire...
    Je ne comprends pas tellement la logique de tes conditions, par rapport à ce que tu alloues.
    Toutes les boucles ne se suivent pas forcément avec les même conditions (problématique pour le fait de savoir combien d'itérations il faut faire....)
    Du coup... je ne suis pas sûr que l'algo fasse exactement ce que tu veux "de base"...

    Mais pour inverser c'est pas compliqué, tu malloc la même taille, mais tu pars du dernier élément du 1er tableau pour revenir au premier... et tu écris ça dans les case du nouveau tableau...
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  4. #4
    Membre averti
    Inscrit en
    Janvier 2013
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 12
    Par défaut
    bonjour,
    merci pour les réponses
    pour les calloc de 100 integer j e sais c'est trop c'etait juste des test.
    mon probleme le tableau code de la case [1] a case [8] sont pas on ordre,je dois l'inverser pas dans l'affiche mais dans le tableau je donne l'exemple :
    01000001
    mais en realité je veux :
    10000010
    c'eest le probleme.
    aussi je sais que le code n'est pas bien ecrit :'( je m'excuse

  5. #5
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Simplifie ton algo....
    Et re-écris le....

    Après "simplification" à la vue + compilation avec des flags (-W -Wall -Werror -ansi -pedantic), voilà ce que j'obtiens :

    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
    #include <unistd.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
     
    int c = 0;
    int cn = 0;
    int d = 0;
     
    void Binary(int nbr, int *rest, int indic)
    {
      c = 0;
      if (indic == 1)
        c = 1;
        do
        {
          rest[c] = abs(nbr) % 2;
          nbr /= 2;
          c++;
        } while(nbr != 0);
    }
     
    int main(void)
    {
      float monFloat = -13.99;
      int i, j;
      int manti = 0;
      int *code;
     
      code = calloc(100, sizeof (int));
      manti = c + 1 ;
      puts("");
      Binary(c - 1 + 127, code, 1);
      if (monFloat < 0)
        code[0] = 1;
      for(i = 0, j = c; i < manti; i++)
      {
        code[j] = 0;
        j++;
      }
      for(i = 0; i < 32; i++)
        printf("%d", code[i]);
      puts("");
      return 0;
    }
    Est-ce que le comportement est le même ?
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Normalement, la version "naïve" de l'inversion d'un tableau (la copie à l'envers dans un nouveau tableau) doit être à la portée du premier imbécile venu.

    La version "sur place" est plus dure, mais possible. Un indice: Une telle sous-fonction serait utile:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void inverserDeuxValeurs(int tab[], int index1, int index2)
    {
    	int tmp = tab[index1];
    	tab[index1] = tab[index2];
    	tab[index2] = tmp;
    }
    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.

  7. #7
    Membre averti
    Inscrit en
    Janvier 2013
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 12
    Par défaut
    @Metalman
    non ce nest pas le resultat de mon programme en haut en plus le tien donne toujorus meme resultat meme si on change la valeur.
    merci pour la simplification je vais simplifier mon programme apres avoir eu mon resultat je m'excuse toujours pour ce horrible code !!
    @Médinoc
    merci.

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

Discussions similaires

  1. SPIM inverse tableau et affichage somme
    Par janyoura dans le forum Autres architectures
    Réponses: 0
    Dernier message: 06/11/2012, 20h23
  2. [XL-2010] VBA - Inverser Tableau et garder les formules
    Par Kalocagatia dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/07/2012, 15h34
  3. Macro Inverser Tableau
    Par kikim78 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 20/12/2009, 15h46
  4. Inversion tableau + Interpolation sous VBA
    Par keko38 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/05/2009, 22h09
  5. Réponses: 7
    Dernier message: 29/11/2007, 00h50

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