Calendrier

Fermé
Signaler
-
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
-
Bonjour,
Je dois réaliser un programme qui demande une année a un utilisateur et lui affiche un calendrier annuel,il peut egalement entrer un mois et une annee et le programme lui affiche le calendrier du mois.Avant j'avais deja réalisé un programme qui demande une date a l'utilisateur et lui affiche le jour correspondant!Mais là,je bloque completement!!
Pourriez-vous m'aidez?

8 réponses


J'ai rien compris ?
Par exemple,l'ultilisateur entre 2010,le programme doit lui afficher le calendrier de l'année 2010,c'est à dire a partir du mois de janvier jusqu'au mois de decembre.
S'il entre 2010-Avril,le programme lui affiche seulement le calendrier du mois d'Avril(du 1er au 30 avril).
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 797
Bonjour,

Sur quoi tu butes exactement ?
Sur l'algo ? ou sur le code lui-même ?

Cdlt,
sur le code,lui meme
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 797
Ok, alors peux-tu nous montrer l'algorithme que tu as choisi de faire pour qu'on puisse t'aider à le convertir en C ?
Non!!Au fait j'arrive pas à avoir un bon algo,du coup je bloque sur le code.
J'avais commencé un truc,mais apres je bloque,le voici:

#include <stdio.h>
#include <stdlib.h>
#define mois 12



int main()
{
int x,a,m[mois],i,j,m1,a1,ns,as,jr[7],r,f;

printf(" Veuillez entrez la lettre correspondant a votre choix:\n");
printf(" \n");
printf(" A: Calendrier Annuel\n");
printf(" M: Calendrier Mensuel\n");
scanf("%d",&x);
switch (x)
{
case 'A':
{
printf("Veuillez sasir l'annee:\n");
scanf("%d",&a);

for (i=1;i<=12;i++)
{
for (j=1;j<=31;j++)
{
ns=a/100;
as=a%100;
if (i>=3)
{
m1=i-2;
}
else
{
m1=i+10;
}
if (i>=3)
{
a1=a;
}
else
{
a1=a-1;
}
f=j+as+((as/4)-2*ns)+(ns/4)+((26*m1-2)/10);
if (f<0)
{
f=f+7;


}
r=f%7;
switch (r)
{
case 0:

jr[1]="Dim";
break;
case 1:
jr[2]="Lun";
break;
case 2:
jr[3]="Mar";
break;
case 3:

jr[4]="Mer";
break;
case 4:
jr[5]="Jeu";
break;
case 5:
jr[6]="Ven";
break;
case 6:
jr[7]="Sam";
break;



}

}






}
m[1]="JANVIER";
m[2]="FEVRIER";
m[3]="MARS";
m[4]="AVRIL";
m[5]="MAI";
m[6]="JUIN";
m[7]="JUILLET";
m[8]="AOUT";
m[9]="SEPTEMBRE";
m[10]="OCTOBRE";
m[11]="NOVEMBRE";
m[12]="DECEMBRE";









return 0;
}
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 797
Bonjour,

Alors donc, c'est tout d'abord un problème d'algorithme. Et vu ton code, il y a aussi un problème dans le code.
Déjà, ton code est illisible. Je vais donc te faire des remarques, prends-les en compte, corrige-le et reposte-le en utilisant la balise "code c" situé à droite du bouton souligné (dans l'ascenseur, choisis "C").

scanf("%d",&x);
Ok. Mais ensuite, tu compares avec 'A'. Je pense plutôt que ce que tu souhaites faire est : scanf("%c",&x); dans ce cas, il faut définir char x.
De plus, il faut mettre un getchar() après le scanf("%c",...).
Ce qui donne : char x; scanf("%c", &x); getchar(); /*suite*/
switch (x)
{
case 'A':

Utilise plutôt une fonction. Si l'utilisateur choisit 'A', alors on appelle la fonction "Annuelle"... Etc.

jr[1]="Dim";
3 erreurs :
1/ Un tableau commence à l'indice 0. Donc, il faut revoir le compteur i de ta boucle for.
2/ Affectation incorrecte. Il faut passer par strcpy (ou mieux strncpy) : strcpy(jr[0], "Dim");
3/ Ton tableau ne contient qu'une seule dimension. Il en faut 2. Donc plutôt : char jr[7][3+1];

Même remarque pour l'autre tableau "m".

Cdlt,
D'accord.
j'ai corrigé la saisie de x.
A quoi sert le getchar()?
j'ai pas encore fait les fonctions en C,y'a pas un autre moyen de faire le programme sans les fonctions?
"2/ Affectation incorrecte. Il faut passer par strcpy (ou mieux strncpy) : strcpy(jr[0], "Dim");
3/ Ton tableau ne contient qu'une seule dimension. Il en faut 2. Donc plutôt : char jr[7][3+1];",j'ai pas trop compris....



#include <stdio.h>
#include <stdlib.h>
#define mois 12



int main()
{
int a,m[mois],i,j,m1,a1,ns,as,jr[7],r,f;
char x;



printf(" Veuillez entrez la lettre correspondant a votre choix:\n");
printf(" \n");
printf(" A: Calendrier Annuel\n");
printf(" M: Calendrier Mensuel\n");
scanf("%c",&x);
getchar();
switch (x)
{
case 'A':
{
printf("Veuillez sasir l'annee:\n");
scanf("%d",&a);

for (i=1;i<=12;i++)
{
for (j=1;j<=31;j++)
{ ns=a/100;
as=a%100;
if (i>=3)
{
m1=i-2;
}
else
{
m1=i+10;
}
if (i>=3)
{
a1=a;
}
else
{
a1=a-1;
}
f=j+as+((as/4)-2*ns)+(ns/4)+((26*m1-2)/10);
if (f<0)
{
f=f+7;


}
r=f%7;
switch (r)
{
case 0:

jr[1]="Dim";
break;
case 1:
jr[2]="Lun";
break;
case 2:
jr[3]="Mar";
break;
case 3:

jr[4]="Mer";
break;
case 4:
jr[5]="Jeu";
break;
case 5:
jr[6]="Ven";
break;
case 6:
jr[7]="Sam";
break;



}

}
m[1]="JANVIER";
m[2]="FEVRIER";
m[3]="MARS";
m[4]="AVRIL";
m[5]="MAI";
m[6]="JUIN";
m[7]="JUILLET";
m[8]="AOUT";
m[9]="SEPTEMBRE";
m[10]="OCTOBRE";
m[11]="NOVEMBRE";
m[12]="DECEMBRE";









return 0;
}
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 797
Si, tu peux faire sans fonction, c'est juste que ça rend la lecture du code plus difficile. D'autant que tu n'as pas bien écrit ton code entre les balises.
Il faut que tu mettes ton code entre : <"code c">ici ton code<"/code"> (sans les guillemets). Sinon, on n'avancera pas...

A quoi sert le getchar()?
A vider le '\n' (touche entrée) stocké dans le buffer clavier suite au scanf("%c",...);

strcpy(jr[0], "Dim");
Hélas, il n'y a rien à comprendre... Le 1er élément du tableau est jr[0] et le 7ème est jr[6]. Donc, il faut que i varie de 0 à 6 compris. Donc, tu dois revoir ta boucle for. De même pour l'autre tableau.
Ensuite, jr[0]="Dim"; ne fonctionnera pas. "Dim" n'est pas une valeur mais est une adresse vers une zone contenant les caractères 'D', 'i', 'm', '\0'. Il faut donc utiliser une fonction de copie des éléments : strcpy(). Je t'invite à lire https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c pour revoir les bases.
De plus, tu as fait char jr[7], cela veut dire que tu fais un tableau de 7 caractères. Or, toi tu veux stocker un tableau de 7 chaînes de caractères. Il faut donc une double dimension : char jr[7][3+1];

Même remarque pour le tableau m.