Exercice en c

Fermé
defati1983 Messages postés 54 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 15 décembre 2005 - 22 oct. 2005 à 01:43
 hyamath - 2 déc. 2008 à 13:49
bonsoir
comme je suis debutante en info ..jai essayé de faire un petit excercice mais jarrive pas a avoir les bons resultats donc ki peut maider..me fera du plus grnd plaisir merci a tous voila le probléme:
ecrivez un programme quit lit un nombre de secondes entier au clavier et qui affiche cette durée en jours,heures,minutes et secondes au format "x jours,x heures, x minutes et x secondes.

merci jen ai vraiment besoin....

11 réponses

defati1983 Messages postés 54 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 15 décembre 2005 4
23 oct. 2005 à 15:10
#include <stdio.h>
main()
{
int x, j, h, m, s;
printf("introduisez un nombre entier:");
scanf("%i",&x);
s== x%60;
m== x/60;
h==x/3600;
j==x/86400;
if (x<60)
printf("0 j,0 h,0 m et x s:%i\n",x);
else

if(x>=60 && x<3600 )
printf("0 j,0 h,x m et x s:%i\n",x);
getchar();
if (x>=3600 && x<86400 )
printf("0 j,x h,x m et x s:%i\n",x);
getchar();
if (x>=86400)
printf("x j,x h,x m et x s:%i\n",x);
printf("%i j,%i h,%i m,%i s\n",j, h, m, s);
getch();
}
voila ce ke jai fait mais ca me donne des valeur negaatives pour les s et des valeurs grandes pour les autres......
3
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 507
22 oct. 2005 à 08:37
salut,
Le problème repose sur le principe du changement de base et de la
division euclidienne sur les entiers naturels.
Ainsi tu décomposes ton calcul
secondes = reste de la division entière du nombre total de secondes par 60
minutes brutes = quotien de la division précédente

minutes = reste de la division entière des minutes brutes par 60
heures brutes = quotien de la division précédente

Et tu réitères pour les jours en utilisant 24 comme diviseur.

L'arithmétique des entiers en C:
q = a / b ; donne le quotien entier de la division euclidienne a par b
r = a % b ; donner le reste de la division euclidienne a par b
Pour que cela fonctionne bien : a, b, q et r doivent être déclaré comme entier
(char, short, int, long, long long, et toutes les combinaisons unsigned)

A+, bon courage, crabs
1
defati1983 Messages postés 54 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 15 décembre 2005 4
22 oct. 2005 à 13:30
merci davoir jetté un coup doeil sur mon message!!mais il ya juste une autre petite confusion. tavais dit que je dois utuliser le a b q et r. et ke je dois les declarer..alors la je reste un peu perdue!!!si tu peux maider un peu plus....merci davance
0
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 507 > defati1983 Messages postés 54 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 15 décembre 2005
22 oct. 2005 à 14:17
Salut,
Je pense pas pouvoir donner un cours de C, je te files un URL sur un truc
qu'est pas mal pour apprendre le C :
http://www.ltam.lu/Tutoriel_Ansi_C/
A+, crabs
0
oui mais bon tu peux m'aidé :) tu me fera une tré grande faveure
1
No-miS Messages postés 274 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 29 novembre 2006 37
22 oct. 2005 à 15:42
Salut defati1983
pour ton petit programme, je pense que tu peux raisonnablement te fixer 4 variables entieres j, h, m et s que tu initialises à 0.
Tu as normalement stocké dans 'entrée' le nombre de secondes total.
Ce qui est logique, c'est de voir en premier combien de jours tu peux mettre dans ce nombre de secondes 'entrée'. Calcule le nombre de secondes dans une journée, ça sera une constante entiere S_j = 86400
(dans la logique de mes noms de variable, tu auras aussi S_h = 3600, S_m = 60 et S_s = 1).

Donc en langage algorithmique:

soit temp = entree;
j = (int) (temp/S_j);
/*(le (int) fait la partie entiere du resultat, cela dit, je crois que si j est entier, t'as meme pas besoin de mettre le (int), le compilateur faisant automatiquement la conversion)*/
temp = temp - j*S_j;

A ce moment là, tu as dans j le nombre de jours, et dans temp le nombre de secondes qui ne "tiennent" pas dans une journée.
Je te laisse trouver la suite, qui est fort similaire.
Bon courage, en esperant t'avoir aidée.
Bye.
*** edit : comme l'a bien dit une autre personne dans le poste, l'utilisation de l'opérateur % c'est la classe aussi, ça fait un modulo que je t'ai fait à la main plus haut. ***
0

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

Posez votre question
defati1983 Messages postés 54 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 15 décembre 2005 4
22 oct. 2005 à 22:22
merci pour votre aide et je vais essayer une autre fois...a vous de me souhaiter bonnechance.....merci encore
0
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 507
23 oct. 2005 à 17:03
Salut,
L'opérateur d'affectation en C, c'est '='.
L'opérateur '==' permet de vérifier l'égalité entre les 2
opérandes.
Dans tes affectations, remplaces '==' par '='.
s= x%60;
m= x/60;
h=x/3600;
j=x/86400; 

A+, crabs
0
bonjour defati
je viens de faire ton exercice en modifiant un peu ton programme:

#include <stdio.h>
#include <stdlib.h>
main( )
{
int x, j, h, m, s, r, t,u;
printf("introduisez un nombre entier:");
scanf("%i",&x);
s= x%60;
m= x/60;
h=x/3600;
r=x%3600;
j=x/86400;
t=x%86400;

if (x<60)
{s=x;
printf("0 j,0 h,0 m et %d s\n",s);}
else

if(x>=60 && x<3600 )
{printf(" 0 j, 0 h, %d m, %d s\n",m,s);}
else

if (x>=3600 && x<86400 )
{m=r/60;
printf(" 0 j, %d h, %d m, %d s\n",h,m,s);}
else

if (x>=86400)
{h=t/3600;
u=t%3600;
m=u/60;
printf("%d j,%d h,%d m,%d s\n",j, h, m, s);}
system("pause");
}

bon courage pour la suite
0
defati1983 Messages postés 54 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 15 décembre 2005 4
26 oct. 2005 à 00:56
merci pour laide.....je me demandais si il nexistait pas une autre façon moins compliker et moins longue sans meme utiliser if..else...merci encore
0
Il me semble qu'en initialisant les variables à 0, on peut facilement se passe des tests. Chez moi, j'ai essayé le code suivant, et ça semble fonctionner.

#include <stdio.h>

int main(int argc, char * argv[])
{
	long long x = 0;
	int s = 0;
	int m = 0;
	int h = 0;
	long j = 0;
	char date[50];

	int t = 0;
	long long tl = 0;

	printf("nombres de secondes : ");
	scanf("%d",&x);
	s = x % 60;
	tl = (x - s) / 60;
	t = tl % 60;
	tl = (tl - t) / 60;
	m = t;
	h = tl % 24;
	j = (tl - h) / 24;

  sprintf(date,"%8ld jours %2d heures %2d minutes et %2d secondes\n", j, h, m, s);

  puts(date);
  system("pause");
	return 0;
}

0
bjr les ingenieurs ;
. Calculez la factiorielle N!= 1.2.3... (N-1).N d'un entier naturel N en respectant que 0!=1.
a) Utilisez while ,
b) Utilisez for .



je trouve une difficulté a faire ce prgrame pouviez vs m'ader merciiii a vs
0
dark_hacker Messages postés 5 Date d'inscription dimanche 13 janvier 2008 Statut Membre Dernière intervention 14 janvier 2008
14 janv. 2008 à 14:44
hé sousou tu as vu la date de leur descussion
0
tu peux utiliser cela:
PS:je l ai pas encore testé,il se peut qu il y ait qlq erreurs.Mais l essentiel est dit

#include <stdio.h>

int main()

{
int N;
int k;
long resultat;

printf("Entrez un nombre svp: ");
scanf("%d\n",&N);

if (N==0)
return 1;

else

while(k<=N)
resultat=resultat*k;

return resultat;
0