[C] TD5 - EX15

Page 2 sur 2 Précédent  1, 2

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

Re: [C] TD5 - EX15

Message  didi le Mer 17 Nov 2010, 12:14

smb a écrit:didi, soit tu donnes tout le code, soit tu ne donnes rien !

C'est quoi ..... Question

je ne sais pas vraiment à quoi vous attendez .........
(res resultat d'execution ..?)

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [C] TD5 - EX15

Message  smb le Mer 17 Nov 2010, 13:17

Je parle des points de suspension qui sont dans ton code !


char *ptr_c ,*ptrSuiv_c,*ptrCour;

.....

ptrCour = ptr_c;


Désolé, mais je ne perds pas mon temps à regarder des codes incomplets !

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

Re: [C] TD5 - EX15

Message  didi le Mer 17 Nov 2010, 13:30

ce sont des code pour les autre exercise ex : 12,13,14
enfait j'ai declaré les variable au debut de main pour l'exercise 15 c'est pourquoi j'ai mit ......
qui veut dire qu'il ya des codes entre variable et l'exercise 15
désole pour mal exprimer Sad

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [C] TD5 - EX15

Message  smb le Mer 17 Nov 2010, 14:19

Et où se fait l'appel à la fonction getTexte04 ?

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

Re: [C] TD5 - EX15

Message  didi le Mer 17 Nov 2010, 14:55

juste entre les declaration de variables et l'excercise 15 (là où se trouve les ........... )

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [C] TD5 - EX15

Message  smb le Mer 17 Nov 2010, 15:18

Je risque de me répéter mais as-tu bien mis tout le code relatif à l'exercice ?
En effet je commence en tout premier à constater que ton pointeur ptrSuiv_c n'est pas initialisé ! Or, tu l'utilises dans ptrSuiv_c = ptrSuiv_c + offset;
C'est déjà mal parti !

Ensuite je suis certain que tu n'as pas compris le casting de pointeur.
ptrSuiv_c est un char *
Donc, si tu veux prendre l'information vers laquelle ptrSuiv_c pointe et que cette information est contenue dans un unsigned short tu dois faire un casting du pointeur avant de faire l'indirection, c'est-à-dire :
offsetSuiv = * (unsigned short *) ptrSuiv_c ;

et non :
offsetSuiv = (unsigned short ) (*ptrSuiv_c);

Corrige d'abord ça et les autres endroits où tu ne fais pas correctement les castings, ça débroussaillera déjà pas mal le terrain.


Shocked

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

Re: [C] TD5 - EX15

Message  didi le Mer 17 Nov 2010, 16:09

vous avez tout à fait raison
et pardonnez moi encore unefois (Jesus SMB Smile )

il manque un ptit morceau de code .... Smile
et la version corrigé :

Code:
unsigned int taille;
unsigned short offset,offsetSuiv;
unsigned char posCour;
unsigned char posSuiv;
char *ptr_c ,*ptrSuiv_c,*ptrCour;
void *ptr;
 
        ptr = getTexte04();
   ptr_c = (char*) ptr;
   ptrSuiv_c = ptr_c;
   offset = *(unsigned short* ) ptr_c;
   posCour = *((unsigned char*)(ptr_c+sizeof(offset)));
        ptrCour = ptr_c;
   
      
         ptrCour = ptr_c;
         while(offset != 0)   {
            ptrSuiv_c  = ptrSuiv_c + offset;
            offsetSuiv = *(unsigned short *) ptrSuiv_c;
            while(offsetSuiv != 0)   {
               posSuiv = *((unsigned short *) (ptrSuiv_c + sizeof(offsetSuiv)));
               if(posCour > posSuiv)   {
                  posCour = posSuiv;
                  ptrCour = ptrSuiv_c;
               }
               ptrSuiv_c  = ptrSuiv_c + offsetSuiv;
               offsetSuiv = *(unsigned short *) ptrSuiv_c;
            }
            taille = (*(unsigned char*)(ptrCour + sizeof(offset)+sizeof(posCour)));
            ptrCour = (ptrCour + sizeof(offset)+sizeof(posCour)+sizeof(taille));

            for(i = 0; i < taille ; i++)   {
               printf("%c",(*(ptrCour+i)));
            }
            ptr_c = ptr_c + offset;
            offset = *(unsigned short*) ptr_c;
            posCour = (*(unsigned char*)ptr_c+sizeof(offset));
            ptrCour = ptr_c;
            ptrSuiv_c = ptr_c;

         }

j'ai le même problem erreur d'execution mais des fois affiche une morceau comme :

loux de monjklloux de monjkl
un avancehijHautrecef
un avancehije un imbéhij


mais quand il affiche ces morceaux il n'y a pas erreur d'execution



didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [C] TD5 - EX15

Message  smb le Mer 17 Nov 2010, 16:28

La logique me semble un tantinet nébuleuse (c'est un euphémisme).

Peux-tu expliquer, sans paraphraser les instructions C, comment tu envisages la solution algorithmique à ce problème ?

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

Re: [C] TD5 - EX15

Message  didi le Mer 17 Nov 2010, 17:13

si j'ai bien compris la structure de la zone mémoire est comme :

| offset | posDeMorceu | tailleDeMorc | le mot | offset suiv ......

ma logique est comme le tri bulle mais je ne tri pas la zone mémoire
j'ai le pointer pointerCourant qui point toujour la zone mémoire qui a le
posDeMorceu est plus petit par rapport d'autre
et j'affiche le text de cette zone mémoir

au départ :

pointer = pointerSuivant = PointerCourant
positionCourant = pointer.posDeMorceu
pointerOffset = pointer.offset
Code:

tantque pointerOffset != 0
    |        pointerSuiv = pointerSuiv + pointerOffset
    |        offsetSuiv = pointerSuiv.offset
    |        tantque offsetSuiv != 0
    |          | si pointerSuivant.posDeMorceu > positionCourant alors
    |          |  |      PointerCourant = pointerSuiv
    |          |  |    positionCourant = pointerSuivant.posDeMorceu
    |          | finsi
    |          | pointerSuiv = pointerSuiv + pointerOffset  // avance dans 2 ième boucle
    |          | offsetSuiv = pointerSuiv.offset
    |      fin tantque   
    |        //  affichage de PointerCourant
    |        // avance dans 1 er boucle
    |      pointer = pointer+pointerOffset
    |      pointerOffset = pointer.offset
    |      positionCourant = pointer.posDeMorceu
    |      pointer = pointerSuivant = PointerCourant
  fin tanque 

en simplifiant le mémoir zone comme une structure ...(pointer.posDeMorceu)

je sais que la zone mémoir contien qu'un seul morceau il va y avoir une problem
car j'essai d'acceder la zone mémoir où il n'y a pas une structure comme on a defini .
apart ça je ne vois pas d'autre problem .
( s'il y un problem dans mon algorithme merci de me coriger ... Smile )


didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [C] TD5 - EX15

Message  smb le Mer 17 Nov 2010, 18:03

Remarques au niveau de la logique :

- je te demande de me donner une explication algorithmique de ta solution sans paraphraser ton code et que fais-tu ? Tu me donne ton code où tu as remplacé if par si et while par tant que !!!!!!!

- tu sembles rechercher la position la plus petite et que fais-tu des séquences sans morceau (position ==0) ?

- en supposant que tu aies bien trouvé la position 1 par exemple, comment fais-tu pour rechercher la position suivante ?

Remarque au point de vue de ta compréhension de l'énoncé : l'offset est un déplacement à ajouter à l'adresse de la zone reçue par la fonction (et pas à l'adresse de la séquence courante).

Es-tu certain de ce qui suit :
posSuiv = *((unsigned short *) (ptrSuiv_c + sizeof(offsetSuiv)));

No

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

Re: [C] TD5 - EX15

Message  didi le Ven 19 Nov 2010, 18:41

bon je rcommence ...
cette fois j'affiche le morceaux qui est dans la zone .. ( pour tester )

mais j'ai toujour une erreur d'execution .. Sad

code :
Code:
  int main()                                  {
        unsigned char tailleCourant;
        unsigned short offset;
             unsigned char posCour;
        char *ptr_c ;
        void *ptr;
      

   printf("\n\nTest EX15\n\n");
   ptr = getTexte04();
   ptr_c = (char*) ptr;
   offset = *((unsigned short* ) ptr_c);

        while(offset != 0)   {
       posCour = *((unsigned char*)(ptr_c+sizeof(unsigned short)));
            tailleCourant = *((unsigned char*)(ptr_c + sizeof(unsigned short)+sizeof(unsigned char)));
            if(posCour != 0 && tailleCourant != 0)   {
      printf("\nLa offset est  : %d",offset);
      printf("\nLe Position est : %d",posCour);
      printf("\nLa taille est  : %d\n",tailleCourant);
      for(i = 0; i < tailleCourant ; i++)   {
         printf("%c",(*(ptr_c+i)));
      }
          }
   ptr_c = ptr_c + offset;
   offset = *((unsigned short*) ptr_c);
      }

   return 0;
}

j'ai toujour la même problem

mais il affiche comme même quelque chose comme :

Code:
La offset est  : 1248
Le Position est : 20
La taille est  : 1
à
La offset est  : 22615
Le Position est : 89
La taille est  : 90
WXYZEFGHIJabcefghijklmnopqrstuvwWXYZEFGHIJabcefghijklmnopqrstuvwWXYZEFGHIJabcefghijklmnopq
 
merci d'avance


Dernière édition par didi le Sam 20 Nov 2010, 00:30, édité 1 fois

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [C] TD5 - EX15

Message  smb le Ven 19 Nov 2010, 19:13

Je te signale que le code que tu nous présentes ne passe pas à la compilation !

ptrSuiv_c n'est pas déclaré !

Si tu ne fais pas l'effort de nous montrer exactement le code que tu testes j'arrête les frais !

Es-tu certain de travailler en C ANSI89 ISO90 ?

Evil or Very Mad

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

Re: [C] TD5 - EX15

Message  didi le Sam 20 Nov 2010, 00:32

je viend de corriger cette ligne c'était dans une commentaire ..... j'ai oublié metre en commentaire
Smile

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [C] TD5 - EX15

Message  smb le Sam 20 Nov 2010, 09:54

didi, relis bien l'énoncé !

A quoi faut-il ajouter l'offset pour passer à la séquence suivante, à l'adresse de la séquence courante ou à l'adresse de la zone reçue par la fonction ?

De plus, ce qui suit est incorrect car ptr_c ne pointe pas vers le morceau !

Code:
for(i = 0; i < tailleCourant ; i++)  {
    printf("%c",(*(ptr_c+i)));
}


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

Re: [C] TD5 - EX15

Message  didi le Sam 20 Nov 2010, 13:00

A quoi faut-il ajouter l'offset pour passer à la séquence suivante, à l'adresse de la séquence courante ou à l'adresse de la zone reçue par la fonction ?

- un unsigned short donnant l'offset qu'il faut ajouter à l'adresse de la zone pour trouver
la séquence suivante;


moi j'ai compris que je doit ajouter la valeur de offset à l'addresse de la zone mémoire pour trouver la prochaine sequence

comme ici :

| offset | position | taille | texte | offset suivant | position suivant | ......
<---- @de la zone + offset ----->

et j'ai recorrigé le code un peu ... :


Code:
  int main()                                  {
        unsigned char tailleCourant;
        unsigned short offset;
        unsigned char posCour;
        char *ptr_c,*ptrCour ;
        void *ptr;
     

  printf("\n\nTest EX15\n\n");
  ptr = getTexte04();
  ptr_c = (char*) ptr;
  offset = *((unsigned short* ) ptr_c);

    while(offset != 0)  {
        ptrCour = ptr_c;
        posCour = *((unsigned char*)(ptrCour+sizeof(unsigned short)));
        tailleCourant = *((unsigned char*)(ptrCour + sizeof(unsigned short)+sizeof(unsigned char)));
        if(posCour != 0 && tailleCourant != 0)  {
              printf("\nLa offset est  : %d",offset);
              printf("\nLe Position est : %d",posCour);
              printf("\nLa taille est  : %d\n",tailleCourant);
              ptrCour = (ptrCour+ sizeof(unsigned short)+sizeof(unsigned char)+sizeof(unsigned char));
              for(i = 0; i < tailleCourant ; i++)  {
                  printf("%c",(*(ptrCour+i)));
              }
          }
    ptr_c = ptr_c + offset;
    offset = *((unsigned short*) ptr_c);
    }

  return 0;
}

monsieur toujour le même problem .... Sad
j'espère aujourd'hui je peut terminer td5 .... Sad

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [C] TD5 - EX15

Message  smb le Sam 20 Nov 2010, 14:04

1) Comme il y a toujours au moins une séquence d'informations, je crois que le do while est plus justifié !

2) Comme ptrCour semble être ton pointeur courant qui se déplace dans la séquence, je l'initialiserais à ptr_c avant d'entrer dans l'itération.

