Exerce en c

Fermé
celine - 16 sept. 2010 à 14:47
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 19 sept. 2010 à 18:58
Bonjour, a tous mois c'est celine pasla chanteuse mais l'autre lol.Voila j'ai un probleme avec ce exo en c .Ecrir un programme qui demande un nombre et fait la somme de ses entiere et puis affiche la somme en l'envers.
Merci d'avance bisous bisous



7 réponses

merci pour la repnse le programme diot etre du genre quand l'utilisateur entre 325 il fait 3+2+5 et affice 10 et puis 01
1
non il n s'agit pas d'un devoir je lu le cours le cours de m@teo21 et j'en suis aux pointeurs j fait une pause pour faire des exercices que je trouve sur l net.Je m'en suis sorti j'usque ici mais ce exo me pose des problemes .Pour repondre à Nabla's je suis bloqué sur ce exo depuis 10 jours alors j'ai bossé mais si j ve lire la suite du cours il m faut resolver ce exo.
1
EminoMeneko Messages postés 2435 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 23 mai 2018 318
16 sept. 2010 à 15:00
J'ai pas tout compris mais si j'ai compris alors il faut que tu fasses une pauvre addition de quelques nombres et puis ensuite afficher le résultat à l'envers ?

Ben tu fais ton calcul (pour deux nombre facile pour plus une boucle)
Tu obtiens la somme que tu transtypes en chaîne de caractères
tu inverses la chaîne.
0
scaravenger Messages postés 2685 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 30 janvier 2015 616
16 sept. 2010 à 15:33
Il y a plusieurs possibilités pour y arriver.
Tout dépend du contexte de ta demande.
s'agit-il d'un devoir scolaire?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
non il n s'agit pas d'un devoir je lu le cours le cours de m@teo21 et j'en suis aux pointeurs j fait une pause pour faire des exercices que je trouve sur l net.Je m'en suis sorti j'usque ici mais ce exo me pose des problemes .Pour repondre à Nabla's je suis bloqué sur ce exo depuis 10 jours alors j'ai bossé mais si j ve lire la suite du cours il m faut resolver ce exo.
0
salut !
c'est super simple en fait, il faut que tu isole les puissances de 10.

en gros :

int sommechiffres(int num)//trouve la somme   
{   
   int retour = 0 ; //la valeur que tu renvois   
   int i = 0;//pour remplir le tableau   
   int tab[5]; //tu isole les nombres   
   int puissdix = 10000; // je suppose que tu dépassera pas les 99 999   

   while( i <= 5 )   
   {   
        tab[i] = (num/puissdix);//tu récupère le plus grand nombre   
        num = (num - tab[i]);//tu retire la valeur trouvée   
        puissdix = (puissdix/10);   
        i++;//case suivante du tableau   
    }//ici, on a récupéré tous les chiffres du nombre       
    i = 0;   
    while( i < 5 )   
    {   
        retour += tab[i];   
        i++;   
    }    
    return retour;   
}   
//**************************************************   

int  inversechiffre(int num)   
{   
      int i = 0;   
      int tab[4];    
      int retour = 0;   
      int puissdix = 10000;   
      while( i >= 0 )   
      {   
          tab[i] = (num/puissdix);  
          num = (num - tab[i]); 
           puissdix = (puissdix/10);   
          i--; 
        }   
           i = 0;   
    while( i < 5 )   
    {   
        retour += tab[i];   
        i++;   
    }    
     return retour;   
}   
    


je l'ai faite vite fait depuis la page de ccm donc j'ai pas testé mais ca devrait fonctionner.

voilà un main pour tester si tu veux :

int main( void )   
{   
   int val = 456;   
   int somme , sommeinv;   
   somme = sommechiffres(val);   
   sommeinv = inversechiffre(somme )   

   printf("%d : \n\tsomme : %d\n\tinverse de la somme : %d\n", val, somme, sommeinv);   
  system("pause");   
  return 0;   
}



je fais pas de test d'erreur ni rien.

si t'as des question n'hésite pas, le but étant de comprendre toi et pas moi ^^

bonne journée !
naga


