OVH Cloud OVH Cloud

Petite question...constantes en C

4 réponses
Avatar
Antoine F
Bonjour !
Je débute en C, et j'ai une petite question...
Je cherche à faire un programme qui définirait le nombre de jours qu'il y a
dans un mois d'une date saisie par l'utilisateur au format jour/mois/année
(jj/mm/aaaa)
J'aurai préalablement mis le nombre de jours dans des constantes (pour
février j'ai une séquence qui calcule si l'année est bisextile ou non et qui
en déduit le nombre de jours).
J'aimerai bien que lorsque l'utilisateur saisisse "02/03/2004", le programme
aille chercher la valeur de la constante "mars == 31".
Comment dois-je m'y prendre ?
Merci beaucoup,

Antoine

4 réponses

Avatar
Christian ASTOR
Antoine F wrote:

Je débute en C, et j'ai une petite question...
Je cherche à faire un programme qui définirait le nombre de jours qu'il y a
dans un mois d'une date saisie par l'utilisateur au format jour/mois/année
(jj/mm/aaaa)
J'aurai préalablement mis le nombre de jours dans des constantes (pour
février j'ai une séquence qui calcule si l'année est bisextile ou non et qui
en déduit le nombre de jours).
J'aimerai bien que lorsque l'utilisateur saisisse "02/03/2004", le programme
aille chercher la valeur de la constante "mars == 31".
Comment dois-je m'y prendre ?



Tu n'as pas besoin de définir de constantes.
Un truc comme ça =>

int GetLastDay(char* sDate)
{
int nDay;
int nMonth;
int nYear;
char sMonth[3]= "", sYear[5] = "";

memcpy(sMonth, &sDate[3], 2);
nMonth = atoi(sMonth);

memcpy(sYear, &sDate[6], 4);
nYear = atoi(sYear);

if (nMonth == 2)
{
nDay = 28;
if ((nYear % 4 == 0) && ((nYear % 100 != 0) || (nYear % 400 == 0)))
nDay++;
}
else
nDay = ((nMonth <= 7)?(30 + (nMonth % 2)):(31 - (nMonth % 2)));
return (nDay);
}
Avatar
Antoine F
Bonjour !
Merci d'avoir pris de votre temps pour me répondre !

Il y a deux - trois choses que je ne comprends pas dans le code que vous
m'avez fourni.
Tout d'abord, dans "int GetLastDay(char* sDate)" : A quoi correspond ceci ?
Ensuite, pour les "char sMonth[3] = """ et la même chose pour sYear. le
[3] fait il partie du nom de la variable, ou est-ce un paramètre que l'on
applique à la variable (lequel à ce moment là ?) ?
Enfin, dans ceci :
nDay = ((nMonth <= 7)?(30 + (nMonth % 2)):(31 - (nMonth % 2)))
Que signifie "?" ? Est-ce un opérateur ?...à vrai dire je ne comprends pas
du tout cette ligne, pouvez vous m'en faire un petit commentaire "pas à pas"
?
Merci beaucoup !

Antoine

"Christian ASTOR" a écrit dans le message de
news: 432b7e13$0$304$
Antoine F wrote:

Je débute en C, et j'ai une petite question...
Je cherche à faire un programme qui définirait le nombre de jours qu'il y
a dans un mois d'une date saisie par l'utilisateur au format
jour/mois/année (jj/mm/aaaa)
J'aurai préalablement mis le nombre de jours dans des constantes (pour
février j'ai une séquence qui calcule si l'année est bisextile ou non et
qui en déduit le nombre de jours).
J'aimerai bien que lorsque l'utilisateur saisisse "02/03/2004", le
programme aille chercher la valeur de la constante "mars == 31".
Comment dois-je m'y prendre ?



Tu n'as pas besoin de définir de constantes.
Un truc comme ça =>

int GetLastDay(char* sDate)
{
int nDay;
int nMonth;
int nYear;
char sMonth[3]= "", sYear[5] = "";

memcpy(sMonth, &sDate[3], 2);
nMonth = atoi(sMonth);

memcpy(sYear, &sDate[6], 4);
nYear = atoi(sYear);

if (nMonth == 2)
{
nDay = 28;
if ((nYear % 4 == 0) && ((nYear % 100 != 0) || (nYear % 400 == 0)))
nDay++;
}
else
nDay = ((nMonth <= 7)?(30 + (nMonth % 2)):(31 - (nMonth % 2)));
return (nDay);
}


Avatar
Arnaud Debaene
Antoine F wrote:
Bonjour !
Merci d'avoir pris de votre temps pour me répondre !

Il y a deux - trois choses que je ne comprends pas dans le code que
vous m'avez fourni.
Tout d'abord, dans "int GetLastDay(char* sDate)" : A quoi correspond
ceci ?


A la déclaration d'une fonction appelée GetLastDay qui prend une chaine de
caractères C ("char*") en paramètre et retourne un int.

Ensuite, pour les "char sMonth[3] = """ et la même chose
pour sYear. le [3] fait il partie du nom de la variable, ou est-ce un
paramètre que l'on applique à la variable (lequel à ce moment là ?) ?



