Vous êtes sur la page 1sur 6

/** * fichier: decode_matrices.

cpp * auteur: Ruben Gonzalez-Rubio * date : Septembre 2011 * * Ce programme va lire deux fichiers en format texte (par appel des fonctions r eadMdata() et readMkeys()), * soient : * - le fichier data.txt (qui contient 100000 entiers alatoires) * - et le fichier cle_E21.txt (ou cle_E22.txt si vous changez le nom du fic hier * lire dans la fonction readMkeys() appele dans le main() ). Choisissez un ou l'autre * des fichiers cle_E21.txt ou cle_E22.txt selon la matrice E21 ou E22 dsire . * Aprs lecture de ces fichiers, les donnes se trouveront dans les tableaux * matrixData et matrixKeys. Le tableau matrixData est en 1 dimension, alors qu e le tableau * matrixKeys est en 2 dimensions (on garde donc le nombre de dimensions des do nnes * qui ont t lues dans les fichiers correspondants soit data.txt, et cle_E21.txt ou cle_E22.txt. * On fait ensuite l'appel la fonction obtainRes() dont le but sera de calculer le contenu * de la matrice dsire (E21 ou E22) selon l'algorithme que vous nous avez fourni (qui se trouve * dans l'Annexe B de votre guide). * Il ne nous a malheureusement pas t possible d'crire le code de la fonction obta inRes() car * nous avons du passer un autre projet. * Nous vous retournons donc le prsent code source en nous en remettant vous pou r complter * le code de la fonction obtainRes(). * Vous trouverez vers la fin du prsent fichier la ligne de commentaire indiquan t que * "VOTRE TRAVAIL DOIT COMMENCER ICI". * Nous y avons plac la dfinition (que vous devez complter) de la fonction obtainR es(). * * Notez que le code source que nous vous fournissons ici comprend aussi les fo nctions requises * afin d'afficher le rsultat de la fonction obtainRes(). La fonction displayMre s() affiche * l'cran, sur une mme ligne, les 9 lments d'une matrice (par exemple, x0 x8). galem ent, * la partie main() du programme se termine par l'appel de la fonction saveRes( ) qui * sauvegarde, dans un fichier texte (nomm res.txt) les 9 lments de la matrice dan s une * forme 3 par 3, i.e. 3 lignes et 3 colonnes. * * Si vous compltez correctement la fonction obtainRes(), ce code devrait compile r correctement * et surtout vous permettre d'afficher le contenu (calcul) de la matrice E21 (ou E22, selon * le nom de fichier que vous mettrez dans l'appel de la fonction readMKeys(). * * Merci, et bon travail. * */

#include <iostream> #include <fstream> #include <iomanip> using namespace std; const const const const const const int int int int int int MAX_SIZE_DATA = 100000; MAX_ROW_KEYS = 9; MAX_COL_KEYS = 52; MAX_SIZE_RES = 9; V_SIZE = 50; SIZE_RES = 3;

// Prototypes des fonctions (les fonctions sont dfinies aprs le main() ) // Affichage d'un message de dpart void init(); // fonction 1 // Initialisation de matrices void initMData(int [], int, int); // fonction 2 void initMKeys(int [][MAX_COL_KEYS], int, int, int); // fonction 3 void initMRes(int [], int, int); // fonction 4 // Lecture de fichiers void readMData(const char fileName[], int [], int); // fonction 5 void readMKeys(const char fileName[], int [][MAX_COL_KEYS], int, int); // foncti on 6 // Affichage du contenu de tableaux void displayMData(int [], int i); // fonction 7 void displayMKeys(int [][MAX_COL_KEYS], int &r, int &c); // fonction 8 void displayMRes(int [], int i); // fonction 9 // Prototype de la fonction que vous devez coder (voir la fin du prsent fichier) void obtainRes(int [], int [][MAX_COL_KEYS],int []); //fonction 10 // Sauvegarde du rsultat dans un fichier de format texte void saveRes(const char fileName[], int []); // fonction 11 // Affiche un message de fin de programme void finish(); //fonction 12 // Le programme principal commence ici avec le main() int main() { cout << endl << "Hello" << endl << endl; // declation for MatrixData int matrixData[MAX_SIZE_DATA]; int sizeData = MAX_SIZE_DATA; // declation for MatrixKeys int matrixKeys[MAX_ROW_KEYS] [MAX_COL_KEYS]; int r = MAX_ROW_KEYS; int c = MAX_COL_KEYS; // Affiche "Hello" l'cran

