question c

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

question c

Message  Dark le Sam 20 Oct 2007, 15:32

Bonjour à tous,

http://www.bardack.be/bardack/COURS%2005-06/CPP/Langage%20C/

J'ai essayé de refaire l'interro1A mais j'ai des problèmes avec l'exercice sur les pointeurs.
En fait , si je comprends bien , chaque séquence d'informations contient tout d'abord un indicateur de type unsigned short , ensuite une valeur char,int ou double selon la valeur à 3 chiffres de l'indicateur.
On a donc :

indicateur|type|type|type|

Ma question est : y a-t-il un espace vide entre indicateur et type ainsi qu'entre type et type?Si oui , de combien d'octets?

Et ensuite , à quoi nous sert le int * aNbOctets?

Merci

Dark

Nombre de messages : 131
Age : 30
Prénom : Laurent
Statut : Etudiant
Date d'inscription : 15/05/2006

http://membres.multimania.fr/dark0502/

Revenir en haut Aller en bas

Re: question c

Message  El_Turco le Sam 20 Oct 2007, 16:05

aNbOctets est l'adresse d'un int où la fonction placera le nombre d'octets qu'occupe l'ensemble des séquences

Normalement pas d'espaces vides.
Les espaces vides, c'est dans les structures si je m'en souvient bien.
Attends quand même une confirmation du prof de C, à savoir nvs

El_Turco

Nombre de messages : 896
Age : 30
Prénom : Adem
Statut : Ancien Industriel
Localisation : Bruxelles, Schaerbeek
Date d'inscription : 16/01/2007

Revenir en haut Aller en bas

Re: question c

Message  Invité le Sam 20 Oct 2007, 16:59

J'aime bcp le titre du post... Tellement précis...

Invité
Invité


Revenir en haut Aller en bas

Re: question c

Message  Arsthan le Sam 20 Oct 2007, 20:41

Anthoblack a écrit:J'aime bcp le titre du post... Tellement précis...
Ou alors c'est une erreur et aurait dû s'apeller "question 3B" ... non ?

Arsthan

Nombre de messages : 178
Age : 29
Prénom : Romain
Statut : 3ème Gestion
Localisation : Brussels
Date d'inscription : 06/01/2007

http://www.arsthan.net

Revenir en haut Aller en bas

Re: question c

Message  smb le Sam 20 Oct 2007, 21:31

Il n'y a effectivement pas de "trou" entre les informations. Ainsi, si la valeur contenue dans le short (indicateur) est 213, ce short est directement suivi d'un int, lui-même suivi d'un char, lui même suivi d'un double, lui même suivi d'un nouveau short (indicateur) et ainsi de suite...
Le nombre de séquences est placé par la fonction à l'adresse contenue dans le pointeur aNbSeq, le nombre d'octets occupés par le tout est placé à l'adresse contenue dans le pointeur aNbOctets (il s'agit dans ce cas d'une information redondante).
L'interrogation vise bien évidemment à tester les connaissances des étudiants sur les pointeurs, casting des pointeurs et arithmétique des pointeurs.

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: question c

Message  Dark le Sam 20 Oct 2007, 23:49

Il me reste encore un petit probleme.Mon programme me donne des valeurs d'indicateurs incorrects tels que -18351 ou encore 256.

Dark

Nombre de messages : 131
Age : 30
Prénom : Laurent
Statut : Etudiant
Date d'inscription : 15/05/2006

http://membres.multimania.fr/dark0502/

Revenir en haut Aller en bas

Re: question c

Message  Arsthan le Dim 21 Oct 2007, 10:02

Est-tu certain de caster dans la bonne 'devise' ?

Arsthan

Nombre de messages : 178
Age : 29
Prénom : Romain
Statut : 3ème Gestion
Localisation : Brussels
Date d'inscription : 06/01/2007

http://www.arsthan.net

Revenir en haut Aller en bas

Re: question c

Message  Dark le Dim 21 Oct 2007, 13:43

Voici mon code pour que vous voyez plus clair :

void afficheDonnees(){
int nbSeq; /*Nombre de séquences d'informations*/
int nbOctets; /*Nombre total d'octets qu'occupe les séquences d'informations*/
unsigned i=0;
int j;
int unEntier;
double unDouble;
unsigned unChiffre;
short indicateur;
short * desSequences=(short*)getSequences(&nbSeq,&nbOctets);
char unChar;

for(;i<nbSeq;i++){
indicateur=(*desSequences);
desSequences+=sizeof(short);
printf("Numero sequence : %i\n",i);
printf("Numero indicateur : %i\n",indicateur);

for(j=3;j>0;j--){
unChiffre=(indicateur%(short)pow(10,j))/(short)pow(10,j-1);

switch(unChiffre){

case 1 :
unChar=*(char*)desSequences;
printf("%c (c)\n",unChar);
desSequences+=sizeof(char);
break;

case 2 :
unEntier=*(int*)desSequences;
printf("%i (i)\n",unEntier);
desSequences+=sizeof(int);
break;

case 3 :
unDouble=*(double*)desSequences;
printf("%f (c)\n",unDouble);
desSequences+=sizeof(double);
break;
}

}

}
}

Dark

Nombre de messages : 131
Age : 30
Prénom : Laurent
Statut : Etudiant
Date d'inscription : 15/05/2006

http://membres.multimania.fr/dark0502/

Revenir en haut Aller en bas

Re: question c

Message  Morbid le Dim 21 Oct 2007, 14:32

Utilise la balise code parceque la c'est dur a lire Wink

Morbid

Nombre de messages : 894
Age : 30
Prénom : Christophe
Statut : Ancien (R)
Date d'inscription : 23/11/2006

Revenir en haut Aller en bas

Re: question c

Message  nvs le Dim 21 Oct 2007, 15:13

Dark a écrit:
Code:
void afficheDonnees(){
  ...
  short * desSequences=(short*)getSequences(&nbSeq,&nbOctets);
  ...
  for(;i<nbSeq;i++){
    ...
    desSequences+=sizeof(short);
    ...
    switch(unChiffre){

      case 1 :
        ...
        desSequences+=sizeof(char);
        break;

      case 2 :
        ...
        desSequences+=sizeof(int);
        break;

      case 3 :
        ...
        desSequences+=sizeof(double);
        break;
    }
....
  }
}
avec
Code:
desSequences
de type
Code:
short *
ça m'a l'air louche...

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: question c

Message  Arsthan le Dim 21 Oct 2007, 18:34

Je pense que le type 'tank' serait plus approprié pour faire un tableau non ?

... ou serait-ce le type char ? ...

Arsthan

Nombre de messages : 178
Age : 29
Prénom : Romain
Statut : 3ème Gestion
Localisation : Brussels
Date d'inscription : 06/01/2007

http://www.arsthan.net

Revenir en haut Aller en bas

Re: question c

Message  Contenu sponsorisé Aujourd'hui à 07:15


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