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 :

Neurone formel OU - ET


Sujet :

C

  1. #1
    Membre averti
    Femme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 38
    Par défaut Neurone formel OU - ET
    Bonjour,

    Je voudrais créer un neurone formel qui fait la fonction ET - OU, j'ai donc suivi un tutoriel : http://memo.labz.free.fr/blog/?p=97 (à voir tout en bas)



    Mais le code C ne marche pas, je suis sous code block. J'ai néanmoins essayé en modifiant le code mais rien n'y fait :



    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
    #include <stdio.h>
    #include <stdlib.h>
     
    // Prototype de la fonction
    int fonction_heaviside(double x);
     
     
    // Main
    int main(int argc, char *argv[])
    {
    	double somme_ponderee = 0;
    scanf("%d", somme_ponderee); // On demande d'entrer l'age avec scanf
    	if(argc != 6)
    	{
     
    		printf("Utilisation : ./neurone seuil valeur_1 poid_synaptique_1 valeur_2 poid_synaptique_2\n");
    		return 1;
    	}
     
     
     
    	somme_ponderee = atof(argv[2]) * atof(argv[3]) + atof(argv[4]) * atof(argv[5]) - atof(argv[1]);
     
    	printf("Résultat: %d\n", fonction_heaviside(somme_ponderee));
    	return 0;
    }
     
     
    // Définition de la fonction
    int fonction_heaviside(double x)
    {
     
    	if(x < 0)
    		return 0;
    	else
    		return 1;
    }
    Merci d'avance pour votre aide

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Bonjour

    En C les tableau commencent à l'indice 0.

    Donc il faut aller de 0 à < argc

    Comme argv[0] contient (en général) le nom du programme, il faut démarrer tes atof à 1 et aller jusqu'à argc-1

    D'autre part, pour un flottant, il est mieux d'nitialiser la varriable avec une précision d'au moins une décimale : somme = 0.0

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Les deux premières lignes sont fausses et suffisent à faire planter le programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	double somme_ponderee = 0;
    scanf("%d", somme_ponderee); // On demande d'entrer l'age avec scanf
    1- scanf demande en argument l'adresse de destination
    2- le format pour un double n'est pas %d mais %lf

  4. #4
    Membre averti
    Femme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 38
    Par défaut
    Re bonjour,

    J'ai peur de na pas avoir tout compris, et j'ai quelque peu modifier le programme,le voici :

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    // Prototype de la fonction
    int fonction_heaviside(double x);
     
     
    // Main
    int main(int argc, char *argv[])
    {
    	double somme_ponderee = 0;
    scanf("%lf", somme_ponderee);
    	if(argc != 6)
    	{
     
    		printf("Utilisation : ./neurone seuil valeur_1 poid_synaptique_1 valeur_2 poid_synaptique_2\n");
    		return 1;
    	}
     
     
     
    	somme_ponderee = atof(argv[1]) * atof(argv[2]) + atof(argv[3]) * atof(argv[4]) - atof(argv[1]);
     
    	printf("Résultat: %d\n", fonction_heaviside(somme_ponderee));
    	return 0;
    }
     
     
    // Définition de la fonction
    int fonction_heaviside(double x)
    {
     
    	if(x < 0)
    		return 0;
    	else
    		return 1;
    }
    Pouvez vous me dire ou se trouvent mes erreurs ?

    Merci d'avance

  5. #5
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Comme l'a dit diogene, il faut passer l'adresse à scanf, ce qui se traduit par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%lf", &somme_ponderee);
    En plus quelle est l'intérêt de lire une valeur dans somme_ponderee pour aller l'écraser 2 lignes plus loin sans l'avoir utilisée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    somme_ponderee = atof(argv[1]) * atof(argv[2]) + atof(argv[3]) * atof(argv[4]) - atof(argv[1]);

  6. #6
    Membre averti
    Femme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 38
    Par défaut
    Re,


    J'ai modifié le code, mais je pense qu'on a encore du boulot
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    // Prototype de la fonction
    int fonction_heaviside(double x);
     
     
    // Main
    int main(int argc, char *argv[])
    {
    	double somme_ponderee = 0;
    scanf("%lf", &somme_ponderee);
     
    	if(argc != 6)
    	{
     
    		printf("Utilisation : ./neurone seuil valeur_1 poid_synaptique_1 valeur_2 poid_synaptique_2\n");
    		return 1;
    	}
     
     
     
    	somme_ponderee = atof(argv[0]) * atof(argv[2]) + atof(argv[3]) * atof(argv[4]) - atof(argv[1]);
     
    	printf("Résultat: %d\n", fonction_heaviside(somme_ponderee));
    	return 0;
    }
     
     
    // Définition de la fonction
    int fonction_heaviside(double x)
    {
     
    	if(x < 0)
    		return 0;
    	else
    		return 1;
    }
    En plus quelle est l'intérêt de lire une valeur dans somme_ponderee pour aller l'écraser 2 lignes plus loin sans l'avoir utilisée ?
    Je dois donc enlever le code avec les atof ?

    merci de m'aider

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Grye300 Voir le message
    Je dois donc enlever le code avec les atof ?
    Raté

    C'est le scanf dont tu n'as pas besoin...

    Maintenant, quand je lis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	somme_ponderee = atof(argv[0]) * atof(argv[2]) + atof(argv[3]) * atof(argv[4]) - atof(argv[1]);
    Tu n'as pas lu ce que j'ai écrit

    J'ai dit que argv[0] contenait le nom du programme... Ce n'est donc pas ce que tu veux...

    Citation Envoyé par Grye300 Voir le message
    if(argc != 6)
    {
    printf("Utilisation : ./neurone seuil valeur_1 poid_synaptique_1 valeur_2 poid_synaptique_2\n");
    n'est pas cohérent avec ce que tu dis et fais.. Tu n'ndiques que 3 paramètrs et tu testes par rapport à 5 (plus le nom du programme)



    Je pense que ce que tu veux est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	somme_ponderee = atof(argv[1]) * atof(argv[3]) + atof(argv[4]) * atof(argv[5]) - atof(argv[2]);

  8. #8
    Membre averti
    Femme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 38
    Par défaut
    Si j'ai lu, ne t'inquiète pas, mais comme ça fait longtemps que je n'ai pas programmé, j'ai un peu mal.

    J'ai fait ce que tu as dit en remplaçant la ligne avec les atofs..
    n'est pas cohérent avec ce que tu dis et fais.. Tu n'ndiques que 3 paramètrs et tu testes par rapport à 5 (plus le nom du programme)
    je dois mettre 5 paramètres alors ? comment ?

    merci beaucoup

  9. #9
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    n'est pas cohérent avec ce que tu dis et fais.. Tu n'ndiques que 3 paramètrs et tu testes par rapport à 5 (plus le nom du programme).
    Il doit y avoir une illusion d'optique parce qu'il y a bien 5 paramètres .

    Si tu as encore des problèmes, merci de nous dire précisément ce qui ne va pas.

  10. #10
    Membre averti
    Femme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 38
    Par défaut
    Hello,

    et bien mon dernier code c'est ça :

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    // Prototype de la fonction
    int fonction_heaviside(double x);
     
     
    // Main
    int main(int argc, char *argv[])
    {
    	double somme_ponderee = 0;
     
    	if(argc != 6)
    	{
     
    		printf("Utilisation : ./neurone seuil valeur_1 poid_synaptique_1 valeur_2 poid_synaptique_2\n");
    		return 1;
    	}
     
     
     
    	somme_ponderee = atof(argv[1]) * atof(argv[3]) + atof(argv[4]) * atof(argv[5]) - atof(argv[2]);
     
    	printf("Résultat: %d\n", fonction_heaviside(somme_ponderee));
    	return 0;
    }
     
     
    // Définition de la fonction
    int fonction_heaviside(double x)
    {
     
    	if(x < 0)
    		return 0;
    	else
    		return 1;
    }
    Et je n'ai pas de réponse comme sur l'image tout en bas sur linux :

    http://memo.labz.free.fr/blog/?p=97

  11. #11
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Chez moi ça fonctionne parfaitement, alors je pense que tu oublies simplement de mettre les arguments à la suite du programme quand tu le lances. Qu'utilises-tu comme IDE / compilateur ?

  12. #12
    Membre averti
    Femme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 38
    Par défaut
    j'utilise code block

  13. #13
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Simplement après une petite recherche :

    Citation Envoyé par Dut Voir le message
    Tu vas dans le menu Project > Set programs arguments
    Dans la case Program Argument tu mets (par exemple) :
    Tu compiles, tu exécutes et tu lis

  14. #14
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Par défaut
    salut !

    tu fais comme dit trademark, mais tu replaces les argv[] dans l'ordre qu'ils avaient dans la première version de ton programme (le seuil est le premier élément après le nom du programme).

    A+

  15. #15
    Membre averti
    Femme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 38
    Par défaut
    D'accord, merci j'ai fait ce que vous avez dit, mais lorsque je compile je tombe toujours sur le résultat 1, et jamais 0, est ce normal ?

    merci d'avance

  16. #16
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Ben oui, il faut que tu changes les paramètres pour avoir un résultat différent.

  17. #17
    Membre averti
    Femme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 38
    Par défaut
    Ha ouiiiii, en effet, merci beaucoup

Discussions similaires

  1. Les réseaux de neurones ??? Ouvrage, site, tutos ???
    Par wallys dans le forum Méthodes prédictives
    Réponses: 5
    Dernier message: 21/03/2006, 14h08
  2. paramètre formel et paramètre courant !
    Par Aioros dans le forum C
    Réponses: 6
    Dernier message: 03/09/2005, 02h35
  3. Besoin d'aide classifieur SVM et reseau de neurones
    Par dahoo dans le forum Méthodes prédictives
    Réponses: 2
    Dernier message: 12/04/2005, 14h31
  4. [C] Calcul Formel
    Par Paniez dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 19/03/2005, 10h36
  5. Réseaux de neurones
    Par kayin dans le forum Méthodes prédictives
    Réponses: 8
    Dernier message: 10/03/2004, 14h22

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