Se connecter

Informatique

Programmation

Sujet : Programme C# (Nombres vampire à 3chiffres)
1
Pseudo supprimé
Niveau 9
18 septembre 2021 à 19:08:45

Bonjour,

La consigne:

Un nombre Vampire est un nombre qui est égal à un produit de ses
chiffres.(Exemple : 126 = 21 x 6). Écrire un programme qui permet de
vérifier si un nombre composé de trois digit est un nombre Vampire. (en C#)

Une idée pour m'éclaicir ou m'aider s'il vous plait.

Je vois sur internet qu'il existe 3nombres vampire à 3chiffres Mais c'est un peu de la triche de faire un if(nb == 125) etc...

Je suis en premiere année BUT info. Enfaite c'est pas la programmation mon probleme. Mais comment faire pour savoir si c'est un nombre vampire x). Je vois pas bcp de solution sur internet à par genre (21*6=126)....

godrik
Niveau 22
18 septembre 2021 à 19:14:11

Tu peux extraire les trois chiffres avec l'operateur modulo
Apres, il n'y a pas des masses de combinaison a tester. (il n'y a que 3 choix pour le nombre a 1 chiffres, et une fois que ce choix est fait, il ne reste que deux choix pour le nombres a 2 chiffres).

Pseudo supprimé
Niveau 8
18 septembre 2021 à 19:14:24

C'est pas le truc le plus malin (vu que ça marche que avec 3 chiffres) mais t'as juste à tester tous les cas possibles :(

Si t'as un nombre qui s'écrit abc, tu testes a * bc, a * cb, b * ac, b * ca, c * ab, c * ba

Pseudo supprimé
Niveau 9
18 septembre 2021 à 22:38:46

Au final j'ai ca (assez degueulasse mais ca marche =) ) merci
Je vais peut etre modifier mes variables (leeurs noms)

/*
Un nombre Vampire est un nombre qui est égal à un produit de ses
chiffres.(Exemple : 126 = 21 x 6). Ce programme permet de
vérifier si un nombre composé de trois digit est un nombre Vampire.

  • /

using System;

namespace Nouveau_dossier
{
class vampire
{
static void Main(string[] args)
{

//Declarion des variables
int nombre; // variable nombre netrée par l'utilisateur
int a, b, c; // nombre divisé en 3
string bc, cb, ac, ca, ab, ba; //Couple de deux chiffres en chaine de charactere
int BC,CB,AC,CA,AB,BA; //Couple de deux chiffres en entier
string cA; // chiffre des centaines en chaine de charactere
string cB; // chiffre des dixaines en chaine de charactere
string cC; // chiffre des unites en chaine de charactere
//Affichage sur la console
Console.WriteLine("Rentrez un nombre: ");
//Initialisation par l'utilisateur
nombre = int.Parse(Console.ReadLine());
//Recuperer le chiffre des centaines
a = ((nombre - (nombre % 100)) / 100);
//Recuperer le chiffre des dixaines
b = (((nombre % 100) - (nombre % 10)) / 10);
//Recuperer le chiffre des unites
c = ((nombre % 100) % 10);
//Convertir entier en chaine de charactere
cA = a.ToString();
cB = b.ToString();
cC = c.ToString();
//Rassembler chaine de charactere en 2
bc = cB + cC;
cb = cC + cB;
ca = cC + cA;
ac = cA + cC;
ab = cA + cB;
ba = cB + cA;
//Convertir chaine de charactere en entier
BC = Int32.Parse(bc);
CB = Int32.Parse(cb);
CA = Int32.Parse(ca);
AC = Int32.Parse(ac);
AB = Int32.Parse(ab);
BA = Int32.Parse(ba);

//Affichage sur la console de la fonction trouverVampire.
trouverVampire(nombre, c, a, b, BA, AB, AC, CA, BC, CB);

}

/*local
trouverVampire: fonct: Cette focntion permet de savoir si un nombre
à trois digits est un nombre vampire.
parametre: Xnombre: int: nombre à verifier sur il ets vampire
c: int: chiffre des unites du nombre à verifier
a: int: chiffre des centaines du nombre à verifier
b: int: chiffre des dixaines du nombre à verifier
BA: int: couple de deux
AB: int: couple de deux
AC: int: couple de deux
CA: int: couple de deux
BC: int: couple de deux
CB: int: couple de deux
retour: afficheVampire(Xnombre): fonct OU affichePasVampire(Xnombre): fonct
*/

public static void trouverVampire(int Xnombre, int c, int a, int b, int BA, int AB, int AC, int CA, int BC, int CB)
{
if((c * BA) == Xnombre)
{
afficheVampire(Xnombre);
}

else if((c * AB) == Xnombre)
{
afficheVampire(Xnombre);
}

else if((b * AC) == Xnombre)
{
afficheVampire(Xnombre);
}

else if((b * CA) == Xnombre)
{
afficheVampire(Xnombre);
}

else if((a * BC) == Xnombre)
{
afficheVampire(Xnombre);
}

else if((a * CB) == Xnombre)
{
afficheVampire(Xnombre);
}
else{
affichePasVampire(Xnombre);
}

}

/*local
afficheVampire: fonct: La fonction affiche que le nombre est un vampire.
parametre: int: nb: nombre à verifier
*/

static public void afficheVampire(int nb)
{
Console.WriteLine(nb + " est un nombre vampire.");
}

/*local
afficheVampire: fonct: La fonction affiche que le nombre n'est pas un vampire.
parametre: int: nb: nombre à verifier
*/

static public void affichePasVampire(int nb)
{
Console.WriteLine(nb + " n'est pas un nombre vampire.");
}
}
}

godrik
Niveau 22
18 septembre 2021 à 22:43:23

C'est moche, mais ça marche

Pseudo supprimé
Niveau 9
18 septembre 2021 à 23:09:52

c'est deja mieux:

/*
Un nombre Vampire est un nombre qui est égal à un produit de ses
chiffres.(Exemple : 126 = 21 x 6). Ce programme permet de
vérifier si un nombre composé de trois digit est un nombre Vampire.

  • /

using System;

namespace Nouveau_dossier
{
class vampire
{
static void Main(string[] args)
{

//Declarion des variables
int nombre; // variable nombre netrée par l'utilisateur
int centaines, dizaines, unites; // nombre divisé en 3
string dizaines_Unite, unite_Dizaine, centaine_Unite, unite_Centaine, centaine_Dizaine, dizaine_Centaine; //Couple de deux chiffres en chaine de charactere
int d_U,u_D,c_U,u_C,c_D,d_C; //Couple de deux chiffres en entier
string Xcentaines; // chiffre des centaines en chaine de charactere
string Xdizaines; // chiffre des dixaines en chaine de charactere
string Xunites; // chiffre des unites en chaine de charactere
//Affichage sur la console
Console.WriteLine("Rentrez un nombre: ");
//Initialisation par l'utilisateur
nombre = int.Parse(Console.ReadLine());
//Recuperer le chiffre des centaines
centaines = ((nombre - (nombre % 100)) / 100);
//Recuperer le chiffre des dixaines
dizaines = (((nombre % 100) - (nombre % 10)) / 10);
//Recuperer le chiffre des unites
unites = ((nombre % 100) % 10);
//Convertir entier en chaine de charactere
Xcentaines = centaines.ToString();''''''
Xdizaines = dizaines.ToString();
Xunites = unites.ToString();
''' //Rassembler chaine de charactere en 2'''
dizaines_Unite = Xdizaines + Xunites;
unite_Dizaine = Xunites + Xdizaines;
unite_Centaine = Xunites + Xcentaines;
centaine_Unite = Xcentaines + Xunites;
centaine_Dizaine = Xcentaines + Xdizaines;
dizaine_Centaine = Xdizaines + Xcentaines;
''' //Convertir chaine de charactere en entier'''
d_U = Int32.Parse(dizaines_Unite);
u_D = Int32.Parse(unite_Dizaine);
u_C = Int32.Parse(unite_Centaine);
c_U = Int32.Parse(centaine_Unite);
c_D = Int32.Parse(centaine_Dizaine);
d_C = Int32.Parse(dizaine_Centaine);

//Affichage sur la console de la fonction trouverVampire.
trouverVampire(nombre, unites, centainres, dizaines, d_C, c_D, c_U, u_C, d_U, u_D);

}

/*local
trouverVampire: fonct: Cette focntion permet de savoir si un nombre
à trois digits est un nombre vampire.
parametre: Xnombre: int: nombre à verifier sur il ets vampire
Xunites: int: chiffre des unites du nombre à verifier
Xcentaines: int: chiffre des centaines du nombre à verifier
Xdizaines: int: chiffre des dixaines du nombre à verifier
BA: int: couple de deux
AB: int: couple de deux
AC: int: couple de deux
CA: int: couple de deux
BC: int: couple de deux
CB: int: couple de deux
retour: afficheVampire(Xnombre): fonct OU affichePasVampire(Xnombre): fonct
*/

public static void trouverVampire(int Xnombre, int Xunites, int Xcentaines, int Xdizaines, int BA, int AB, int AC, int CA, int BC, int CB)
{
if((Xunites * BA) == Xnombre)
{
afficheVampire(Xnombre);
}

else if((Xunites * AB) == Xnombre)
{
afficheVampire(Xnombre);
}

else if((Xdizaines * AC) == Xnombre)
{
afficheVampire(Xnombre);
}

else if((Xdizaines * CA) == Xnombre)
{
afficheVampire(Xnombre);
}

else if((Xcentaines * BC) == Xnombre)
{
afficheVampire(Xnombre);
}

else if((Xcentaines * CB) == Xnombre)
{
afficheVampire(Xnombre);
}
else{
affichePasVampire(Xnombre);
}

}

/*local
afficheVampire: fonct: La fonction affiche que le nombre est un vampire.
parametre: int: nb: nombre à verifier
*/

static public void afficheVampire(int nb)
{
Console.WriteLine(nb + " est un nombre vampire.");
}

/*local
afficheVampire: fonct: La fonction affiche que le nombre n'est pas un vampire.
parametre: int: nb: nombre à verifier
*/

static public void affichePasVampire(int nb)
{
Console.WriteLine(nb + " n'est pas un nombre vampire.");
}
}
}

Pseudo supprimé
Niveau 8
18 septembre 2021 à 23:50:06

:malade:

Kreislazer
Niveau 8
19 septembre 2021 à 00:01:23

Pourquoi tu fais des opérations sur les chaines de caractères au lieu de simplement extraire chaque chiffre dans trois variables a, b et c, puis de tester toutes les combinaisons de la forme (a*10 + b) * c

godrik
Niveau 22
19 septembre 2021 à 00:18:22

Tu peux aussi simplifier le code en utilisant des operations logiques

genre:

bool isVampire = false;

isVampire = isVampire || ((Xunites * BA) == Xnombre);
isVampire = isVampire || ((Xunites * AB) == Xnombre);
...

if (isVampire) afficherVampire(Xnombre);

(Syntaxe approximative)

Pseudo supprimé
Niveau 9
19 septembre 2021 à 01:12:45

j 'ai trouvé...........

/*
Un nombre Vampire est un nombre qui est égal à un produit de ses
chiffres.(Exemple : 126 = 21 x 6). Ce programme permet de
vérifier si un nombre composé de trois digit est un nombre Vampire.

  • /

using System;

class vampire
{
static void Main()
{
int nombre;
int centaine;
int dizaine;
int unite;
bool nbV;

nombre = entrerNombre("Veuillez entrer un nombre à 3 chiffres: ");

centaine = nombre / 100;
dizaine = (nombre % 100) / 10;
unite = nombre % 10;

nbV = verificationVampire(nombre, centaine, dizaine, unite);
afficheResultat(nbV, nombre);
}

public static int entrerNombre(string Xnombre)
{
int x;
Console.WriteLine(Xnombre);
x = int.Parse(Console.ReadLine());
return x;
}

public static bool verificationVampire( int Xnombre, int Xcentaine, int Xdizaine, int Xunite)
{
bool XestVampire;

if((Xcentaine + Xdizaine * 10) * Xunite == Xnombre || (Xdizaine + Xcentaine * 10) * Xunite == Xnombre)
{
XestVampire = true;
}
else if((Xdizaine + Xunite * 10) * Xcentaine == Xnombre || (Xunite + Xdizaine * 10) * Xcentaine == Xnombre)
{
XestVampire = true;
}
else if((Xcentaine + Xunite * 10) * Xdizaine == Xnombre || (Xunite + Xcentaine * 10) * Xdizaine == Xnombre)
{
XestVampire = true;
}
else {
XestVampire = false;
}

return XestVampire;
}

public static void afficheResultat(bool verifieVampire, int Xnombre)
{
if(verifieVampire)
{
Console.WriteLine("Le nombre " + Xnombre + " est un nombre vampire.");
}
else
{
Console.WriteLine("Le nombre " + Xnombre + " n'est pas un nombre vampire.");
}
}
}

boucif
Niveau 24
19 septembre 2021 à 06:04:29

Ca doit pouvoir fonctionner pour tous les nombre ou seulement pour 3 digits dans la demande

Pseudo supprimé
Niveau 9
19 septembre 2021 à 09:22:09

Le 19 septembre 2021 à 06:04:29 :
Ca doit pouvoir fonctionner pour tous les nombre ou seulement pour 3 digits dans la demande

ca doit fonctionner que pour 3 digits

SemenceDeCobra
Niveau 6
19 septembre 2021 à 15:29:32
namespace vampire
{
    class Program
    {
        static void Main( string[] args )
        {
            Enumerable.Range( 100, 1000 ).ToList().ForEach( x =>
            {
                var s_a = x.ToString()[0].ToString();
                var s_b = x.ToString()[1].ToString();
                var s_c = x.ToString()[2].ToString();

                var (a, b, c) = (int.Parse( s_a ), int.Parse( s_b ), int.Parse( s_c ));
                var (ab, ba)  = (int.Parse( s_a + s_b ), int.Parse( s_b + s_a ));
                var (bc, cb)  = (int.Parse( s_b + s_c ), int.Parse( s_c + s_b ));
                var (ac, ca)  = (int.Parse( s_a + s_c ), int.Parse( s_c + s_a ));

                var n = new List<int> { c * ba, c * ab, b * ac, b * ca, a * bc, a * cb };

                n.ForEach( y => 
                { 
                    if ( y == x ) Console.WriteLine( "{0} est un nombre vampire.", x ); 
                } );
            } );

            Console.ReadLine();
        }
    }
}
Pseudo supprimé
Niveau 9
19 septembre 2021 à 16:18:31

Le 19 septembre 2021 à 15:29:32 :
namespace vampire { class Program { static void Main( string[] args ) { Enumerable.Range( 100, 1000 ).ToList().ForEach( x => { var s_a = x.ToString()[0].ToString(); var s_b = x.ToString()[1].ToString(); var s_c = x.ToString()[2].ToString(); var (a, b, c) = (int.Parse( s_a ), int.Parse( s_b ), int.Parse( s_c )); var (ab, ba) = (int.Parse( s_a + s_b ), int.Parse( s_b + s_a )); var (bc, cb) = (int.Parse( s_b + s_c ), int.Parse( s_c + s_b )); var (ac, ca) = (int.Parse( s_a + s_c ), int.Parse( s_c + s_a )); var n = new List<int> { c * ba, c * ab, b * ac, b * ca, a * bc, a * cb }; n.ForEach( y => { if ( y == x ) Console.WriteLine( "{0} est un nombre vampire.", x ); } ); } ); Console.ReadLine(); } } }

non c'est bon. Mon 2ieme programme ets moin degueux. merci comme meme . Surtout que .Range, on a pas le droit car on a pas encore fait.

Pseudo supprimé
Niveau 6
19 septembre 2021 à 21:40:06

Le 19 septembre 2021 à 16:18:31 :

Le 19 septembre 2021 à 15:29:32 :
namespace vampire { class Program { static void Main( string[] args ) { Enumerable.Range( 100, 1000 ).ToList().ForEach( x => { var s_a = x.ToString()[0].ToString(); var s_b = x.ToString()[1].ToString(); var s_c = x.ToString()[2].ToString(); var (a, b, c) = (int.Parse( s_a ), int.Parse( s_b ), int.Parse( s_c )); var (ab, ba) = (int.Parse( s_a + s_b ), int.Parse( s_b + s_a )); var (bc, cb) = (int.Parse( s_b + s_c ), int.Parse( s_c + s_b )); var (ac, ca) = (int.Parse( s_a + s_c ), int.Parse( s_c + s_a )); var n = new List<int> { c * ba, c * ab, b * ac, b * ca, a * bc, a * cb }; n.ForEach( y => { if ( y == x ) Console.WriteLine( "{0} est un nombre vampire.", x ); } ); } ); Console.ReadLine(); } } }

non c'est bon. Mon 2ieme programme ets moin degueux. merci comme meme . Surtout que .Range, on a pas le droit car on a pas encore fait.

Moins dégueu ?

Pseudo supprimé
Niveau 9
20 septembre 2021 à 20:11:02

Le 19 septembre 2021 à 21:40:06 :

Le 19 septembre 2021 à 16:18:31 :

Le 19 septembre 2021 à 15:29:32 :
namespace vampire { class Program { static void Main( string[] args ) { Enumerable.Range( 100, 1000 ).ToList().ForEach( x => { var s_a = x.ToString()[0].ToString(); var s_b = x.ToString()[1].ToString(); var s_c = x.ToString()[2].ToString(); var (a, b, c) = (int.Parse( s_a ), int.Parse( s_b ), int.Parse( s_c )); var (ab, ba) = (int.Parse( s_a + s_b ), int.Parse( s_b + s_a )); var (bc, cb) = (int.Parse( s_b + s_c ), int.Parse( s_c + s_b )); var (ac, ca) = (int.Parse( s_a + s_c ), int.Parse( s_c + s_a )); var n = new List<int> { c * ba, c * ab, b * ac, b * ca, a * bc, a * cb }; n.ForEach( y => { if ( y == x ) Console.WriteLine( "{0} est un nombre vampire.", x ); } ); } ); Console.ReadLine(); } } }

non c'est bon. Mon 2ieme programme ets moin degueux. merci comme meme . Surtout que .Range, on a pas le droit car on a pas encore fait.

Moins dégueu ?

Moins bordelique si tu veux

Pseudo supprimé
Niveau 9
20 septembre 2021 à 20:11:23

J'ai montré à ma prof et il fallait faire ca

1
Sujet : Programme C# (Nombres vampire à 3chiffres)
   Retour haut de page
Consulter la version web de cette page