bon je doit remettre ce message car il ya eu un probleme.
je tien a precicer que je suis en premiere année informatique,et que je ne base mon code que sur ce que on ma enseigner et en utilisant chat gpt.donc ne venez pas vous pleindre si le code n'est """"pas moderne""" ou autre chose comme cela. ceci est aussi pour un projet en base de programmation.
laby* creation(int p, int q) {
srand(time(0));
laby* L = new laby;
init(*L, p, q);
pile P;
int taillePile = L->p * L->q * 2;
init(P, taillePile);
couple c = {0, 0};
empiler(P, c);
cout << "Entering creation loop" << endl;
while (!vide(P)) {
c = depiler(P);
L->tab[c.i][c.j].etat = true;
couple T[4];
int nbe = 0;
if (c.i > 0 && !L->tab[c.i][c.j].N) {
T[nbe++] = {c.i - 1, c.j};
}
if (c.j > 0 && !L->tab[c.i][c.j].W) {
T[nbe++] = {c.i, c.j - 1};
}
if (c.i < L->p - 1 && !L->tab[c.i][c.j].S) {
T[nbe++] = {c.i + 1, c.j};
}
if (c.j < L->q - 1 && !L->tab[c.i][c.j].E) {
T[nbe++] = {c.i, c.j + 1};
}
if (nbe > 0) {
int d = rand() % nbe;
couple cprime = T[d];
char dep = deterDirec(c, cprime);
open(*L, c, cprime, dep);
L->tab[cprime.i][cprime.j].etat = true;
empiler(P, cprime);
empiler(P, c);
cout << "Random value: " << d << endl;
}
}
return L;
}
voici le main
int main() {
laby* L1 = lire_Laby("laby.txt");
creation(L1->p, L1->q);
ecrire_laby("laby_copy.txt", *L1);
InitCurses();
Show_Lab(*L1);
deplacement(*L1);
int ch = wgetch(stdscr);
for (int i = 0; i < L1->p; ++i) {
delete[] L1->tab[i];}
delete[] L1->tab;
EndCurses();
return 0;
}
le probleme est que le labyrinthe ne ce genere pas aleatoirement,cest toujour le meme labyrinthe.je veut juste savoir ou est le probleme. merci.
Votre code est toujours en C/C++, personne vous corrigera tant que ça ne sera pas du C++.
Votre code n'est pas testable, et ne montre pas comment reproduire les problématiques que vous avez.
Votre problème ne semble pas venir du code mais de l'algorithme, relisez vous et essayez de vous y retrouver, on ne peut pas être dans votre tête sans les tenants et les aboutissants.
P.S Essayez de vous concentrer lors de l'écriture sur un forum afin d'écrire lisiblement et en limitant les fautes d'orthographe.
P.S.1 Mettez vous à la place du lecteur et essayez de vous imaginez si les données apportées peuvent suffire.
- Edité par fred1599 4 janvier 2024 à 10:57:09
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
j'aurais dut mentionner que ceci n'est que une partie du code,car plusieur fichier de references et un fichiser principal est impliquerce que je ne comprend pas est que toute les fonctions sont normalement fonctionnable.le vrai code complet est executable.mais juste le labyrinte ne ce genere pas aleatoirement.
Vous avez pourtant déjà tenté de comprendre l'un des problèmes possibles : la génération de nombre pseudo-aléatoire.
Mais vous ne nous donnez pas le résultat de vos tests.
Est-ce que les séries de traces "Random value" sont les mêmes d'un lancement du programme à l'autre ?
On ne vous aidera pas précisément car vous utilisez des API C type "srand" et ça fait des décennies qu'on doit plus s'en servir.
Alors qu'elle soit bogué dans votre contexte d'exécution (utilisation d'une VM, etc...) n'est pas impossible.
Mais nous, les casses-couilles du modernisme, on va pas se prendre la tête à essayer de comprendre pourquoi un truc qu'un ne devrait plus utiliser depuis le millénaire précédent ne fonctionnerait pas dans un environnement de 2024.
Donc, c'est quoi les valeurs de "Random value" que vous obtenez ?
EDIT :
Ce n'est pas parce qu'un code compile que le code est correct.
Ce n'est parce qu'un exécutable se lance qu'il n'a pas de "bugs".
Donc, c'est quoi les valeurs de "Random value" que vous obtenez ?
- Edité par bacelar 4 janvier 2024 à 11:22:09
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Vous avez pourtant déjà tenté de comprendre l'un des problèmes possibles : la génération de nombre pseudo-aléatoire.
Mais vous ne nous donnez pas le résultat de vos tests.
Est-ce que les séries de traces "Random value" sont les mêmes d'un lancement du programme à l'autre ?
On ne vous aidera pas précisément car vous utilisez des API C type "srand" et ça fait des décennies qu'on doit plus s'en servir.
Alors qu'elle soit bogué dans votre contexte d'exécution (utilisation d'une VM, etc...) n'est pas impossible.
Mais nous, les casses-couilles du modernisme, on va pas se prendre la tête à essayer de comprendre pourquoi un truc qu'un ne devrait plus utiliser depuis le millénaire précédent ne fonctionnerait pas dans un environnement de 2024.
Donc, c'est quoi les valeurs de "Random value" que vous obtenez ?
EDIT :
Ce n'est pas parce qu'un code compile que le code est correct.
Ce n'est parce qu'un exécutable se lance qu'il n'a pas de "bugs".
Donc, c'est quoi les valeurs de "Random value" que vous obtenez ?
- Edité par bacelar il y a moins de 30s
les valeurs de random value que j'obtien sont 0,1 et 2 donc je pense que cela veut dire qu'il ya un probleme,je tien a dire que le srand est ce que on a fait en classe.je ne sais pas quelle serait l'autre alternative.
Comme je te l'ai indiqué dans mon message précédent (qui a été supprimé): - En C++ moderne, sauf raison valable, on utilise pas de pointeurs nu, au mieux des références, au pire des pointeurs intelligents (std::unique_ptr / std::shared_ptr). - Si laby est une classe (ce que j'ose espérer), la génération du labyrinthe incombe aux constructeurs et personne d'autre !!! - Concernant les nombres aléatoire, c'est les fonctions définies dans l'entête <random> qui s'en occupent.
Vu la qualité (majoritairement médiocre) des codes sources que l'on trouve sur le net, je ne fait absolument pas confiance à ChatGPT (ni aucune IA générative) pour générer une code source de qualité.
Comme je te l'ai indiqué dans mon message précédent (qui a été supprimé): - En C++ moderne, sauf raison valable, on utilise pas de pointeurs nu, au mieux des références, au pire des pointeurs intelligents (std::unique_ptr / std::shared_ptr). - Si laby est une classe (ce que j'ose espérer), la génération du labyrinthe incombe aux constructeurs et personne d'autre !!! - Concernant les nombres aléatoire, c'est les fonctions définies dans l'entête <random> qui s'en occupent.
Vu la qualité (majoritairement médiocre) des codes sources que l'on trouve sur le net, je ne fait absolument pas confiance à ChatGPT (ni aucune IA générative) pour générer une code source de qualité.
juste pour etre sur a quoi ressemble un pointeur nu? aussi j'ai inclu <random> tout au debut du code cependant les valeur aleatoir(car j'utilise un message de debogage) sont 0,1 et 2
Je ne vous demande pas les valeurs possibles, bordel !
Je vous demande les séries de valeurs obtenues.
Si c'est les mêmes séries, c'est que votre srand tout pourri appelé n'importe comment (time, ça prend un time_t * en paramètre, pas un int) ne fait pas ce que vous pensez.
Sinon, c'est dans votre algo.
Mais moi, tant qu'on ne montre pas que la génération de nombres pseudo-aléatoire est correct, je ne vais pas m'user les yeux sur un algo écris avec des hiéroglyphes de l'informatique. Bonjour à ton prof. Toutencarton.
>e srand est ce que on a fait en classe.je ne sais pas quelle serait l'autre alternative.
L'alternative ? Il y en a bien plus d'une et Google est ton ami, bordel !
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Je ne vous demande pas les valeurs possibles, bordel !
Je vous demande les séries de valeurs obtenues.
Si c'est les mêmes séries, c'est que votre srand tout pourri appelé n'importe comment (time, ça prend un time_t * en paramètre, pas un int) ne fait pas ce que vous pensez.
Sinon, c'est dans votre algo.
Mais moi, tant qu'on ne montre pas que la génération de nombres pseudo-aléatoire est correct, je ne vais pas m'user les yeux sur un algo écris avec des hiéroglyphes de l'informatique. Bonjour à ton prof. Toutencarton.
>e srand est ce que on a fait en classe.je ne sais pas quelle serait l'autre alternative.
L'alternative ? Il y en a bien plus d'une et Google est ton ami, bordel !
j'ai reusi a regler le probleme mais pas grace a vos remarque passive aggresive monsieur ou madame.pas la peine de passer a la defense mr c++ moderne. deja moi je fait BASE EN PROGRAMMATION,j'apprend LES BASES.pas peut importe cest quoi le c++ moderne.deja que des remarque passive agresive est vraiment la dernier chose dont j'ai besoin en ce moment.
enfin bref,calmez vous,buvez de l'eau. et au revoir.
Donc pas de l'égyptologie de l'informatique, normalement.
C'était un problème dans la génération des nombres ou dans l'algorithme ?
Et "régler" un problème avec une mauvaise solution, c'est pas une situation d'avenir.
>j'apprend LES BASES
Vous n'apprenez pas les bases, vous apprenez des trucs qui ne servent qu'à des experts qui doivent maintenir du code d'il y a plusieurs décennies, ou à faire du très mauvais code, aussi.
Le code "moderne" est plus simple et plus sûr, donc, à moins d'être masochiste, il y a pas "photo".
C'est quoi qu'on n'a pas vu comme erreur dans le code que vous avez posté, pour notre édification à nous les casses-couilles, SVP ?
Désolé, mais du code avec plein d'étoiles (*), ça vous illumine peut-être, mais chez moi, ça me rend aveugle. (pas les mêmes yeux)
P.S.: c'est quoi votre FAC, et qui est votre prof., SVP ?
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Donc pas de l'égyptologie de l'informatique, normalement.
C'était un problème dans la génération des nombres ou dans l'algorithme ?
Et "régler" un problème avec une mauvaise solution, c'est pas une situation d'avenir.
>j'apprend LES BASES
Vous n'apprenez pas les bases, vous apprenez des trucs qui ne servent qu'à des experts qui doivent maintenir du code d'il y a plusieurs décennies, ou à faire du très mauvais code, aussi.
Le code "moderne" est plus simple et plus sûr, donc, à moins d'être masochiste, il y a pas "photo".
C'est quoi qu'on n'a pas vu comme erreur dans le code que vous avez posté, pour notre édification à nous les casses-couilles, SVP ?
Désolé, mais du code avec plein d'étoiles (*), ça vous illumine peut-être, mais chez moi, ça me rend aveugle. (pas les mêmes yeux)
P.S.: c'est quoi votre FAC, et qui est votre prof., SVP ?
Une raison de passer du python de l'enseignement au lycée au C++ (enfin, au C with class des années 80 de ceux qui n'ont pas compris l'intérêt du C++ par rapport au C) ?
Quelle notion/concept du C++ "invalide" l'usage du python ???
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Si tu nous avais donné le contexte dès le départ, on aurais peut être été plus indulgents. Dans le cas contraire, on s'appuie sur les dernières normes en date.
EDIT : Je n'avais pas tout lu et je viens de voir que tu as visiblement résolu ton problème. Tant mieux pour toi. Je t'invite quand même à lire tout mon message parce que si tu as à nouveau besoin d'aide il faut comprendre comment poser une bonne question sinon tu n'obtiendras jamais de bonnes réponses
Il faut aussi comprendre que les gens sur tous les forums prennent de leur temps personnel pour essayer d'aider ceux qui posent des questions. Il est normal qu'ils s'impatientent si ta question est mal posée, incomplète et que tu ne réponds pas à leur question.
Pas de chance tu es tombée directement sur Bacelar, très connu pour la délicatesse de ses messages
Il ne faut pas le prendre personnellement, il est désagréable mais compétent et il essaye vraiment d'aider. Il faut mettre son égo de côté, répondre à ses questions et alors ses réponses seront précieuses
Ce n'est que des variables d'une seule lettre et des abréviations. Il faut comprendre qu'un language de programmation, ça sert surtout à communiquer entre humain. Parce que dans un milieu professionnel, une fois qu'un code est écrit il faut que quelqu'un d'autre le relise et le valide, et 6 mois après on va peut-être revenir dessus et le modifier, ect ... Ou alors on pose une question sur un forum et on a besoin que les gens comprennent notre code pour nous aider. Si le code n'est compréhensible que par celui qui l'a écrit, et seulement quelques jours après son écriture parce qu'au delà il ne se souviendra plus de la logique des abréviations, alors c'est un mauvais code.
Tout le monde a une façon de penser et une logique différentes. Les abréviations logiques pour quelqu'un, ne le seront pas pour d'autre surtout que de nos jours tous les éditeurs de texte ont l'auto complétion (on tape les 3 premières lettre d'une variable ou d'une fonction, et l'éditeur complète pour nous. AUCUNE excuse pour être radin de quelques lettres dans ses variables)
C'est donc INDISPENSABLE d'avoir des noms de classes, des noms de fonctions et des noms de variables qui soient claires, et qui permettent à n'importe quel lecteur de comprendre immédiatement le but et le rôle de la variable/fonction
Par exemple :
laby ==> labyrinthe
creation ==> createLabyrinthe
les paramètres p et q ==> largeur, hauteur (j'imagine que c'est la taille voulue du labyrinthe, on est obligé de deviner)
N, W, S, E ==> North, West, South, East
couple c ==> couple monCouple ou couple paire, pas juste c
Ensuite avec c.i et c.j on devine que dans l'implémentation de ta structure couple, tu accèdes aux éléments avec les variables i et j. Le quel désigne le 1er élément du couple ? i ou j ? On ne peut pas deviner, donc on ne peut pas comprendre le code. Il faut remplacer i et j par first et second par exemple
paire.first et paire.second c'est quand même bien plus clair pour tout le monde que c.i et c.j
Ta question manque aussi énormément de contexte et d'information, quand tu demandes de l'aide il faut nous aider en premier. Nous aider à comprendre les contraintes que tu as (exo de fac, interdiction d'utiliser telle ou telle fonctionnalité de la bibliothèque standard (choix pédagogiques très nul de certains profs mais tu ne serais pas la 1ère dans ce cas et tu évites de voir les ronchons de service hurler que ton code n'est pas moderne)). Nous aider à comprendre le problème :
1 - Quel est le résultat souhaité
2 - Quel est le résultat obtenu
3 - Qu'est ce que tu as déjà fait et essayer pour résoudre le problème
Et enfin il faut nous donner un code que l'on peut exécuter, faire des tests avec. Même quand c'est bien écrit, c'est parfois trop dur de trouver le soucis juste en lisant le texte. On doit tester de notre côté et là c'est impossible. Ne balance pas 100% du code par contre, isole le problème et donne un code MINIMAL mais fonctionnel donc qu'on peut copier coller et exécuter de notre côté.
Tu utilises une structure pile au lieu d'utiliser la pile de la bibliothèque standard std::stack qui définit déjà des fonctions pour empiler et dépiler. Pourquoi ? Si tu n'as pas le choix alors montre nous l'implémentation de pile, il y a peut-être un bug dedans
Tu utilises une structure couple au lieu d'utiliser la bibliothèque standard avec std::pair<int, int>. Pourquoi ? Si tu n'as pas le choix alors montre nous l'implémentation de couple, il y a peut-être un bug dedans
Donne nous l'implémentation de la fonction deterDirec
Quand Bacelar te demande quels sont tes nombres aléatoires, il ne veut pas savoir quels sont les valeurs possible, il faut savoir la liste des valeur que tu obtiens quand tu éxécutes plusieurs fois de suite ton programme
Si la génération aléatoire fonctionne, tu obtiendras une suite de nombre différente à chaque exécution du programme. Mais si il y a un problème avec ta génération de nombre aléatoire (problème classique avec ces vieux machins du C) alors tu auras des "faux aléatoires" et à chaque fois que tu éxécuteras le programme tu auras la même suite de nombre
Mais si il y a un problème avec ta génération de nombre aléatoire (problème classique avec ces vieux machins du C) alors tu auras des "faux aléatoires" et à chaque fois que tu éxécuteras le programme tu auras la même suite de nombre.
Heu ! C'est peut-être un vieux machin du C, mais ça fonctionne un peu mieux que tu ne le prétend ! Et pour un labyrinthe c'est pas dramatique.
C'est le srand(time(0)); qui génère la graine de départ afin qu'elle change à chaque nouvelle exécution ! Bon il aurait du mettre srand(time(NULL)); Sacrilège, je voulais dire srand(time(nullptr)); (Il aurait été préférable qu'il le mette dans la fonction main, mais il appelle sa fonction qu'une seule fois).
Il semblerait qu'il fait des exercices d’algorithmie plus que du C++, alors vos saute d'humeur ne sont pas nécessaire. Il a pas de chance, il est tombé sur les plus virulents. Il aurais du le faire en C et poster sur le forum C. C'est quand même plus calme.
C'est pas en causant comme vous le faites que vous allez convaincre les intervenants. Vous les faites fuire !
Mais si il y a un problème avec ta génération de nombre aléatoire (problème classique avec ces vieux machins du C) alors tu auras des "faux aléatoires" et à chaque fois que tu éxécuteras le programme tu auras la même suite de nombre.
Heu ! C'est peut-être un vieux machin du C, mais ça fonctionne un peu mieux que tu ne le prétend ! Et pour un labyrinthe c'est pas dramatique.
Je ne voulais pas dire que ça ne marchait pas si on s'en servait bien, je voulais dire que c'était un problème classique chez les débutants sur ce forum de foirer leur génération de nombre aléatoire parce qu'ils utilisent mal srand. Donc autant éviter de se casser la gueule et partir sur la solution C++
Yann Amard a écrit:
C'est pas en causant comme vous le faites que vous allez convaincre les intervenants. Vous les faites fuire !
Je ne peux qu'être d'accord avec ça, il n'y a quand même pas eu beaucoup de patience sur ce thread. C'est pas la 1ère à nous poster du C à cause d'un prof trop proche de la retraite et ça ne sera pas la dernière. C'est pas leur faute, comment pourraient-ils avoir le moindre recul pour remettre en question leur apprentissage ? C'est dommage de leur tomber dessus comme ça
- l'auteur qui utilise chatgpt pour lui faire du code qu'il ne comprend pas. Ce n'est absolument pas ce qu'il faut faire pour faire un TP (sinon au pire, copie colle un truc sur Git, ce sont des sujets déjà faits dans le passé....)
- les éternels Ayatollah intégristes de la secte de Skippy le grand gourou qui dès qu'ils voient une fonction en C gueulent au blasphème et à la punition divine. C'est pathétique et comme il a été dit, ça fait fuir les intervenants en plus de ruiner l'ambiance.
J'arrive tard sur le topic pour parler des algorithmes de résolution de labyrinthe, que j'aime bien. Il y en a plusieurs, le plus "simple" étant le pot de peinture, dont s'est "inspiré" ton chatgpt : mais ça a déjà été bien expliqué plus haut.
Pour compléter le premier point, c'est la première fois sur ce forum que je vois des gens partir d'un code qu'ils ont demandé à ChatGPT, mais ce ne sera surement pas la dernière. C'est une boîte de Pandore qui va faire une nouvelle génération d'étudiants qui utiliseront des formules magiques pour résoudre leurs soucis.... je me demande bien ce que ça va donner dans l'avenir....
Je trouve que les dinosaures sont ici de petites choses bien fragiles, pour frôler l'apoplexie à la vue d'un (seul) malheureux new et quelques étoiles et flèches. On se sent une espèce en voie de disparition ?
Au lieu de réciter le catéchisme chapitre pointeurs, ça aurait été plus positis (quoique toujours hors sujet) de montrer une version du même code qui les utilise. Comme ça la foule aurait été immédiatement convaincue tellement c'est indéniablement mieux pour ce code, et se serait convertie illico. Ou pas ?
A part ça, l'OP est obligé de travailler avec les outils qu'on lui impose, et avec les profs qu'il a (*). Inutile de lui gueuler dessus.
Pour Chatgpt, c'est pas une bonne idée pour faire les travaux pratiques qui sont censés aider à apprendre. Les étudiants le verront au premier contrôle sur table, où il s'agira d'avoir une idée pour résoudre un problème. On apprend à jouer de la guitare en jouant de la guitare, pas en regardant faire les autres.
PS des questions qui me sembleraient plus interressantes à discuter
laby* creation(int p, int q) {
srand(time(0));
laby* L = new laby;
init(*L, p, q);
pile P;
int taillePile = L->p * L->q * 2;
init(P, taillePile);
1. pourquoi avoir choisi que cette fonction alloue dynamiquement un laby et retourne son adresse, plutôt que retourner un laby tout simplement (et de yoyoter avec des pointeurs)
2. pourquoi le laby n'est pas initialisé par son constructeur
PS: les plus bouchés pour l'enseignement, c'est pas "les profs proches de la retraite". Le jeune chercheur à qui on a collé un enseignement qu'il croit maîtriser (et de toutes façons il n'en à rien a secouer vu que ça va pas l'aider pour ses publis deadline dimanche minuit), c'est bien pire. (Il y a aussi l'intervenant jeune ingénieur "professionnel de la profession")
(*) qui font eux mêmes avec des contraintes que vous ne connaissez pas, donc gardez les yaka yaka. Candidatez si vous pensez pouvoir faire mieux.
- Edité par michelbillaud 6 janvier 2024 à 17:02:49
fonction generation aleatoire labyrinthe
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html