fonction min/max en C/C++

patrickrochon

Membre junior
10 Octobre 2005
10
0
Bonjour,

j'aurais besoin d'un petit coup de main. Je débute en C et je dois écrire un court programme utilisant les fonctions min() et/ou max().

grosso-modo, je demande l'utilisateur d'entrer le nombre d'heures travaillées et ensuite son taux horaire. Il faut que je calcul un maximum de 40 heures aux taux horaire (d'où l'utilisation de la fonction max() ). Je sais que je pourrais utiliser une structure if, mais je dois utiliser min() max().

Par exemple si l'utilisateur entre 60 heures travaillées, bien il faut que je calcul une maximum de 40 heures * tauxHoraire, et la balance (en l'occurence 20 heures) * tauxDouble.

Ya juste la partie utilisant max() qui me donne des difficultées. Je sais m'en servir pour comparer des chiffres exemple max (nombre1, nombre2, nombre3) et sortir le plus grand, mais je suis un peu embêté pour l'utilisation dans le programme que je dois faire.

Si quelqu'un peu m'aider ?
 

tatouille

Vétéran
1 Juin 2004
5 174
494
Stanford CA
#define max(a,b) (a>=b?a:b)
#define min(a,b) (a<=b?a:b)

ou

int
max(int a,int b);

int
max(int a,int b);
{
if(a>=b)
return a;
else
return b;
}

concrêtement tu veux faire quoi ?
 

NightWalker

world of muse
Modérateur
Club MacG
15 Septembre 2002
13 805
1 802
Bordeaux
patrickrochon a dit:
Bonjour,

j'aurais besoin d'un petit coup de main. Je débute en C et je dois écrire un court programme utilisant les fonctions min() et/ou max().

grosso-modo, je demande l'utilisateur d'entrer le nombre d'heures travaillées et ensuite son taux horaire. Il faut que je calcul un maximum de 40 heures aux taux horaire (d'où l'utilisation de la fonction max() ). Je sais que je pourrais utiliser une structure if, mais je dois utiliser min() max().

Par exemple si l'utilisateur entre 60 heures travaillées, bien il faut que je calcul une maximum de 40 heures * tauxHoraire, et la balance (en l'occurence 20 heures) * tauxDouble.

Ya juste la partie utilisant max() qui me donne des difficultées. Je sais m'en servir pour comparer des chiffres exemple max (nombre1, nombre2, nombre3) et sortir le plus grand, mais je suis un peu embêté pour l'utilisation dans le programme que je dois faire.

Si quelqu'un peu m'aider ?

Bonjour et bienvenue,

Je ne sais pas si tu as réellement besoin d'une fonction min() et max(), car ce dont tu as besoin est de savoir si tu dépasse les heures aux taux horaires ou non...

Par exemple si l'utilisateur entre 60 heures travaillées, bien il faut que je calcul une maximum de 40 heures * tauxHoraire, et la balance (en l'occurence 20 heures) * tauxDouble.

En algo à priori ça donne dans le genre :


lHeure est un entier; // l'heure effectuée
lfSommeTauxHoraires est un réel; // coût aux taux horaires
lfSommeDepassement est un réel; // coût du dépassement
lfSommeTotale est un réel; // le coût global

lfSommeTauxHoraires = 0.0;
lfSommeDepassement = 0.0;

si lHeure >= 40 alors
lfSommeTauxHoraires = 40 * TauxHoraires;
sinon
lfSommeTauxHoraires = lHeure * TauxHoraires;
finsi

// on calcule maintenant dans le dépassement s'il y a
si lHeure > 40 alors
lfSommeDepassement = ( lHeure - 40 ) * TauxDouble;
finsi

lfSommeTotale = lfSommeTauxHoraires + lfSommeDepassement;


Donc à priori pas besoin de fonction min et max ??? l'Algo ci-dessus ne fait que traduire l'exemple que tu as donné...


PS : j'ai l'habitude de mettre un petit L -> 'l' devant les variables pour indiquer qu'elles sont locales à la fonction. Et le "f" pour type float. Rien pour le type integer :p
 

tatouille

Vétéran
1 Juin 2004
5 174
494
Stanford CA
NightWalker a dit:
Bonjour et bienvenue,

Je ne sais pas si tu as réellement besoin d'une fonction min() et max(), car ce dont tu as besoin est de savoir si tu dépasse les heures aux taux horaires ou non...



