ootbtdkg2
Messages postés11Date d'inscriptionmardi 24 février 2004StatutMembreDernière intervention20 septembre 2008 20 sept. 2008 à 14:39
slt,
je voudrais te demander si l'algorithme de djikstra tient compte des cycles possibles dans les suites d'arcs à 2 sommets en cycles multiples co-cycliques ou non ?
parce que je suis en train de présenter la résolution totale de matrices quelconques quelquesoit les fonctionneles ou équations indéterminées présentes; en rapport avec la résolution de nombreux problèmes dont notamment le jeu d'échecs! et je développe présentement ! un algorithme et un code source pour le calcul de toutes les positions au jeu d'échecs en tenant compte des matrices et non de l'allocation dynamique contiguë de mémoire qui de ce fait de contigüité n'est pas optimale étant entendu que la mémoire allouable max pour un processus reste équivalente !!!!! de plus ! l'aspect visuel directement représentable des matrices permet plus facilement de déterminer les commutativités, asymétries, cycles ou itérations redondantes plus aisément !!!!! surtout lorque l'on est en mode manuel !!!!! avec retour de la commande shell au programmeur pour décision litigieuse !!!!! à résoudre !!!!!
confère mes pages à ootbtdkg2 pour plus d'infos !!!!!
cordialement,
considérations,
didkac
Cyberboy2054
Messages postés173Date d'inscriptionjeudi 20 décembre 2001StatutMembreDernière intervention22 août 2008 25 juil. 2008 à 13:33
Brunews:
On s'en fout un peu du cycle perdu, c'est vraiment pas dans une portion critique du code.
Par contre du code chiant à lire, je trouve ca plus critique.
C'est vrai que quelque chose comme
if (q==1) // traitement 1
else if (q==2) // traitement 2
else {
printf/scanf
}
aurait été un poil meilleur, mais bon l'idée c'était surtout de pas écrire de goto la ou un if/else aurait suffit..
Mais je connais ton opinion la dessus, pas la peine de continuer le débat sur un sujet ou chacun à des arguments ...
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 24 juil. 2008 à 20:10
scanf("%d", &n) ne peut qu'accepter un nombre. Si ce n'est pas un nombre, la valeur de n avant l'appel sera conservé.
Suffit donc d'initialiser n à -1 par exemple. Ça ne passera pas le test des bornes et un nouveau nombre sera redemandé, si dans une boucle.
Toujours aucun besoin de test supplémentaire.
Maintenant, si l'utilisateur entre une chaine comme suit: 12%?231, seul les premiers caractères seront prit. Si on tien compte de ce cas, un test sur l'ensemble de la chaine peut devoir s'appliquer. Cependant, sur un projet relativement modeste ou spécialisé (qui n'a pas à traiter ce genre de chose), ce genre de test n'est pas très important, car, de toute façon, si le nombre créé par les premiers caractères dépasse les bornes, ça ne passera toujours pas le test donc aucun débordement tampon possible (résultat (peut-être) faussé cependant).
Ensuite, un caractère, quel qu'il soit vaut toujours une valeur numérique/hexadécimal étant donnée que c'est ce qu'il est. Entre '*' 'a' '$' ou ce que tu veux à la saisie, tu pourras toujours l'utiliser en tant que valeur numérique.
Coté ergonomique (pour l'utilisateur), je te l'accorde, ce n'est pas très chic mais coté logiciel, on s'en fout.
WorldDMT
Messages postés871Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 20121 24 juil. 2008 à 19:47
oui t'a raison SAKingdom
si on met 0 ça donnera rien et si tu ne met pas un chiffre tu met un a ou * t'as essayé?
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 24 juil. 2008 à 19:16
"ne passera pas le test de confirmation"
Quand je parle du test de confirmation ici, je parle du test pour confirmer que le nombre entré est entre 0 et 19 (la représentation entière de 'a' étant 97, (menfin la représentation... ce que vaut réellement 'a') ça ne passera logiquement pas).
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 24 juil. 2008 à 19:11
Ce n'est pas un caractère que l'on test ici mais un entier. Sera TOUJOURS numérique peu-importe que l'utilisateur entre 3 ou 'a'. Si l'utilisateur entre 'a', la valeur sera simplement la représentation numérique du caractère 'a' qui, de toute façon, ne passera pas le test de confirmation. Ce qu'il faut tester ici c'est si les bornes sont respectées (entre 0 et 19 étant donnée que la matrice est de 20 par 20).
Cependant, je le redis encore:
for(i=1;i<=n;i++)
À moins que ce ne soit voulu (je ne vois nul part où sont utilisées les cases t[0][x] ni t[x][0], même chose pour tout les autres tableau d'ailleurs), un tableau commence toujours à l'index 0 et se termine à nombre_delement_total-1 donc:
for(i=0;i<n;i++)
WorldDMT
Messages postés871Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 20121 24 juil. 2008 à 16:11
printf("n=");
scanf("%d",&n);
a:
...
et si ce qu'on a mi c'est pas un numero??
il faut verifié si &n est 0-9
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 24 juil. 2008 à 14:01
Tabou anti goto amène à tester q plusieurs fois, quel bennef...
...
while(q != 1 && q != 2);
on ne sait toujours pas sur quel traitement aller, faut retester q.
choix:
printf(" pour avoir la matrice manuellement tapez '1' \n\n");
printf(" pour avoir la matrice automatiquement tapez '2' \n");
scanf("%d", &q);
if(q == 1) goto manu;
if(q != 2) goto choix;
// ICI TRAITEMENT choix 2
....
manu:
....
Les tabous, faut les laisser aux sectes.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 23 juil. 2008 à 21:58
do/while
int q;
do {
printf(" pour avoir la matrice manuellement tapez '1' \n\n");
printf(" pour avoir la matrice automatiquement tapez '2' \n");
scanf("%d", &q);
} while(q != 1 && q != 2);
Cyberboy2054
Messages postés173Date d'inscriptionjeudi 20 décembre 2001StatutMembreDernière intervention22 août 2008 23 juil. 2008 à 14:01
Un projet d'école avec des goto ?
surprenant...
D'ailleurs ce code fourmille de trucs amusants (genre t'as du mal avec l'orthographe de dijkstra, o=o+1...)
Par contre ca c'est n'importe quoi:
# a:
# printf(" pour avoir la matrice manualement tappez '1' \n\n");
# printf(" pour avoir la mtrice automatiquement tappez '2' \n");
# scanf("%d",&q);
# if(q!=1 && q!=2)
# {
# goto a;
# }
Jveux bien admettre que goto ca puisse etre parfois envisagé dans de tres rares cas (et encore) mais si tu veux l'utiliser partout fais du basic plutot...
int q = -1;
while (q != 1 && q != 2)
{
// note les corrections d'orthographe au passage.
// Si c'est un truc que tu dois rendre, j'imagine que les profs préfèrent une orthographe correcte...
// D'ailleurs la c'est même pas une question d'orthographe mais de relecture
printf(" pour avoir la matrice manuellement tapez '1' \n\n");
printf(" pour avoir la matrice automatiquement tapez '2' \n");
scanf("%d",&q);
}
Chavenay
Messages postés1Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention23 juillet 2008 23 juil. 2008 à 10:03
Bonjour, le nom djickstra est mal orthographié. C'est Dijkstra.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 22 juil. 2008 à 22:43
"c'est pas "void main()" c'est plutot "int main()""
Ce n'est pas très grave.
"le "clrscr();" dans la "int main" ça doit etre "int clrscr();""
Hein ??? Tu repostes la même chose sur chacune de ses sources. Pourquoi veux tu remplacer un appel de fonction par un prototype ? L'appel de clrscr est justifié ici. Il efface l'affichage d'intro.
Aussi je vois partout dans le code (pareil pour tes autres sources d'ailleurs):
for(i=1;i<=n;i++)
C'est voulu ? Parce que sinon, depuis quand un tableau commence à l'index 1 et se termine à l'index nombre_delements_total ?
WorldDMT
Messages postés871Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 20121 22 juil. 2008 à 22:22
salut
dans la ligne N° 8 void main()
c'est pas "void main()" c'est plutot "int main()" et le "clrscr();" dans la "int main" ça doit etre "int clrscr();"
20 sept. 2008 à 14:39
je voudrais te demander si l'algorithme de djikstra tient compte des cycles possibles dans les suites d'arcs à 2 sommets en cycles multiples co-cycliques ou non ?
parce que je suis en train de présenter la résolution totale de matrices quelconques quelquesoit les fonctionneles ou équations indéterminées présentes; en rapport avec la résolution de nombreux problèmes dont notamment le jeu d'échecs! et je développe présentement ! un algorithme et un code source pour le calcul de toutes les positions au jeu d'échecs en tenant compte des matrices et non de l'allocation dynamique contiguë de mémoire qui de ce fait de contigüité n'est pas optimale étant entendu que la mémoire allouable max pour un processus reste équivalente !!!!! de plus ! l'aspect visuel directement représentable des matrices permet plus facilement de déterminer les commutativités, asymétries, cycles ou itérations redondantes plus aisément !!!!! surtout lorque l'on est en mode manuel !!!!! avec retour de la commande shell au programmeur pour décision litigieuse !!!!! à résoudre !!!!!
confère mes pages à ootbtdkg2 pour plus d'infos !!!!!
cordialement,
considérations,
didkac
25 juil. 2008 à 13:33
On s'en fout un peu du cycle perdu, c'est vraiment pas dans une portion critique du code.
Par contre du code chiant à lire, je trouve ca plus critique.
C'est vrai que quelque chose comme
if (q==1) // traitement 1
else if (q==2) // traitement 2
else {
printf/scanf
}
aurait été un poil meilleur, mais bon l'idée c'était surtout de pas écrire de goto la ou un if/else aurait suffit..
Mais je connais ton opinion la dessus, pas la peine de continuer le débat sur un sujet ou chacun à des arguments ...
24 juil. 2008 à 20:10
Suffit donc d'initialiser n à -1 par exemple. Ça ne passera pas le test des bornes et un nouveau nombre sera redemandé, si dans une boucle.
Toujours aucun besoin de test supplémentaire.
Maintenant, si l'utilisateur entre une chaine comme suit: 12%?231, seul les premiers caractères seront prit. Si on tien compte de ce cas, un test sur l'ensemble de la chaine peut devoir s'appliquer. Cependant, sur un projet relativement modeste ou spécialisé (qui n'a pas à traiter ce genre de chose), ce genre de test n'est pas très important, car, de toute façon, si le nombre créé par les premiers caractères dépasse les bornes, ça ne passera toujours pas le test donc aucun débordement tampon possible (résultat (peut-être) faussé cependant).
Ensuite, un caractère, quel qu'il soit vaut toujours une valeur numérique/hexadécimal étant donnée que c'est ce qu'il est. Entre '*' 'a' '$' ou ce que tu veux à la saisie, tu pourras toujours l'utiliser en tant que valeur numérique.
Coté ergonomique (pour l'utilisateur), je te l'accorde, ce n'est pas très chic mais coté logiciel, on s'en fout.
24 juil. 2008 à 19:47
si on met 0 ça donnera rien et si tu ne met pas un chiffre tu met un a ou * t'as essayé?
24 juil. 2008 à 19:16
Quand je parle du test de confirmation ici, je parle du test pour confirmer que le nombre entré est entre 0 et 19 (la représentation entière de 'a' étant 97, (menfin la représentation... ce que vaut réellement 'a') ça ne passera logiquement pas).
24 juil. 2008 à 19:11
Cependant, je le redis encore:
for(i=1;i<=n;i++)
À moins que ce ne soit voulu (je ne vois nul part où sont utilisées les cases t[0][x] ni t[x][0], même chose pour tout les autres tableau d'ailleurs), un tableau commence toujours à l'index 0 et se termine à nombre_delement_total-1 donc:
for(i=0;i<n;i++)
24 juil. 2008 à 16:11
scanf("%d",&n);
a:
...
et si ce qu'on a mi c'est pas un numero??
il faut verifié si &n est 0-9
24 juil. 2008 à 14:01
...
while(q != 1 && q != 2);
on ne sait toujours pas sur quel traitement aller, faut retester q.
choix:
printf(" pour avoir la matrice manuellement tapez '1' \n\n");
printf(" pour avoir la matrice automatiquement tapez '2' \n");
scanf("%d", &q);
if(q == 1) goto manu;
if(q != 2) goto choix;
// ICI TRAITEMENT choix 2
....
manu:
....
Les tabous, faut les laisser aux sectes.
23 juil. 2008 à 21:58
int q;
do {
printf(" pour avoir la matrice manuellement tapez '1' \n\n");
printf(" pour avoir la matrice automatiquement tapez '2' \n");
scanf("%d", &q);
} while(q != 1 && q != 2);
23 juil. 2008 à 14:01
surprenant...
D'ailleurs ce code fourmille de trucs amusants (genre t'as du mal avec l'orthographe de dijkstra, o=o+1...)
Par contre ca c'est n'importe quoi:
# a:
# printf(" pour avoir la matrice manualement tappez '1' \n\n");
# printf(" pour avoir la mtrice automatiquement tappez '2' \n");
# scanf("%d",&q);
# if(q!=1 && q!=2)
# {
# goto a;
# }
Jveux bien admettre que goto ca puisse etre parfois envisagé dans de tres rares cas (et encore) mais si tu veux l'utiliser partout fais du basic plutot...
int q = -1;
while (q != 1 && q != 2)
{
// note les corrections d'orthographe au passage.
// Si c'est un truc que tu dois rendre, j'imagine que les profs préfèrent une orthographe correcte...
// D'ailleurs la c'est même pas une question d'orthographe mais de relecture
printf(" pour avoir la matrice manuellement tapez '1' \n\n");
printf(" pour avoir la matrice automatiquement tapez '2' \n");
scanf("%d",&q);
}
23 juil. 2008 à 10:03
22 juil. 2008 à 22:43
Ce n'est pas très grave.
"le "clrscr();" dans la "int main" ça doit etre "int clrscr();""
Hein ??? Tu repostes la même chose sur chacune de ses sources. Pourquoi veux tu remplacer un appel de fonction par un prototype ? L'appel de clrscr est justifié ici. Il efface l'affichage d'intro.
Aussi je vois partout dans le code (pareil pour tes autres sources d'ailleurs):
for(i=1;i<=n;i++)
C'est voulu ? Parce que sinon, depuis quand un tableau commence à l'index 1 et se termine à l'index nombre_delements_total ?
22 juil. 2008 à 22:22
dans la ligne N° 8 void main()
c'est pas "void main()" c'est plutot "int main()" et le "clrscr();" dans la "int main" ça doit etre "int clrscr();"