IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Demande d'aide pour transtypage caractère -> entier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Dév FrontEnd
    Inscrit en
    Avril 2005
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Dév FrontEnd

    Informations forums :
    Inscription : Avril 2005
    Messages : 239
    Par défaut Demande d'aide pour transtypage caractère -> entier
    Voilà j'ai un petit exo tout con mais je bloque ...

    Je dois faire un petit programme qui demande à l'utilisateur de saisir un nombre et on doit lui afficher la somme des chiffres de son nombre.
    Ex : 1234 -> 1+2+3+4 = 10

    J'ai ça pour le moment mais je galère ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    /* Langage C : 
    * TP 1
    * Exo 4 : 
    * Ecrire un programme qui calcule la somme des chiffres d'un nombre positif
    */
     
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
     
    int main(){
    	int MAX = 10;
    	int i=0,somme=0;
    	char s[MAX];
    	int nb[MAX];
    	printf("Entrez votre chiffre : ");
    	scanf("%s",s);
    	while(s[i]){
    		printf("&s : %c\n",&s[i]);
    		/*nb[i] = atoi(&s[i]);*/
    		somme = somme + nb[i];
    		printf("Somme intermediaire : %i \n%i\n",somme,nb[i]);
    		printf("%c \n",s[i]);
    		i++;
    	}
    	printf("\n Somme : %i \n",somme);
    	return 0;
    }

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par pontus21
    Voilà j'ai un petit exo tout con mais je bloque ...

    Je dois faire un petit programme qui demande à l'utilisateur de saisir un nombre et on doit lui afficher la somme des chiffres de son nombre.
    Ex : 1234 -> 1+2+3+4 = 10

    J'ai ça pour le moment mais je galère ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    /* Langage C : 
    * TP 1
    * Exo 4 : 
    * Ecrire un programme qui calcule la somme des chiffres d'un nombre positif
    */
     
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
     
    int main(){
    	int MAX = 10;
    	int i=0,somme=0;
    	char s[MAX];
    	int nb[MAX];
    	printf("Entrez votre chiffre : ");
    	scanf("%s",s);
    	while(s[i]){
    		printf("&s : %c\n",&s[i]);
    		/*nb[i] = atoi(&s[i]);*/
    		somme = somme + nb[i];
    		printf("Somme intermediaire : %i \n%i\n",somme,nb[i]);
    		printf("%c \n",s[i]);
    		i++;
    	}
    	printf("\n Somme : %i \n",somme);
    	return 0;
    }
    J'ai bien l'impression que tu codes sans refléchir. Aussi trivial que paraisse le problème, je recommande une phase d'analyse, à savoir :

    1 - Specification

    "Je dois faire un petit programme qui demande à l'utilisateur de saisir un nombre et on doit lui afficher la somme des chiffres de son nombre.
    Ex : 1234 -> 1+2+3+4 = 10"

    2 -Conception

    2.1 - Algorithme textuel

    Saisir un nombre dans une chaine de caractères au format décimal
    Puis, pour chaque caractère, le convertir en valeur numérique et faire la somme des valeurs numériques. Enfin, afficher la somme.

    2.2 Algorithme en pseudo-code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    DEBUT
     SAISIR chaine
     i := 0
     somme := 0
     TANT_QUE i < LONGUEUR chaine
       valeur := valeur_caractere (chaine[i])
       somme := somme + valeur
       INC i
     FIN_TANT_QUE
     AFFICHER somme
    FIN
    Ne reste plus qu'à coder ça en C...

    Le pseudo-code permet de modéliser l'algorithme en utilisant la structure du code et en s'affranchissant des détails d'implémentation. Seule la logique de l'exécution et des échanges de données apparait.

    Evidemment, un tel algorithme peut être optimisé, éventuellement en fonction du langage d'implémentation, mais le principe est là.

    A la reflexion, ton code nest pas si eloigné que ça de mon algorithme. Cependant :
    • Il y a un tableau en trop (inutile de stocker les valeurs intermédiaires)
    • Il manque la conversion 'caractère -> valeur numérique'

  3. #3
    Membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Par défaut
    Yop.

    Tu pourrais aussi, plutôt que de saisir la chaîne d'un seul coup et de la traiter après, faire caractère par caractère. Je préconise par avance getchar() et non scanf("%c").

    ++.

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par -mleg-
    Tu pourrais aussi, plutôt que de saisir la chaîne d'un seul coup et de la traiter après, faire caractère par caractère.
    Alors comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DEBUT
     somme := 0
     caractere := SAISIR
     TANT_QUE caractere <>  FIN LIGNE
       valeur := valeur_caractere (caractere)
       somme := somme + valeur
       caractere := SAISIR
     FIN_TANT_QUE
     AFFICHER somme
    FIN
    OK, c'est comme ça qu'on avance... (Suppression d'un tableau inutile)

    Il faudrait quand même s'assurer que le caractère est valide...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    DEBUT
     somme := 0
     caractere := SAISIR
     err := caractere NON APPARTIENT A 0-9
     TANT_QUE NON err ET caractere <> FIN LIGNE
       valeur := valeur_caractere (caractere)
       somme := somme + valeur
       caractere := SAISIR
       err := caractere NON APPARTIENT A 0-9
     FIN_TANT_QUE
     AFFICHER somme
    FIN

  5. #5
    Membre éclairé
    Profil pro
    Dév FrontEnd
    Inscrit en
    Avril 2005
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Dév FrontEnd

    Informations forums :
    Inscription : Avril 2005
    Messages : 239
    Par défaut
    Mon algo était à peu près juste je pense.
    Ce que j'aimerais juste c'est que quand j'ai récupéré le Nième caractère de mon nombre de départ, pouvoir le transtyper en entier afin de pouvoir les additionner.
    Pour preuve, voici mon code, retouché car c'est vrai que j'avais un peu tout modifier n'importe comment.
    Essayez de l'exécuter et voyez ce qui se passe.
    Si j'affiche le caractère s[i], il me l'affiche correctement mais quand je veux faire une opération avec, ça foire !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    /* Langage C : 
    * TP 1
    * Exo 4 : 
    * Ecrire un programme qui calcule la somme des chiffres d'un nombre positif
    */
     
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
     
    int main(){
    	int MAX = 10;
    	int i=0,somme=0;
    	char s[MAX];
    	printf("Entrez votre chiffre : ");
    	scanf("%s",s);
    	while(s[i]){
    		printf("&s : %c\n",s[i]);
    		somme = somme + s[i];
    		printf("Somme intermediaire : %i \n",somme);
    		printf("%c \n",s[i]);
    		i++;
    	}
    	printf("\n Somme : %i \n",somme);
    	return 0;
    }

    PS : Je dois saisir le nombre dans son intégralité au départ ...

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par pontus21
    Mon algo était à peu près juste je pense.
    Ce que j'aimerais juste c'est que quand j'ai récupéré le Nième caractère de mon nombre de départ, pouvoir le transtyper en entier afin de pouvoir les additionner.
    Il n'est pas question de 'transtyper' un caractère pour en faire un entier (du moins dans le cas présent). Ce que tu veux, c'est déterminer la valeur numérique d'un caractère. Pour celà, il faut étudier les propriétés des ensembles de caractères supportés par le C standard.

    "Les caractères '0' à '9' ont des valeurs numériques croissante de 1 en 1."

    Il suffit donc d'utiliser les propriétés découlant de cette regle, pour, très simplement, convertir la valeur du caractère en sa valeur numérique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    '0' - '0' = 0
    '1' - '0' = 1
    ...
    '9' - '0' = 9
    Il suffit donc d'écrire :
    int valeur = caractere - '0';

Discussions similaires

  1. Demande d'aide pour un exercice
    Par IDE dans le forum C
    Réponses: 3
    Dernier message: 29/10/2005, 15h09
  2. [xsl][xalan]Demande d'aide pour un comptage
    Par HomoErectus dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/09/2005, 09h22
  3. Demande d'aide pour query difficile
    Par ericjean514 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/02/2005, 18h52
  4. Demande d'aide pour une requête
    Par arkzor dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/12/2004, 02h40
  5. [TPW][cours]Demande d'aide pour finir un programme
    Par jf dans le forum Turbo Pascal
    Réponses: 21
    Dernier message: 16/06/2003, 18h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo