Manipulation des entiers de type char [Résolu]

gnichiarsenal 8 Messages postés dimanche 3 juillet 2011Date d'inscription 3 juillet 2011 Dernière intervention - 20 déc. 2009 à 17:55 - Dernière réponse : cptpingu 3804 Messages postés dimanche 12 décembre 2004Date d'inscription 20 septembre 2018 Dernière intervention
- 23 déc. 2009 à 15:17
je prépare un miniprojet en c pour la manipulation des entiers de types char ,la conversion de char à int,faire un menu pour le choix des différentes fonctions.j'ai besoin de votre aide et merci d'avance
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
cptpingu 3804 Messages postés dimanche 12 décembre 2004Date d'inscription 20 septembre 2018 Dernière intervention - 21 déc. 2009 à 16:30
3
Merci
C'est sans doute un très bon exercice. Mais où est le problème ?
Montre nous ton code, et l'endroit précis ou tu bloques.

Merci cptpingu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de cptpingu
cptpingu 3804 Messages postés dimanche 12 décembre 2004Date d'inscription 20 septembre 2018 Dernière intervention - 20 déc. 2009 à 22:45
0
Merci
Bonjour.
Quelle est la question précise ?
Commenter la réponse de cptpingu
gnichiarsenal 8 Messages postés dimanche 3 juillet 2011Date d'inscription 3 juillet 2011 Dernière intervention - 21 déc. 2009 à 16:28
0
Merci
bonjour
il faut que je créé un menu pour la manipulation des entiers représentés sous la formes chaines de caractères.les fonctions sont:
1-une fonction qui à partir d'un entier construit sa représentation chaines de caratères
2-une fonction qui permet de lire/écrire des entiers de grandes tailles dans des fichiers texte
3-une fonctions permettant de manipuler des matrices contenants des entiers représentés sous la forme chaines de caractères(lecture/écriture en fichier,addition,produit des 2 matrices,etc.)
Et puis je doit comparer les performances avec les opérations sur les entiers en représentation propre au langage c.
merci d'avance
Commenter la réponse de gnichiarsenal
gnichiarsenal 8 Messages postés dimanche 3 juillet 2011Date d'inscription 3 juillet 2011 Dernière intervention - 22 déc. 2009 à 17:40
0
Merci
bonjour
bon ,je suis débutant en programmation c
la représentation en chaine de caractères par exemple pour 13 est "13",j'ai un probleme d'extraire la chaine 13,surtout qu'on ne connait pas la taille de la représentation.
j'ai fait deux fonctions:la première est d'extraire une sous chaine
/*cette fonction permer d'éxraire une sous chaine d'une chaine de caractères*/
char *str_sub (const char *s, unsigned int start, unsigned int end)
{
char *new_s = NULL;
if (s != NULL && start < end)
{
/* (1)*/
new_s = malloc (sizeof (*new_s) * (end - start + 2));
if (new_s != NULL)
{
int i;
/* (2) */
for (i = start; i <= end; i++)
{
/* (3) */
new_s[i-start] = s[i];
}
new_s[i-start] = '\0';
}
else
{
fprintf (stderr, "Memoire insuffisante\n");
exit (EXIT_FAILURE);
}
}
return new_s;
}
il y a pas de problème là dans.
la seconde fonction permet de confirmer que l'entrée est une représentation en chaine de caractère et voila mon code


/*cette fonction permet de lire un entier représenté
sous forme chaine de caractère*/
void read ( char *x)
{

x = malloc(sizeof(*x)*256);//on ne sait pas sa taille
char *ch = malloc(sizeof(*x)-2);
printf("donner l'entier représenté sous sa forme chaine de caractères\n");
scanf("%s",x);
*ch=*str_sub(*x,1, strlen (x));
while(x[0]!="'"|x[strlen (x)]!="'"|isdigit(ch)!=1)
printf("donner l'entier représenté sous sa forme chaine de caractères\n");
}
et j'arrive pas à déterminer mes erreurs
bon je me bloque bien avec cette fonction qui semble facile à coder.
En plus je n'est pas d'idée pour faire la 2 eme fonction de ce mini-projet
Commenter la réponse de gnichiarsenal
cptpingu 3804 Messages postés dimanche 12 décembre 2004Date d'inscription 20 septembre 2018 Dernière intervention - 22 déc. 2009 à 17:55
0
Merci
une fonction qui à partir d'un entier construit sa représentation chaines de caratères


Tu as deux solutions pour réaliser ceci:
1) Utiliser realloc, qui permet de modifier la taille d'un espace mémoire (donc d'un tableau).
2) Calculer le nombre de chiffre que possède un entier, afin d'allouer exactement la taille nécessaire.
Ex: 11243 => 5, 3 => 1, 98530234 => 8.

Je te conseil la seconde méthode, pas très compliqué, et qui évite de réallouer constamment ta mémoire.
Coupe ceci, en trois fonctions:

* int checkNum(char* s), qui vérifie que la chaîne passée est bien un nombre. Indice: juste vérifier que chacun des caractères est bien compris entre le caractère "0" et le caractère "9". Renvoyer vrai ou faux.
* int getNumSize(int nb), qui prend un nombre en argument, et retourne sa taille. Indice: il suffit de compter combien de fois on peut le diviser par 10 ;)
* char* intToString(int nb), qui convertit un entier en chaîne. Indice: réutilise checkNum pour vérifier que c'est bien un chiffre et getNumSize pour allouer pile la bonne taille via malloc.

Fais déjà ceci, et tu auras le premier point de fait. On verra la suite après.
Commenter la réponse de cptpingu
gnichiarsenal 8 Messages postés dimanche 3 juillet 2011Date d'inscription 3 juillet 2011 Dernière intervention - 22 déc. 2009 à 18:55
0
Merci
merci bien
mon problème n'est pas de faire la fonction qui à partir d'un entier construit sa représentation en chaine de caractère.
je viens de discuter avec des collègues le mini-projet,je vous écrit l'énoncé tel quel est:
considérons les nombres entiers représentés sous la forme des chaînes de caractères
1/construire une fonction qui permet d'ajouter deux entiers représentés sous forme des chaines de caractères.
ce que j'ai compris de cette question est que l'entrée est deux entiers représentés sous forme des chaines de caractères.alors là,je dois lire l'entrée et la convertir en entiers et puis faire l'instruction de somme
Commenter la réponse de gnichiarsenal
cptpingu 3804 Messages postés dimanche 12 décembre 2004Date d'inscription 20 septembre 2018 Dernière intervention - 22 déc. 2009 à 20:44
0
Merci
mon problème n'est pas de faire la fonction qui à partir d'un entier construit sa représentation en chaine de caractère.

C'est pourtant ce que tu m'as décris dans ton précédent post !


ce que j'ai compris de cette question est que l'entrée est deux entiers représentés sous forme des chaines de caractères.alors là,je dois lire l'entrée et la convertir en entiers et puis faire l'instruction de somme

Surtout pas ! L'exercice qu'on te demande, s'appelle une bistromathique. C'est une technique qui permet de gérer des nombres d'une taille très grande (taille qui ne rentrerait pas dans un entier). Si tu convertis en entier, tu perds tout l'intérêt !

Pour additionner deux chaînes de caractères représentant des entiers, il va falloir que tu te souviennes de tes cours de primaires. Quand tu étais petit, tu posais sûrement tes additions sur papiers. Tu partais de la droite, tu additionnais les chiffres, un à un, et tu gardais une retenu, si nécessaire.

Et bien pour réaliser cet exercice, c'est le même principe. Tu pars vers la fin de tes chaînes de caractères, et tu additionnes les éléments un à un, en gardant une retenue, si nécessaire. Le résultat tiendra dans un tableau, dont la taille est forcément comprise entre (taille de la plus grande chaîne) et (taille de la plus grande chaîne + 1).

Ex:
"1234" + "859"

Etape 1:

"1234" => premier tableau (taille 4)
"859" => deuxième tableau (taille 3)
-------
"....." => tableau de résultat (taille 5)
ret 0> retenu

Etape 2:

tab1[3] + tab2[2] + ret = 4 + 9 + 0 = 13, soit 3 retient 1

"1234" => premier tableau (taille 4)
"859" => deuxième tableau (taille 3)
-------
"....3" => tableau de résultat (taille 5)
ret 1> retenu

Etape 3:

tab1[2] + tab2[1] + ret = 3 + 5 + 1 = 9, soit 9 retient 0

"1234" => premier tableau (taille 4)
"859" => deuxième tableau (taille 3)
-------
"...93" => tableau de résultat (taille 5)
ret 0> retenu

Etape 4:

tab1[1] + tab2[0] + ret = 8 + 2 + 0 = 10, soit 0 retient 1

"1234" => premier tableau (taille 4)
"859" => deuxième tableau (taille 3)
-------
"..093" => tableau de résultat (taille 5)
ret 1> retenu

Etape 5:

Ici on est arrivé au début du tableau 2. Donc:
On change la méthode qui devient:

tab1[0] + ret = 1 + 1 = 2, soit 2 retient 0

"1234" => premier tableau (taille 4)
"859" => deuxième tableau (taille 3)
-------
".2093" => tableau de résultat (taille 5)
ret 0> retenu

Etape 6:

Ici on a terminé. On vérifie juste qu'il n'y ait pas de case inutilisé dans le tableau résultat.
Ici, on voit que c'est le cas, dont on décale toute les caractères vers la gauche:
".2093" => "2093."

Enfin, on peut au choix:
- Raccourcir la chaîne de caractère de 1, via realloc
- Considérer qu'une case de gaché ce n'est pas bien grave, et juste mettre un 0 terminal à la case 4 (à la place du .)

Bonne chance !
Commenter la réponse de cptpingu
gnichiarsenal 8 Messages postés dimanche 3 juillet 2011Date d'inscription 3 juillet 2011 Dernière intervention - 23 déc. 2009 à 14:57
0
Merci
vraiment,merci beaucoup
Même le prof du cours de programmation n'a pas pu comprendre l'objet du miniprojet.
en fait je viens juste de comprendre de quoi il s'agit.Bon ce qui est maintenant difficile à faire c'est comment lire des entiers de grandes taille.vraiment c'est pas destiné au debutant,je vais peut être recherché un code-sources complet.ci quel qu'un peut m'envoyer un lien qui peut m'aider
Commenter la réponse de gnichiarsenal
cptpingu 3804 Messages postés dimanche 12 décembre 2004Date d'inscription 20 septembre 2018 Dernière intervention - 23 déc. 2009 à 15:02
0
Merci
Même le prof du cours de programmation n'a pas pu comprendre l'objet du miniprojet.

Bizarre pour un prof de ne pas comprendre ce qu'il donne...

en fait je viens juste de comprendre de quoi il s'agit.Bon ce qui est maintenant difficile à faire c'est comment lire des entiers de grandes taille.vraiment c'est pas destiné au debutant,

Ce n'est pas très compliqué, et c'est souvent donné comme exercice aux débutants. Regarde l'explication que je t'ai donné, et tu verras qu'il n'y a rien de vraiment difficile.

je vais peut être recherché un code-sources complet.ci quel qu'un peut m'envoyer un lien qui peut m'aider

Si c'est un miniprojet, c'est à faire par toi même. Allez chercher un exercice tout fait ne t'apprendra rien.
Commenter la réponse de cptpingu
gnichiarsenal 8 Messages postés dimanche 3 juillet 2011Date d'inscription 3 juillet 2011 Dernière intervention - 23 déc. 2009 à 15:08
0
Merci
ok,je vais essayer.ce qui est sur le prof du mini-projet il ne va pas me faciliter la vie lors de la soutenance
Commenter la réponse de gnichiarsenal
gnichiarsenal 8 Messages postés dimanche 3 juillet 2011Date d'inscription 3 juillet 2011 Dernière intervention - 23 déc. 2009 à 15:11
0
Merci
j'ai plein d'erreurs :compairing pointer to integer without a cast
Commenter la réponse de gnichiarsenal
cptpingu 3804 Messages postés dimanche 12 décembre 2004Date d'inscription 20 septembre 2018 Dernière intervention - 23 déc. 2009 à 15:17
0
Merci
j'ai plein d'erreurs :compairing pointer to integer without a cast


La comme ça, je ne suis pas devin. Donc il faut que tu me montres ton code :)
Commenter la réponse de cptpingu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.