cs_Alain Proviste
Messages postés908Date d'inscriptionjeudi 26 juillet 2001StatutModérateurDernière intervention 1 février 2015
-
27 mars 2005 à 22:14
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 2009
-
2 avril 2005 à 14:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 2 avril 2005 à 14:50
Mise a jour : passage en fastcall des fonctions Puiss et asmDivide (en gros, j'ai suivi les conseils de Brunews). N'hésitez a me dire s'il ya des trucs qui ne vont tjrs pas.
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 30 mars 2005 à 20:07
Une enorme couille dans mes 2 codes (C et ASM), je rectifie ca le plus vite possible (deja fait, mais tres lent et pas pris en compte les recommandations de Brunews).
Pardon de l'erreur.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 30 mars 2005 à 15:07
JCDjcd à la sienne, mais je sais pas ce qu'elle vaut...
fred100582
Messages postés37Date d'inscriptionmardi 20 avril 2004StatutMembreDernière intervention 6 décembre 2005 30 mars 2005 à 12:24
Bonjour, je travaille sur un prog qui utilise bcp de random et je voudrais savoir si qq'un a codé une fonction random qui serait rapide et pas trop gourmande (en langage c).
en vous remerciant.
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 29 mars 2005 à 23:15
vecchio56> j'y peux rien si nous les africains on connait pas exactement notre date de naissance !!
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 29 mars 2005 à 20:16
mdr ^^
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 29 mars 2005 à 20:14
cosmobob> Les gens d'âge 'Inconnu' ne sont pas acceptés
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 29 mars 2005 à 20:12
Pamaury> Bien sur, meme en comprenant mal le sujet on peut poster un mauvais programme qui passe pourtant tous les tests...
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 29 mars 2005 à 20:02
20 ans
Pamaury
Messages postés341Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention17 juin 20083 29 mars 2005 à 19:33
juste une remarque: au concours ce code avait une difficulté moyenne et il est parfaitement faisable en 10 min .
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 29 mars 2005 à 18:23
c'est quoi la limite d'age pour passer prologin??
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 29 mars 2005 à 18:14
cosmobob, y a bcp de jeunots ici :)
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 29 mars 2005 à 17:20
Pourquoi des PUSH POP sur eax et edx dans tes funcs ??? ça bouffe des cycles inutilement, sans compter que sans cela Puiss() pourrait passer en __fastcall sans aucun problème car n'utilise que les 3 registres principaux, y a rien à sauvegarder.
Même discours pour asmNarcissique() et asmDivide(), y a rien à sauvegarder. Par contre faut utiliser les registres (edi,esi,ebx,ebp) au lieu de lire et écrire en mémoire dans la boucle, devrait aller nettement plus vite si la boucle est longue.
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 29 mars 2005 à 12:32
c'est reservé aux jeunots non?
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 28 mars 2005 à 19:34
Il a été posté sur www.prologin.org hier! dnas la section entraînement, demi finales, 2005. La prochaine fois, participe au concours!
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 28 mars 2005 à 19:30
On peut récupérer le sujet original?
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 28 mars 2005 à 18:57
En effet, la définition qu'on s'est tapée était assez compliquée. Les parties, se sont les chiffres, mais aussi les paquets de chiffres. Genre:
et ce pour tous les nombres jusque 1000000 je pense (non compris), et avec la règle exponentielle et factorielle, c'était bien long. mon code faisait largement 150 lignes je pense ...
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 28 mars 2005 à 18:53
vecchio > Autant pour moi, la definition de ce site ne s'accorde pas vraiment avec la definition que j'ai eu. Faudrait que je cherche sur le net la definition tel que je l'ai codé.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 28 mars 2005 à 18:52
40 minutes pour faire ca? Il me semble pourtant que ma fonction de 10 lignes marche bien...
Kirua, comprends-tu ce qu'AlexMAN a voulu me dire?
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 28 mars 2005 à 18:48
Voui, il était aussi à prologin de lille (26 février), et bcp de gens ont passé bcp de temps dessus. C'est le tout dernier exo que j'aie fait, il m'a été rajouté. Il me restait 40 minutes et je l'ai fini tout juste ... c'est étonnament long, en effet. Reste plus qu'à attendre les résultats ^_^.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 28 mars 2005 à 17:44
J'ai lu:
Nombre égal
à la somme de ses n chiffres
chacun élevé à la puissance n
Qu'est ce que tu entends pas parties??
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 28 mars 2005 à 17:38
vecchio > Tu n'as pas regardé la definition, regarde le lien, et tu verras que c'est pas si simple :
Exemple : 1634 est narcissique car 1^4+6^4+3^4+4^4 = 1634
1000 est narcissique car 10^3+0^3 = 1000
Il faut que la somme des chiffres (ou PARTIES des chiffres) qui composent le nombre a une certaine puissance soit egale au nombre.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 28 mars 2005 à 16:34
Voila ma solution, faudrait comparer pour voir:
#include <windows.h>
#include "resource.h"
WNDPROC oldEditProc;
HINSTANCE hInstance;
int puissance(int base, int exposant)
{
int i, res = 1;
for(i = 0; i < exposant; i++)
res *= base;
return res;
}
BOOL Narcissique(char* nombre, int longueur)
{
int n = atoi(nombre);
int sommePartielle = 0;
while(*nombre)
{
sommePartielle += puissance(*nombre - '0', longueur);
if(sommePartielle > n)
return FALSE;
nombre++;
}
return sommePartielle == n;
}
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 28 mars 2005 à 16:20
Au début tu as un nombre exprimé sous forme de char*. Pourquoi le transformer en int si c'est pour ensuite faire des divisions par 10?
Par ailleurs je trouve la fonction Narcissique étonnament longue compte tenu du problème qui à l'air assez facile, ou alors ya quelque chose que j'ai pas compris...
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 28 mars 2005 à 10:00
Je l'ai expliqué dans la source pourquoi de l'asm.
Et pis c'est vrai, j'ai hesité a le poster sur asmfr.com ou cppfrance.com, mais etant donné que pas tout est en ASM, j'ai preféré le poster ici (et aussi pck c'est un *.vcproj...etc).
Pamaury
Messages postés341Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention17 juin 20083 28 mars 2005 à 09:55
tiens c'est marrant je suis tombé sur cette question au concours Prologin avant-hier !!
Je vois pas réellement l'intérêt d'utiliser de l'assembleur ici puisque çà passe très bien en C mais enfin si tu veux aller le plus vite possible pourquoi pas mais dans ce cas autant le poster sur asmfrance.com :)
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 28 mars 2005 à 00:04
Merci bcp Vincent.
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 27 mars 2005 à 23:09
Je pense qu'on peut mettre les fonctions asmDivide() et Puiss() en __inline, mais je viens d'essayer et je n'ai pas remarqué de gains notables cette fois ci.
cs_Alain Proviste
Messages postés908Date d'inscriptionjeudi 26 juillet 2001StatutModérateurDernière intervention 1 février 20152 27 mars 2005 à 22:14
un code de qualité ^^
je pense que t'aurais eu le temps de coder ça le jour du concours alex ^^
2 avril 2005 à 14:50
30 mars 2005 à 20:07
Pardon de l'erreur.
30 mars 2005 à 15:07
30 mars 2005 à 12:24
en vous remerciant.
29 mars 2005 à 23:15
29 mars 2005 à 20:16
29 mars 2005 à 20:14
29 mars 2005 à 20:12
29 mars 2005 à 20:02
29 mars 2005 à 19:33
29 mars 2005 à 18:23
29 mars 2005 à 18:14
29 mars 2005 à 17:20
Même discours pour asmNarcissique() et asmDivide(), y a rien à sauvegarder. Par contre faut utiliser les registres (edi,esi,ebx,ebp) au lieu de lire et écrire en mémoire dans la boucle, devrait aller nettement plus vite si la boucle est longue.
29 mars 2005 à 12:32
28 mars 2005 à 19:34
28 mars 2005 à 19:30
28 mars 2005 à 18:57
1000 -> 1000; 1, 0, 0, 0
10000 -> 10000; 10, 00; 1, 0, 0, 0, 0
et ce pour tous les nombres jusque 1000000 je pense (non compris), et avec la règle exponentielle et factorielle, c'était bien long. mon code faisait largement 150 lignes je pense ...
28 mars 2005 à 18:53
28 mars 2005 à 18:52
Kirua, comprends-tu ce qu'AlexMAN a voulu me dire?
28 mars 2005 à 18:48
28 mars 2005 à 17:44
Nombre égal
à la somme de ses n chiffres
chacun élevé à la puissance n
Qu'est ce que tu entends pas parties??
28 mars 2005 à 17:38
Exemple : 1634 est narcissique car 1^4+6^4+3^4+4^4 = 1634
1000 est narcissique car 10^3+0^3 = 1000
Il faut que la somme des chiffres (ou PARTIES des chiffres) qui composent le nombre a une certaine puissance soit egale au nombre.
28 mars 2005 à 16:34
#include <windows.h>
#include "resource.h"
WNDPROC oldEditProc;
HINSTANCE hInstance;
int puissance(int base, int exposant)
{
int i, res = 1;
for(i = 0; i < exposant; i++)
res *= base;
return res;
}
BOOL Narcissique(char* nombre, int longueur)
{
int n = atoi(nombre);
int sommePartielle = 0;
while(*nombre)
{
sommePartielle += puissance(*nombre - '0', longueur);
if(sommePartielle > n)
return FALSE;
nombre++;
}
return sommePartielle == n;
}
DWORD dwBuffer;
char szBuffer[16];
LRESULT CALLBACK EditProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
if (WM_CHAR == message) {
if ((wparam < 48 || wparam > 57) && wparam != VK_BACK) { MessageBeep(0); return 0; }
if (szBuffer[0]) {
szBuffer[0] = 0;
SetDlgItemText(GetParent(hwnd), IDST_NARC, szBuffer);
}
}
return CallWindowProc(oldEditProc, hwnd, message, wparam, lparam);
}
BOOL CALLBACK DlgProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
int length = 0;
switch (message) {
case WM_INITDIALOG:
SetClassLong(hwnd, GCL_HICON, (long)LoadIcon(0, IDI_APPLICATION));
oldEditProc = SetWindowLong(GetDlgItem(hwnd, IDEC_NARC), GWL_WNDPROC, (long)EditProc);
SendMessage(GetDlgItem(hwnd, IDEC_NARC), EM_SETLIMITTEXT, 10, 0);
return 1;
case WM_COMMAND:
if (IDCANCEL == wparam)
{
EndDialog(hwnd, 0);
}
else if (IDOK == wparam)
{
length = GetDlgItemText(hwnd, IDEC_NARC, szBuffer, 10);
dwBuffer = Narcissique(szBuffer, length) ? 'iuO' : 'noN';
SetDlgItemText(hwnd, IDST_NARC, (char*)&dwBuffer);
}
return 0;
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE p, LPSTR q, int r)
{
hInstance = hInst;
DialogBoxParam(hInst, (LPCTSTR)IDD_NARC, 0, DlgProc, 0);
return 0;
}
28 mars 2005 à 16:20
Par ailleurs je trouve la fonction Narcissique étonnament longue compte tenu du problème qui à l'air assez facile, ou alors ya quelque chose que j'ai pas compris...
28 mars 2005 à 10:00
Et pis c'est vrai, j'ai hesité a le poster sur asmfr.com ou cppfrance.com, mais etant donné que pas tout est en ASM, j'ai preféré le poster ici (et aussi pck c'est un *.vcproj...etc).
28 mars 2005 à 09:55
Je vois pas réellement l'intérêt d'utiliser de l'assembleur ici puisque çà passe très bien en C mais enfin si tu veux aller le plus vite possible pourquoi pas mais dans ce cas autant le poster sur asmfrance.com :)
28 mars 2005 à 00:04
27 mars 2005 à 23:09
27 mars 2005 à 22:14
je pense que t'aurais eu le temps de coder ça le jour du concours alex ^^