Пример #1
0
//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;
}
Пример #2
0
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;
}
Пример #3
0
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;
}