La Bombe !

Pour tout ce qui ne touche ni à Rayman, ni à la communauté.
Tenderz
Mechanical Dragon
Posts: 2170
Joined: Sat Jul 03, 2010 4:35 pm
Location: Unknown
Contact:
Tings: 26977

Re: La Bombe !

Post by Tenderz »

2953??
LoveMetal
André
Posts: 15108
Joined: Fri Oct 09, 2009 6:11 pm
Tings: 225055

Re: La Bombe !

Post by LoveMetal »

Yihaa, et une page entière de C !
jeuDeLaBombe(*pointeurNumber, 1)
PluMGMK
Annetta Fish
Posts: 40517
Joined: Fri Jul 31, 2009 9:00 pm
Location: https://www.youtube.com/watch?v=cErgMJSgpv0
Contact:
Tings: 136651

Re: La Bombe !

Post by PluMGMK »

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.
DesLife
Foutch
Posts: 19946
Joined: Sat Jun 12, 2004 12:42 pm
Tings: 186263

Re: La Bombe !

Post by DesLife »

2956 ! :D
PluMGMK
Annetta Fish
Posts: 40517
Joined: Fri Jul 31, 2009 9:00 pm
Location: https://www.youtube.com/watch?v=cErgMJSgpv0
Contact:
Tings: 136651

Re: La Bombe !

Post by PluMGMK »

2957
LoveMetal
André
Posts: 15108
Joined: Fri Oct 09, 2009 6:11 pm
Tings: 225055

Re: La Bombe !

Post by LoveMetal »

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é.
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.
jeuDeLaBombe(*pointeurNumber, 3);
PluMGMK
Annetta Fish
Posts: 40517
Joined: Fri Jul 31, 2009 9:00 pm
Location: https://www.youtube.com/watch?v=cErgMJSgpv0
Contact:
Tings: 136651

Re: La Bombe !

Post by PluMGMK »

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 :

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);
}
- main.h :

Code: Select all

#ifndef DEF_MAIN
#define DEF_MAIN

int antiDessy = 0;
void jeuDeLaBombe(int *pointeurNumber, int NombreDeMessagesSansNumber);

#endif

Code: Select all

jeuDeLaBombe(pointeurNumber, 1)
DesLife
Foutch
Posts: 19946
Joined: Sat Jun 12, 2004 12:42 pm
Tings: 186263

Re: La Bombe !

Post by DesLife »

LOVY EST UN LOSER.

2960 !
LoveMetal
André
Posts: 15108
Joined: Fri Oct 09, 2009 6:11 pm
Tings: 225055

Re: La Bombe !

Post by LoveMetal »

PluMGMK wrote:Ceci marcherait peut-être mieux :

- 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);
}
- main.h :

Code: Select all

#ifndef DEF_MAIN
#define DEF_MAIN

int antiDessy = 0;
void jeuDeLaBombe(int *pointeurNumber, int NombreDeMessagesSansNumber);

#endif
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 :
- 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 :mrgreen:
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.
Une petite explication s'impose :

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 :

Image

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 8), donc ce programme utilise obligatoirement des variables, qu'il stocke à des adresses (logique).
- 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 :mrgreen:

Et je viens de remarquer qu'on avait presque tout le temps oublié le ';' à la fin de nos instructions :mrgreen: .

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);
    }
main.h :

Code: Select all

    #ifndef DEF_MAIN
    #define DEF_MAIN

    int antiDessy = 0;
    void jeuDeLaBombe(int *pointeurNumber, int NombreDeMessagesSansNumber);

    #endif
jeuDeLaBombe(*pointeurNumber, 1);
DesLife wrote:LOVY EST UN LOSER.
Merci pour les tings :mrgreen:
Matyuv
Gangsta Globox
Posts: 21362
Joined: Thu Apr 29, 2004 10:22 am
Tings: 54431

Re: La Bombe !

Post by Matyuv »

2962 or something.
DesLife
Foutch
Posts: 19946
Joined: Sat Jun 12, 2004 12:42 pm
Tings: 186263

Re: La Bombe !

Post by DesLife »

2963 ou quelque chose.
Matyuv
Gangsta Globox
Posts: 21362
Joined: Thu Apr 29, 2004 10:22 am
Tings: 54431

Re: La Bombe !

Post by Matyuv »

2964, what? English please.
DesLife
Foutch
Posts: 19946
Joined: Sat Jun 12, 2004 12:42 pm
Tings: 186263

Re: La Bombe !

Post by DesLife »

2965, quoi ? En français s'il te plaît.
Matyuv
Gangsta Globox
Posts: 21362
Joined: Thu Apr 29, 2004 10:22 am
Tings: 54431

Re: La Bombe !

Post by Matyuv »

2966, whatever!
DesLife
Foutch
Posts: 19946
Joined: Sat Jun 12, 2004 12:42 pm
Tings: 186263

Re: La Bombe !

Post by DesLife »

2967, quoi qu'il en soit !
Matyuv
Gangsta Globox
Posts: 21362
Joined: Thu Apr 29, 2004 10:22 am
Tings: 54431

Re: La Bombe !

Post by Matyuv »

2968 :mefiant:
DesLife
Foutch
Posts: 19946
Joined: Sat Jun 12, 2004 12:42 pm
Tings: 186263

Re: La Bombe !

Post by DesLife »

2969 :mefiant:
Matyuv
Gangsta Globox
Posts: 21362
Joined: Thu Apr 29, 2004 10:22 am
Tings: 54431

Re: La Bombe !

Post by Matyuv »

2970, damn it.
DesLife
Foutch
Posts: 19946
Joined: Sat Jun 12, 2004 12:42 pm
Tings: 186263

Re: La Bombe !

Post by DesLife »

2971, bordel de merde.
Matyuv
Gangsta Globox
Posts: 21362
Joined: Thu Apr 29, 2004 10:22 am
Tings: 54431

Re: La Bombe !

Post by Matyuv »

You better stop copying me or I'll take a billion tings from you! 2972! :pascontent:
Post Reply