La Bombe !
Re: La Bombe !
2953??
Re: La Bombe !
Yihaa, et une page entière de C !
jeuDeLaBombe(*pointeurNumber, 1)
jeuDeLaBombe(*pointeurNumber, 1)
-
PluMGMK

- Posts: 40517
- Joined: Fri Jul 31, 2009 9:00 pm
- Location: https://www.youtube.com/watch?v=cErgMJSgpv0
- Contact:
- Tings: 136651
Re: La Bombe !
Euh, arrêtons pendant un moment. La fonction ajoute 2902 et "antiDessy", oui ? Comment est-ce supposé marcher si "antiDessy" est remis à 0 chaque fois que la fonction est appelé ? Je suppose que j'ai mal compris, mon C/C++ n'est pas très avancé.
Sinon, 2955.
Sinon, 2955.
-
PluMGMK

- Posts: 40517
- Joined: Fri Jul 31, 2009 9:00 pm
- Location: https://www.youtube.com/watch?v=cErgMJSgpv0
- Contact:
- Tings: 136651
Re: La Bombe !
2957
Re: La Bombe !
Regardes bien, antiDessy n'est pas remis à 0, il est juste initialisé, c'est realNumber qui vaut 0. Cependant, il se peut qu'il y ait une p'tite erreur dans le code, je ne suis pas allé le compiler. Mais normalement ça devrait marcher.PluMGMK wrote:Euh, arrêtons pendant un moment. La fonction ajoute 2902 et "antiDessy", oui ? Comment est-ce supposé marcher si "antiDessy" est remis à 0 chaque fois que la fonction est appelé ? Je suppose que j'ai mal compris, mon C/C++ n'est pas très avancé.
jeuDeLaBombe(*pointeurNumber, 3);
-
PluMGMK

- Posts: 40517
- Joined: Fri Jul 31, 2009 9:00 pm
- Location: https://www.youtube.com/watch?v=cErgMJSgpv0
- Contact:
- Tings: 136651
Re: La Bombe !
Je l'ai compilé et je reçois le même résultat chaque fois que j'appele la fonction, mais c'est différent chaque fois que je ferme et réouvre la programme.
Ceci marcherait peut-être plus bien :
- main.c :
- main.h :
Ceci marcherait peut-être plus bien :
- main.c :
Code: Select all
#include "main.h"
int main()
{
const int number = 2958;
int *pointeurNumber = &number;
}
void jeuDeLaBombe(int *pointeurNumber, int NombreDeMessagesSansNumber)
{
int realNumber = 0;
for(NombreDeMessagesSansNumber; NombreDeMessagesSansNumber == 1 /* Avec 0, la fonction comptait deux à deux */; NombreDeMessagesSansNumber--)
{
antiDessy++;
}
realNumber = *pointeurNumber + antiDessy;
antiDessy++;
printf("%d", realNumber);
}Code: Select all
#ifndef DEF_MAIN
#define DEF_MAIN
int antiDessy = 0;
void jeuDeLaBombe(int *pointeurNumber, int NombreDeMessagesSansNumber);
#endifCode: Select all
jeuDeLaBombe(pointeurNumber, 1)Re: La Bombe !
LOVY EST UN LOSER.
2960 !
2960 !
Re: La Bombe !
Merci pour l'amélioration du comptage 2 à 2, j'avais pas fais gaffe (pour tout à fait être honnête, je ne savais même pas que ça allait le faire), mais sinon ton programme a quelques petits défauts :PluMGMK wrote:Ceci marcherait peut-être mieux :
- main.c :- main.h :Code: Select all
#include "main.h" int main() { const int number = 2958; int *pointeurNumber = &number; } void jeuDeLaBombe(int *pointeurNumber, int NombreDeMessagesSansNumber) { int realNumber = 0; for(NombreDeMessagesSansNumber; NombreDeMessagesSansNumber == 1 /* Avec 0, la fonction comptait deux à deux */; NombreDeMessagesSansNumber--) { antiDessy++; } realNumber = *pointeurNumber + antiDessy; antiDessy++; printf("%d", realNumber); }Code: Select all
#ifndef DEF_MAIN #define DEF_MAIN int antiDessy = 0; void jeuDeLaBombe(int *pointeurNumber, int NombreDeMessagesSansNumber); #endif
- les variables dans les headers : c'est sale. Ça marche mais c'est sale : quand on met du code dans les headers, en général c'est uniquement les prototypes, les constantes, les defines et les structures. Si tu met une variable dans un header, ça devient une variable globale, une saloperie qu'il faut éviter à tout prix. Les pointeurs sont fait pour ça.
- antiDessy n'est plus initialisé dans la fonction. Si je l'avais fait, c'était le but de ce programme, pour que DesLife ne la réinitialise pas à zéro à chaque post. En plus tu le fais par toi même en l'initialisant à zéro à chaque exécution du programme ^^. Mais bon apparement il ne l'a pas vu, donc chut
Une petite explication s'impose :PluMGMK wrote:Je l'ai compilé et je reçois le même résultat chaque fois que j'appele la fonction, mais c'est différent chaque fois que je ferme et réouvre la programme.
Je suppose que tu le sais déjà, mais un rappel ne fait pas de mal : chaque variable est une valeur stockée dans la RAM à une adresse qui lui est propre. Un shéma :
Et ça stocke comme ça :
- Imaginons que tu ouvres le programme du jeu de la bombe (je vais prendre ma version, tu vas voir pourquoi je ne prends pas la tienne).
- On arrive à la fonction jeuDeLaBombe. On initialise antiDessy à l'adresse n°1 (on va dire que tu n'a fait aucun programme avant donc l'ordinateur te donne l'accès à la première adresse), et la valeur par défaut est 0. Bon, le programme s'est déroulé normalement, ça a compté comme il faut, et maintenant antiDessy vaut 1 (pour 1 appel de fonction).
- Tu fais autre chose (disons que tu joue à Medal of Duty:Modern Dawn of War
- Tu reviens à mon programme, tu le lance, et arrivé à la fonction jeuDeLaBombe, on reinitialise la variable antiDessy. Seulement voilà, on ne vas pas te redonner l'ancienne variable, on va t'en donner soit une nouvelle (dans ce cas sa valeur sera 0), soit on réutilise une fonction usagée de Medal of Duty qui aura une valeur quelconque (puisque je n'ai pas initialisé antiDessy), donc ton programme sera faussé.
Donc que ce soit ton programme (antiDessy est initialisé à zéro à chaque lancement, et il est placé à un point où de toutes façons, DesLife pourrait quand même le modifier), ou le mien (il utilise une variable non initialisée qui prend la valeur de ce qui passe), il y a un défaut, et réaliser un programme qui compterait et empêcherait Des de réinitialiser n'existe pas (évidemment sinon ça serait le modèle même d'ordinateur parfait, il n'y aurait plus aucun virus).
Mais, en fait mon programme peut réussir cette tâche, si on le met sur un ordinateur qui utiliserait ce programme et aucun autre (ce qui est un peu con, puisqu'il n'y aurait même pas de système d'exploitation). Pourquoi ? Parce que vu qu'aucun programme ne tourne à part celui ci, on nous donnerait toujours la même adresse, donc on se trouverait bien avec une variable qui se modifierait à chaque tour du programme. Cependant, tu as quand même réglé le problème du compteur qui faisait son boulot 2 par 2.
CQFD
Et je viens de remarquer qu'on avait presque tout le temps oublié le ';' à la fin de nos instructions
Donc voici le code final du programme, qui marcherait sur un serveur FTP dédié (ou plutôt machine virtuelle, les serveurs ont un système d'exploitation) :
main.c :
Code: Select all
#include "main.h"
int main()
{
const int number = 2902;
int *pointeurNumber = &number;
}
void jeuDeLaBombe(int *pointeurNumber, int NombreDeMessagesSansNumber)
{
int antiDessy, realNumber = 0;
for(NombreDeMessagesSansNumber; NombreDeMessagesSansNumber == 1; NombreDeMessagesSansNumber--)
{
antiDessy++;
}
realNumber = number + antiDessy;
antiDessy++;
printf("%d", realNumber);
}Code: Select all
#ifndef DEF_MAIN
#define DEF_MAIN
int antiDessy = 0;
void jeuDeLaBombe(int *pointeurNumber, int NombreDeMessagesSansNumber);
#endifMerci pour les tingsDesLife wrote:LOVY EST UN LOSER.
Re: La Bombe !
2962 or something.
Re: La Bombe !
2963 ou quelque chose.
Re: La Bombe !
2964, what? English please.
Re: La Bombe !
2965, quoi ? En français s'il te plaît.
Re: La Bombe !
2966, whatever!
Re: La Bombe !
2967, quoi qu'il en soit !
Re: La Bombe !
2970, damn it.
Re: La Bombe !
2971, bordel de merde.
Re: La Bombe !
You better stop copying me or I'll take a billion tings from you! 2972! 



