Aide C++ : Structure & Fichier

Fermé
Louise - 13 avril 2006 à 18:28
 10fer - 16 nov. 2008 à 16:36
Bonjour tout le monde! Je suis une débutante en programmation C++ et j'ai un exercice à faire qui est assez difficile pour moi. Voici l'énoncé de cela:
Concevoir un programme en C++ qui lit le fichier dinfo.txt , réalise un tri en ordre alphabétique sur le champ nom et sauvegarde le résultat dans un autre fichier appelé dinfo_apres_tri.txt . On suppose que le contenu du fichier dinfo.txt ne dépasse jamais 10 000 lignes.
En fait, le fichier dinfo.txt est une structure qui comporte une colonne de Nom, de Prénom, de Type, de Type d'appareil, de #extension téléphonique, de Bureau, de #prise, de #inventaire, d'adresse physique et d'adresse IP. Chaque colonne est séparée par un espace ou une tabulation, tous les champs sont remplis et ce fichier est sous format texte.

Voici ce que j'ai fait jusqu'à maintentant, mais je suis bloquée et je n'arrive pas à poursuivre... :

#include <iostream>
#include <fstream>

using std::cout;
using std::ifstream;


struct Info {
char Nom [30] ;
} ;


Lire_element (ifstream Fichier) {
Info Etudiant ;

Fichier >> Etudiant.Nom ;
Return Etudiant ;
}


main () {

ifstream Lecture ;
Info Membre ;

Lecture.open("dinfo.txt") ;
Membre = Lire_element (Lecture) ;

while ( ! Lecture.eof() ) {
for (i=0 ; i<strlen(Nom) ; i++) {



J'espère tellement que vous pourriez m'aider à me débloquer. Merci beaucoup!

44 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
18 avril 2006 à 18:42
Ce que tu peux faire aussi pour ton exercice c'est implémenter un objet équivalent à une map... Mais bon c'est une perte de temps.

Demande à ton prof si tu as le droit d'utiliser les map ou pas parce que c'est vraiment le plus simple.

Si tu n'y as pas le droit essayer de t'inspirer des structures d'arbres (à l'extrème rigueur des listes chainées triées)... sachant que les map du c++ reposent en fait sur une structure d'arbre.

Bonne chance
-1
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
20 avril 2006 à 15:25
Utilise la fonction getline :

http://c.developpez.com/faq/cpp/?page=fichiers#FICHIERS_lecture_par_ligne

Le fonction getligne s'arrêtera quand tu auras fini de lire ton fichier.
Enfin pour comparer deux nom utilise la fonction strcmp comme dit plus haut
extern "C"{
  #include <string.h>
}

int main(){
  printf("strcmp=%d\n",strcmp("plop","tapir"));
  return 0;
}

Mais bon objectivement tu crois pas que ce serait plus simple si tu utilisais des string et des map, comme tout le monde ;)

Bonne chance
-1
kiruasam Messages postés 36 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 11 mai 2006 3
21 avril 2006 à 16:39
tp3.cpp:52: error: `Ligne2' does not name a type
Normal, tu as oublié un point-virgule :
std::string Ligne2 ;

tp3.cpp:54: error: `Un_utilisateur' undeclared (first use this function)
Tu as déclarer une variable "Un_utilisateur" mais dans la fonction Lire_Element, donc elle n'est utilisable que dans cette fonction.
La variable de type utilisateur que tu as déclaré dans la fonction Main est User, donc :
while ( strcmp (User.Nom , Ligne1) < 0)


Voila pour les erreurs de compilation en tout cas,
Good luck
-1
tu pe verifier mon programme car jarrive pa a obtenir ce quil me demande voila ce quil ve


Jeu de vie ou mort
Sur une matrice n x n, une "situation" est composée de cases noires et de cases blanches. Les
cases noires indiquent une "situation de vie", et les cases blanches, une "situation de mort".
Pour une case m[i][j], on définit quatre voisins :
m[i-1][j], m[i+1][j], m[i][j-1] et m[i][j+1].
À chaque tour de jeu, on réexamine la situation des cases de la grille selon les règles
suivantes:
Quatre voisins noirs : "mort par étouffement".
Si la case est blanche, elle reste blanche.
Si la case est noire, elle devient blanche.
Trois voisins noirs : aucun changement.
Deux voisins noirs : "naissance".
Si la case est noire, elle reste noire.
Si la case est blanche, elle devient noire.
Un voisin noir : aucun changement
Zéro voisin noir : "mort par isolement".
Si la case est blanche, elle reste blanche.
Si la case est noire, elle devient blanche.
Écrire un programme qui, après avoir lu une configuration initiale, demande à l'utilisateur le
nombre d'étapes qu'il veut visualiser, et les affiche une à une à l'écran.
Le problème peut être simplifié en prenant une matrice (n+2)x(n+2) dont les contours sont
toujours blancs. En effet, comme les cases blanches n'interviennent pas dans la décision de
modification de l'état d'une case, cette bordure rajoutée artificiellement permettra de ne pas
faire de traitement particulier pour les cases de bordure ou pour les cases d'angle de la matrice
n x n, qui sans cela ne posséderaient que deux ou trois voisins chacune.
On pourra tester le programme produit sur la configuration initiale suivante :
Pour cela, créer un tableau contenant 49 caractères B (pour "blanc") ou N (pour "noir") dans
un ordre qui corresponde à la configuration du dessin ci-dessus, lue ligne par ligne.
On aura intérêt à utiliser les définitions suivantes :
#define T 9
char grille[T][T];
On écrira les fonctions suivantes :
· initialise : initialise la matrice, en mettant des cases blanches sur tout le contour, et en
lisant la couleur initiale de chacune des cases non situées au bord.
· compte : retourne le nombre de voisins noirs d'une case.
· change : calcule une nouvelle situation.
Attention :
Pour l'écriture de cette fonction, il est absolument nécessaire de compter le nombre de
voisins noirs de chaque case en se référant à la situation précédente, et non à la
situation courante.
· affiche : affiche une situation, par exemple sous la forme suivante :
Combien d'étapes souhaitez-vous visualiser : 15
Etape : 0
B B B B B B N
B B B B B N N
B B B B N N N
B B B N N N N
B B N N N N N
B N N N N N N
N N N N N N N
Etape : 1
...
Etape : 15
N N N N N N N
N N B N B N N
N B N N N B N
N N N B N N N
N B N N B N N
N N B N N B N
N N N N N N N
>





et voila mon programme:


#include <stdio.h>
#define T 9

main()

{
char grille[T][T];
int ligne,colone,limit_debut,limit_fin,nombres_de_voisins_noirs;
int nombre_etape_choisi,numero_etape;

numero_etape = 0;
printf("Combien d'etapes souhaiter vous voir?\n");
scanf("%d", &nombre_etape_choisi);


/*--------------------------------------------------------------------------------------------- */
/* FONCTION INITIALISATION GRILLE */
/*--------------------------------------------------------------------------------------------- */

// On initialise tout avec "B" en prenant en compte les bordures

for (ligne=0; ligne <= 9; ligne++)
{
for (colone=0; colone < 9; colone++)
{
grille[ligne][colone] = 'B';
}
grille[ligne][colone] = grille[ligne+1][colone];
printf("\n");
}

// On initialise tout sauf les bordures

limit_debut = 7;
limit_fin = 0;

for (ligne=1; ligne <= 7; ligne++)
{
for (colone=1; colone < 8; colone++)
{

if(colone >= limit_debut || colone <= limit_fin )
{grille[ligne][colone] = 'N';}
}
limit_debut = limit_debut - 1;
}

















// FONCTION AFFICHAGE
system("cls");
printf("\n-----Etape %d-----\n", numero_etape);

for (ligne=1; ligne < 8; ligne++)
{
for (colone=1; colone < 8; colone++)
{
printf("%1c ", grille[ligne][colone]);
}
grille[ligne][colone] = grille[ligne+1][colone];
printf("\n");
}
system("PAUSE");

do{

numero_etape++;
system("cls");

printf("\n-----Etape %d-----\n", numero_etape);
/*--------------------------------------------------------------------------------------------- */
/* FONCTION AFFICHAGE GRILLE */
/*--------------------------------------------------------------------------------------------- */

// FONCTION AFFICHAGE

for (ligne=1; ligne < 8; ligne++)
{
for (colone=1; colone < 8; colone++)
{


/*--------------------------------------------------------------------------------------------- */
/* FONCTION NOMBRE3 VOISINS */
/*--------------------------------------------------------------------------------------------- */

nombres_de_voisins_noirs = 0;


if(grille[ligne - 1][colone] == 'N')
{nombres_de_voisins_noirs++;};
if(grille[ligne + 1][colone] == 'N')
{nombres_de_voisins_noirs++;};
if(grille[ligne][colone - 1] == 'N')
{nombres_de_voisins_noirs++;};
if(grille[ligne][colone + 1] == 'N')
{nombres_de_voisins_noirs++;} ;


/*--------------------------------------------------------------------------------------------- */
/* FONCTION CHANGEMENT SITUATION */
/*--------------------------------------------------------------------------------------------- */


switch(nombres_de_voisins_noirs)
{
case 0:
if(grille[ligne][colone] == 'N')
{
grille[ligne][colone] = 'B';
}
break;
case 2:
if(grille[ligne][colone] == 'B')
{
grille[ligne][colone] = 'N';
}
break;
case 4:
if(grille[ligne][colone] == 'N')
{
grille[ligne][colone] = 'B';
}
break;
default:
break;
}



printf("%1c ", grille[ligne][colone]);
}

printf("\n");
}
system("PAUSE");

}while(numero_etape != nombre_etape_choisi);

printf("\n");
system("PAUSE");
}

/*--------------------------------------------------------------------------------------------- */
/* FONCTION CHANGEMENT SITUATION */
/*--------------------------------------------------------------------------------------------- */

tu pourra me le faire avan mardi stp fo ke je le rend jeudi mersi d'avance
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
22 avril 2006 à 02:32
Ben tu ouvres ce fichier en lecture, tu le parcours avec des std::getline, et tu affiches la ligne lue... Comme c'est très voisin de choses que tu as déjà faites tu devrais y arriver sans problème.

Bonne chance
-1