My two öres
Administrateurs : Renix
 
 My two öres  My two öres 

 Le plus long et le plus inutile

Nouveau sujet   Répondre
 
Bas de pagePages : 1  
Renix
Inördinaire
Dieu scandinave
Renix
590 messages postés
   Posté le 08-04-2004 à 02:25:22   Voir le profil de Renix (Offline)   Répondre à ce message   http://www.my2ores.cjb.net   Envoyer un message privé à Renix   

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
Renix
590 messages postés
   Posté le 08-04-2004 à 02:26:29   Voir le profil de Renix (Offline)   Répondre à ce message   http://www.my2ores.cjb.net   Envoyer un message privé à Renix   

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
maelstrom
557 messages postés
   Posté le 08-04-2004 à 18:12:11   Voir le profil de maelstrom (Offline)   Répondre à ce message   Envoyer un message privé à maelstrom   

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
Renix
590 messages postés
   Posté le 08-04-2004 à 19:40:01   Voir le profil de Renix (Offline)   Répondre à ce message   http://www.my2ores.cjb.net   Envoyer un message privé à Renix   

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
maelstrom
557 messages postés
   Posté le 16-04-2004 à 16:14:42   Voir le profil de maelstrom (Offline)   Répondre à ce message   Envoyer un message privé à maelstrom   

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
maelstrom
557 messages postés
   Posté le 16-04-2004 à 16:15:54   Voir le profil de maelstrom (Offline)   Répondre à ce message   Envoyer un message privé à maelstrom   

2...


--------------------
maelstrom
9.8 m/s² qu\'y disent. poooooo sûr.
Membre de la gang
maelstrom
557 messages postés
   Posté le 16-04-2004 à 16:16:55   Voir le profil de maelstrom (Offline)   Répondre à ce message   Envoyer un message privé à maelstrom   

1...


--------------------
maelstrom
9.8 m/s² qu\'y disent. poooooo sûr.
Membre de la gang
maelstrom
557 messages postés
   Posté le 16-04-2004 à 16:17:57   Voir le profil de maelstrom (Offline)   Répondre à ce message   Envoyer un message privé à maelstrom   

wééé!! 500e message inutile du forum!!!

sortons les ptites trompettes qui font du bruit *


--------------------
Haut de pagePages : 1  
 
 My two öres  My two öres  Le plus long et le plus inutileNouveau sujet   Répondre
 
Identification rapide :         
 
Divers
Imprimer ce sujet
Aller à :   
 
créer forum