Aide urgent C++ années bissextiles

Le Messie Messages postés 3 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 23 septembre 2003 - 23 sept. 2003 à 19:06
Le Messie Messages postés 3 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 23 septembre 2003 - 23 sept. 2003 à 21:03
Salut à tous

voilà, je suis depuis peu ( 2 semaines à peine ) en IUT d'info et on doit rendre un tp sur le c++ très rapidement
malheureusement, moi même et un camarade n'arrivont pas du tout à faire marcher un des 4 programmes demandé.
je vous donne l'énoncé :

"écrire la fonction qui calcule le nombre d'années bissextiles entre deux années annee_depart et annee_arrivee ,
Rappel : une année est bissextile si elle divisible par 400 ou par 4 mais pas par100.
Exemple
annee_depart = 1896
annee_arrivee = 1904
1896
1904
nombres d'annee bisextilles = 2"

Pour écrire ce programme, il faut qu'on utilise au moins une fonction séparée de la "main" procédure. Donc dans le cas d'années bissextile ou non, une booléenne ...
je pensais à un truc du genre :

bool bissextile()
{
bool bissextile;
bissextile=( annee%400==0 || (annee%4==0 && (annee%100)!=0));
return bis;
}

mais voilà, après ça, pas moyen de faire la suite du programme pour que ça marche. J'ai écris :

#include
bool bissextile(); //fonction qui renvera la valeur bissextile si l'annee testée l'est
int annee;
int bis;
void main(void)
{
int nb ;
int dddd ; //annee de depart
int aaaa ; //annee d'arrivee
nb=0; //nb d'annees bisextiles au début : 0
cout<<"Entrez l'annee de depart : "<<endl;
cin>>dddd ;
cout<<"Entrez a present l'annee d'arrivee : "<<endl;
cin>>aaaa;
annee=dddd ;
while (annee<=aaaa)
{
if (bis)
{
cout<<annee<<endl;
annee=annee+1;
nb=nb+1;
}
else
{
annee=annee+1;
}
}
}
bool bissextile(int annee)
{
bool bissextile;
bissextile=( annee%400==0 || (annee%4==0 && (annee%100)!=0));
return bis;
}

j'ai également essayé des tonnes d'autres possibilités, sans succès. Soit le programme m'affiche toutes les années comprises entre dddd et aaaa et j'ai un total de aaaa-dddd années bissextiles, soit il n'affiche strictement rien, et 0 années bissextiles.
Donc si quelqu'un pouvait me donner de l'aide d'une façon la plus simple possible ( jsuis un newbie, oué ), ou même me filer un code source avec des commentaires en conséquences, ça serait vraiment sympa.

Merci d'avance à vous tous. Si vous pouviez répondre par mail, ça serait encore 100 fois mieux :)

ps : jsais que le programme ci-dessus est complètement faux; c'est juste pour vous donner une idée de ce qu'on sait faire au bout de 2 semaines de c++ :)

Le_Messie@numericable.fr

6 réponses

cs_PiX3L Messages postés 102 Date d'inscription dimanche 27 juillet 2003 Statut Membre Dernière intervention 13 août 2005 1
23 sept. 2003 à 20:48
Salut, bon j'avais rien à foutre alors je t'ai fait le programme qui marche :(avec deux fonctions comme tu le voulais)

#include 
using namespace std;

bool bissextileornot(int nombre);

int main()
{

int anneeDepart;
int anneeArrivee;
cout << "Entre l'ann\202e de d\202part :"; // le code octal 202 correspond à un "é"
cin >> anneeDepart;
cout << "\nEntre maintenant l'année d'arriv\202e :";
cin >> anneeArrivee;
for(int x=anneeDepart;x<=anneeArrivee;x++)
{
if(bissextileornot(x)) // Si bissextileornot renvoie true(c'est à dire que l'année est bissextile)
{
cout << "\nL'ann\202e "<<x<<" est une ann\202e bissextile";
}

}
int exit;
cout << "\nVoila c'\202tait pas si dur ! si ? :)";
cin >> exit;

return 0;

}

bool bissextileornot(int nombre)
{
if(nombre%400==0 || (nombre%4==0 && nombre%100!=0))
return true;

// sinon retourner false
return false;
}

1
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 sept. 2003 à 19:38
Salut, ton problème vient, je pense, du retour de ta fonction : tu renvoie bis, seulement tu ne définit pas sa valeur !
Pour ta fonction, essaye plutôt :

bool bissextile(int annee)
{
bool m_bBissextile;
m_bBissextile=( annee%400==0 || (annee%4==0 && (annee%100)!=0));
return m_bBissextile;
}

DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
0
Le Messie Messages postés 3 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 23 septembre 2003
23 sept. 2003 à 20:16
'lut

Ok, merci déjà, ça fait un souci de moins :)
maintenant, la valeur m_bBissextile est donc renvoyé vers la procédure ppale
mais pour cela, il faut également la déclarer dans cette procédure ( car utilisée dans le if(m_bBissextile) )
c'est ce que j'ai fait en entrant :
bool m_bBissextile;
le problème à présent c'est que le compilateur me demande d'initialiser la valeur de m_bBissextile dans la procédure ppale. Or je ne vois pas comment l'initialiser : étant une booléenne, ça serait soit true soit false ...
ça ne peut pas être initialisé à "true" puisque la date de départ n'est pas nécessairement une année bissextile
et si j'initialiséà "false", le programme ne fonctionne pas et renvoie 0 années bissextiles ...

en fait je pense qu'il y a une embrouille avec le if(m_bBissextile), ou bien quelque part dans la boucle while ...
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 sept. 2003 à 20:30
Apparement, tu n'a pas trop compris comment fonctionnais les fonctions :

Une fonction te permet d'éxécuter des instructions qui sont dépendantes de ton programme principal mais beaucoup moins que si elle était écrite en "dur" dans le prog.

Donc, en gros, tu demande à ta fonction si les années envoyées à la fonction sont ou pas bissextiles. Celle-ci renvoie alors la réponse positive ou non de la bissextilité... (je sais pas si on dit comme cà).

Donc, pour ton programme : tu appelle ta fonction comme cà :

if (bissextile (aaaa) == true)
{
/*...*/
}

Donc pas besoin de variable bis !

DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
0

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

Posez votre question
cs_PiX3L Messages postés 102 Date d'inscription dimanche 27 juillet 2003 Statut Membre Dernière intervention 13 août 2005 1
23 sept. 2003 à 20:50
P.S : quand même c'est pas si dur, moi j'ai 14 ans j'arrive le faire alors en IUT je sais pas quoi :)....ça devrait aller.
sinon ton prof doit bien t'avoir expliquer comment faire non ?
0
Le Messie Messages postés 3 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 23 septembre 2003
23 sept. 2003 à 21:03
en fait le truc c'est que le prof veut qu'on apprenne par nous même ...
il nous a absolument pas expliqué le fonctionnement des fonctions, justement. il nous explique des trucs au hasard sans entrer dans le détail tu vois. Et on a pas forcément le temps de passer des heures chez nous à comprendre, sachant qu'il y a des matières bien plus dures à travailler, style architecture des ordinateurs, analyse, ou même les maths ...

voilà

merci encore et bonne soirée :)
0
Rejoignez-nous