Posez votre question Signaler

Exercice en c

defati1983 56Messages postés 26 août 2005Date d'inscription - Dernière réponse le 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....
Lire la suite 

Exercice en c »

14 réponses
Réponse
+3
moins plus
#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......
Ajouter un commentaire
Réponse
+1
moins plus
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
defati1983 - 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
crabs - 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
Ajouter un commentaire
Réponse
+1
moins plus
oui mais bon tu peux m'aidé :) tu me fera une tré grande faveure
Ajouter un commentaire
Réponse
+0
moins plus
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. ***
Ajouter un commentaire
Réponse
+0
moins plus
merci pour votre aide et je vais essayer une autre fois...a vous de me souhaiter bonnechance.....merci encore
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
cataclypse - 3 nov. 2005 à 13:54
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;
}

Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
hé sousou tu as vu la date de leur descussion
Ajouter un commentaire
Réponse
+0
moins plus
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;
Ajouter un commentaire
Ce document intitulé « exercice en c » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook