| Renix | Inördinaire | Dieu scandinave | | 590 messages postés |
| Posté le 08-04-2004 à 02:25:22
| Voici le topic le plus long et le plus inutile de ce forum, soit la source complète de mon TP de programmation. Si vous avez à vous plaindre, dites-le à M. Maelstrom, c'est lui qui l'as voulu... On prends un grand respire: //Auteur: Rémi Boucher //Travail Pratique #2 - Gestion de matériel informatique #include <iostream> #include <iomanip> #include <fstream> using namespace std; const int MAX=21, MAX_CHAR=31, MAX_COM=50; ofstream ecrire; //Pour éviter qu'il réecrive toujours par-dessus le fichier à chaque écriture void main(void) { int codeComposant[MAX], //Parallèle avec composant listeComposant[MAX_COM][MAX_COM] = {0}, //Parallèle avec compagnie nb, l=0, before=0; char composant[MAX][MAX_CHAR], compagnie[MAX_COM][MAX_CHAR]; //Prototypes des fonctions int chargerTableau(int[], int[][MAX_COM], char[][MAX_CHAR], char[][MAX_CHAR], int *); void ecriture(int[], char[][MAX_CHAR], int, int *); void ecriture2(int[], char[][MAX_CHAR], int[][MAX_COM], char[][MAX_CHAR], int *, int *); void tri(int[], int[][MAX_COM], char[][MAX_CHAR], char[][MAX_CHAR], int *); void recherche(int[], int[][MAX_COM], char[][MAX_CHAR], char[][MAX_CHAR], int *); //Appelle la première fonction nb = chargerTableau(codeComposant, listeComposant, composant, compagnie, &l); //Affiche l'entête avec le nombre de composants et de fabricants cout << "Index des fabricants de composants informatiques par Remi Boucher" << endl << "Il y a " << nb << " composants et " << l << " compagnies." << endl; cout << "................................................................................" << endl; //Appelle les autres fonctions ecriture(codeComposant, composant, nb, &l); ecriture2(codeComposant, composant, listeComposant, compagnie, &l, &before); tri(codeComposant, listeComposant, composant, compagnie, &l); before = 1; //Dis à la fonction ecriture2 que le tri à été fait, pour modifier l'entête ecriture2(codeComposant, composant, listeComposant, compagnie, &l, &before); recherche(codeComposant, listeComposant, composant, compagnie, &l); } //Charge les tableaux à partir du fichier et retourne le nombre maximal d'entrées int chargerTableau(int codeComposant[], int listeComposant[][MAX_COM], char composant[][MAX_CHAR], char compagnie[][MAX_CHAR], int *l) { int i, j=0, k, m, n, longueur; char composantTemp[MAX_CHAR], composantTemp2[MAX_CHAR], nomTemp[MAX_CHAR], nomTemp2[MAX_CHAR]; void delGuillemet(char[MAX_CHAR]); //Ouverture du fichier ifstream fichier; fichier.open("materiel.txt",ios::in); if (!fichier) { cerr << "Erreur ouverture fichiern"; exit(1); } i=0; *l=0; //Première lecture fichier >> codeComposant >> composantTemp; while (!fichier.eof() && (i<MAX) && (*l<MAX_COM)) { //Traite le nom des composants longueur = strlen(composantTemp); //Concatène les mots si le nom du composant en contient plusieurs if (composantTemp[longueur-1] != '"') { while (composantTemp[longueur-1] != '"') { fichier >> composantTemp2; strcat(composantTemp," "); strcat(composantTemp,composantTemp2); longueur = strlen(composantTemp); } } delGuillemet(composantTemp); //Appelle la fonction pour supprimer les guillemets strcpy(composant[i],composantTemp); //Copie le nom sans guillemet dans le tableau //Traite le nom des compagnies do { fichier >> nomTemp; //Première lecture strcpy(nomTemp2,nomTemp); //Copie vers une chaîne temporaire en cas de concaténage longueur = strlen(nomTemp); //Concatène les noms tant qu'ils ne finissent pas par ',' ou ';' while(nomTemp[longueur-1] != ',' && nomTemp[longueur-1] !=';') { fichier >> nomTemp; longueur = strlen(nomTemp); strcat(nomTemp2," "); strcat(nomTemp2,nomTemp); } longueur = strlen(nomTemp2); nomTemp2[longueur-1] = ''; k=0; //Vérifie si la compagnie est déjà dans le tableau for (j=0;j<*l;j++) { if (strcmp(compagnie[j],nomTemp2) == 0) k=1; } if (k == 0) { strcpy(compagnie[*l],nomTemp2); (*l)++; } //Inscris les valeurs correspondantes dans listeComposant n=0; while (strcmp(compagnie[n],nomTemp2) != 0) { n++; } m = 0; while (listeComposant[n][m] != 0) { m++; } listeComposant[n][m] = codeComposant[i]; longueur = strlen(nomTemp); } while(nomTemp[longueur-1] != ';'); //Autre lecture i++; fichier >> codeComposant[i] >> composantTemp; } return i; } //Écris dans tp2.rap la liste des composants avec leur code void ecriture(int codeComposant[], char composant[][MAX_CHAR], int nb, int *l) { int i=0; //Initialisation du fichier d'écriture ecrire.open("tp2.rap",ios::out); if (!ecrire) { cerr << "Erreur ecriture fichiern"; exit(1); } //Inscrit l'entête ecrire << "Index des fabricants de composants informatiques par Remi Boucher" << endl << "Il y a " << nb << " composants et " << *l << " compagnies." << endl; //Inscris le code et le nom des composants ecrire << endl << "Code " << "Nom du composant" << endl; for (i=0;i<nb;i++) { ecrire << codeComposant[i] << " " << composant[i] << endl; } } //Écris dans tp2.rap la liste des compagnies avec les composants qu'ils fabriquent et leur code void ecriture2(int codeComposant[], char composant[][MAX_CHAR], int listeComposant[][MAX_COM], char compagnie[][MAX_CHAR], int *l, int *before) { int i=0, j=0, k=0; //Change l'entête si le tri est effectué ou non if (*before == 0) ecrire << "nIndex des compagnies avant le trin" << endl; else ecrire << "nIndex des compagnies apres le trin" << endl; //Inscris les données for (i=0;i<*l;i++) { ecrire << compagnie[i] << endl; j=0; while (listeComposant[i][j] != 0) { ecrire << listeComposant[i][j]; k=0; while (listeComposant[i][j] != codeComposant[k]) { k++; } j++; ecrire << " " << composant[k] << endl; } ecrire << endl; } //Ferme le fichier écrit si le tri est effectué if (*before == 1) ecrire.close(); } //Tri les compagnies en ordre alphabétique tout en faisant suivre leurs tableaux respectifs void tri(int codeComposant[], int listeComposant[][MAX_COM], char composant[][MAX_CHAR], char compagnie[][MAX_CHAR], int *l) { int i, j, k, m, temp2; char temp[MAX_CHAR]; for (i=0;i<*l;i++) { k=i; j=i+1; //Teste deux entrées du tableau while (j<*l) { if (stricmp(compagnie[j], compagnie[k])<0) k=j; j++; } //Effectue le changement strcpy(temp, compagnie[i]); strcpy(compagnie[i], compagnie[k]); strcpy(compagnie[k], temp); for (m=0;m<MAX;m++) { //Synchronise le 2e tableau avec le premier temp2 = listeComposant[i][m]; listeComposant[i][m] = listeComposant[k][m]; listeComposant[k][m] = temp2; } } } //Recherche les compagnies par leur première lettre, puis par leur nom complet //Affiche les composants que la compagnie trouvée fabrique void recherche(int codeComposant[], int listeComposant[][MAX_COM], char composant[][MAX_CHAR], char compagnie[][MAX_CHAR], int *l) { int i, j, k, m, n, o, longueur; char lettre[2], //Nécessaire que ce soit une chaîne pour vérifier avec stricmp() nom[MAX_CHAR]; bool ok; //Première lecture de la lettre cout << "Interrogation de l'index des compagnies" << endl; cout << "Entrez la premiere lettre du nom de compagnie (0 pour terminer): "; cin >> lettre; while (strcmp(lettre,"0" != 0) { cout << endl; j=0; for (i=0;i<*l;i++) { //Compare le premier caractère des deux chaînes, sans prendre la casse en compte if (strnicmp(compagnie[i],lettre,1) == 0) { cout << compagnie[i] << endl; j++; //Indicateur de présence de compagnie } } //Si aucune compagnie commence par cette lettre if (j == 0) { cout << "Aucun nom ne commence par cette lettre" << endl; cout << "nEntrez la premiere lettre du nom de compagnie (0 pour terminer): "; cin >> lettre; } else { //Lecture du nom cout << "nEntrez le nom de compagnie desire en remplacant les espaces" << " par des tirets: "; cin >> nom; do { ok = false; //Indicateur d'erreur longueur = strlen(nom); //Remplace les tirets par des espaces for (k=0;k<longueur;k++) { if (nom[k] == '-') nom[k] = ' '; } m=0; while (stricmp(nom,compagnie[m]) != 0 && m<*l) { m++; //Trouve l'index de la compagnie dans le tableau } if (m != *l) { cout << endl; cout << compagnie[m] << endl; n=0; //Affiche le numéro du composant while (listeComposant[m][n] != 0) { cout << listeComposant[m][n]; o=0; //Trouve le numéro d'index correspondant au numéro dans composant[][] while (codeComposant[o] != listeComposant[m][n]) { o++; } cout << " " << composant[o] << endl; n++; cout << "nEntrez la premiere lettre" << " du nom de compagnie (0 pour terminer): "; cin >> lettre; } } //Si le nom n'est pas trouvé else { cout << "Aucun nom trouve" << endl; cout << "nEntrez le nom de compagnie desire en remplacant les espaces" << " par des tirets: "; cin >> nom; ok = true; //Indicateur d'erreur activé } } while (ok); } } } //Supprime les guillemets du nom des composants void delGuillemet(char composantTemp[MAX_CHAR]) { int longueur, m; char nom[MAX_CHAR]; longueur = strlen(composantTemp); //Décale tout les caractères pour supprimer le guillemet du début for (m=0;m<longueur;m++) { nom[m] = composantTemp[m+1]; } strcpy(composantTemp,nom); //Supprime le guillement de la fin (le remplace par un caractère de fin de chaîne) longueur = strlen(composantTemp); composantTemp[longueur-1] = ''; } 10ko de bonheur, merci
Message édité le 08-04-2004 à 02:25:59 par Renix
-------------------- You're free to be all that you want to - [i]Birdie |
| Renix | Inördinaire | Dieu scandinave | | 590 messages postés |
| Posté le 08-04-2004 à 02:26:29
| Ohh, comme vous êtes chanceux, il a même pas imbriqué
-------------------- You're free to be all that you want to - Birdie |
| maelstrom | 9.8 m/s² qu\'y disent. poooooo sûr. | Membre de la gang | | 557 messages postés |
| Posté le 08-04-2004 à 18:12:11
| té bin tata pourquoi tu upload pas le fichier compilé pis tu met pas un lien??? au moins on pourrait voir à quoi y sert ton prog sans se péter les yeux dedans
-------------------- |
| Renix | Inördinaire | Dieu scandinave | | 590 messages postés |
| Posté le 08-04-2004 à 19:40:01
| Il sert absolument à rien, à part classer des données mises dans un fichier .txt et si tu veux pas te péter les yeux, copie/colle dans Visual C++, tu vas voir plus clair
-------------------- You're free to be all that you want to - Birdie |
| maelstrom | 9.8 m/s² qu\'y disent. poooooo sûr. | Membre de la gang | | 557 messages postés |
| Posté le 16-04-2004 à 16:14:42
| dans la suite du thread le plus long et inutile... 3...
-------------------- |
| maelstrom | 9.8 m/s² qu\'y disent. poooooo sûr. | Membre de la gang | | 557 messages postés |
| Posté le 16-04-2004 à 16:15:54
| 2...
-------------------- |
| maelstrom | 9.8 m/s² qu\'y disent. poooooo sûr. | Membre de la gang | | 557 messages postés |
| Posté le 16-04-2004 à 16:16:55
| 1...
-------------------- |
| maelstrom | 9.8 m/s² qu\'y disent. poooooo sûr. | Membre de la gang | | 557 messages postés |
| Posté le 16-04-2004 à 16:17:57
| wééé!! 500e message inutile du forum!!! sortons les ptites trompettes qui font du bruit *
-------------------- |
| |
|