3) La 1ière chose à faire dans l'itération c'est prendre l'offset.

4) A la fin de l'itération, c'est-à-dire après le if , il ne te reste plus qu'à passer à la séquence suivante en mettant dans ton pointeur courant le résultat de l'addition de l'adresse de la zone reçue par la fonction avec l'offset obtenu en début d'itération.

5) Mais en faisant tout ça tu n'as pas encore réglé la mise en ordre des morceaux Exclamation

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

Re: [C] TD5 - EX15

Message  didi le Sam 20 Nov 2010, 16:56

4) A la fin de l'itération, c'est-à-dire après le if , il ne te reste plus qu'à passer à la séquence suivante en mettant dans ton pointeur courant le résultat de l'addition de l'adresse de la zone reçue par la fonction avec l'offset obtenu en début d'itération.

c-à-dire pour obtenir le sequence suivant je doit ajouter le offset à l'addresse de la zone que j'ai réçu
à la premier appele de la fonctionne ...? ( pas avec le pointerCourant ...????)

donc le shema celui est comme :

offset est à l'addresse ptr
-----------------------------------------------------------------------------------------------------
offset | position | taille|text | n'importequoi | offsetSuiv | positionSuivant | tailleSuivant | texteSuivant
-----------------------------------------------------------------------------------------------------
offsetSuiv se trouve ptr + offset ...?????


didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [C] TD5 - EX15

Message  smb le Sam 20 Nov 2010, 17:00

didi a écrit:
4) A la fin de l'itération, c'est-à-dire après le if , il ne te reste plus qu'à passer à la séquence suivante en mettant dans ton pointeur courant le résultat de l'addition de l'adresse de la zone reçue par la fonction avec l'offset obtenu en début d'itération.

c-à-dire pour obtenir le sequence suivant je doit ajouter le offset à l'addresse de la zone que j'ai réçu
à la premier appele de la fonctionne ...? ( pas avec le pointerCourant ...????)

donc le shema celui est comme :

offset est à l'addresse ptr
-----------------------------------------------------------------------------------------------------
offset | position | taille|text | n'importequoi | offsetSuiv | positionSuivant | tailleSuivant | texteSuivant
-----------------------------------------------------------------------------------------------------
offsetSuiv se trouve ptr + offset ...?????


C'est cela ! L'énoncé est clair quand même, non ?

cheers

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

Re: [C] TD5 - EX15

Message  didi le Sam 20 Nov 2010, 17:07

je viens de le tester çca fontionne comme :

c-à-dire pour obtenir le sequence suivant je doit ajouter le offset à l'addresse de la zone que j'ai réçu
à la premier appele de la fonctionne ...? ( pas avec le pointerCourant ..)

je suis tombé encore une fois dans le " mal comprehension de français " Smile

il me rest encore juste afficher à l'ordre croissant de position de la texte
pour avoir une texte correcte

merci monsiuer Smile

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [C] TD5 - EX15

Message  Contenu sponsorisé Aujourd'hui à 01:12


Contenu sponsorisé


Revenir en haut Aller en bas

Page 2 sur 2 Précédent  1, 2

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