IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Ma première rencontre avec un Buffer ?


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 43
    Points : 17
    Points
    17
    Par défaut Ma première rencontre avec un Buffer ?
    Salut à tous !

    J'essaye de créer un jeu de calcul mental pour m'entraîner (quand j'ai vu ce que l'app store propose.... ).

    Du coup j'ai crée un premier jet et lors de l'exécution un calcul apparaît, je donne la réponse et ensuite deux calculs apparaissent à la suite.

    Voici un bout de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     while(conteur != 10){
            operation(niveau);
            printf("\nReponse : ");scanf("%d",&reponse);
            printf("\nScore : %d",score);
            if(reponse == operation(niveau)){score+=1;}
            conteur+=1;
        }
    et puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int operation (int niveau){
        int x; x=rand()%3;
        switch (x){
            case 0 : return addition(niveau); break;
            case 1 : return soustraction(niveau); break;
            case 2 : return multiplication(niveau); break;
            case 3 : return division(niveau); break;
        }
    }
    Qu'en pensez-vous ? Je vous tiens au courant pour la suite ! Merci !

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par CechD Voir le message
    Qu'en pensez-vous ?
    Bonjour
    Je ne sais pas trop. Qu'est-ce qu'on en pense par rapport à quoi ? A ton niveau ? Ben si t'es débutant c'est pas mal. Si t'es confirmé alors tu peux certainement faire mieux. Remplacer par exemple tes opérations switchées par carrément un pointeur de fonctions. Tu stockes tes fonctions dans un tableau de pointeurs puis à chaque tour tu appelles la fonction[x] du tableau. Voilà par exemple ce que je pourrais en penser...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    accessoirement le conteur c'est celui qui narre une histoire, celui qui compte c'est le compteur, c'est un détail mais bon...

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 43
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    salut,

    accessoirement le conteur c'est celui qui narre une histoire, celui qui compte c'est le compteur, c'est un détail mais bon...
    Tu m'as tué, je m'incline je vais modifier cela.

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par CechD Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int operation (int niveau){
        int x; x=rand()%3;
        switch (x){
            case 0 : return addition(niveau); break;
            case 1 : return soustraction(niveau); break;
            case 2 : return multiplication(niveau); break;
            case 3 : return division(niveau); break;
        }
    }
    Tu m'as tué, je m'incline je vais modifier cela.
    Oui et aussi (en dehors de l'inutilité de cette variable "x" puisque tu peux directement switcher le résultat de l'opération; et des break puisque tu quittes la fonction avant de les atteindre) demande-toi si le case 3 sera atteint un jour...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 43
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour
    Salut !

    Citation Envoyé par Sve@r Voir le message
    Tu stockes tes fonctions dans un tableau de pointeurs puis à chaque tour tu appelles la fonction[x] du tableau.
    Super idée, je connais les pointeurs, je pense que je peux le faire. Et ben finalement mon programme plante. Je vais faire une pause puis reattaquer voici où j'en suis :


    Partie opération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    int power(a,b){
        if((a==0)&&(b==0)){return 0;}
        else if(b==0){return 1;}
        else if(b==1){return a;}
        return a*power(a,b-1);
    }
     
    int** arithmetique(niveau){
        int *addition = calloc(sizeof(int),3);
        addition[0] = rand()%(niveau*100); addition[1] = rand()%(niveau*100); addition[2] = addition[0]+addition[1];
     
        int* soustraction = calloc(sizeof(int),3);
        soustraction[0] = rand()%(niveau*100); soustraction[1] = rand()%(niveau*100); soustraction[2] = soustraction[0]-soustraction[1];
     
        int* multiplication = calloc(sizeof(int),3);
        multiplication[0] = rand()%(power(10,niveau)); multiplication[1] = rand()%(power(10,niveau)); multiplication[2] = multiplication[0]*multiplication[1];
     
        int* division = calloc(sizeof(int),3);
        while((division[0]%division[1] == 0)&&(division[1]!=0)){
        division[0] = rand()%(power(10,niveau)); division[1] = rand()%(power(10,niveau)); division[2] = division[0]/division[1];
        }
     
        int** arith = calloc(sizeof(int*),4);
        arith[0] = addition; arith[1] = soustraction; arith[2] = division; arith[3] = multiplication;
        return arith;
     
    }
     
    char operateur(int operation){
        if(operation == 0){return '+';}
        if(operation == 1){return '-';}
        if(operation == 2){return '*';}
        if(operation == 3){return '/';}
    }
     
    void free_arith(int ** arith){
        int i; for(i=0;i<2;i++) {free(arith[i]);}
        free(arith);
    }
    Partie partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     while(compteur != 10){
            operation = rand()%4;
            printf("\n%d %c %d = ",arithmetique(niveau)[operation][0],operateur(operation),arithmetique(niveau)[operation][1]);
            printf("\nReponse : ");scanf("%d",&reponse);
            printf("\nScore : %d",score);
            if(reponse == arithmetique(niveau)[operation][2]){score+=1;}
            compteur+=1;
        }

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 43
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    demande-toi si le case 3 sera atteint un jour...
    Salut ! Je suis d'accord avec vous de A à Z. Mais maintenant elle n'est plus dans mon code (je l'avais mise y'a longtemps).

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par CechD Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    int** arithmetique(niveau){
        int *addition = calloc(sizeof(int),3);
        addition[0] = rand()%(niveau*100); addition[1] = rand()%(niveau*100); addition[2] = addition[0]+addition[1];
     
        int* soustraction = calloc(sizeof(int),3);
        soustraction[0] = rand()%(niveau*100); soustraction[1] = rand()%(niveau*100); soustraction[2] = soustraction[0]-soustraction[1];
     
        int* multiplication = calloc(sizeof(int),3);
        multiplication[0] = rand()%(power(10,niveau)); multiplication[1] = rand()%(power(10,niveau)); multiplication[2] = multiplication[0]*multiplication[1];
     
        int* division = calloc(sizeof(int),3);
        while((division[0]%division[1] == 0)&&(division[1]!=0)){
        division[0] = rand()%(power(10,niveau)); division[1] = rand()%(power(10,niveau)); division[2] = division[0]/division[1];
        }
     
        int** arith = calloc(sizeof(int*),4);
        arith[0] = addition; arith[1] = soustraction; arith[2] = division; arith[3] = multiplication;
        return arith;
     
    }
    Mille fois trop compliqué !!! Pourquoi vouloir stocker les opérandes ???
    Te suffit de stocker la fonction puis, quand tu reçois les valeurs à opérer tu appelles la fonction en lui passant les valeurs (sans les stocker)

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #include <stdio.h>
     
    int add(int x, int y)
    {
    	return x+y;
    }
     
    int sub(int x, int y)
    {
    	return x-y;
    }
     
    int mult(int x, int y)
    {
    	return x*y;
    }
     
    int main()
    {
    	typedef struct {
    		char *libelle;
    		char operator;
    		int (*fct)(int , int);
    	} t_operation;
    	t_operation tabOP[]={
    		{"addition", '+', add},
    		{"soustraction", '-', sub},
    		{"multiplication", '*', mult},
    		{NULL, 0, NULL},
    	};
    	t_operation *pt_op;
     
    	int x=10, y=12;
     
    	for (pt_op=tabOP; pt_op->fct != NULL; pt_op++)
    		printf("%d %c %d = %d\n", x, pt_op->operator, y, (*pt_op->fct)(x, y));
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 43
    Points : 17
    Points
    17
    Par défaut
    Merci Sve@r pour vos conseils.

    Je travail sur votre code .

  10. #10
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Y'a de l'idée ! On voit que tu essaies de mettre en place des constructions avec les briques que tu connais, ça ne fait pas toujours sens mais c'est un bon entraînement. Le projet que tu as choisi est intéressant, lorsque tu seras plus à l'aise tu pourras même éventuellement le compléter pour qu'il génère des expressions mathématiques (mettons « 18 * 9 + 7 ^ 3 ») et chronomètre l'utilisateur !

    Et puis j'aime bien la manière que tu as de nommer tes threads.

Discussions similaires

  1. Instance avec Database Buffers = 0
    Par schlitters dans le forum Oracle
    Réponses: 5
    Dernier message: 01/05/2006, 19h42
  2. Texte défilant avec double buffering
    Par trinie dans le forum 2D
    Réponses: 2
    Dernier message: 28/04/2006, 15h06
  3. Réponses: 3
    Dernier message: 11/04/2006, 09h37
  4. [VB.NET] Probleme avec un buffer
    Par Aspic dans le forum VB.NET
    Réponses: 1
    Dernier message: 14/12/2005, 16h17
  5. [DEBUTANT]Première application avec XML
    Par mlallem dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 17/11/2005, 15h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo