Calendrier

Fermé
val123 - 1 juil. 2014 à 01:03
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 1 juil. 2014 à 23:25
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?
A voir également:

8 réponses

Profil bloqué
1 juil. 2014 à 01:43
J'ai rien compris ?
0
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).
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
1 juil. 2014 à 10:12
Bonjour,

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

Cdlt,
0
sur le code,lui meme
0

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

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
1 juil. 2014 à 10:59
Ok, alors peux-tu nous montrer l'algorithme que tu as choisi de faire pour qu'on puisse t'aider à le convertir en C ?
0
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;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
1 juil. 2014 à 21:35
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,
0
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;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 1/07/2014 à 23:25
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.
0