|
|
Auteur
|
Message
|
1
|
|
|
|
Bonjour,
Je voulais savoir s'il y aurait quelqu'un pour m'aider à écrire un mini projet, j'ai un examen qui repose sur ce mini projet et vu que je suis étudiante en licence maths j'avous que ce genre de choses je n'arrive vraiment pas à m'en sortir
voila le lien http://departement.msi.unilim.fr/Documents/Licence/Algo/Algo3/laby.pdf
vous y trouverez les question qui y correpondent
Merci bcp davance!!!!!
-->Message édité par nassoufa_02 le 14/08/2006 17:49:58<--
|
|
|
|
|
Salut,
Merci de mettre un titre plus explicite et sans majuscules
(en cliquant sur )
Et si tu veux qu'on te fasse ton exo à ta place... tu t'es trompé d'endroit
|
|
|
|
|
|
Ce que je demande surtout c'est de m'aider dans les deux premières question SVP !
|
|
arriere, band de newbies ^^
|
|
|
Je veux bien essayer, ca a pas l'air démentiel
C'est quoi "les modules vus en TP" ?
|
|
arriere, band de newbies ^^
|
|
|
Et pour ce qui est de la question bonus "proposez votre methode pour calcul du plus court chemin", suffit de ressortir l'algorithme A-star (ou A* comme on veut), ils pouront rien te dire, c'est le plus utilisé
[edit] Ceci dit, son interet est sa très grande performance face aux algos itératifs de calcul du plus court chemin ... mais il ne trouve pas à coup sur LE plus court chemin (mais il en est jamais loin :D)
-->Message édité par icare_olivier le 14/08/2006 18:33:49<--
|
|
|
|
|
Bonjour,
Dabord Merci bcp de me répondre !
en fais les modules vus en TP ce sont seulement les connaissance de bases en passant par les pointeurs les files et les piles ..
Merci pour la réponse à la question Bonus !
|
|
arriere, band de newbies ^^
|
|
|
Un 3ème post pour dire que j'avais pas vu : l'algo décrit en dernier ressemble énormément à l'algo Astar ...
Astar ajoute un petit bonus : l'estimation par la distance à vol d'oiseau. renseigne toi
-->Message édité par icare_olivier le 14/08/2006 18:43:57<--
|
|
arriere, band de newbies ^^
|
|
|
|
T'as le droit d'utiliser les librairies toutes faites ? :s Je suppose que non ...
|
|
|
|
|
Tiens Je te donne les codes qui nous était fournis !
// file_llc.cpp
#include "file_llc.h"
#include <string.h>
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
void creer (file &f)
{
f.debut = NULL ;
f.fin = NULL ;
}
void ranger (file &f, char *val)
{
if (f.fin == NULL)
{
f.fin = new cellule ;
f.debut = f.fin ;
}
else
{
f.fin -> suivant = new cellule ;
f.fin = f.fin -> suivant ;
}
strcpy (f.fin -> contenu, val) ;
f.fin -> suivant = NULL ;
}
void marquer (file &f)
{
// rien !
}
void premier (file &f)
{
f.courant = NULL ;
}
void prendre (file &f, char *resultat)
{
if (f.courant == NULL)
f.courant = f.debut ;
else
f.courant = f.courant -> suivant ;
strcpy (resultat, f.courant -> contenu) ;
}
bool dernier (file &f)
{
bool b ;
b = (f.courant == f.fin) ;
return b ;
}
void charger (file &f, char *nom)
{
char ligne [LMax + 1] ;
creer (f) ;
FILE *ptr = fopen (nom, "r") ;
if (ptr != NULL)
{
do
{
if (fscanf(ptr, "%s", ligne) == 0)
ranger (f, ligne) ;
}
while (! feof (ptr)) ;
fclose (ptr) ;
}
marquer (f) ;
}
Le 2eme
// file_tab.h
#ifndef _FILE
#define _FILE
// Module de file sequentielle (cf pages 8/14 du cours)
// les éléments sont des chaînes de longueur max = 63
// réalisation physique en tableau, nombre maximum d'éléments : 128
#define LMax 63
#define NbMax 128
struct file
{
char contenu [NbMax] [LMax + 1] ;
int courant, nb ; // de 0 à NbMax
} ;
// la specification fonctionnelle :
void creer (file &f) ;
void ranger (file &f, char *val) ;
void marquer (file &f) ;
void premier (file &f) ;
void prendre (file &f, char *resultat) ;
// pour prendre un réel, prendre une chaîne et
// la convertir par la fonction atof
bool dernier (file &f) ;
// utilitaire annexe
void charger (file &f, char *nom) ;
#endif
Le 3eme
// file_llc.h
#ifndef _FILE
#define _FILE
// Module de file sequentielle (cf pages 8/14 du cours)
// les éléments sont des chaînes de longueur max = 63
// réalisation physique en liste linéaires chaînées
#define LMax 63
struct cellule
{
char contenu [LMax + 1];
cellule *suivant;
} ;
struct file
{
cellule *debut, *courant, *fin ;
} ;
// la specification fonctionnelle :
void creer (file &f) ;
void ranger (file &f, char *val) ;
void marquer (file &f) ;
void premier (file &f) ;
void prendre (file &f, char *resultat) ;
// pour prendre un réel, prendre une chaîne et
// la convertir par la fonction atof
bool dernier (file &f) ;
// utilitaire annexe
void charger (file &f, char *nom) ;
#endif
Le 4eme
// file_tab.cpp
#include "file_tab.h"
#include <string.h>
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
void creer (file &f)
{
f.nb = 0 ;
}
void ranger (file &f, char *val)
{
strcpy (f.contenu[f.nb], val) ;
f.nb = f.nb + 1 ;
}
void marquer (file &f)
{
// rien !
}
void premier (file &f)
{
f.courant = 0 ;
}
void prendre (file &f, char *resultat)
{
strcpy (resultat, f.contenu[f.courant]) ;
f.courant = f.courant+1 ;
}
bool dernier (file &f)
{
bool b ;
b = (f.courant == f.nb) ;
return b ;
}
void charger (file &f, char *nom)
{
char ligne [LMax + 1] ;
creer (f) ;
FILE *ptr = fopen (nom, "r") ;
if (ptr != NULL)
{
do
{
if (fscanf(ptr, "%s", ligne) == 0)
ranger (f, ligne) ;
}
while (! feof (ptr)) ;
fclose (ptr) ;
}
marquer (f) ;
}
Voila J'espere que t'a pas trop mal a la tête
|
|
|
|
|
Ouais Le prof nous a déja parler de l'algo Astar
T'es sur la bonne voie !!!!!
|
|
arriere, band de newbies ^^
|
|
|
lol ! c'est assez mal foutu comme code quand meme ... vous avez jamais parlé de classes ? de liste chainées ?
Je t'en fais un équivalent, plus court et plus pratique vite fait si tu veux...
[edit] je supose que tu connais pas les templates ?
[reedit] aparement si ... ya des listes chainées mais c'est pas tres bien codé quand meme
-->Message édité par icare_olivier le 14/08/2006 19:57:18<--
|
|
|
|
|
Si Si
on en a parler des listes chainées et templates, et si tarrive à me faire un équivalent plus cours et plus pratique ça serait grandement appréciés,
Et puis je pense que t'as tout ce qu'il faut pour répondre Professeur ?
On attaque alors !
|
|
arriere, band de newbies ^^
|
|
|
msn? ca serait plus pratique la liste est codée.
Ceci dit, rien ne vaut un bon vieux std::vector !
|
|
arriere, band de newbies ^^
|
|
|
Bon, t'as pas l'air de répondre maintenant dc je poste le code sur le forum
C'est le code juste pour la liste.
J'ai pas vraiment lu tout le code que tu as posté, mais c'est un petit systeme de liste facilement adaptable à tes besoins Je lirais plus tard ton code pour adapter ca
// -------------------- pfile.h
#ifndef pfile_h
#define pfile_h
template<class T> class _fileElem
{
public:
_fileElem(T ini);
~_fileElem();
void chainDelete();
T elem;
_fileElem<T> * next;
};
template<class T> class pfile
{
public:
pfile();
~pfile();
void ajouter(T add); //ajoute un élement à la fin de la file
void vider(); //vide la file de ses elements
T prendre(); //enlève et renvoie l'élément au debut de la file
private:
_fileElem<T> * start;
_fileElem<T> * end;
};
#include "pfile.cpp"
#endif
// -------------------------------------- pfile.cpp
#ifdef pfile_h
template<class T> _fileElem<T>::_fileElem(T ini){elem=ini;next=(_fileElem<T>*)0;};
template<class T> _fileElem<T>::~_fileElem(){};
template<class T> void _fileElem<T>::chainDelete()
{
if(next)
next->chainDelete();
delete this;
}
template<class T> pfile<T>::pfile(){start=end=(_fileElem<T>*)0;};
template<class T> pfile<T>::~pfile(){vider();};
template<class T> void pfile<T>::ajouter(T add) //ajoute un élement à la fin de la file
{
if(!start)
start = end = new _fileElem<T>(add);
else
{
_fileElem<T> * element = new _fileElem<T>(add);
end->next = element;
end = element;
}
}
template<class T> void pfile<T>::vider() //vide la file de ses elements
{
if(start)
start->chainDelete();
start=end=(_fileElem<T>*)0;
}
template<class T> T pfile<T>::prendre()
{
if(!start)
return T();
_fileElem<T> * retour = start;
start = start->next;
return retour->elem;
}
#endif
PS : j'ai eu un petit problème que je n'explique pas... j'ai du mettre (_fileElem<T>*)0; à la place de NULL... le compilo ne reconaissait pas NULL
-->Message édité par icare_olivier le 14/08/2006 23:27:06<--
|
|
arriere, band de newbies ^^
|
|
|
Dans ton main, pour tester tu peux par exemple mettre :
pfile<string> f;
f.ajouter("Bonjour");
f.ajouter("tout");
f.ajouter("le");
f.ajouter("monde");
for(int i=0; i<4; i++)
cout<<f.prendre();
Tu aurras en sortie dans la console "bonjourtoutlemonde"
|
|
|
|
|
merci bcp pour l'aide que tu m'as fournis, j'en suis vraiment reconnaissant ça d'une part
et d'autre part, eh bien j'ai testé les deux programmes sur Dev cpp j'ai enregistré les deux fichiers .cpp et .h dans un seul projet et quand je les ai éxécuté sa n'a pas l'air de marché et kan je tape exécuter il m dit que le projet n'est pas compilé
Autrement dis, ne te fous pas de moi mais ce que j'aurais bien aimé savoir c'est la démarche pour tester ce joli programme, je travaille sur Dev c++ sous Windows,
Donc je clique sur ouvrir Dev C++ Après new ensuite project console et je copie le code ensuite add file dans le même projet et celui ci je le nomme .h quant à l'autre .cpp Et quand je tape compiler sa plante..
Je te pris de bien M'aider !
Merci D'avance !
N.B: J'ai fais une autre chose que je n'ai pas mentionné c'est que j'ai crée un fichier main.cpp dans le même projet ou j'ai copier le dernier code que tu m'as posté et j'ai toujours le même problème erreur pendant la compilation et projet non compilé !
-->Message édité par nassoufa_02 le 14/08/2006 23:58:59<--
|
|
arriere, band de newbies ^^
|
|
|
J'aurrais du préciser : ton main.cpp doit ressembler à ca :
#include <iostream.h>
#include <string>
#include "pfile.h"
void main()
{
pfile<string> f;
f.ajouter("Bonjour");
f.ajouter("tout");
f.ajouter("le");
f.ajouter("monde");
for(int i=0; i<4; i++)
cout<<f.prendre();
int res; //methode "alternative" pour faire une pause...
cin>>res;
}
-->Message édité par icare_olivier le 15/08/2006 00:05:34<--
|
|
arriere, band de newbies ^^
|
|
|
Pour faire une liste de pixels, il faudra créer une classe "pixel"
ex:
#include <iostream.h>
#include <string>
#include "pfile.h"
class pixel
{
public:
pixel(int ix,int iy,bool m){x=ix;y=iy;mur=m;};
~pixel(){};
// mettre ici toutes les fonctions que tu voudras ajouter
private:
int x,y;
bool m;
};
void main()
{
pfile<pixel> f;
f.ajouter(pixel(12,25,true));
f.ajouter(pixel(12,26,false));
//etc....
int res; //methode "alternative" pour faire une pause...
cin>>res;
}
|
|
arriere, band de newbies ^^
|
|
|
Bien sur, reste à rajouter quelques fonctionalités...
Pour ce qui est de la pile, le code sera sensiblement pareil, mais je te le posterais demain soir
-->Message édité par icare_olivier le 15/08/2006 01:07:11<--
|
|
|
|
|
Bonjour,
merci beaucoup pour le chemin de la file, et merci aussi d'avance pour ce quiest de la pile,
concernant la deuxième question j'ai fais une recherche sur l'algorithme A* j'ai trouvé ça http://fr.wikipedia.org/wiki/Algorithme_A* je vais m'y plonger ce soir, donc s'y t'arrive à avancer sur les autres question ça doit me faire plaisir surtout que la j'ai un imprévu et je ne pourrais me connecter qu'au 17/08
Bon voila je te souhaite bon courage et d'ici à là accepte tout mon profond respect
|
|
arriere, band de newbies ^^
|
|
|
|
|
Re
je suis connectée comme prévu ,
Euh franchement non pas vaiment les vaccances .. les examens c en septembre et y a plein d matières a passer bref .. c un peu lourd comme vaccances
tu px m tracer le chemin e l'algo d la file et moi j'essaierai de faire celui de la pile en comparant avec ce que tu m'avais fais précédement?
Sa srais très gentil de ta part !
|
|
arriere, band de newbies ^^
|
|
|
T'as pas vraiment de chance, j'ai grillé ma carte mère avant hier... je peux plus programmer d'ici jeudi prochain
Ceci dit, si ca attendra jusque la, ca sera avec plaisir ! J'aime bien ce sujet ^^ (j'ai déja codé un algo de pathfinding il y a un bout de temps...)
|
|
|
|
|
ah, je suis vraiment désolée pr toi
j'espère que les dégats seront pas si graves, oups il s'agit d'une carte mère quant meme c dommage koi,
pour moi y a aucun souci je compte vraiment sur toi, et ça me rassure que t'aie travaillé sur des trucs pareils donc on se donne rendez vous d'ici Jeudi Prochain c'est ça? Bom bah voila ben d'ici là je te souhaite bon courage et à très bientot j'espère !
|
|
|
|
|
Bonjour,
jespere que ton probleme de carte c résolu?
Tien moi au courant;
|
|
arriere, band de newbies ^^
|
|
|
Salut ! J'ai enfin à nouveau un pc... mais à quel prix ! Le problème est enfin "résolu", mais ma carte mère a provoqué un ptit crashdisc.... j'ai perdu beaucoup de photos, toute ma bibliothèque multimedia, et le pire : mes sources C++ de mon projet sont illisibles quand je les récupère avec des logiciels spécialisés... Rien à faire, je retourne quasiment 1 an en arrière... bref
Pour ce qui est de ton problème, tu as avancé ? Ou t'es toujours au meme point ?
Bye ^^
|
|
|
|
|
live CD linux
|
|
arriere, band de newbies ^^
|
|
|
|
|
Bonjour,
Euh j'ai essayé de boukiner un peu sur l'algo du pathfinding mais javous que j'ai compris mais sans plus il me faut la deuxieme question pour essaier de comparer et eventuellement trouver une solution avec la pile par exemple
donc je te pris de me répondre sachant que la sa urge un peu
et bien merci
|
|
|
|
|
icare_olivier a écrit :
hum ?
pour ton probleme
|
|
arriere, band de newbies ^^
|
|
|
Ah ! non, c'est le disque qui est crashé, mais j'ai d'autres disques durs pour installer windows si je veux ! Mais j'arrive pas à récuperer les données sur mon ancien disque... déja, windows ne reconait pas le systeme de fichiers (il met RAW au lieu de NTFS) du coup explorer, c'est mort ^^ ensuite, j'utilises des logiciels spécialisés comme stellar phoenix fat & ntfs pour scaner la partition... lui, arrive à trouver les fichiers, mais lors de la récupération, la plupart des fichiers donnent un peu n'importe quoi ... meme si on reconait des bribes d'originaux. (c'est peut etre dut au fait que la compression des fichiers était activée) Bref, j'ai toujours pas réussi à récup mes sources et encore moins mes films, musiques etc
Merci quand meme
-->Message édité par icare_olivier le 28/08/2006 13:50:26<--
|
|
|
|
|
Bonjour, vous vous rappelez de mpi j'espère? bom bah g pas réussi a faire le mini projet laby mais le prof ma donner une seconde chance pour me rattrapper stp j'ai vraiment besoin de votre aide tu peux m'aider a faire les deux première questions il sagit simplement de remplissage de case (on a pas fais les templates) voila
le tp kon doit faire
Remplissage d’une région
On souhaite écrire un programme permettant de remplir une région délimitée.En suivant les memes specification qu'a l'examens du 4 septembre
Pour manipuler les images, vous utiliserez le module image composé des fichiers image.h et image.cpp ci joint
L'image de départ est celle de gauche en dessous dans laquelle la zone à
remplir est délimitée par des pixels noirs.
|
|
|
|
|
Le programme doit :
– Ouvrir l’image de départ
– Demander à l’utilisateur de saisir les coordonnées (x,y) du point de départ
– Appliquer la procédure qui colore en gris les pixels à partir du point de départ
– Enregistrer l’image obtenue
Pour l’exemple ci-dessus et le point de départ (9,15) on obtient l’image de droite.
merci d'avance !
|
|
|
|
|
Voici le fichier image.h
#ifndef IMAGE_H
#define IMAGE_H
#define COTE_MAX 1000
#define NIVEAU_GRIS_MAX 2
#define NOIR 0
#define GRIS 1
#define BLANC 2
/* Module de manipulation des images de labyrinthes
- Les pixels de l'image sont des entiers correspondant a des
niveaux de gris (voir definitions ci-dessus)
- on accede a un pixel par image->mat[colonne][ligne]
avec colonne compris entre 0 et (image->largeur - 1)
et ligne compris entre 0 et (image->hauteur - 1)
- Le pixel [0][0] est le pixel en haut a gauche
- Exemple d'utilisation :
image im;
imageOuvrir(im, "maze.pgm");
im->mat[colonne][ligne] = BLANC;
imageEnregistrerSous(im, "copiemaze.pgm");
*/
struct Image {
int mat[COTE_MAX][COTE_MAX];
int hauteur, largeur;
};
typedef struct Image *image;
/* Opérations */
void imageOuvrir (image &, char *nom);
void imageEnregistrerSous (image, char *);
void imageCopier (image, image &);
#endif
|
|
|
|
|
ceci est image.cpp
#include <cstdio>
#include <cassert>
#include "image.h"
void imageOuvrir (image &im, char *nom)
{
FILE *pgm;
int dummy, i, j;
im = new Image;
assert(im);
pgm = fopen(nom, "r");
assert(pgm);
// Lecture de 'P2'
fscanf(pgm, "%c", &dummy);
fscanf(pgm, "%c", &dummy);
// Lecture de largeur, hauteur, et niveau gris max
fscanf(pgm, "%d", &(im->largeur));
assert((im->largeur>0)&&(im->largeur<=COTE_MAX));
fscanf(pgm, "%d", &(im->hauteur));
assert((im->hauteur>0)&&(im->largeur<=COTE_MAX));
fscanf(pgm, "%d", &dummy);
// Stockage dans la matrice
for (j = 0; j < im->hauteur; j++)
for (i = 0; i < im->largeur; i++)
fscanf(pgm, "%d", &(im->mat[j]));
fclose(pgm);
}
void imageEnregistrerSous (image im, char *nom)
{
FILE *pgm;
int i, j;
pgm = fopen(nom, "w");
assert(pgm);
fprintf(pgm, "P2\n");
fprintf(pgm, "%d %d\n", im->largeur, im->hauteur);
fprintf(pgm, "%d\n", NIVEAU_GRIS_MAX);
for (j = 0; j < im->hauteur; j++) {
for (i = 0; i < im->largeur; i++)
fprintf(pgm, "%d ", im->mat[j]);
fprintf(pgm, "\n");
}
fclose(pgm);
}
void imageCopier(image im, image &copie) {
int i, j;
copie = new Image;
copie->hauteur = im->hauteur;
copie->largeur = im->largeur;
for (j = 0; j < im->hauteur; j++)
for (i = 0; i < im->largeur; i++)
copie->mat[j] = im->mat[j];
}
/*
int main() {
image im, im2;
imageOuvrir(im, "maze8.pgm");
imageCopier(im, im2);
imageEnregistrerSous(im2, "copiemaze.pgm");
}
*/
|
|
1
|