CALENDRIER PERPÉTUEL

cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014 - 30 nov. 2005 à 16:37
blassiou083 Messages postés 8 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 3 mars 2009 - 2 déc. 2005 à 17:02
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/34843-calendrier-perpetuel

blassiou083 Messages postés 8 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 3 mars 2009
2 déc. 2005 à 17:02
Je tiens aussi à préciser que je me suis mis au c++ qu'en septembre où je suis entré en BTS info (donc je ne connais pas tout, pour ne pas dire rien pour le moment) et qu'avant, le seul langage que j'avais pratiqué était le TI basic(donc rien à voir, ou presque). Je suis donc pour qu'on critique, me dise ce qui serait mieux, etc.
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 déc. 2005 à 14:40
J'ai entré une date qui n'existait pas et mon aoridnateur a explosé, mais bon tu nous avait prévenu que ton prog n'était pas sécurisé.
Pour les string c'est bien sur plus mauvais (allocation des chaines dans le tas, plus d'autre champs comme size qui ne serviront jamais)
le_duche Messages postés 159 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 26 février 2009
2 déc. 2005 à 11:03
C'est vrai que c'est du chipotage... mais bon... je suis un mathématicien moi, il faut m'excuser ! :p
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 déc. 2005 à 20:22
string n'a pas que la longueur, ces 4 octets ne sont rien en rapport de l'alloc mémoire nécessaire, ça oui que ça amuse bien le processeur. On ajoutera donc donc le pointeur ET une fragmentation de l'espace mémoire du processus, même si ici est faible. Le tableau de char ne nécessite par contre rien du tout, quelques octets dans registre data et adresse est connue à la compilation.
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
1 déc. 2005 à 18:49
Ne serait ce que pour stocker la taille de la chaine dans la classe, ca fait 4 octets de plus.
Mais bon, on chippote, les ordis d'aujourd'hui sont largement capables de s'occuper de quelques malheureux octets dans ce cas particulier.
Il ne faut par contre pas confondre 'mieux' et 'plus simple'.
la class std::string permet de gérer des chaines de caracteres facilement, encore faut il avoir besoin de les traiter. Ici on a juste besoin de stocker leur contenu, donc pas besoin de passer par elles, autant passer par le type presque de base qu'est la chaine de caracteres, même si elle est terminée par un caractère nul en plus ...
DormeurDev Messages postés 61 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 20 avril 2006 1
1 déc. 2005 à 17:50
Si y'a que ca qui te dérange il n'y a qu'à remplacer son code par

char * Tmois[12];
char * LibJour[7];
Tmois[0] = "janvier";
Tmois[1] = "fevrier";
etc...

Mais il me semble à vu de nez que string doit prendre de la place pour autre chose que la chaîne de caractère.
le_duche Messages postés 159 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 26 février 2009
1 déc. 2005 à 13:47
Ben il me semble que chaque string déclare un char de plus que nécessaire, c'est-à-dire 19 de trop en tout, et ici, on en déclare 66 en trop puisque tous les mots ne font pas 10 lettres et 9 lettres chacun...
DormeurDev Messages postés 61 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 20 avril 2006 1
1 déc. 2005 à 13:41
"C'est plus lisible, et ca exploite moins de RAM"

> char Tmois[12][10]{"Janvier", "fevrier", "mars", "avril", "mai",
"juin", "juillet", "aout", "septembre", "octobre", "novembre", "decembre"};
> char LibJour[7][9]{"samedi", "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi"};

Moins que 12*10+7*9 octets ? T'es sur ?
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 déc. 2005 à 13:32
Comme toutes mes sources et tant d'autres, sur win32 et bientot win64.
le_duche Messages postés 159 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 26 février 2009
1 déc. 2005 à 13:30
C'est quoi un prog Win ? (chuis pas très avancé en prog...)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 déc. 2005 à 13:24
Dans un prog Win par exemple c'est le contraire, rien que le code nécessaire à la gestion de 'string' apporte quasi 8 Ko inutiles.
le_duche Messages postés 159 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 26 février 2009
1 déc. 2005 à 13:16
C'est plus lisible, et ca exploite moins de RAM (meme si dans ce cas ci on s'en fout..., autant prendre les bonnes habitudes!)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 nov. 2005 à 18:28
string Tmois[12] = {...};
en quoi c'est mieux ???
le_duche Messages postés 159 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 26 février 2009
30 nov. 2005 à 18:00
Je vais etre assez critique, mais bon...

1)
Déjà j'aurais mis
string Tmois[12] = {...};
string LigJour[7] = {...};

2)
Puis ton comptage des années bissextiles est un peu pourri. Ceci serait beaucoup mieux:

par du premier janvier 1601 pour compter le nombre de jours.
puis tu as:
NbrBiss = (Annee-1601)/4-(Annee-1601)/100+(Annee-1601)/400/*-(Annee-1601)/3000*/;
ce qui te donne le nombre d'années bissextiles précédant l'année en cours.
et donc le nombre de jours précédant le 1er janvier de l'annee en cours (depuis 1601) est (Annee-1601)*365+NbrBiss
auquel tu ajoute le nombre de jours passés depuis le début de l'année.
Et la dessus (imaginons que la variable soit "Total") tu fais un beau modulo:
Jour = Total%7;

Immagine un peu que tu doives inclure cette fonction à un programme qui doit calculer des jours pour 100000 dates futuriste (autour de l'an 50000)
et bien tu vas passer à peu près 5000000000 fois dans ta boucle, et ca risque de prendre du temps...

3) tu as remarqué que j'ai rajouté un "3000" dans le calcul des bissextiles, c'est pas très important, mais j'ai vu ca au cour d'astro... ca ne fait qu'améliorer la précision...
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
30 nov. 2005 à 16:37
Hum ça peut servir :)
Rejoignez-nous