VB.NET: Créer une base de 12

Fermé
Ch_rist Messages postés 5 Date d'inscription vendredi 22 juillet 2022 Statut Membre Dernière intervention 24 juillet 2022 - 24 juil. 2022 à 09:45
 Utilisateur anonyme - 24 juil. 2022 à 15:39

Bonjour,

J'ai du mal à créer une base de 12 avec n, un textbox et un label. Le label doit afficher 0 quand le textbox reçoit un 13, afficher 1 lorsque c'est 14 ou 7 quand c'est 20. En gros, tout nombre supérieur à 12 est récrit avec les nombres de 0 à 12.

S'il vous plaît


Android / UC Browser 12.12.10.1227

A voir également:

6 réponses

Utilisateur anonyme
24 juil. 2022 à 09:50

Bonjour

ce que tu décris n'est pas une base 12, c'est une soustraction.


0

Une base 12 cela implique de choisir des caractères qui servent de chiffres pour les nombres décimaux 10, et 11. Car une base 12 veut dire 12 chiffres 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B.

Par convention, on utilise des lettres majuscules, donc 10 serait A et 11 serait B.


Quand ton textbox "reçoit" 12, le label devrait afficher "10", pour 13 "11", pour 14 "12" et pour 20 "18".

Rien à vois avec ce que tu décris.


0
Utilisateur anonyme
24 juil. 2022 à 10:14

PS, c'est pas de la programmation, ça. C'est des maths

0
Ch_rist Messages postés 5 Date d'inscription vendredi 22 juillet 2022 Statut Membre Dernière intervention 24 juillet 2022
24 juil. 2022 à 11:05

Je ne veux c'est 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 dans une rotation continuelle. 12 chiffres.

Quand j'entre 2 au textbox, mon label affiche 2. Normal.

Mais quand j'entre 12, qu'il soit converti en 0. 12/12=1 reste 0. Comment récupérer ce reste là en vb.net m'intéresse au plus au point. Svp ...

0
Utilisateur anonyme > Ch_rist Messages postés 5 Date d'inscription vendredi 22 juillet 2022 Statut Membre Dernière intervention 24 juillet 2022
24 juil. 2022 à 11:07

Je te le dis depuis le début 12 - 12 = 0 => soustraction pas base 12.

0
Ch_rist Messages postés 5 Date d'inscription vendredi 22 juillet 2022 Statut Membre Dernière intervention 24 juillet 2022
Modifié le 24 juil. 2022 à 10:52

Absolument maths, c'est sûr.

Ce que je n'arrive pas à faire c'est la récupération du reste R quand je divise x (qui est supérieur à L le nombre total d'éléments) par L dans mon label.

0
Utilisateur anonyme
24 juil. 2022 à 11:04

Avant de parler de reste, de R, x et L (qui veulent certainement dire quelque chose pour toi, mais pour moi c'est pas clair).

Il faut d'abord que tu expliques clairement ce que tu veut faire, car ça

Le label doit afficher 0 quand le textbox reçoit un 13, afficher 1 lorsque c'est 14 ou 7 quand c'est 20. En gros, tout nombre supérieur à 12 est récrit avec les nombres de 0 à 12.

C'est une soustraction pas une base 12


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question

Ne serais tu pas en train d'essayer de faire une horloge en mode "AM - PM" ?

Si oui, alors ça n'est pas vraiment une base 12 dans le sens où les demis journées ne sont pas comptées. (et dans l'absolu ça varie de 0 à 11 et pas de 1 à 12...)

En vraie base 12 serait, demi journée 0, heure 1, demi journée 1 heure 2 etc...

Ce que tu chercherais dans ce cas c'est un modulo.

Au bout de 13h, l'horloge affiche 1h, au bout de 25h elle affiche à nouveau 1h, au bout de 37h elle affiche encore 1h etc...

En maths, c'est 1h modulo 12

Idem pour les angles, 375°, 735° ou -345° c'est toujours 15° modulo 360.

L'opérateur modulo existe dans la majorité des langages (y compris en VB.Net), et dans les faits retourne le reste d'une division

Dim modulo As Integer = 13 Mod 12

0
Ch_rist Messages postés 5 Date d'inscription vendredi 22 juillet 2022 Statut Membre Dernière intervention 24 juillet 2022
24 juil. 2022 à 14:50

Oui une horloge.... un mod

0
Ch_rist Messages postés 5 Date d'inscription vendredi 22 juillet 2022 Statut Membre Dernière intervention 24 juillet 2022
Modifié le 24 juil. 2022 à 15:39

On se rapproche. Le terme cadence, métrique ou horloge paraît plus judicieux dans ce que je recherche et voici ce que ça donne.

    Dim L As Integer = 12

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

        If Val(TextBox1.Text) >= L Then
            Label1.Text = CDbl(TextBox1.Text) Mod L
        ElseIf Val(TextBox1.Text) < L Then
            Label1.Text = TextBox1.Text
        End If

    End Sub

Et là, j'ai ce que je veux.

0
Utilisateur anonyme
24 juil. 2022 à 15:39

Pour utiliser correctement la coloration syntaxique https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

je corrige ton message précédent.

Tu n'as pas besoin de tester si la valeur est inférieure à 12 car Mod fonctionne même si c'est le cas et le résultat sera bon même si l'utilisateur saisit une valeur négative (contrairement à ton code actuel).

De plus les instructions Val ou CDbl ce n'est pas du VB.net, c'est un reste de VB6, le fait de les utiliser a tendance à ne pas aider au bon apprentissage, je te propose la lecture de la fin de cet article destiné initialement à ceux qui venaient de VB6 ou VBA https://codes-sources.commentcamarche.net/faq/11151-pourquoi-mon-code-vb6-vba-ne-marche-pas-en-vb-net#les-differences

Il est important de nommer les variables et les contrôles avec un nom fort, ce qui veut dire un nom qui permet d'identifier clairement le rôle de la variable et dans le cas d'un contrôle son type.

Et donc, je te propose ce code

Private Sub tbxSaisie_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tbxSaisie.TextChanged
            lblHeure.Text = (Convert.ToInt32(tbxSaisie.Text) Mod L).ToString()
    End Sub
0