[Langage C] td5, exercice 13

Voir le sujet précédent Voir le sujet suivant Aller en bas

resolu [Langage C] td5, exercice 13

Message  jabberwok le Mer 09 Nov 2011, 16:20

Bonjour/Bonsoir,

J'ai un problème de compréhension,

Ici aussi, à l'origine, il y a un texte d'auteur. Ce texte a également été découpé en morceaux.
La fonction getTexte02 retourne l'adresse d'une zone mémoire allouée dynamiquement
par la fonction. Elle place également à l'adresse donnée en paramètre la taille de la zone.
Cette zone mémoire contient un certain nombre de séquences (au moins autant qu'il y a de
morceaux). Chaque séquence commence par un octet (unsigned char) contenant la taille
du morceau qui suit. Attention ! Chaque morceau est un ensemble de caractères non terminé
par '\0' ! Il est possible également qu'une séquence contienne un morceau « nul » : octet
longueur à 0 et aucun caractère à la suite.
Il faut savoir que, comme dans l'exercice
précédent, les lettres de chaque morceau ont été inversées. Ici aussi les morceaux se
suivent dans l'ordre dans lequel ils apparaissent dans le texte. Attention (bis) ! La fonction
getTexte02 ne peut être appelée qu'une seule fois !

J'ai compris que l'unisgned char que l'on récupère peut-être (dans le cas cité en gras) égal à 0, mais qu'en est-il de la suite ?
J'ai déjà tester ces 2 cas (qui ne donnent pas de bon résultats si ce n'est que pour une seule citation)
1) J'arrête la démarche de recherche quand cette valeur vaut 0.
2) Je passe au byte suivant pour récupérer la taille du mot suivant.

Merci d'avance !


Dernière édition par jabberwok le Mer 09 Nov 2011, 16:31, édité 1 fois

jabberwok

Nombre de messages : 90
Prénom : ali
Statut : Gediplomeerd =)
Date d'inscription : 27/09/2010

Revenir en haut Aller en bas

resolu Re: [Langage C] td5, exercice 13

Message  smb le Mer 09 Nov 2011, 16:27

jabberwok a écrit:
(...)
2) Je passe au byte suivant pour récupérer la taille du mot suivant.

Merci d'avance !

Exact ! Attention que ce byte peut encore contenir 0.

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

resolu Re: [Langage C] td5, exercice 13

Message  jabberwok le Mer 09 Nov 2011, 16:31

Le problème vient bien de moi, merci d'avoir répondu aussi vite !

Bonne soirée !

jabberwok

Nombre de messages : 90
Prénom : ali
Statut : Gediplomeerd =)
Date d'inscription : 27/09/2010

Revenir en haut Aller en bas

resolu Re: [Langage C] td5, exercice 13

Message  Florent le Mer 16 Nov 2011, 14:09

Bonjour,

Je ne comprends pas très bien cette exercices aussi

getText02 renvoi une zone memoire qui contient un unsigned char qui contient des morceaux de textes

getText02 recoit une zone memoire où il va indiquer à chaque byte le nombre de caractères par morceau de texte

Il faut donc remettre dans l'ordre et afficher le texte en faisant le lien nombre de caractère / morceaux

Si j'ai bien compris il faut donc faire le lien entre les 2?

Florent

Nombre de messages : 93
Prénom : Florent
Date d'inscription : 02/02/2010

Revenir en haut Aller en bas

resolu Re: [Langage C] td5, exercice 13

Message  karemkadidola le Mer 16 Nov 2011, 15:49

un petit dessin vaut parfois mieux qu'un long discours voici par exemple un zone qui aurait une taille de 17 et 6 séquences
"espace" veut juste dire char espace... en espérant que ça t'aide à avancer dans ton td..


karemkadidola

Nombre de messages : 244
Prénom : aimé
Date d'inscription : 13/10/2009

Revenir en haut Aller en bas

resolu Re: [Langage C] td5, exercice 13

Message  Florent le Mer 16 Nov 2011, 16:30

karemkadidola a écrit:un petit dessin vaut parfois mieux qu'un long discours voici par exemple un zone qui aurait une taille de 17 et 6 séquences
"espace" veut juste dire char espace... en espérant que ça t'aide à avancer dans ton td..

.

Merci pour ce joli petit dessin en effet c'est beaucoup plus claire Very Happy

A quoi correspond la dernière ligne du tableau?

Florent

Nombre de messages : 93
Prénom : Florent
Date d'inscription : 02/02/2010

Revenir en haut Aller en bas

resolu Re: [Langage C] td5, exercice 13

Message  karemkadidola le Mer 16 Nov 2011, 18:18

juste pour dire que le void* retourné pointe sur 4 bytes bon à savoir pour faire les cast vu que tout ce qui nous intéresse dans la zone est stocké sur 1 byte (char et UCHAR)...

karemkadidola

Nombre de messages : 244
Prénom : aimé
Date d'inscription : 13/10/2009

Revenir en haut Aller en bas

resolu Re: [Langage C] td5, exercice 13

Message  Florent le Lun 21 Nov 2011, 18:25

Je n'y arrive pas je pense que mon problème est dans l'avancement de la zone mémoire du pointeur

voici mon code:

Code:

void ex13() {
   int tailleSec;
   int avancement;
   int next;
   int i;
   unsigned int uneAdr;
   unsigned char * ptr;
   void * unChar = getTexte02(&uneAdr);
   ptr = (unsigned char*)unChar;
   /* affiche la taille */
   printf("taille %d \n", uneAdr);
   /*affiche la premiere sequence par 2 facons*/
   /*printf("%d \n", *(unsigned char*)unChar);*/
   printf("nb first sec %d \n\n", *ptr);
   /*avancer dans la sequence*/
   /*ptr++;*/

   tailleSec = *ptr;
   next = tailleSec;
   avancement = 1;

   while (avancement <= uneAdr) {

      while (avancement <= tailleSec) {
         printf("%c", *ptr+tailleSec);
         tailleSec = tailleSec-1;
      }

      avancement = avancement + next;
      tailleSec = next+(*ptr+next)+1;
      next = tailleSec;


   }
}

j'ai casté mon ptr et ensuite j'avance par +1 comme on m'a montrée en labo mais il y a comme "trop de caractère"

Florent

Nombre de messages : 93
Prénom : Florent
Date d'inscription : 02/02/2010

Revenir en haut Aller en bas

resolu Re: [Langage C] td5, exercice 13

Message  karemkadidola le Lun 21 Nov 2011, 19:30

Florent a écrit:Je n'y arrive pas je pense que mon problème est dans l'avancement de la zone mémoire du pointeur

voici mon code:

Code:


         printf("%c", *ptr+tailleSec);
                     
   

j'ai casté mon ptr et ensuite j'avance par +1 comme on m'a montrée en labo mais il y a comme "trop de caractère"

Code:
printf("%c", *(ptr+tailleSec));
tailleSec = next+(*ptr+next)+1; ceci ne m'a pas l'air juste...

karemkadidola

Nombre de messages : 244
Prénom : aimé
Date d'inscription : 13/10/2009

Revenir en haut Aller en bas

resolu Re: [Langage C] td5, exercice 13

Message  Contenu sponsorisé Aujourd'hui à 12:36


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum