Règles du forum

Le langage Ada uniquement, pas les compilateurs. Les questions de sémantique et de langage et les questions techniques liées à une application en particulier, son deux choses différentes. Si nécessaire, un forum sur GNAT et les autres compilateurs, tel JanusAda, sera ouvert.

Auteur Message
Beau Parleur
Avatar de l’utilisateur
Bonjour,
Bonjour, Hibou, je sais que tu passera par là.

J'ai un problème de representation.
Comme l'indique le titre il s'agit de représenter un entier compris de 1 à 50 avec un nombre suffisant de digit binaire.

J'ai compter, il m'en faut 6, j'ai écrit un programme qui calcule ce nombre qui donne 6.

Mais voilà, à l'utilisation de ce nombre dans mon programme final, seule 32 valeurs son représentale.

Avant j'utiliser parfois l'attribut size, mais ça ne marche pas toujours.

La si j'utilise l'attribut Size là ou je le fait ça retourne 31.

Le programme s'appelle Gnar pour Gnu Neural Against Random qui est dispo en archive sur http://88.189.147.62/Public/Gnar/ C'est un programme qui sort des numéros pour jouer au loto ou à l'euromillion en exploitant des réseaux de neurones artificiels.
Ce n'est pas documenté.

Voilà, si quelqu'un trouve mon erreur je suis preneur, ou comment procéder.


Mon code qui calcule la longueur d'un mot binaire pour un entier fixé.

Source ada : 

function Size_For return Positive is
Length : Natural := Natural(Item_Type'Last - Item_Type'First + 1);
Size : natural := 1;
begin
loop
Length := Length - (Length/2);
if Length = 1 then
return Size;
else
Size := Size + 1;
end if;

end loop;

end Size_For;
Profil
Beau Parleur
Avatar de l’utilisateur
Op !

J'ai trouvé mon erreur. J'étais le mieux placé.

Merci Quand même Hibou.
Merci à tout le monde.
Profil
Administrateur
Avatar de l’utilisateur
Emmanuel Sens a écrit : 
[…] La si j'utilise l'attribut Size là ou je le fait ça retourne 31 […]

L’attribut Size, renseigne sur la taille de la représentation binaire pour le type. C’est l’attribut d’un type, il n’est pas un attribut d’une valeur.

Pour la fonction, je n’ai pas trop regardé, parce que comme elle ne prend pas d’argument, il me semble manqué quelque chose.

Emmanuel Sens a écrit : 
J'ai trouvé mon erreur. J'étais le mieux placé.

Je ne sais pas comment tu as fais, mais disons que ça se définirait comme suit : étant donné une base N, la longueur minimale pour représenter un entier naturel E, c’est le plus petit entier L tel que N ^ L >= E (ou “^” représente l’exponentiation).

Je l’aurais fais environ comme ça (je n’ai plus de compilateur Ada, alors il faudra excuser les éventuelles erreurs) :

Source Ada : 

function Representation_Length (Value: Natural; Base: Positive := 10)
return Positive
with Pre => (Base >= 2)
is
Result : Natural := 0; -- Initial — computed incrementally.
Remaining : Natural := Value; -- Digits to be consumed and counted.
begin
-- Count and drop digits one by one until there are no more left.
loop
Remaining := Remaining / Base; -- Drop one digit …
Result := Result + 1; -- … and count it.
exit when Remaining = 0; -- All digits consumed.
end loop;
-- Result is always at least 1, so it fits in the Positive subtype.
return Result;
end;
Profil
Beau Parleur
Avatar de l’utilisateur
ouais, mais ça va je sais utiliser un attribut.

L'erreur était dans le nombre de sortie de mon réseaux de neurone.
Normalement initializé à L taille du language soit 50boule et il était à Language_type'Size soit cette valeur representent le nombre de digit binaire pour un entier fixé soit 50 ce qui donne 6, multiplié par Window le bombre de boule tiré ; Ce qui ne correspond pas au problème.

Mais merci Hibou pour ton code.
Profil