begin process at 2012 05 27 18:56:30
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caractères

 > NOMBRES EN CHIFFRES ROMAINS [BORLAND TURBO C++ 3.0]

NOMBRES EN CHIFFRES ROMAINS [BORLAND TURBO C++ 3.0]


 Information sur la source

Note :
6,5 / 10 - par 2 personnes
6,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Chaîne de caractères Niveau :Initié Date de création :19/04/2002 Date de mise à jour :19/04/2002 22:24:23 Vu :9 436

Auteur : BeLZeL

Ecrire un message privé
Site perso
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 Description

C'est un programme qui convertit un nombre en chiffre romain. Si vous y trouvez une utilité, je dis chapeau bas.

Le programme utilise un tableau contenant déjà les caractères romains. Un algorithme basique permet d'afficher les caractères nécessaires (en romain) selon le chiffre (arabe) trouvé.

La contrainte du programme était d'utiliser des pointeurs (avec malloc - realloc) pour utiliser un minimum de mémoire, la chaine de chiffres romains étant redimensionnée automatiquement. Il est évident que sans cela, le programme serait plus simple à comprendre.

Source

  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <math.h>
  • #include <conio.h>
  • #include <dos.h>
  • // tous les chiffres romains
  • char romain[7]={'I', 'V', 'X', 'L', 'C', 'D', 'M'};
  • char * conv(int nbre)
  • {
  • int diz; // nombre compris entre 1 et 10 (dizaine)
  • int nb; // utilise lors des calculs
  • int pt=0; // decallage du pointeur (debut -> 0)
  • char *result; // resultat retourne
  • result=(char *) malloc (sizeof(char));
  • char *rm; // chaine temporaire (tampon) pointant sur result
  • rm=(char *) malloc (sizeof(char));
  • for (int i=3; i>=-1; i--) // puissance de 10 decroisante (sur le nombre)
  • if ((nbre / pow(10,i)) > 1 )
  • {
  • diz = nbre / pow(10,i); // on recherche le chiffre (entre 1 et 10)
  • rm=result+pt; // on actualise le pointeur tampon sur le resultat
  • switch (diz) // selon le chiffre, on obtient les resultats suivants
  • {
  • case 1: sprintf(rm,"%c",romain[2*i+0]);
  • nb=1; pt+=1; break;
  • case 2: sprintf(rm,"%c%c",romain[2*i+0],romain[2*i+0]);
  • nb=2; pt+=2; break;
  • case 3: sprintf(rm,"%c%c%c",romain[2*i+0],romain[2*i+0],romain[2*i+0]);
  • nb=3; pt+=3; break;
  • case 4: sprintf(rm,"%c%c",romain[2*i+0],romain[2*i+1]);
  • nb=4; pt+=2; break;
  • case 5: sprintf(rm,"%c",romain[2*i+1]);
  • nb=5; pt+=1; break;
  • case 6: sprintf(rm,"%c%c",romain[2*i+1],romain[2*i+0]);
  • nb=6; pt+=2; break;
  • case 7: sprintf(rm,"%c%c%c",romain[2*i+1],romain[2*i+0],romain[2*i+0]);
  • nb=7; pt+=3; break;
  • case 8: sprintf(rm,"%c%c%c%c",romain[2*i+1],romain[2*i+0],romain[2*i+0],romain[2*i+0]);
  • nb=8; pt+=4; break;
  • case 9: sprintf(rm,"%c%c",romain[2*i+0],romain[2*i+2]);
  • nb=9; pt+=2; break;
  • case 10:sprintf(rm,"%c",romain[2*i+2]);
  • nb=10; pt+=1; break;
  • }
  • nbre=nbre - nb*pow(10, i);
  • result=(char *) realloc (result, pt*sizeof(char));
  • }
  • return result;
  • }
  • void main()
  • {
  • int nbre;
  • char *result;
  • result=(char *) malloc (sizeof(char));
  • clrscr();
  • do
  • {
  • printf("Entrez votre chiffre [1 - 3999] : ");
  • scanf("%d",&nbre);
  • }
  • while ((nbre < 1) || (nbre > 3999));
  • result=conv(nbre); // lancement de la fonction
  • printf("Le resultat est %s", result);
  • getch();
  • }
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <dos.h>