PS : Quand tu demande de l'aide, fais au moins un effort d'ecriture, et explique bien ce que tu cherche, quitte à passer 10 minutes sur le message : un message claire et bien écrit t'apportera bien plus de réponses.
0
Utilisateur anonyme
18 sept. 2010 à 13:04
ah si tu veux, je pourrais le modifier un peu pour prendre n'importe quel nombre(pas limité à 99999 =p), mais essaye d'abord ;)
0
EminoMeneko Messages postés 2435 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 23 mai 2018 318
19 sept. 2010 à 02:00
J'ai pas lu ton code mais j'avais pas pensé aux puissances de 10... >< mais effectivement c'est une bonne idée.
Vu l'exemple qu'elle donnait j'étais plus dans l'idée de convertir chaque caractères 1 à 1 en entier pour les ajouter.
Je me suis dit que c'est peut-être bête comme solution mais après tout comme le chiffre est une chaîne de caractères au moment de la saisie et qu'en C les chaînes de caractères sont des tableaux de caractères c'est finalement pas si mal comme idée. Il suffirait d'utiliser une boucle pour traiter n'importe quel nombre entier.
J'ai pas fais de C/C++ depuis un bail et j'en ai pas testé mais ça pourrait ressembler à un truc du genre.
#include <iosteam>
using namespace std

void main(void)
{
	char* sEntier[]; // Je ne suis vraiment plus sur de la syntaxe donc à vérifier
	cout << "Veuillez saisir un entier : ";
	cin >> sEntier; 
	/* Et là je me dis que j'aurais même pu stocker un entier directement si
	j'avais voulu, mais bon là c'est pas ce que je veux.*/

	int nLng, somme, nBuff;
	char buff;
	nLng = sizeof(sEntier/sizeof(char));
	/* Trouver la taille de la chaîne. Je sais plus trop si c'est juste mais
	j'ai de vagues souvenirs de ce genre de choses... ^^' */
	for (i=nLng;i>0, i--)
	{
		buff = sEntier[i];
		/* Je sais pas si il aurait pas fallu copier la chaîne dans un tableau
		de caractères pour une histoire de chaînes qu'on ne peut plus modifier
		ou quoi... Enfin c'est vraiment très vieux.*/
		nBuff = (int)buff;
		/* Transtypage. Si ça marche pas essayer static int ou je sais plus trop
		mais y'avait de chevrons <>. Peut-être static<int>buff.*/
		somme += nBuff;
	}
	
	cout << "La somme vaut " << somme << endl;
}


Voilà comment j'aurais fait. Bon y'a probablement des erreurs genre oubli d'une bibliothèque, faute de frappe, etc... mais je pense que l'algorithme est au moins perceptible au travers de ce code. Au même titre que PHP, j'ai pas fait de C/C++ depuis des années.
0
Utilisateur anonyme
19 sept. 2010 à 09:09
char* sEntier[]; // Je ne suis vraiment plus sur de la syntaxe donc à vérifier


en effet, ca sera char * Entier; sinon tu créé un tableau en deux dimensions =)
/* Et là je me dis que j'aurais même pu stocker un entier directement si
	j'avais voulu, mais bon là c'est pas ce que je veux.*/


oui en fait moi je pars du principe que pour tester, pas de saisie clavier, ,et qu'il faut bien départager les types (en cas de traitement auto par exemple) ... les vestiges d'un prof de c tarré ^^
nLng = sizeof(sEntier/sizeof(char));
	/* Trouver la taille de la chaîne. Je sais plus trop si c'est juste mais
	j'ai de vagues souvenirs de ce genre de choses... ^^' */


normalement ca marche, mais ca te renvera la taille de sEntier et non du nombre de caractères SI (et seulement si =p) tu initialise la taille de ton sEntier (avec un new char[50] par exemple), chose qu'il me semble obligé de faire pour le cin, mais je me trompe peu être . sinon, il faut utiliser la bibliotèque <string.h> avec la méthode strlen :
nLng = strlen(sEntier);


ensuite,
buff = sEntier[i];

pas de soucis, ca marche sans problèmes =)
par contre :
nBuff = (int)buff;

ca renvoi la valeur ascii, donc pour 1 par exemple : nBuff = 49

comme "0" = 48, il faut faire :
nBuff = ((int)buff) - 48;

mais sinon pas de soucis pour le cast =)


à part ces deux trois erreur (dûent au php je pense ^^) ton code fonctionne bien pour trouver la somme ^^

bon j'ai pas testé mais avec les changements je pense que ca marcher =)

(PS : j'en ai bouffé du c et j'ai une pu**** de mémoire xD)

bon week,
naga
0
EminoMeneko Messages postés 2435 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 23 mai 2018 318
19 sept. 2010 à 14:54
Arf la valeur ASCII... xD
J'y pensais plus à ça.
Moi aussi j'avais une p*t**n de mémoire avant mais là si je pratique pas ben j'oublie même si j'ai bien des restes.
Puis vu ma formation je suis plus dans les trucs comme ShellScript, awk, sed, WSH, etc...
Le C ou le PHP et plus récemment Java c'est juste un intérêt personnel (la culture G on va dire).
En tout cas au-delà du code, c'était surtout l'algo que je souhaitais transmettre.
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
19 sept. 2010 à 16:30
la méhtode nBuff = ((int)buff) - 48;
est une bonne idée, si on voulait l'écrire correctement, il faudrait faire:
nBuff = ((int)buff) - (int)'0';