Oula! Si tu ne sais pas ce que c'est qu'une fonction et une chaine de
caractères "C", je suppose que tu débutes en programmation et que ta
question correspond à un exercice demandé par ton prof. Dans ce cas :

- Dis nous ce que vous avez déjà vu en cours et le titre du chapitre
courant, ca nous aidera à mieux situer la réponse à te donner.
- Dis-toi bien que personne ici ne fera tes exos pour toi, par contre on
peut t'aider et te conseiller.
- Enfin, si tu es vraiement débutant et que tu as le choix, je te
conseillerais de commencer par le C++, et non pas par le C. Dans un 1er
temps, ca t'évitera de te coltiner les aspects les plus pénibles du C, comme
la gestion des chaînes de caractères.


Enfin, dans ceci :
nDay = ((nMonth <= 7)?(30 + (nMonth % 2)):(31 - (nMonth % 2)))
Que signifie "?" ? Est-ce un opérateur ?...à vrai dire je ne
comprends pas du tout cette ligne, pouvez vous m'en faire un petit
commentaire "pas à pas" ?



(valeur) = (condition) ? (expression si vrai) : (expression si faux)

(valeur vaut (expression si vrai) si la (condition) est vraie et (condition
si faux) sinon. C'est l'équivalent de
if (condition)
valeur=(expresssion si vrai);
else
valeur=(expression si faux);

Arnaud
MVP - VC
Avatar
Antoine F
Bonsoir !
Alors, ca fait pas mal de temps que j'aurai du répondre, mais j'ai eu une
semaine assez chargée...
Durant cette semaine j'ai terminé mon programme, je l'ai recommencé du
début, et tout seul, les méthodes trouvées sur les forums et autres
tutoriels sur le net ne donnaient pas grand chose...eh oui, en règle
générale, un vulgaire copier coller de plusieurs sources ne fonctionne pas
trop, ifo les adapter....et à partir du moment où on n'en comprend pas la
moité...d'autant plus que j'ai appris en faisant tout seul, je n'ai peut
être pas utilisé la méthode la plus fiable / rapide / ou je ne sais quoi,
mais ca fonctionne !;)
Tout ca pour dire que je ne recherche en aucun cas quelqu'un pour me faire
mes exercices, mais plutôt pour être un petit peu plus...précis que le prof
concernant certains points, les cours que nous fait le prof est assez axé
sur l'algoritme, déterminer ce que fera le programme, et en décomposer les
actions dans un langage plus courant...le français par exemple (si machin
égal à truc, alors faire ca), en gros, du codage, mais...sans code...
Aussi, je suis vraiment débutant en C, et je n'ai pas le choix entre C et
C++...donc je suis au C... J'ai fait un peu de visual basic pendant...deux
ans, par intermittences (en cumulant le tout je dois arriver à 3 mois...oui
c'est beaucoup moins...mais c'est toujours ca ;)), mais c'est pas mal
différent du C...donc je pars de 0 !
Voilà voilà !

Bonne soirée !

Antoine
"Arnaud Debaene" a écrit dans le message de
news: 432de134$0$26364$
Antoine F wrote:
Bonjour !
Merci d'avoir pris de votre temps pour me répondre !

Il y a deux - trois choses que je ne comprends pas dans le code que
vous m'avez fourni.
Tout d'abord, dans "int GetLastDay(char* sDate)" : A quoi correspond
ceci ?


A la déclaration d'une fonction appelée GetLastDay qui prend une chaine de
caractères C ("char*") en paramètre et retourne un int.

Ensuite, pour les "char sMonth[3] = """ et la même chose
pour sYear. le [3] fait il partie du nom de la variable, ou est-ce un
paramètre que l'on applique à la variable (lequel à ce moment là ?) ?



Oula! Si tu ne sais pas ce que c'est qu'une fonction et une chaine de
caractères "C", je suppose que tu débutes en programmation et que ta
question correspond à un exercice demandé par ton prof. Dans ce cas :

- Dis nous ce que vous avez déjà vu en cours et le titre du chapitre
courant, ca nous aidera à mieux situer la réponse à te donner.
- Dis-toi bien que personne ici ne fera tes exos pour toi, par contre on
peut t'aider et te conseiller.
- Enfin, si tu es vraiement débutant et que tu as le choix, je te
conseillerais de commencer par le C++, et non pas par le C. Dans un 1er
temps, ca t'évitera de te coltiner les aspects les plus pénibles du C,
comme la gestion des chaînes de caractères.


Enfin, dans ceci :
nDay = ((nMonth <= 7)?(30 + (nMonth % 2)):(31 - (nMonth % 2)))
Que signifie "?" ? Est-ce un opérateur ?...à vrai dire je ne
comprends pas du tout cette ligne, pouvez vous m'en faire un petit
commentaire "pas à pas" ?



(valeur) = (condition) ? (expression si vrai) : (expression si faux)

(valeur vaut (expression si vrai) si la (condition) est vraie et
(condition si faux) sinon. C'est l'équivalent de
if (condition)
valeur=(expresssion si vrai);
else
valeur=(expression si faux);

Arnaud
MVP - VC