// declation for MatrixRes int matrixRes[MAX_SIZE_RES]; int sizeRes = MAX_SIZE_RES; init(); // fonction f1, va afficher un message que le programme commence initMData(matrixData, sizeData, -1); // fonctions f2, initialisation des lments d'une matrice initMKeys(matrixKeys, r, c, -1); // fonctions f2, initialisation des lment s d'une matrice initMRes(matrixRes, sizeRes, -1); // fonctions f2, initialisation des lmen ts d'une matrice

readMData("data.txt", matrixData, sizeData); // fonctions f3, lit dans u n fichier readMKeys("cle_E22.txt", matrixKeys, r, c); // fonctions f3, lit dans un fichier

obtainRes(matrixData,matrixKeys,matrixRes); // appel de la fonction que vous devez complter displayMRes(matrixRes, sizeRes); // affichage de donnes l'cran saveRes("res.txt",matrixRes); // sauvegarde dans un fichier des lments ca lculs de la matrice finish(); // Affiche un message que le programme a termin cout << "Bye bye" << endl; }

//--------------------------------------------------// // Dfinitions de fonctions // --> tout est complt sauf la fonction obtainRes() // (voir la fin di fichier) // //--------------------------------------------------// fonction 1 void init() { cout << endl << "Dbut du programme decode_matrices..." << endl << endl; } // fonction 2 void initMData(int m [], int size, int n) { for (int i = 0; i < size; i++) { m[i] = n;

} } // fonction 2 void initMKeys(int m [][MAX_COL_KEYS], int r, int c, int n ) { for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { m[i][j] = n; } } } void initMRes(int m[], int size, int n) { for (int i = 0; i < size; i++) { m[i] = n; } } // fonction 2 void initMatrix(int m[][MAX_SIZE_RES], int r, int c, int n) { for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { m[i][j] = n; } } } // fonction 3 void readMData(const char fileName[], int m[], int size) { ifstream dataStream(fileName, ios::in); if (!dataStream) { cerr << "Open " << fileName << "was impossible " << endl; exit(-1); } for (int i = 0; i < MAX_SIZE_DATA; i++) { dataStream >> m[i]; } }

// fonction 3 void readMKeys(const char fileName[], int m[][MAX_COL_KEYS], int r, int c) { ifstream s(fileName, ios::in);

if (!s) {

cerr << "Open " << fileName << "was impossible " << endl; exit(-1); } for (int i = 0; i < MAX_ROW_KEYS; i++) { for (int j = 0; j < MAX_COL_KEYS; j++) { s >> m[i][j]; } } }

// fonction 4 void displayMData(int m[], int size) { cout << "------------------------" << endl; int count = 0; for (int i = 0; i < size; i++) { cout << m[i] << " " ; count ++; } cout << endl << "------------------------" << endl; cout << count << endl; }

// fonction 4 void displayMKeys(int m[][MAX_COL_KEYS], int &r, int &c) { cout << "------------------------" << endl; for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { cout << m[i][j] << " " ; } cout << endl << "------------------------" << endl; } } void displayMRes(int m[], int size) { cout << "------------------------" << endl; int count = 0; for (int i = 0; i < size; i++) { cout << m[i] << " " ; } cout << endl << "------------------------" << endl; }

//fonction 6 void saveRes(const char fileName[], int m[]) { ofstream s(fileName, ios::out | ios::trunc); for (int i = 0; i < MAX_SIZE_RES; i++) { s << m[i] << " "; if ( (i + 1) % SIZE_RES == 0) { s << endl; } } } // fonction 7A void finish() { cout << endl << "Le travail est termin." << endl << endl; } // VOTRE TRAVAIL DOIT COMMENCER ICI // EN COMPLTANT LA FONCTION obtainRes() //-----------------------------------------------------// // Fonction obtainRes // --> Cette fonction n'est pas complte // On vous demande de terminer ce travail // afin de pourvoir dcoder le contenu // des matrices E21 et E22. // //-----------------------------------------------------void obtainRes(int d[], int keys[][MAX_COL_KEYS], int r[]){ // Mettez votre code ici dans cette fonction ... }