ceci dit, la manière propre du C doit ressembler à ca:
sscanf (buff,"%d",&nBuff);
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
16 sept. 2010 à 16:05
Bonjour,

voici la politique de CCM concernant la résolution de vos exercices (de programmation ou autre)

https://www.commentcamarche.net/infos/25899-demander-de-l-aide-pour-vos-exercices-sur-ccm/

donc merci de poser des questions precises sur ce qui vous pose problème.
On veux bien aider, mais le but est de t'apprendre, pas de se faire exploiter. Si tu nous prends pour une bande de geeks qui va faire tes exos sans que t'ai à réfléchir juste pke t'as demandé gentillement, mets plutot une minijupe et un décolté et trouve qqcn à qui demander parmi tes connaissances.

Ceci dit, si tu es prete à montrer que tu as fait des recherches par toi meme, nous t'aiderons tous avec plaisir
-2
Utilisateur anonyme
18 sept. 2010 à 12:55
salut !

la personne en question essaye justement d'apprendre, et ce n'est pas un travail pro ou pour les cours mais personnel donc elle n'en tirera rien de gratifiant ou autre à notre insu (on est donc pas "exploité")

enfin après c'est mon avis. encore si c'était un projet je dis pas mais là ...
cdlt, naga
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
18 sept. 2010 à 14:06
Salut nagashima,

Disons le problème de donner un programme tout fait, c'est qu'on a l'impression que ça aide. Mais au final, on est souvent incapable de le refaire seul. C'est pour ça que sur ce forum, on préfère aider à expliquer un point peu clair, à corriger un code, mais en aucun cas de donner la solution.
Mais bon, si tu veux donner la solution à chaque fois, ne te prive pas ;-), même si c'est contraire à la charte...
0
Utilisateur anonyme
18 sept. 2010 à 14:36
oy !

je ne donne pas la solution finale (je pense d'ailleurs que mon code se compilera pas tout de suite, je l'ai pas testé), mais si elle le fait pour apprendre le c, elle cherchera à comprendre, sinon c'est elle qui y perd, moi je m'en fout je sais le faire =)

bne journée !
naga
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
18 sept. 2010 à 14:48
Ce que je reproche juste, c'est que pour l'isntant on a pas vu un bout de recherche de ce qu'a fait la demoiselle avant de venir ici, c'est tout ... quand la personne met au moins 2/3 lignes de codes sur le problème en question, montre qu'elle acherché, pose au moins un bout d'algo, j'aide sans soucis.

MAis la c'est juste que la personne arrive en demandant un exercice complet. Moi je suis OK pour aider pas a pas si il faut, mais il faut que la personne montre qu'elle travaille aussi ...

j'ai vu trop de personnes réussir leurs études en pompant simplement sur les autres .... et qui au final ont les memes diplomes que moi
0
Utilisateur anonyme
18 sept. 2010 à 14:59
je suis d'accord avec toi, mais entre deux personnes ayant le même diplôme, il y a une différence, les gens qui trichent pendant leurs études vont peu être trouver du taff à la sortie, mais revois les 5/6 ans plus tard, après s'être fait jarté de X entreprises avant la fin de la période d'essais, et revoie ceux qui taffaient ^^

perso c'est la première fois que je met le code + le test, mais vu la nature du post, je ne pense pas avoir mal fait (et au pire j'ai perdu 10/12 minutes à taper le code donc bon ^^)


ah au fait, petite anecdote :
j'ai vu trop de personnes réussir leurs études en pompant simplement sur les autres .... et qui au final ont les memes diplomes que moi


j'avais un projet en bts à 4. sur les trois autres : l'un foutait rien, l'autre dormait les 3/4 du temps et le dernier taffait mais était vraiment mauvais (au moins il essayait)
finalement je me suis tappé tout le projet, on a eu 14 et 2/3 ont eu leur diplome (malheureusement pas celui qui taffait >_<)
l'un continu les cours en école d'ingé info et fait que se ramasser (bah oui en ingé c'est des ras qui veulent être les premiers) et l'autre s'est fait jarté de deux entreprises \o/
Moi ? j'ai eu ma licence et je continu en alternance, en faisant en plus le site et le réseau d'un château près de chez moi, et tout se passe bien ^^

je pense juste que celui qui taff est toujours gagnant au final, le tout étant de s'en donner les moyens.

biz,
naga
0