// tous les chiffres romains
char romain[7]={'I', 'V', 'X', 'L', 'C', 'D', 'M'};

char * conv(int nbre)
 {
	int diz;		  	// nombre compris entre 1 et 10 (dizaine)
	int nb;				// utilise lors des calculs
	int pt=0;			// decallage du pointeur (debut -> 0)
	char *result;		// resultat retourne
	result=(char *) malloc (sizeof(char));
	char *rm;			// chaine temporaire (tampon) pointant sur result
	rm=(char *) malloc (sizeof(char));

	for (int i=3; i>=-1; i--)		// puissance de 10 decroisante (sur le nombre)
		if ((nbre / pow(10,i))  > 1 )
		 {
			diz = nbre / pow(10,i);	// on recherche le chiffre (entre 1 et 10)
			rm=result+pt;			// on actualise le pointeur tampon sur le resultat
			switch (diz)			// selon le chiffre, on obtient les resultats suivants
			 {
				case 1:	sprintf(rm,"%c",romain[2*i+0]);
						nb=1; pt+=1; break;
				case 2: sprintf(rm,"%c%c",romain[2*i+0],romain[2*i+0]);
						nb=2; pt+=2; break;
				case 3: sprintf(rm,"%c%c%c",romain[2*i+0],romain[2*i+0],romain[2*i+0]);
						nb=3; pt+=3; break;
				case 4: sprintf(rm,"%c%c",romain[2*i+0],romain[2*i+1]);
						nb=4; pt+=2; break;
				case 5: sprintf(rm,"%c",romain[2*i+1]);
						nb=5; pt+=1; break;
				case 6: sprintf(rm,"%c%c",romain[2*i+1],romain[2*i+0]);
						nb=6; pt+=2; break;
				case 7: sprintf(rm,"%c%c%c",romain[2*i+1],romain[2*i+0],romain[2*i+0]);
						nb=7; pt+=3; break;
				case 8: sprintf(rm,"%c%c%c%c",romain[2*i+1],romain[2*i+0],romain[2*i+0],romain[2*i+0]);
						nb=8; pt+=4; break;
				case 9: sprintf(rm,"%c%c",romain[2*i+0],romain[2*i+2]);
						nb=9; pt+=2; break;
				case 10:sprintf(rm,"%c",romain[2*i+2]);
						nb=10; pt+=1; break;
			 }
			nbre=nbre - nb*pow(10, i);
			result=(char *) realloc (result, pt*sizeof(char));
		 }
	return result;
 }

void main()
 {
	int nbre;
	char *result;
	result=(char *) malloc (sizeof(char));

	clrscr();
	do
	 {
		printf("Entrez votre chiffre [1 - 3999] : ");
		scanf("%d",&nbre);
	 }
	while ((nbre < 1) || (nbre > 3999));
	result=conv(nbre);	// lancement de la fonction
	printf("Le resultat est %s", result);
	getch();
 } 

 Conclusion

BeLZeL (belzel@free.fr)


 Sources du même auteur

Source avec Zip Source avec une capture VORTEX [OPENGL DEVCPP]
Source avec Zip Source avec une capture MODÈLE 3D TEXTURÉ [OPENGL & ASE & RAW & DEVCPP]
Source avec Zip Source avec une capture LIMITER NOMBRE FPS [OPENGL & QUERYPERFORMANCE & DEVCPP]
Source avec Zip [HOOK CLAVIER] FICHIER TEXTE AVEC GESTION DES DEAD KEYS [DEV...
Source avec Zip Source avec une capture LOAD TGA / OPENGL [DEV-C++ 4.9.5.0]

 Sources de la même categorie

CALCUL DE CLEF RIB par Renfield
Source avec Zip [C] WD_STRING V2.2 par cyberripper
Source avec Zip LES STRING EN C, AFFECTATION, CONCATÉNATION, SPLIT, ... par appranting
Source avec Zip [C] WD_STRING V1.9 par cyberripper
Source avec Zip LIBRAIRIE LANGUAGES par astro53

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales