Probleme langage c

Résolu/Fermé
kekedu38 - 7 mars 2020 à 21:19
Raymond PENTIER Messages postés 58392 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 22 avril 2024 - 8 mars 2020 à 18:11
Bonsoir,
je suis un étudiant en GEII 1ére année et j'ai un exercice de programmation en c a faire pour mardi.

La consigne de l'exercice :

Écrire un programme qui demande les valeurs des 3 composantes de couleurs (rouge, vert et bleu), chacune étant codée sur 8 bits, pour constituer une valeur de pixel sur 24 bits de la manière suivante : rrrrrrrrvvvvvvvvbbbbbbbb.
Votre programme devra faire appel à une fonction de saisie (à écrire) qui devra s’assurer que la valeur de chacune des composantes est bien comprise entre 0 et 255 inclus.

Le problème :

il faut que j'arrive a isolé 4 bit du Tpixel pour les envoyer dans la fonction : void fonction_switch_hexa(short int mot4bit), et ainsi pouvoir les convertir en hexadecimal.


void fonction_saisie(unsigned *pVAL1,unsigned *pVAL2,unsigned *pVAL3);
void fonction_conversion_decimal_binaire(short int tab[max],short int rou,short int ver,short int ble);
void fonction_switch_hexa(short int mot4bit);
int main(void)
{
short int i;
short int Tpixel[max];
unsigned r,v,b;
fonction_saisie(&r,&v,&b);
fonction_conversion_decimal_binaire(Tpixel,r,v,b);
printf("\nValeur du pixels sur 24 bits en binaire : ");
for(i=0;i<24;i++)
{
printf("%hd",Tpixel[i]);
}
printf("\n");
return(0);
}
void fonction_saisie(unsigned *pVAL1,unsigned *pVAL2,unsigned *pVAL3)
{
long int rouge,vert,bleu;
//rouge
do
{
printf("\ndonnez la composante rouge en decimal : ");
scanf("%ld",pVAL1);
}while(*pVAL1<0||*pVAL1>255);
//vert
do
{
printf("\ndonnez la composante vert en decimal : ");
scanf("%ld",pVAL2);
}while(*pVAL2<0||*pVAL2>255);
//bleu
do
{
printf("\ndonnez la composante bleu en decimal : ");
scanf("%ld",pVAL3);
}while(*pVAL3<0||*pVAL3>255);
}
void fonction_conversion_decimal_binaire(short int tab[max],short int rou,short int ver,short int ble)
{
short int i;
float result;
// rouge
for(i=0;i<8;i++)
{
result=rou%2;
rou=rou/2;
if(result==0)
{
tab[7-i]=0;
}
if(result==1)
{
tab[7-i]=1;
}
}
printf("\nLe resultat de la conversion en binaire de la composante rouge : ");
for(i=0;i<8;i++)
{
printf("%hd",tab[i]);
}
//vert
for(i=0;i<8;i++)
{
result=ver%2;
ver=ver/2;
if(result==0)
{
tab[15-i]=0;
}
if(result==1)
{
tab[15-i]=1;
}
}
printf("\nLe resultat de la conversion en binaire de la composante vert : ");
//bleu
for(i=8;i<16;i++)
{
printf("%hd",tab[i]);
}
for(i=0;i<8;i++)
{
result=ble%2;
ble=ble/2;
if(result==0)
{
tab[23-i]=0;
}
if(result==1)
{
tab[23-i]=1;
}
}
printf("\nLe resultat de la conversion en binaire de la composante bleu : ");
for(i=16;i<24;i++)
{
printf("%hd",tab[i]);
}
printf("\n");
}
void fonction_switch_hexa(short int mot4bit)
{
switch(mot4bit)
{
case 0000 : printf("0");
break;
case 0001 : printf("1");
break;
case 0010 : printf("2");
break;
case 0011 : printf("3");
break;
case 0100 : printf("4");
break;
case 0101 : printf("5");
break;
case 0110 : printf("6");
break;
case 0111 : printf("7");
break;
case 1000 : printf("8");
break;
case 1001 : printf("9");
break;
case 1010 : printf("A");
break;
case 1011 : printf("B");
break;
case 1100 : printf("C");
break;
case 1101 : printf("D");
break;
case 1110 : printf("E");
break;
case 1111 : printf("F");
break;
default : printf("ERREUR");
}
}
Quelqu'un pourrait m'aider ?

1 réponse

Raymond PENTIER Messages postés 58392 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 22 avril 2024 17 095
8 mars 2020 à 18:11
0