Partage
  • Partager sur Facebook
  • Partager sur Twitter

Programmation en langage C

Anonyme
    8 mai 2019 à 4:37:11

    Bonsoir à tous,j'espère que vous allez bien,Est ce que vous pouvez m'aider s'il vous plait sur la réalisation d'un programme en langage C qui répond à ce cahier de charge .

    • Partager sur Facebook
    • Partager sur Twitter
      8 mai 2019 à 9:01:51

      Pas de soucis on peut t'aider.

      Montres nous ce que tu as déjà fait et ce qui te bloque.

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        8 mai 2019 à 23:19:20

        D'accord,voici ce que j'ai fait conversion de décimal et hexadécimal vers les autres bases,mais après j'ai bloquée...

        • Partager sur Facebook
        • Partager sur Twitter
          9 mai 2019 à 8:40:42

          Bonjour le plus simple à mon sens est de faire en double conversion, tu convertis depuis la base d'entée vers base X puis de base X vers celle que tu veux en sortie :

          par exemple si la base de reference est la base 10 :

          switch ( inBase )
          {
          	case 2:
          	{
          		while ( ( *inStr >= '0' ) &&
          			( *inStr <= '1' ) )
          		{
          			value <<= 1;
          			value += *inStr == '1';
          			inStr++;
          		}
          		break;
          	}
          	case 8:
          	{
          		while ( ( *inStr >= '0' ) &&
          			( *inStr <= '7' ) )
          		{
          			value <<= 3;
          			value += *inStr - '0';
          			inStr++;
          		}
          		break;
          	}
          	case 10:
          	{
          		value = atoi( inStr );
          		break;
          	}
          	case 16:
          	{
          		sscanf ( inStr, "%x", &value );
          		break;
          	}
          }
          

          à ce niveau du code tu a toujours to nombre dans la base 10

          ensuite il ne te reste plus qu'a convertir de la base 10 vers la cible :

          switch ( outBase )
          {
          	case 2:
          	{
          		long long unsigned mask = 1;
          		while ( value > ( mask << 1 ) )
          		{
          			mask <<= 1;
          		}
          
          		while ( mask )
          		{
          			*outStr = ( value & mask )? '1' : '0';
          			outStr++;
          			value &= ~mask;
          			mask >>= 1;
          		}
          		*outStr = 0;
          		break;
          	}
          	case 8:
          	{
          		while ( value )
          		{
          			*outStr = ( value & 0x07 ) + '0';
          			outStr++;
          			value >>= 3;
          		}
          		*outStr = 0;
          	}
          	case 10:
          	{
          		sprintf ( outStr, "%d", value );
          		break;
          	}
          	case 16:
          	{
          		sprintf ( outStr, "%x", value );
          		break;
          	}
          }

           Je te conseil de bien comprendre le code avant de l'utiliser.

          Voici le code complet :

          #include <stdio.h>
          #include <stdlib.h>
          
          int convert ( char *inStr, int inBase, char * outStr, int outBase )
          {
          	long long int value = 0;
          
          	if ( ( inBase != 2 ) &&
          		( inBase != 8 ) &&
          		( inBase != 10 ) &&
          		( inBase != 16 ) )
          	{
          		return ( __LINE__ );
          	}
          
          	if ( ( outBase != 2 ) &&
          		( outBase != 8 ) &&
          		( outBase != 10 ) &&
          		( outBase != 16 ) )
          	{
          		return ( __LINE__ );
          	}
          
          	switch ( inBase )
          	{
          		case 2:
          		{
          			while ( ( *inStr >= '0' ) &&
          				( *inStr <= '1' ) )
          			{
          				value <<= 1;
          				value += *inStr == '1';
          				inStr++;
          			}
          			break;
          		}
          		case 8:
          		{
          			while ( ( *inStr >= '0' ) &&
          				( *inStr <= '7' ) )
          			{
          				value <<= 3;
          				value += *inStr - '0';
          				inStr++;
          			}
          			break;
          		}
          		case 10:
          		{
          			value = atoi( inStr );
          			break;
          		}
          		case 16:
          		{
          			sscanf ( inStr, "%llx", &value );
          			break;
          		}
          	}
          
          	switch ( outBase )
          	{
          		case 2:
          		{
          			long long unsigned mask = 1;
          			while ( value > ( mask << 1 ) )
          			{
          				mask <<= 1;
          			}
          
          			while ( mask )
          			{
          				*outStr = ( value & mask )? '1' : '0';
          				outStr++;
          				value &= ~mask;
          				mask >>= 1;
          			}
          			*outStr = 0;
          			break;
          		}
          		case 8:
          		{
          			while ( value )
          			{
          				*outStr = ( value & 0x07 ) + '0';
          				outStr++;
          				value >>= 3;
          			}
          			*outStr = 0;
          		}
          		case 10:
          		{
          			sprintf ( outStr, "%lld", value );
          			break;
          		}
          		case 16:
          		{
          			sprintf ( outStr, "%llx", value );
          			break;
          		}
          	}
          
          	return ( 0 );
          }
          
          int main ( void )
          {
          	char input[ 70 ] = { 0 };
          	char output[ 70 ] = { 0 };
          	int inputBase = 0;
          	int outputBase = 0;
          
          	printf ( "Entrer votre nombre :\n" );
          	scanf ( "%31s", input );
          	while ( getchar () != '\n' );
          
          	printf ( "Préciser la base numérique (2/8/10/16) :\n" );
          	scanf ( "%d", &inputBase );
          	while ( getchar () != '\n' );
          
          	printf ( "Choix de base de conversion (2/8/10/16) :\n" );
          	scanf ( "%d", &outputBase );
          	while ( getchar () != '\n' );
          
          	if ( convert ( input, inputBase, output, outputBase ) )
          	{
          		printf ( "error\n");
          		return ( 1 );
          	}
          
          	printf ( "Le nombre en base (%d) est : %s\n", outputBase, output );
          	return (  0 );
          }
          </h></h>

          -
          Edité par ox223252 9 mai 2019 à 8:41:58

          • Partager sur Facebook
          • Partager sur Twitter

          la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

          Mon GitHub

          Anonyme

          Programmation en langage C

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown