Menu

Explication d'un programme langage C++

shokoakyu 4 Messages postés jeudi 18 mai 2017Date d'inscription 19 mai 2017 Dernière intervention - 18 mai 2017 à 21:16 - Dernière réponse : [Dal] 4568 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 20 avril 2018 Dernière intervention
- 22 mai 2017 à 15:05
Bonjour, je dois expliquer précisément ce que fait ce programme et j'ai vraiment du mal, est ce qu'une âme charitable serait prête à m'aider ?
Je m'y prend tard alors c'est assez urgent, merci d'avance aux personnes qui me sauveront ^^

Voici le programme :
int main ()
{ 
    //Déclarations
    int Largeur=60 ; 
    int Hauteur=60 ; 
    char Car,QUIT; 
    int Dim =Largeur*Hauteur;
    char Blocmem[Dim]; 
    unsigned char Dessin[Largeur][Hauteur];
    char NomF[12];
    
    
    
     
  
    cout<<endl; 
    cout <<"Choisissez une image a afficher : ";
        cout<<endl; 
    cout <<"Pour afficher un arbre tapez 1";
        cout<<endl; 
    cout <<"Pour afficher un noeud papillon tapez 2";
        cout<<endl; 
    cout <<"Pour afficher un personnage tapez 3";
        cout<<endl; 
    cout <<"Numero souhaite : ";    
    cin >>NomF;
    cout<<endl; 
    

    
ifstream TonFichier (NomF, ios::in|ios::binary|ios::ate);
if (TonFichier.is_open())    
    {
         Dim = TonFichier.tellg();
         TonFichier.seekg (0, ios::beg);
         TonFichier.read (Blocmem, Dim);
         TonFichier.close();      
        
         cout << "Bravo, ca a marche !"<<endl;;
     }
     else cout<<"Quelque chose ne marche pas...";
    



for (int L=0;L<60 ;L++)
   for (int C=0;C<60 ;C++)
        {
         Dessin[C][L] = Blocmem[60*L+C]; 
        } 


    

           InitialiseFenetreGraphique(16);
       int i =0;    
          do
           {      
        
       for (int b=0;b<6;b++)          
        for(int a=0;a<6;a++)
               for(int L=b*10;L<10+10*b ;L++)
                       for(int C=a*10;C<10+10*a;C++)
                     {
                        MetPoint(C-10*a,L-10*b,Dessin[C][L]);
                        delay(1);    
                    
                      }
                
               
                   }
  
      
     
    while(!kbhit()); 
   
      FermeFenetreGraphique();  
     
    
    // Fin du programme
    
    QUIT = '\0';
    while (QUIT != 'q') 
    {
        cout << "Appuyez sur q pour partir" << endl;
        cin >> QUIT;
    }

    return 0;
}

EDIT : Message déplacé + ajout des balises de code

Afficher la suite 

9 réponses

Répondre au sujet
jordane45 20570 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 avril 2018 Dernière intervention - 18 mai 2017 à 21:20
0
Utile
1
Bonjour,

1 - Si ta question concerne le langage C .... il faut poster dans le forum "C" ! (je déplace ta question au bon endroit)

2 - Pour poster du code sur le forum.. merci d'utiliser la coloration syntaxique (les balises de code).
Explications disponibles ici : http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

(j'édite ton message pour les mettre... merci d'y penser la prochaine fois )

3 - merci de lire ceci : http://www.commentcamarche.net/faq/10925-demander-de-l-aide-pour-vos-exercices-sur-ccm
[Dal] 4568 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 20 avril 2018 Dernière intervention - 18 mai 2017 à 22:21
Salut Jordane,

Le code est en C++, je l'ai déplacé sur ce forum, et j'ai corrigé le sujet.
Commenter la réponse de jordane45
[Dal] 4568 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 20 avril 2018 Dernière intervention - 19 mai 2017 à 12:52
0
Utile
6
Salut shokoakyu,

