Supprimer les valeurs nulles d'un tableau

Gengoul94 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   -  
 le père -
Bonjour à tous,

Je suis en 1ère année d'IUT informatique et je dois réaliser un petit programme qui permet de saisir des valeurs dans un tableau puis de supprimer les valeurs négatives. C'est là que je bloque...
Voici ce que j'ai réussi à faire :

#include <iostream>
 
using namespace std;
 
int main()
{
    const float STOP=-999.0;
    const int MAXR=10;
    float tab[MAXR], val;
    int i, j=0, nbVal=0;
    cout << "Entrez un reel " << STOP << " pour finir." << endl;
    cin >> val;
    while (val!=STOP && (nbVal < MAXR))
    {
        tab[nbVal]=val;
        nbVal++;
        cin >> val;
    }
    if (val != STOP)
    {
        cout << "Il n'est pas possible d'enregistrer la derniere valeur saisie (" << val << ")." << endl;
    }
    for (i=0 ; i < nbVal; i++)
    {
        cout << tab[i] << " ";
    }
    for (i=0 ; i < nbVal ; i++)
    {
        if (tab[i]!=0)
        {
            tab[j] = tab[i];
            j = j++;
        }
    }
    cout << endl << "Voici vos valeurs nettoyees des valeurs nulles (" << nbVal << ") :" << endl;
    for (i=0 ; i < nbVal ; i++)
    {
        cout << tab[i] << " ";
    }
    return 0;
}


Le problème est que je n'arrive pas à arrêter la boucle au bon moment.
En effet, en entrant 14 0 -5 2 0 0 1 -2 j'obtiens :
"Voici vos valeurs nettoyees des valeurs nulles (8) :
14 -5 2 1 -2 0 1 -2"
J'ai fait d'autres tentatives mais rien de concluant...
J'espère donc que vous voudrez bien m'aider ou me donner des pistes :)

Merci d'avance

A voir également:

5 réponses

le père
 
Bonjour

Ça marche presque, ton programme.
Seulement, quand tu as éliminé les 0, tu n'as plus nbVal nombres, mais j. Ta boucle d'affichage du résultat final doit donc avoir comme condition i<j et non pas i<nbVal.

D'autre part, j=j++; est inutile. j++; suffit pour incrémenter j.
1