Bonjour,
Je souhaite réaliser un programme qui puisse générer aléatoirement des nombres compris entre 1 et une borne supérieure que je noterai par la variable x (par exemple x=500).
Pour celà je lui donne en entrée la borne supérieur x et il me fait n tirage compris entre 1 et 500, pour les stocker ensuite dans une matrice colonne.
J'ai réussi à écrire le code suivant mais je ne comprend pas ce ne qui marche pas. Je ne suis pas un expert en c++, donc forcement j'ai du mal à voir ce qui ne va pas.
Je vous joint mon fichier source qui contient la main:
Code :
- //fichier main principal
- #include "essai.h"
- #include <iostream>
- #include <sstream>
- #include <fstream>
- #include <iomanip>
- #include <string>
- using namespace std;
- int main()
- {
- ifstream fichierEntree("O:\\opgestion\\service\\OAM\\Risk Management\\VaR\\Var_Version_1.0\\Matrice rendements.txt", ios::in);
- //lecture de la profondeur historique commune au portefeuille
- int x;
- fichierEntree >> x;
- std::cout << x << std::endl;
- //lecture du nombre de simulation souhaitée
- int nbre_simul;
- fichierEntree >> nbre_simul;
- std::cout << nbre_simul << std::endl;
- //initialise la matrice de sortie
- ColumnVector sortie;
- sortie.ReSize(x);
- sortie = Simul_Histo(x,nbre_simul);
- std::cout << sortie(2) << std::endl;
- return 0;
- }
|
Mon fichier source qui contient les fonctions:
Code :
- // Il s'agit du fichier DLL principal.
- #include "stdafx.h"
- #include "HistoSim.h"
- int nbre_tire(int min, int max)
- {
- srand(time(Null));
- //renvoie d'un nombre entier naturel compris dans l'intervalle [min,max[
- unsigned int intervalle = max - min;
- int tirage = min + (rand() % intervalle);
- ASSERT(tirage >= min && tirage <= max);
- return tirage;
- }
- ReturnMatrix Simul_Histo(const int& prof_histo, const int& nbre_simul)
- {
- //créer une matrice colonne Simul_Histo
- ColumnVector Simul_Histo;
- //redimensionne la matrice Simul_Histo avec la dimension correpondante
- //au nombre de titre
- Simul_Histo.ReSize(nbre_simul);
- //générateur de loie normale
- for (int i=1; i<=nbre_simul; ++i)
- {
- Simul_Histo(i)= nbre_tire(1,prof_histo);
- }
- Simul_Histo.Release();
- return Simul_Histo;
- }
|
En sortie j'ai le message d'erreur suivant :
[/code]
------ Début de la régénération globale : Projet : SimulHisto, Configuration : Release Win32 ------
Supprimer des fichiers de sortie et des fichiers intermédiaires du projet 'SimulHisto', configuration 'Release|Win32'.
Compilation...
Stdafx.cpp
Compilation...
Submat.cpp
sort.cpp
Solution.cpp
Sl_ex.cpp
Newmatex.cpp
Newmat9.cpp
Newmat8.cpp
Newmat7.cpp
Newmat6.cpp
Newmat5.cpp
Newmat4.cpp
Newmat3.cpp
Newmat2.cpp
Newmat1.cpp
Myexcept.cpp
HistoSim.cpp
HistoSim.cpp(8) : warning C4518: 'int ' : classe de stockage ou spécificateur(s) de type inattendu(es) ; ignoré(es)
HistoSim.cpp(8) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'nbre_tire'
HistoSim.cpp(10) : error C2065: 'Null' : identificateur non déclaré
evalue.cpp
essai.cpp
essai.cpp(29) : error C3861: 'Simul_Histo': identificateur introuvable, même avec une recherche qui dépend de l'argument
Cholesky.cpp
Bandmat.cpp
Le journal de génération a été enregistré à l'emplacement "file://d:\Documents and Settings\Amor\Desktop\Simul_Histo_c++\Release\BuildLog.htm"
SimulHisto - 3 erreur(s), 1 avertissement(s)
---------------------- Terminé ----------------------
Régénération globale : 0 a réussi, 1 a échoué, 0 a été ignoré
[/code]
Les autres fichiers sources que vous voyez correspondent simplement à une bibliothèque de Matrice nommé Newmat et que j'ai déjà testé auparavant et qui marche bien.
Mon problème vient de l'implémentation de la fonction nbre_titre qui génére par exemple un nombre compris entre 1 et 500, est ce quelqu'un aurait une idée la-dessus?
Merci de votre aide