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
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
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
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
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
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
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
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
21 avril 2006 à 16:39
tp3.cpp:52: error: `Ligne2' does not name a type
Normal, tu as oublié un point-virgule :
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 :
Voila pour les erreurs de compilation en tout cas,
Good luck
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
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
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
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
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
Bonne chance