begin process at 2012 05 29 14:21:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Maths

 > 

Problème compréhension du programme le compte est bon


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème compréhension du programme le compte est bon

mercredi 22 avril 2009 à 09:57:56 | Problème compréhension du programme le compte est bon

echec

Bonjour,
Je cherchai un programme c++ sur internet qui permettait de calculer la solution du jeu le compte est bon, j'en est finalement trouvé un, mais j'ai du mal à en comprendre le fonctionnement. Pouvez vous m'aidez svp?

ps: ce programme se compile bien et fonctionne


/* decomposer n en une operation de au plus a nombres du tableau t
 */
#include <stdio.h>
#include <string.h>
#include <conio.h>

int i;

typedef long (* fct)(long, long);

//Les 4 opérations fondamentales
long plus(long a, long b) { return a+b;}
long moins(long a, long b) { return a-b;}
long mult(long a, long b) { return (a==1 || b==1)?-10000:a*b;}
long div(long a, long b) { return (b!=0 && a%b==0)?a/b:-10000;}

fct f[]={div,mult,plus, moins};
char nom[]={'/','x','+','-'};
char res[255];


//Fonction de decomposition
long decompose(long n, long a, long *t)
{
    long v[6];
    char tmp[80];
    int i,j,k,l,op;
    if (a<=0) return 0;
    if (a==1)
    {
        if (n==t[0])
        return 1;
        else
        return 0;
    }

    for (i=0;i<a;++i)
    {
        if (t[i]==n)
        {
            printf("Sol : %ld \n",t[i]);
            return 1;
        }

        for (j=1;j<a;++j)
        {
            if (j==i) continue;
            for (op=0;op<4;++op)
            {
                if ((v[0]=f[op](t[i],t[j]))<0)
                continue;
                for (k=1,l=0;l<a;++l)
                {
                    if (l==i || l==j)
                    continue;
                    v[k++]=t[l];
   
                }
            if (decompose(n,a-1,v)==1)
            {
                strcpy(tmp,res);
                sprintf(res,"%ld = %ld %c %ld\n",
                f[op](t[i],t[j]),t[i],nom[op],t[j]);
                strcat(res,tmp);
                return 1;
            }
   
        }

    }
}
return 0;
}

long int main()
{
    long int t[]={1,4,7,10,25,50}; //Un tableau à 6 chiffres qui sera ecrasé par les valeurs saisies
    long int n=165;
    long int d=0;

    for (i=0; i<6 ; i++)
    {
        printf("\nRentrer le %d nombre :", i);
        scanf("%d", &t[i]);
    }

    //La valeur à trouver : on aurait pu faire une fonction aléatoire !
    printf("Donner la valeur à trouver : ");
    scanf("%d", &n);


    //Petit récapitutif de la saisie
    printf("\n\nVoilà vos nombres rentrés :");

    for (i=0; i<6 ; i++)
    {
        printf("%d ", t[i]);
    }

    printf("\nVous devez trouver : %d\n", n);
    getch();

    /*for (n=1;n<999;++n) {*/
    strcpy(res,"");
    while(!decompose(n,6,t)) { //fct principale
    d=-d +( (d>0)?-1:1);
    n+=d;
    printf("%ld\n ",n);
}
    printf("\n%ld",n);
    printf("\n");
    printf(res);
    printf("--------------\n");
    /*}*/
    printf("\nFin de la recherche...");
getch();
return 0;
}
mercredi 22 avril 2009 à 14:05:47 | Re : Problème compréhension du programme le compte est bon

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

Parcourut en diagonal, c'est du C. Cours de C ici.

M'étonnerais que quelqu'un fasse ce boulot à ta place.
mercredi 22 septembre 2010 à 14:09:45 | Re : Problème compréhension du programme le compte est bon

007Julien

Ce programme utilise la fonction récurrente decompose pour passer de la recherche du nombre n, avec a plaques (initiallement 6), figurant dans le tableau t, au problème plus simple (une plaque de moins) obtenu après application d'une opération à deux plaques i et j (deux boucles en i et j dans la fonction).

En reprenant le principe, mais :
    en évitant les appels de fonctions pour effectuer de simples tests sur les valeurs t[i] et t[j] (surtout lorsque les opérations sont commutatives ou à sens unique).
    en opérant le test de fin non pas sur toutes les plaques mais seulement sur le résultat des opérations,
    en utilisant des variables globales n (invariant dans la récurence) et t (tableau global sur lequel on travaille à différents à niveaux définis par a),
    et en incorporant le tout dans un objet,

on peut élaborer un Compte est bon avec un simple script sur une page html.



Cette discussion est classée dans : long, printf, for, return, if


Répondre à ce message

Sujets en rapport avec ce message

Table de hachage avec patronyme [ par guitoontruant ] Bonjour, Désolé, j'avais d'abord poster dans les discussions libres.Voilà je dois créer une table de hashage de patronymes par le biais de N entrées, RFID skyetek developer kit [ par chibi59 ] Salut à tous,J'ai un projet à mener pour mes études il sagit de déveloper une aplication en C++ capable de se connecter à un lecteur RFID de lire des Return tableau? [ par zut69 ] Bonjour,Je suis en train d'écrire un petit programme sur les matrices en C, mais vu que je veux faire quelque chose d'assez général, j'ai besoin que d ce code ne marche pas?????????? [ par banak3181 ] s'il vous plait les gars je veux que quelqu'un me disent pourquoi ce code ne marche sur dev C++:#include #include #include #include # include<myconio. tableau [ par ngabou98 ] bonjour à tous c'est encore moi svp j'ai besoin de votre aide je travaille sur la méthode de simplification d'une fonction booléene par la méthode de Simple Hook (DLL) qui plante GetMessage ! Je suis nul ou quoi ? [ par dam1dam1 ] Bonjour. Je ne suis pas un pro du Hook et j’ai un peu oublié tout ca, mais vu toutes les bonnes sources et annotations qui trônent ici, je pensais po Probleme : Sudoku en C [ par seth59222 ] Bonsoir, voila je suis actuellement en première année d'info, donc assez novice et je viens de créer ce petit bout de programme en C qui consiste a ré Problème générateur de grille de sudoku en C [ par Dovah ] Bonjour, je suis débutant en programmation, et pour m'entraîner j'ai décidé de créer un programme qui génère aléatoirement une grille de sudoku en C Programme en C [ par f1rstsurf ] bonjour, je code actuellement un petit programme en C , ce programme à pour but de demander au client de définir son budget cadeau et en fonction de s Problème puissance 4 [ par tlmvpsp ] Voila, mon problème se situe au niveau du "check vertical" à savoir que mon programme ne comprend pas lorsque un joueur gagne en vertical. Je n'arrive


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,482 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales