Calcul d'une racine numérique

Soyez le premier à donner votre avis sur cette source.

Vue 7 698 fois - Téléchargée 303 fois

Description

Voici un petit logiciel en API Windows qui calcule la racine numérique d'un nombre entier positif. La racine numérique de 3456 est calculée en faisant 3+4+5+6 = 18 puis 1+8 = 9. Cette fonction sert pour effectuer la preuve par 9. On pourra aussi vérifier que la racine numérique d'un carré est nécessairement : 1, 4, 7 ou 9 et celle d'un cube : 1, 8 ou 9.

Source / Exemple :


#include <windows.h>
#include "resource.h"

int ranum(const char *n) { // Racine numérique de n
    char buf[32];
    int i, s = 0;
    for(i = 0; isdigit(n[i]); i++) s = s + n[i] - '0';
    if(s < 10) return s;
    wsprintf(buf, "%d", s);
    return ranum(buf);
}

BOOL APIENTRY DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) {
    CHAR nb[21], res[81];
    switch (uMsg) {
        case WM_INITDIALOG:
            return TRUE;
        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK) {
                GetDlgItemText(hDlg, IDE_EDIT1, nb, 20);
                wsprintf(res, "Racine numérique de : %s = %d", nb, ranum(nb));
                MessageBox(hDlg, res, "Résultat", MB_OK);
            }
            if (LOWORD(wParam) == IDCANCEL) {
                EndDialog(hDlg,0);
                return TRUE;
            }
        default:
            return FALSE;
    }
}

int WINAPI WinMain(HINSTANCE hInstance, 
                   HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    DialogBox(hInstance,"DIALOG1",NULL,(DLGPROC)DlgProc);
    return 0;
}

Conclusion :


Pour saisir le nombre on peut faire un copier-coller.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
326
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
5 janvier 2021
2
Brunews : remarque très juste. Mais on peut aussi le modifier pour d'autres calculs. Et j'ajoute que si le nombre est disponible sous la forme d'une chaine de caractères, on peut faire le calcul avec :
int rnum(const char *str) {
char buf[32];
int s = 0;
for(int i 0; isdigit(str[i]); i++) s s + str[i] - '0';
if(s < 10) return s;
sprintf(buf, "%d", s);
return rnum(buf);
}
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
int ranum(const int n) {
return 1 + ((n - 1) % 9);
}

Tu es certain que ça justifiait une source ???

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.