Peux-tu préciser ce que tu ne comprends pas dans le code que tu as posté.

Dal
[Dal] 4568 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 20 avril 2018 Dernière intervention - 19 mai 2017 à 13:46
Oui, comme dirait un contributeur du forum, ce sont 4 boucles for imbriquées de l'enfer :-)

tu peux dérouler les boucles à la main pas à pas avec un papier et un crayon, en faisant les calculs, pour comprendre, ou faire en sorte que l'ordinateur fasse le travail répétitif pour toi (ce qui ne dispense pas de comprendre le résultat).

le programme C suivant permet d'étudier les 3 arguments qui sont passés à MetPoint :

#include <stdio.h>

int main(void) {
    for (int b=0;b<6;b++)
        for(int a=0;a<6;a++)
            for(int L=b*10;L<10+10*b ;L++)
                for(int C=a*10;C<10+10*a;C++)
                    printf("%d, %d, Dessin[%d][%d]\n",
                            C-10*a, L-10*b, C, L);

    return 0;
}

sauf erreur, entre autres, on voit que :

- les 4 boucles appellent 3600 fois la fonction MetPoint()
- le 1er argument varie de 0 à 9
- le 2ème argument varie de 0 à 9
- le 3ème argument prend le contenu du tableau Dessin, en avançant par blocs de 10x10
- à chaque fois qu'un bloc de 10x10 données du tableau Dessin est terminé, les deux premiers arguments repartent à 0, 0
- chaque case du tableau Dessin de dimensions 60x60 est bien passée


Dal
shokoakyu 4 Messages postés jeudi 18 mai 2017Date d'inscription 19 mai 2017 Dernière intervention > [Dal] 4568 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 20 avril 2018 Dernière intervention - 19 mai 2017 à 13:51
De 0 a 6 non ? Sinon je comprend pas d'où vient le 9 :/
Je vais faire comme vous dîtes et dérouler à la main pour essayer de vraiment piger le truc
Merci de votre aide :)
[Dal] 4568 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 20 avril 2018 Dernière intervention - 19 mai 2017 à 14:06
je parle des arguments effectivement passés à MetPoint()

de rien, et bon courage :-)
shokoakyu 4 Messages postés jeudi 18 mai 2017Date d'inscription 19 mai 2017 Dernière intervention > [Dal] 4568 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 20 avril 2018 Dernière intervention - 19 mai 2017 à 17:39
J'ai fait un schéma pour décortiquer le truc et je voudrais vois si j'ai bien compris :

En fait :

a prend la valeur 0
b prend la valeur 0

donc L prend la valeur 0 et tant que L est strictement inférieur à 10 on incrémente L
et C prend la valeur 0 et tant que C est strictement inférieur à 10 on incrémente C

Du coup au premier tour on obtient
MetPoint(0,0,Dessin[0][0])
donc la fonction MetPoint affiche le contenu du tableau de la colonne 0 et de la ligne 0 à l'emplacement du pixel (0;0) de la fenêtre graphique

Après on remonte C prend la valeur 1 qui est strictement inférieur à 10 et on obtient
MetPoint(1,0,Dessin[1][0])

Donc la fonction MetPoint affiche le contenu du tableau de la colonne 1 et de la ligne 0 à l'emplacement du pixel (1;0) de la fenêtre graphique

Et ainsi de suite...
C'est bien ça ??
[Dal] 4568 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 20 avril 2018 Dernière intervention - 22 mai 2017 à 15:05
oui, mais le "ainsi de suite" est un peu plus compliqué.

il y a des chances que le fichier comporte des couleurs indexées, et que les arguments de MetPoint soient pour les deux premiers le x, y du point, et l'index de la couleur à afficher en 3ème argument, avec InitialiseFenetreGraphique(16); initialisant un mode graphique de ce type... mais là, on joue aux devinettes :-)
Commenter la réponse de [Dal]