//OK int verifie(Arbre* racine) { if (racine==NULL) return 1; if (racine->gauche!=NULL && maximum(racine->gauche)->valeur > racine->valeur) return 0; if (racine->droit!=NULL && minimum(racine->droit)->valeur <= racine->valeur) return 0; if (!verifie(racine->gauche) || !verifie(racine->droit)) return 0 ; return 1; }
int main(int argc, char** argv) { { VecteurEntiers vecteur; debuteQuestion("Un vecteur vide"); valideQuestion(1, verifie("est vide", vecteur.EstVide()) && verifie("contient 0 elements", vecteur.NombreElements() == 0) ); } { VecteurEntiers vecteur; vecteur.AjouteElement(1); vecteur.AjouteElement(2); vecteur.AjouteElement(3); debuteQuestion("Un vecteur contenant 1, 2, 3"); valideQuestion(1, verifie("n'est pas vide", !vecteur.EstVide()) && verifie("contient 3 elements", vecteur.NombreElements() == 3) && verifie("contient 1", vecteur.ElementA(0) == 1) && verifie("contient 2", vecteur.ElementA(1) == 2) && verifie("contient 3", vecteur.ElementA(2) == 3) ); debuteQuestion("Et si on ajoute 4 au debut"); vecteur.AjouteElement(4, 0); valideQuestion(1, verifie("n'est pas vide", !vecteur.EstVide()) && verifie("contient 4 elements", vecteur.NombreElements() == 4) && verifie("contient 4", vecteur.ElementA(0) == 4) && verifie("contient 1", vecteur.ElementA(1) == 1) && verifie("contient 2", vecteur.ElementA(2) == 2) && verifie("contient 3", vecteur.ElementA(3) == 3) ); debuteQuestion("Et si on ote l'element a l'index 1"); vecteur.SupprimeElement(1); valideQuestion(1, verifie("n'est pas vide", !vecteur.EstVide()) && verifie("contient 3 elements", vecteur.NombreElements() == 3) && verifie("contient 4", vecteur.ElementA(0) == 4) && verifie("contient 2", vecteur.ElementA(1) == 2) && verifie("contient 3", vecteur.ElementA(2) == 3) && verifie("ne contient pas 1", !vecteur.ContientElement(1)) ); } { VecteurEntiers vecteur; debuteQuestion("Un vecteur auquel on ajoute 25 millions d'elements"); resetAllocation(); for(int i = 0; i < 25000000; ++i) vecteur.AjouteElement(i - 42); bool elementsSontCorrects = true; for(int i = 0; i < 25000000; ++i) elementsSontCorrects = elementsSontCorrects && vecteur.ElementA(i) == i - 42; valideQuestion(1, verifie("possede une performance O(1) amortie", deltaNombreAllocations() < 1000) && verifie("contient les bons elements", elementsSontCorrects) ); } { ListeEntiers listeChainee; debuteQuestion("Une liste chainee vide"); valideQuestion(1, verifie("est vide", listeChainee.EstVide()) && verifie("contient 0 elements", listeChainee.NombreElements() == 0) ); } { ListeEntiers listeChainee; listeChainee.AjouteElement(1); listeChainee.AjouteElement(2); listeChainee.AjouteElement(3); debuteQuestion("Une liste chainee contenant 1, 2, 3"); valideQuestion(1, verifie("n'est pas vide", !listeChainee.EstVide()) && verifie("contient 3 elements", listeChainee.NombreElements() == 3) && verifie("contient 1", listeChainee.ElementA(0) == 1) && verifie("contient 2", listeChainee.ElementA(1) == 2) && verifie("contient 3", listeChainee.ElementA(2) == 3) ); debuteQuestion("Et si on ajoute 4 au debut"); listeChainee.AjouteElement(4, 0); valideQuestion(1, verifie("n'est pas vide", !listeChainee.EstVide()) && verifie("contient 4 elements", listeChainee.NombreElements() == 4) && verifie("contient 4", listeChainee.ElementA(0) == 4) && verifie("contient 1", listeChainee.ElementA(1) == 1) && verifie("contient 2", listeChainee.ElementA(2) == 2) && verifie("contient 3", listeChainee.ElementA(3) == 3) ); debuteQuestion("Et si on ote l'element a l'index 1"); listeChainee.SupprimeElement(1); valideQuestion(1, verifie("n'est pas vide", !listeChainee.EstVide()) && verifie("contient 3 elements", listeChainee.NombreElements() == 3) && verifie("contient 4", listeChainee.ElementA(0) == 4) && verifie("contient 2", listeChainee.ElementA(1) == 2) && verifie("contient 3", listeChainee.ElementA(2) == 3) && verifie("ne contient pas 1", !listeChainee.ContientElement(1)) ); } { ListeEntiers listeChainee; debuteQuestion("Une liste chainee auquel on ajoute 25 millions d'elements"); for(int i = 0; i < 25000000; ++i) listeChainee.AjouteElement(i - 42); bool elementsSontCorrects = true; for(int i = 24999990; i < 25000000; ++i) elementsSontCorrects = elementsSontCorrects && listeChainee.ElementA(i) == i - 42; valideQuestion(1, verifie("contient les bons elements", elementsSontCorrects) ); resetAllocation(); debuteQuestion("Et si on lui ote le premier million d'elements"); elementsSontCorrects = true; for(int i = 0; i < 1000000; ++i) listeChainee.SupprimeElement(0); for(int i = 0; i < 250; ++i) elementsSontCorrects = elementsSontCorrects && listeChainee.ElementA(i) == i - 42 + 1000000; valideQuestion(1, verifie("contient les bons elements", elementsSontCorrects) && verifie("libere correctement sa memoire", deltaAllocation() == -1000000) ); } debuteQuestion("Et apres tout avoir execute"); valideQuestion(1, verifie("il n'y a pas de fuite de memoire", objetsAlloues == 0) ); std::cout << "Score " << score << "/12" << std::endl; }
bool Morpion() { SDL_Surface *screen = NULL, *texte[3] = {NULL,NULL,NULL}; SDL_Rect posBlock[9], posFond, posTexte[3]; SDL_Event event_morpion; IMAGE images; bool continuer = true, correct = false, rejouer = true, full_case = false,finJeux = true; int joueur = 1; int blocks[9], i, block_boutton; int pointJ[2] = {0}, manche = 1; int n = 9; const int jeu = MORPION; /******************************************************************************/ screen = SDL_GetVideoSurface(); verifSetVideo(screen); iniPos(&posFond,0,0); for(i=0; i<9; i++) { blocks[i] = RIEN; posBlock[i].x = (Sint16)(MIN + ((i%3)*TAILLE)); posBlock[i].y = (Sint16)(MAX + ((i/3)*TAILLE)); } /* position police */ for(i=0; i<2; i++) { posTexte[i].x = 125; posTexte[i].y = (Sint16)(555 + (22*i)); } iniPos(&posTexte[2],322,577); /******************************************************************************/ initialiseImagesMorpion(&images); verifChargImage(images.fond); verifChargImage(images.croix); verifChargImage(images.rond); /******************************************************************************/ SDL_WM_SetCaption("Morpion", NULL); /******************************************************************************/ SDL_BlitSurface(images.fond, NULL,screen, &posFond); SDL_Flip(screen); while(rejouer) { full_case = false; continuer = true; while(continuer == true) { block_boutton = 0; if (joueur == 1) joueur++; else joueur--; /**********/ if (joueur == 2) /*IA*/ { i = verifie(blocks); if (i != -1) { blocks[i] = ROND; if(check(blocks,&full_case)) continuer=false; } else if(continuer) { do { i=(rand()%9); } while(blocks[i] != RIEN); blocks[i] = ROND; } if(check(blocks,&full_case)) continuer=false; } /**********/ else if (joueur&&continuer) { do { correct = false; SDL_WaitEvent(&event_morpion); switch(event_morpion.type) { case SDL_QUIT: correct = true; continuer = false; rejouer = false; finJeux = false; break; case SDL_KEYDOWN: switch (event_morpion.key.keysym.sym) { case SDLK_ESCAPE: if(afficherMenuJeux(jeu)) { correct = true; continuer = false; rejouer = false; } else { initialiseImagesMorpion(&images); SDL_BlitSurface(images.fond,NULL,screen,&posFond); affiche_score(texte, manche,pointJ, posTexte); for(i=0; i<9; i++) { if(blocks[i]==CROIX) SDL_BlitSurface(images.croix, NULL,screen, &posBlock[i]); else if(blocks[i]==ROND) SDL_BlitSurface(images.rond, NULL,screen, &posBlock[i]); } SDL_Flip(screen); } break; default : break; } break; case SDL_MOUSEBUTTONUP: switch(event_morpion.button.button) { case SDL_BUTTON_LEFT: block_boutton = testPos(posBlock, TAILLE,TAILLE,n,event_morpion); if (block_boutton > -1 && blocks[block_boutton] == RIEN) { blocks[block_boutton] = CROIX; if(check(blocks, &full_case)) { continuer=false; } correct = true; } else if(block_boutton == -2) { if(afficherMenuJeux(jeu)) { correct = true; continuer = false; rejouer = false; } else { initialiseImagesMorpion(&images); SDL_BlitSurface(images.fond,NULL,screen,&posFond); affiche_score(texte, manche,pointJ, posTexte); for(i=0; i<9; i++) { if(blocks[i]==CROIX) SDL_BlitSurface(images.croix, NULL,screen, &posBlock[i]); else if(blocks[i]==ROND) SDL_BlitSurface(images.rond, NULL,screen, &posBlock[i]); } SDL_Flip(screen); } } break; default : break; } break; default : break; } } while(!correct); } SDL_BlitSurface(images.fond, NULL,screen, &posFond); for(i=0; i<9; i++) { if(blocks[i]==CROIX) SDL_BlitSurface(images.croix, NULL,screen, &posBlock[i]); else if(blocks[i]==ROND) SDL_BlitSurface(images.rond, NULL,screen, &posBlock[i]); } affiche_score(texte, manche,pointJ, posTexte); SDL_Flip(screen); } if(rejouer) { SDL_Delay(1500); if(!full_case) pointJ[joueur - 1]++; manche++; } for(i=0; i<9; i++) { blocks[i] = RIEN; } SDL_BlitSurface(images.fond, NULL,screen, &posFond); affiche_score(texte, manche,pointJ, posTexte); SDL_Flip(screen); } /******************************************************************************/ SDL_FreeSurface(images.fond); SDL_FreeSurface(images.croix); SDL_FreeSurface(images.rond); return finJeux; }