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 :

Mon premier programme


Sujet :

C

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Mon premier programme
    bonjour,

    Je suis en faculté des science L2 physique,le problème : en L1 les étudiants ont déjà fait un an de programmation... là je tente mon premier programme qui permet, dans un tableau de floats 3x3 de trouver le min de la ligne2 et le max de la col.2...

    Ça fait une heure et demie que je planche dessus et j’aimerais avoir réussi un programme avant le td (sinon le prof risque encore de m'en vouloir, de plus il refuse de me donner ses cours de L1, bref, le grand amour).

    Voici le fruit de mon difficile labeur, si quelqu'un pouvait m'aider à corriger mes erreurs...

    merci.
    Images attachées Images attachées  

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Salut,

    Franchement, il y a des tonnes de ressources sur le net et d'excellents livres sur le langage C. Ne te prends pas la tête avec un imbécile de prof qui refuse de donner ses cours de 1ère année. Tu peux pas exemple te procurer ce livre qui est une référence, mais les tutoriels de Dvpez.com peuvent déjà t'être très utile.

    Note pour la prochaine fois : bien de montrer tous les warnings et les erreurs, mais une image est problématique. Je ne peux pas copier coller pour tester ou extraire des morceaux. Mieux vaut copier coller le code entre balises [CODE] (accessible avec le bouton # dans l'éditeur de messages) et les erreurs de Codeblocs en cliquant droit dessus et choisissant "Copy content to clipboard".

    Mes remarques plus ou moins dans le désordre :

    Tu déclares mal ton tableau. En effet, le ; sert à terminer une instruction. Ici, tu ne veux pas terminer une instruction, mais la continuer. La virgule a plus de sens et c'est elle qui faut utiliser : int tab[2][2] = { {1,2}, {2,3} };
    Pour comprendre cet initialisation, il faut comprendre que tab est un tableau de 2 éléments, chacun élément étant un tableau de 2 éléments. Tu as donc : tab { elem1, elem2} et chaque elemi est de la forme {int1, int2}.

    Les lignes 10 et 11 ne veulent rien dire. Je ne sais pas trop ce que tu as voulu faire.

    Tu n'initialises pas tes variables avant de t'en servir. En particulier, min et max. Tu compares leur contenu à d'autres valeurs mais que contiennent-elles au début ? En C, le contenu d'une variable à sa création est indéterminée. min et max contiennent donc n'importe quelle valeur.

    Indente tes boucles for et utilises des accolades pour marquer clairement les blocs.

    Les lignes d'instructions doivent se terminer par un point-virgule. Les lignes avec printf() n'en possèdent pas. En fait, presque toutes tes lignes en sont dépourvues : il faut les rajouter.

    Pourquoi faire un #define L et ensuite déclarer une variable L ? Sais-tu comment fonctionne la directive de pré-processeur #define ?

    Corrige déjà tout ça et regarde ce que ça donne.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2012
    Messages : 82
    Points : 132
    Points
    132
    Par défaut
    Bonjour,

    Je te conseillerai de suivre un tuto sur internet tout comme Bktero. Car tu ne sembles pas trop ce que les lignes de codes que tu as faites, fonctionnent.

    Ton programme est assez simple donc en une journée de tuto tu auras les bases pour faire ce genre d'exercice.

    Par exemple ici tu déclares énormément de variable pour pas grand chose. Tes boucles sont mal formées. Et beaucoup d’instruction ne se terminent pas par des ';'.

    En gros je te conseille d'effacer ton programme (ou juste de le mettre de coté), suivre un tuto au moins jusqu’à la gestion des tableaux et des boucles. Puis ré-attaquer ton programme sans regarder la base que tu avais déjà.

  4. #4
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    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
    40
    41
    42
    #include <stdio.h>
        #define L 3
        #define C 3
        int main(int argc, char *argv[])
     
    {
        int L,C;
        float A[L][C]={{0,1,3},
                    {2,3,9},
                    {8,10,11}};
        float i, j, I, J, min, max;
        min A[0][0]
        max A[0][0] //on initialise les valeur min et max à la tute première case
        for(j=0,j<C;j++) //dans ligne 2 et parcours des 3 colonnes
        {
        for(i=1)
        {
        if(A[1][j]<min)
        {
            min=A[i][j];
            I=i;
            J=j;
        }
      }
    }
        printf("minimum est= %f, avec ligne= %f et colone=2",min, I);
     
        for(i=1,i<L;I++)
        {
        for (j=1) //dans colonne 2 et parcours des 3 lignes
        {
         if(A[i][1]>max)
        {
            max=A[i][j];
            I=i;
            J=j;
        }
      }
    }
        printf("minimum est= %f, avec ligne= 2 et colone=%f",max, J);
        return 0;
    }
    j'avais refait l'histoire des points virgules et des for... après ce qui me chiffonent c'est L et C en effet... peut etre ne pas les mettre égales à 3?

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    pour les lignes 10 et 11 j'ai voulu dire qu'au depart la valeur min et max étaient à la première case du tableau... et L et C bein le porf l'avait fait dans un exemple "vite fait" bref... du coup le slignes 10 et 11 je les efface et j'enleve les valeurs 3 de L et C?

  6. #6
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    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
    40
    41
    42
    #include <stdio.h>
        #define L
        #define C
        int main(int argc, char *argv[])
     
    {
        int L,C;
        float A[L][C]={{0,1,3},{2,3,9},{8,10,11}};
        float i, j, I, J, min, max;
        min=A[0][0];
        max=A[0][0];
        I=0;
        J=0;
        for(j=0;j<C;j++)
        {
        for(i=1)
        {
        if  (A[i][j]<min)
        {
            min=A[i][j];
            I=i;
            J=j;
        }
        }
        }
        printf("minimum est= %f, avec ligne= %f et colone=2",min, I);
     
        for(i=1;i<L;I++)
        {
        for (j=1) //dans colonne 2 et parcours des 3 lignes
        {
        if(A[i][j]>max)
        {
            max=A[i][j];
            I=i;
            J=j;
        }
        }
        }
        printf("minimum est= %f, avec ligne= 2 et colone=%f",max, J);
        return 0;
    }
    c'est peut etre un tout petit peu mieux non? :/

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Il y a une balise pour insérer du code proprement. Tu peux l'insérer avec le bouton # de l'éditeur ou en faisant ça *:
    [code]int a=1;[/code]
    ce qui donnera : (* = ici, j'ai bloqué l'analyse de la balise CODE pour qu'elle apparaisse )

    Pour ton code, mes remarques en commentaires :
    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
    40
    41
    42
    43
    #include <stdio.h>
    #define L
    #define C // je repose ma question : sais-tu à quoi sert ceci ?
     
    int main(int argc, char *argv[])
    {
        int L,C; // la reponse a la question precedente est visiblement non, il faut chercher :)
        float A[L][C]={{0,1,3},{2,3,9},{8,10,11}};
        float i, j, I, J, min, max;
        min=A[0][0];
        max=A[0][0];
        I=0;
        J=0;
        for(j=0;j<C;j++)
        {
            for(i=1) // probleme avec ce FOR : il faut 3 elements et non 1 seul
                    // d'ailleurs, i=1 donne a i la valeur 1, ce n'est pas un test d'egalite (btw)
            {
                if (A[i][j]<min) // les indices d'un tableau doivent etre des entiers et non des flottants
                {
                    min=A[i][j];
                    I=i;
                    J=j; // pourquoi memoriser J ?
                }
            }
        }
        printf("minimum est= %f, avec ligne= %f et colone=2",min, I); // on fait des doubles boucles pour parcourir une matrice carre ; si tu cherches sur une colonne en particulier, une simple boucle suffit pour parcourir un vecteur colonne
     
        for(i=1;i<L;I++)
        {
            for (j=1) // meme remarque
            {
                if(A[i][j]>max)
                {
                    max=A[i][j];
                    I=i;
                    J=j; // pourquoi memoriser J ? D'ailleurs, pourquoi 2 variables alors qu'une seule est utile a chaque fois ?
                }
            }
        }
        printf("minimum est= %f, avec ligne= 2 et colone=%f",max, J);
        return 0;
    }

  8. #8
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    merci pou le code je ne trouvais pas, par contre pour la ligne je ne sais pas ce que cela veux dire, j'essayais de voir sur le net... je vais voir ça du coup, je eposterai mon "nouveau" pro tout à l'heur, et merci surtout!

  9. #9
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    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
    #include <stdio.h>
        #define L 3
        #define C 3
        int main(int argc, char *argv[])
     
    {
        float A[L][C]={{0,1,3},{2,3,9},{8,10,11}};
        float min, max;
        int I,J,i,j;
        min=A[0][0];
        max=A[0][0];
        I=0;
        J=0;
        {
        for(j=0;j<C;j++)
        {if(A[1][j]<min)
        {
            min=A[1][j];
            J=j;
        }}
        printf("Le minimum est= %f, dans la seconde ligne avec la colone=%d",min, I);
        }
     
        {
        for(i=1;i<L;I++)
        {if(A[i][1]>max)
        {
            max=A[i][1];
            I=i;
        }}
        printf("le maximum%f dans la colonne1 et colone=%d",max, J);
    }
        return 0;
    merci pou vos conseil, pour l'instant codeblock ne detecte plus d'erreur, quand j'execute le minimum s'affiche très bien... mais pas le maximum il ne s'affiche pas du tout.

  10. #10
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Pour comprendre à quoi sert la ligne #define L, il faut comprendre les étapes de la production d'un exécutable à partir d'un fichier source :
    • analyse par le pré-processeur
    • compilation des fichiers sources
    • edition des liens pour assembler les fichiers en un seul exécutable


    #define A B est une commande du pré-processeur. Cela a pour effet de remplacer toutes les occurrences du terme A par le terme B. Donc #define L a pour effet de remplacer L par..... du vide. Imagine donc ce qu'il advient de ton code source.

    C'est seulement une fois que ceci est fait que ton fichier est compiler, d'où des erreurs.

  11. #11
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    for(i=1;i<L;I++)

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Dans ta première boucle, tu détermines l'indice J de la colonne minimum, or tu affiches I, idem à l'inverse pour la seconde.

    Attention de bien incrémenter la bonne variable : for(i=1;i<L;i++).

    Attention aussi à l'initialisation de tes valeurs minimales et maximales :
    • tu initialises max à A[0][0] = 0, ok pour ce cas précis, mais lorsque tu auras des valeurs plus petites, cela posera problème ;
    • par contre tu initialises min à A[0][0] = 0 or il te sera difficile de trouver plus petit dans une ligne qui contient les valeurs {1,3,10}.

  13. #13
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    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
    #include <stdio.h>
        #define L 3
        #define C 3
        int main(int argc, char *argv[])
     
    {
        float A[L][C]={{0,1,3},{2,3,9},{8,10,11}};
        float min, max;
        int I,J,i,j;
        min=A[0][0];
        max=A[0][0];
        I=0;
        J=0;
        {
        for(j=0;j<C;j++)
        {if(A[1][j]<min)
        {
            min=A[1][j];
            J=j;
        }}
        printf("Le minimum est= %f, dans la seconde ligne avec la colone=%d",min, I);
        }
     
        {
        for(i=0;i<L;i++)
        {if(A[i][1]>max)
        {
            max=A[i][1];
            I=i;
        }}
        printf("le maximum%f dans la colonne1 et colone=%d",max, J);
    }
        return 0;
    }
    argh ça ne marche pas... enfin jvais faire une pause depuis ce matin 8h que je suis dessus... oui je suis une ^^"

  14. #14
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2012
    Messages : 82
    Points : 132
    Points
    132
    Par défaut
    En gros tu as des erreurs car tu te mélanges entre tout les noms de variables.

    Tu as 2 solutions :
    - soit tu prends des noms de variables plus explicite du style vertical et horizontal (c'est des exemple...) qui vont être des int qui se déplaceront dans ton tableau.
    - Soit il faut que tu utilises moins de variable.


    Après je sais pas ce que c'est ton erreur mais je pense que dans tes printf, tu as inversé le I et le J.

    Si ce n'est pas ça précise ton erreur.

  15. #15
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    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
    #include <stdio.h>
        #define L 3
        #define C 3
        int main(int argc, char *argv[])
     
    {
        float A[L][C]={{0,1,3},{2,3,9},{8,10,11}};
        float min, max;
        int I,J,i,j;
        min=A[0][0];
        max=A[0][0];
        I=0;
        J=0;
        {
        for(j=0;j<C;j++)
        {if(A[1][j]<min)
        {
            min=A[1][j];
            J=j;
        }}
        printf("Le minimum de la ligne 1 (en partant de zero) est= %f, situé dans la colonne=%d",min, J);
        }
     
        {
        for(i=0;i<L;i++)
        {if(A[i][1]>max)
        {
            max=A[i][1];
            I=i;
        }}
        printf("le maximum%f dans la colonne 1 (en partant de zero) est dans la ligne =%d",max, I);
    }
        return 0;
    }
    oui je m'etais embrouillée au niveau de sprint j'avais inversé I et J... mais je crois qu'il y a un probleme d'accolades aussi...

  16. #16
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 178
    Points : 451
    Points
    451
    Par défaut
    Citation Envoyé par debutanteC1993 Voir le message
    ... mais je crois qu'il y a un probleme d'accolades aussi...
    Il y a surtout des accolades inutiles. Jettes un oeil rapide tu devrais voir lesquelles, surtout si tu te demandes pourquoi séparer ce bloc du reste ou par exemple que fait for(...){if(...){bloc}} que ne ferait pas for(...)if(...){bloc}, encore que dans ce second cas tu peux laisser comme c'est si ça te permet de relire plus facilement ton code, mais alors essaye d'avoir une indentation un peu plus claire.

    Par contre c'est bien de penser à initialiser min et max avant de lancer les boucles de comparaison mais tu initialises avec des valeurs qui ne font pas partie des valeurs à comparer (en pratique tu initialises à A[0][0] puis tu compares les valeurs de A[1][j] et ensuite celles de A[j][1]) du coup tu risque de te retrouver avec des min et des max qui ne sont pas sur la ligne ou la colonne que tu testes, c'est d'ailleurs ce qui se passe avec le min dans ton exemple.

Discussions similaires

  1. Mon premier programme
    Par brisso dans le forum C
    Réponses: 21
    Dernier message: 01/10/2006, 21h21
  2. mon premier programme j2me
    Par adilo dans le forum Java ME
    Réponses: 1
    Dernier message: 14/09/2006, 08h43
  3. [JDOM] Mon premier programme java-xml
    Par adilo dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 12/07/2006, 13h12
  4. [Language] Aide sur mon premier programme Java?
    Par hash2zo dans le forum Langage
    Réponses: 15
    Dernier message: 27/09/2005, 19h26
  5. [Débutant] Mon premier programme: rien ne va...
    Par vincent0 dans le forum OpenGL
    Réponses: 10
    Dernier message: 02/08/2005, 13h59

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