En algo à priori ça donne dans le genre :


lHeure est un entier; // l'heure effectuée
lfSommeTauxHoraires est un réel; // coût aux taux horaires
lfSommeDepassement est un réel; // coût du dépassement
lfSommeTotale est un réel; // le coût global

lfSommeTauxHoraires = 0.0;
lfSommeDepassement = 0.0;

si lHeure >= 40 alors
lfSommeTauxHoraires = 40 * TauxHoraires;
sinon
lfSommeTauxHoraires = lHeure * TauxHoraires;
finsi

// on calcule maintenant dans le dépassement s'il y a
si lHeure > 40 alors
lfSommeDepassement = ( lHeure - 40 ) * TauxDouble;
finsi

lfSommeTotale = lfSommeTauxHoraires + lfSommeDepassement;


Donc à priori pas besoin de fonction min et max ??? l'Algo ci-dessus ne fait que traduire l'exemple que tu as donné...


PS : j'ai l'habitude de mettre un petit L -> 'l' devant les variables pour indiquer qu'elles sont locales à la fonction. Et le "f" pour type float. Rien pour le type integer :p

oui min max
:) essaye encore
 

patrickrochon

Membre junior
10 Octobre 2005
10
0
Mon exercice se présente comme suit :

"Vous êtes un préposé à la paie. Vous devez calculer le salaire brut d'un employé sachant que les 40 premières heures travaillées sont payées à temps simples tandis que toutes les autres sont payées à temps double. Arrondissez le salaire brut au centième de dollar près. Supposez que le nombre d'heures et le taux horaires sont des réels valides, supérieurs à zéros.

Faites usage de la fonction min() et de la fonction max(). N'utilisez pas de structure décisionnelles pour cet exercice."


Aperçu de ce que devrait donner l'affichage :

Combien d'heures avez-vous travaillé cette semaine ? 61.0
Quel est votre taux horaire ? 12.50

Votre salaire brut est de 893.75 $.




voilà le petit problème. Pour l'affichage (printf, scanf, etc) ça va, cé juste la structure du min() et du max() avec laquelle je suis embêté.


merci pour le coup de main
 

tatouille

Vétéran
1 Juin 2004
5 174
494
Stanford CA
patrickrochon a dit:
Mon exercice se pr&#233;sente comme suit :

"Vous &#234;tes un pr&#233;pos&#233; &#224; la paie. Vous devez calculer le salaire brut d'un employ&#233; sachant que les 40 premi&#232;res heures travaill&#233;es sont pay&#233;es &#224; temps simples tandis que toutes les autres sont pay&#233;es &#224; temps double. Arrondissez le salaire brut au centi&#232;me de dollar pr&#232;s. Supposez que le nombre d'heures et le taux horaires sont des r&#233;els valides, sup&#233;rieurs &#224; z&#233;ros.

Faites usage de la fonction min() et de la fonction max(). N'utilisez pas de structure d&#233;cisionnelles pour cet exercice."


Aper&#231;u de ce que devrait donner l'affichage :

Combien d'heures avez-vous travaill&#233; cette semaine ? 61.0
Quel est votre taux horaire ? 12.50

Votre salaire brut est de 893.75 $.




voil&#224; le petit probl&#232;me. Pour l'affichage (printf, scanf, etc) &#231;a va, c&#233; juste la structure du min() et du max() avec laquelle je suis emb&#234;t&#233;.


merci pour le coup de main
&#233;cris le en pseude code je t'aide &#224; faire la traduction je reviens dans 20 min
je vais &#224; la poste

j'&#232;sp&#232;re que cela sera suffisant :)

identifie le type de tes donn&#233;es

r&#233;el -> double -> pr&#233;cision centi&#232;me -> round ecetera
 

NightWalker

world of muse
Modérateur
Club MacG
15 Septembre 2002
13 805
1 802
Bordeaux
tatouille a dit:
oui min max
:) essaye encore

Les fonctions min ou max que je connaisent retourne la valeur minimal d'un ensemble de valeur ( min() ) et la valeur maximale d'un ensemble de valeur ( max() ) ??? j'ai raté quelque chose ?:confused:
 

patrickrochon

Membre junior
10 Octobre 2005
10
0
voilà le code qui me permet de réaliser le programme sans utiliser de if ().

