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 :

Problème boucle avec affichage tableaux


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 6
    Par défaut Problème boucle avec affichage tableaux

    J'ai un problème sur la fin de ce programme, au niveau de ma boucle et affichage de met tableau TPOS et TNEG.

    Voila l'énoncer:
    "écrire un programme qui lit une dimension N d'un tableau T du type int(dimension maximal :50 composantes),remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
    Calculer et afficher la somme des élément du tableau.
    Copier toutes les composantes strictement positives dans un 2eme tableau TPOS et toutes les composantes négative dans un 3eme tableau TNEG.
    Afficher les 3 tableaux"
    Bon voici le code que j'ai tapé:

    J'ai mis un commentaire à l'endroit ou le programme s'arrête de fonctionner.
    Et voici un screen d'où le programme s'arrête.



    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])                        //DEBUT PROGRAMME PRINCIPAL
    {
      int N;                                                //declaration de la variable N nombre de colones
      float T[50];                                          //declaration du tableau T de 50 colones MAX
      float SOM=0;                                          //declaration de la somme des valeurs colones
      int i;                                                //declaration de la variable compteur i (tableau T)
      int j;                                                //declaration de la variable compteur j (tableau TPOS)
      int k;                                                //declaration de la variable compteur k (tableau TNEG)
      float TNEG[50];                                       //declaration du tableau TNEG
      float TPOS[50];                                       //declaration du tableau TPOS
     
     
     
      do                                                    //Debut du test de N                                                                 
      {
           printf("Entrez le nombre de colone N: ");        //Affiche d'une demande d'entrée
           scanf("%i",&N);                                  //Attente d'une demande d'entrée
      }while (N<0 || N>50);                                 //test SI N<0 OU N>50
      printf("\n");                                         //saut de ligne
     
     /*----------DEBUT BOUCLE VALEUR TABLEAU---------------------------------------------------------------*/
     
      for (i=0;i<N;i++)                                     //Boucle pour entrer les valeurs des colones
      {
       printf("Entrez la valeur numero %i du tableau: ",i); //Affiche d'une demande d'entrée
       scanf("%f",&T[i]);                                   //Attente d'une demande d'entrée
       SOM+=T[i];                                           //Calcul de la SOM des valeurs colones
      }
       printf("\n\nSomme=%.2f\n\n",SOM);                    //Affichage de la somme SOM
       printf("T:\n");                                      //saut de ligne
     
     /*---------AFFICHAGE DU TABLEAU T---------------------------------------------------------------------*/  
     
       for (i=0;i<N;i++)                                    //Boucle pour afficher toute les valeurs du tableau T                                                                                     
           printf("%.2f\t",T[i]);                           //Affichage des valeurs du tableau T
     
       printf("\n\n");                                      //saut de 2 lignes
     
     
      /*----------------------------------------------*/
      /*----------------------------------------------*/
      /*LE PROGRAMME FONCTIONNE CORRECTEMENT JUSQU'ICI*/
      /*----------------------------------------------*/
      /*----------------------------------------------*/
     
     
     
      j=0;                                                  //Mise a 0 du compteur j
      k=0;                                                  //Mise a 0 du compteur k
     
       do
       {
            if (T[i]<0)
             {      
                 TNEG[k]=T[i];            
                 j++;
                 k++;  
                 i++;  
     
             }
             else
             {
                 TPOS[j]=T[i];
                 j++;
                 k++;
                 i++;
     
             }
     
       }while (T[i]=N-1);
     
       printf("\nTNEG:\n");
     
     
       printf("\nTPOS:\n");
     
     
     
      system("PAUSE");	
      return 0;
    }
    En espérant que vous pourrez éclairer ma lanterne,
    Cordialement,

    Lamouette76.

    ps:désole pour les commentaire collé au code.

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    c'est normal que cela plante...

    Tu initialize j, k et pas .... i que tu continues à incrementer..

    donc lors du test

    i = 5 donc indice hors tableau qui continue a être incrémenté donc tu tapes la ou il ne faut pas ...

    De plus,

    Ce test est fouareux car tu devrais tester (i < N) alors que tu loopes tant que que T[i] = 4...

    De plus, ton code est un beaucoup redondant er à reorganiser...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    En complément à ce qui a été dit plus haut, dans tes conditions dans la boucle:
    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
            if (T[i]<0)
             {      
                 TNEG[k]=T[i];            
                 j++;
                 k++;  
                 i++;  
     
             }
             else
             {
                 TPOS[j]=T[i];
                 j++;
                 k++;
                 i++;
     
             }
    Tu incrémentes tous les compteurs, alors qu'il ne faut incrémenter que ceux qui sont utiliser dans le bon bloc de code. Par exemple, dans le premier pour remplir TNEG, pour acceder à un indice, tu utilises le compteur k mais par la suite dans le même bloc tu incrémentes aussi j alors qu'il n'est utilisé que dans le second cas, tu risques d'avoir des trous dans tes tableaux !


    PS: Bienvenue sur les forums de developpez.com
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 6
    Par défaut
    Voila je viens de modifier ma boucle do-while, maintenant mais deux printf de TNEG et TPOS s'affiche comme ceci: (il m'affiche toute les valeurs entrées)





    Mais, dans ma boucle for permettant d'afficher les deux tableaux un test me manque:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    printf("\nTNEG:\n");
     
    printf("\nTNEG:\n");
       for(k=0;TEST MANQUANT;k++)
          printf("%.2f%\t",T[k]);
     
     
    printf("\nTPOS:\n");   
       for(j=0;TEST MANQUANT;j++)
          printf("%.2f%\t",T[j]);
    Cordialement,
    Lamouette76.


    ps: merci pour la bienvenue.

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par lamouette76 Voir le message
    Mais, dans ma boucle for permettant d'afficher les deux tableaux un test me manque:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    printf("\nTNEG:\n");
     
    printf("\nTNEG:\n");
       for(k=0;TEST MANQUANT;k++)
          printf("%.2f%\t",T[k]);
     
     
    printf("\nTPOS:\n");   
       for(j=0;TEST MANQUANT;j++)
          printf("%.2f%\t",T[j]);
    Pour afficher les valeurs mises dans les deux tableaux, j'utiliserais à ta place la variable i pour les deux boucles (en reméttant à zéro à chaque fois i ca va de soi), les compteurs k et j étant arrêté au dernier indice utilisé pour chacun de leur tableau respectif, tu peux les utiliser pour le test qu'il te manque soit par exemple:
    Ainsi tu n'afficheras que les valeurs mises et pas tout le tableau
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    J'ai l'impression, que tu devrais repotasser tes notions d'iterations et de boucles (while, for, ...) car vraisemblablement tu as du mal avec ces notions et surtout avec la notion de condition et d'évaluation d'expression...

    Bon courage !
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  7. #7
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 6
    Par défaut
    Je ne comprend pas ce que tu veus dire, car ma variable i est déjà utilisé pour mon tableau T.

    Je ne vois pas comment je peus la réutiliser pour les deux tableaux suivant.
    Utiliser le i dans cette boucle ?

    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
     do
       {
            if (T[i]<0)
             {      
                 TNEG[k]=T[i];                       
                 k++;  
                 i++;  
     
             }
             else
             {
                 TPOS[j]=T[i];
                 j++;
                 i++;
              }
       }while (i<N);

    OU DANS CELLE LA ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    printf("\nTNEG:\n");
     
    for(k=0;i<k;k++)
        printf("%.2f%\t",T[k]);
     
     
    printf("\nTPOS:\n");
     
    for(j=0;i<j;j++)
        printf("%.2f%\t",T[j]);
    Cordialement,
    Lamouette76.

    ps:je suis en BTS iris depuis 1mois,en effet j'ai encore du mal avec de nombreuse chose.xD

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème boucle avec listview
    Par kissifrote dans le forum VB.NET
    Réponses: 4
    Dernier message: 24/05/2013, 11h47
  2. Boucle avec affichage incohérent en C, ok en Bash
    Par Jipété dans le forum Débuter
    Réponses: 2
    Dernier message: 16/05/2013, 00h45
  3. Problème boucle avec plusieurs conditions
    Par Naxence dans le forum Général VBA
    Réponses: 2
    Dernier message: 29/03/2012, 14h38
  4. [MySQL] Problème fonction d'affichage tableaux résultats
    Par stefsas dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/03/2010, 14h44

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