[C++] Besoin d'une petite astuce en C++

Résolu/Fermé
paupiette Messages postés 43 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 24 janvier 2008 - 30 août 2005 à 12:53
 amel - 16 juil. 2007 à 12:03
Bonjour à tous!


Je débute en programmation et j'ai un petit problème sur un programme.
Je programme en C++ sur le logiciel Dev-C++


En fait je mène un meme calcul pour différentes valeurs de mes variables, du type: 36*a+57*b+486*c...
Mes variables prennent successivement les valeurs -1, 0 et 1.
Mon problème de vient pas du calcul en lui meme (fait par itérations successives) mais de l'indexage des résultats. Je voudrais les classer par ordre croissant dans un genre de tableau. Pour l'instant, ils s'affichent juste les uns après les autres dans l'ordre du calcul (Mon but final est de trouver quelles sont les premières valeurs positives qui manquent). Auriez vous une idée? Je ne sais absolument comment procéder!

Merci d'avance,

Paupiette

5 réponses

salut, utilise les vector (#include<vector>, en utilisant using std::vector), ensuite tu pourras les trier par ordre croissant.
Si v est ton vector alorr si v(i+1) != v(i)+1 cela veut dire qu'il manque des nombres

j'espère que cela t'aidera.
Pom
0
paupiette Messages postés 43 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 24 janvier 2008 10
30 août 2005 à 16:27
Salut,

Merci de ta réponse!


Je ne sais pas ce que sont les vector, désolé... Puis-je appliquer ce "statut" a ma variable représentant le résultat de mon opération?

Je comprend bien comment marche ta commande mais
Peut-on savoir quelle est la valeur manquante? (combien vaut "i" si j'ai bien compris)

D'autre part, quelle est la commande pour trier mes valeurs?

Et enfin, une question bete: J'ai un grand nombre de valeurs et lorsque je lance mon programme, les premières disparaissent au fur et a mesure pour laisser leur place aux nouveaux résultats du calcul! Peut-on empécher ça?


En tout cas, encore merci de m'avoir répondu!

^^

Paupiette
0
Re salut,
ton prgm doit donner qqch comme ca :

#include<iostream>
#include<vector>

using std::cout;
using std::endl;
using std::vector;

int main()
{

vector<int> v; // creaction d'un vector

for(int a= blablabla)
for(int b= blablabla)
for(int c= blablabla)
v.push_back(36*a+57*b+486*c);
std::sort(v.begin(), v.end()); // on trie par ordre croissant le vector v

// maintenant on va déterminer les nombres entiers qui manquent

int p=v[0]; // 1e element de v
int q=v[1]; // 2e element de v
int i=3; // compteur
while( (q-p==1) & (i<v.size) )
{
p=q;
q=v[i];
i++;
}

if(i==v.size())
cout<<"aucun element manquant\n";
else
cout<<"il manque les elements\n";
for(int j=p+1;j<q;j++) cout<<j<<" "<<endl;
cout<<"\n";
return 0;
}

pom
0
Bonjour,

je viens de passer à builder 6 et je ne retrouve pas la fonction sort pour les vector . J'ai bien indiqué comme dans le post using std:: vector et std::sort.
et j'ai ce message d'erreur "sort is not a member of std"

que faire?

Je vous remercie d'avance pour votre réponse.
0
paupiette Messages postés 43 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 24 janvier 2008 10
30 août 2005 à 18:48
Merci beaucoup pour ta longue réponse!
Pfffiou! J'ai un peu de mal à tout comprendre!


Déjà, en copiant mot à mot ton prog, la compilation bloque au "while", je ne sais pas pourquoi...

Ensuite, j'aurais (encore) quelques questions:

Que signifient les commandes du type "using std::cout;", quelle est la différence avec une librairie?

Quelle est la différence entre un vector et un tableau?

Est il possible d'afficher le vector, je n'ai pas réussi...

Ta syntaxe:
for(int a= blablabla)
for(int b= blablabla)
for(int c= blablabla)
est elle identique a celle-ci (boucles imbriquées):
for(int a= blablabla)
{
for(int b= blablabla)
{
for(int c= blablabla)
...

La fonction v.push_back(zaza) affecte-elle bien la valeur zaza à la suite dans v, elle rajoute un élément?

peut-on affecter autre chose que des nombres dans un vector?

Voilà, j'ai compris tout le reste!! :-)


Paupiette
0
Salut,


Déjà, en copiant mot à mot ton prog, la compilation bloque au "while", je ne sais pas pourquoi...

-> quel est le message d'erreur ?

Que signifient les commandes du type "using std::cout;", quelle est la différence avec une librairie?

-> std::cout : tu utilises le cout de l'espace de nom standard. Tu peux aussi mettre using namespace std. En marquant using std::cout, tu n'utilises que le cout de std. Ca peut éviter les conflits.

http://c.developpez.com/faq/cpp/?page=console#SL_using_namespace

Quelle est la différence entre un vector et un tableau?

-> le temps d'accès à un élément d'un tableau est plus court que le temps d'accès à un vector (ce n'est pas un vecteur mais un vector d'ailleurs) : mais la différence est en nanoseconde.
Ensuite, avec un tableau, tu dois définir la taille de ce dernier AVANT de l'utiliser (exemple int tab[5]) alors qu'avec un vector tu peux lui définir une taille et faire ensuite ce que tu veux. Sur les vectors, tu peux faire plein d'instructions (tri, troncature etc...) Bref, les vectors sont bien plus faciles à utiliser qu'un tableau

Est il possible d'afficher le vector, je n'ai pas réussi...

-> oui :
for(int i=0;i<v.size();i++) cout<<v[i]<<" ";
tu ne peux pas faire directement cout<<v<<endl; à moins que tu surchage le cout

Ta syntaxe:
for(int a= blablabla)
for(int b= blablabla)
for(int c= blablabla)
est elle identique a celle-ci (boucles imbriquées):
for(int a= blablabla)
{
for(int b= blablabla)
{
for(int c= blablabla)
...

-> oui, si tu ne mets pas d'accolades cela veut dire que tu ne fera qu'une seule instruction.
exemple
for(int i=0;i<5;i++)
cout<<"toto";
cout<<"tata";

tu afficheras 5 fois toto et une fois tata

for(int i=0;i<5;i++)
{
cout<<"toto";
cout<<"tata";
}

tu afficheras 5 fois toto et tata

La fonction v.push_back(zaza) affecte-elle bien la valeur zaza à la suite dans v, elle rajoute un élément?

-> la fonction pusb_back(zaza) insère à la fin de ton vector l'élément zaza

peut-on affecter autre chose que des nombres dans un vector?

-> bien sûr (et heureusement). Un vector est un conteneur donc il contient ce que tu veux :
vector<int> v contient des entiers
vector<string> v contient des string
vecot<vector< double> > v v est un vector de vector de double

Voilà, j'ai compris tout le reste!! :-)

-> très bien.

un super cours de C++ :
http://c.developpez.com/faq/cpp/
(paragraphe 10 pour les namespaces)

Pour les vectors, tu trouveras une partie de ton bonheur ici :
http://c.developpez.com/faq/cpp/?page=STL#STL_vector

bonne continuation
Pom
0
paupiette Messages postés 43 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 24 janvier 2008 10
31 août 2005 à 13:38
Encore merci pour cette réponse!


le message d'erreur lors de la compilation au moment du while est:

"invalid une of member (did you forget the '&'?)"

Après avoir regardé le cours que tu m'as conseillé j'ai remplacé v.size par v.size() et ca marche très bien!

Je commence a comprendre, il ne me reste plus qu'a bricoler pour insérer cela dans mon programme mais le gros du travail est fait.

Il me reste toujours le petit problème de l'affichage pendant l'execution, comme j'ai trop de valeurs, les premières disparaîssent... Mais c'est pas trop grave, c'est plus par curiosité.

En tout cas un grand merci, je vais me mettre sur mon programme, et je te tiens au courant de l'avancée


A bientot

Paupiette
0
salut,
exact, j'avais oublié les parenthèses pour le v.size() (je les avais pourtant bien mises la seconde fois).

Il ne te reste plus qu'à faire tes boucles for.
bonne contination.
Pom
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
paupiette Messages postés 43 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 24 janvier 2008 10
1 sept. 2005 à 17:22
Ca y est!

Mon programme est terminé, tout fonctionne!

Merci beaucoup Pom pour ces conseils!


A bientot

Paupiette
0
Salut,
mais de rien, ca me fait aussi plaisir que ton prgm marche car je pense que tu as un peu plus appris le C++.

bonne continuation dans la programmation
Pom
0