int main (int argc, char * const argv[])
{

//déclaration des variables

double heuresTravaillees; //le nombre d'heures totales travaillées
double tauxHoraire; //le taux horaire
//le taux pour les heures travaillées passé 40 heures
double heuresSupplementaires;
double tauxEtDemi;

double salaireNormal;
double salaireSupplementaire;

double salaireBrut; //le salaire brut comprenant les heures à taux normal et taux et demi.

//demande à l'utilisateur d'entrer les données.

cout <<"Combien d'heures avez-vous travaillé ? ";
cin >> heuresTravaillees;

cout <<"Quel est votre taux horaire ? ";
cin >> tauxHoraire;

//Calcul des heures payées à un taux régulier

salaireNormal = min(40.0, heuresTravaillees) * tauxHoraire;

//calcul des heures supplémentaires

heuresSupplementaires = heuresTravaillees - 40.0;
tauxEtDemi = tauxHoraire * 1.5;


salaireSupplementaire = max(0.0, heuresSupplementaires) * tauxEtDemi;


//calcul salaire total

salaireBrut = salaireNormal + salaireSupplementaire;

//affiche le résultat
//cout << heuresSupplementaires;
cout <<"Votre salaire brut est de " << salaireBrut << " $";

return 0;
}
 

NightWalker

world of muse
Modérateur
Club MacG
15 Septembre 2002
13 805
1 802
Bordeaux
Effectivement ça marche cette solution... :up:

Je ne sais pas pourquoi dans la définition de min() et max() que j'ai utilisé ci-dessus je n'ai pas essayé d'appliquer à un ensemble d'éléments qui n'est composé que de deux éléments... :p

bien joué... :zen:
 

molgow

Vétéran
Club MacG
4 Janvier 2002
5 494
613
38
Suisse
CarlitO a dit:
Ca me fait marrer car je viens de rentrer en école d'ingénieur informatique. Et j'ai exactement le même genre d'exo.:)

C'est aussi typiquement le genre d'exo pour lequel je dois aider des étudiants de 1ère année :cool:
Mais moi je suis assistant Java... faut pas déconner, le C c'est pour les dinosaures :D ;)
 

molgow

Vétéran
Club MacG
4 Janvier 2002
5 494
613
38
Suisse
Au passage, mon cher patrickrochon, &#233;tant donn&#233; que tu sembles d&#233;buter en C et que tu as l'air bien parti pour revenir chaque semaine nous poser des questions sur les exercices que tu as &#224; faire, je ne saurais que trop te conseiller l'excellent "The C Programming Language" de Brian W. Kernighan et Dennis M. Ritchie, qui est selon moi (et pas que moi) LE meilleur ouvrage de r&#233;f&#233;rence pour le C :

french2sm.jpg
 

CarlitO

Membre junior
17 Avril 2004
53
1
36
Lille
www.davidguetta.com
Personnellement pour son exo de salaire avec heure supplémentaire, j'ai fait ça :

#include<stdio.h>

/**
* Fonction salaire qui calcule le salaire!
* @param : int n : nombre d'heures travaillées
* @param : float h : salaire horaire
* @return : float s : salaire final
*/
float salaire(int n, float h)
{
float s;
if (n<=35) s=n*h;
else {
if (n<=45) s=n*h+(n-35)*h*50/100;
else s=n*h+10*h*50/100+(n-45)*h*75/100;
}
return s;
}

int main()
{
int n;
float h,s;
printf("nombre d'heures travaillées?\n");
scanf("%d",&n);
printf("Salaire horaire?\n");
scanf("%f",&h);
s = salaire(n,h);
printf("%.2f\n",s);
return 0;
}
 

NightWalker

world of muse
Modérateur
Club MacG
15 Septembre 2002
13 805
1 802
Bordeaux
molgow a dit:
Au passage, mon cher patrickrochon, étant donné que tu sembles débuter en C et que tu as l'air bien parti pour revenir chaque semaine nous poser des questions sur les exercices que tu as à faire, je ne saurais que trop te conseiller l'excellent "The C Programming Language" de Brian W. Kernighan et Dennis M. Ritchie, qui est selon moi (et pas que moi) LE meilleur ouvrage de référence pour le C :

french2sm.jpg

Alors là je ne peux qu'être d'accord avec toi... c'est la bible... ;)