Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : a n'en plus rien comprendre. Deux même valeurs qui lors du test indique false [ Archives / J'AI BESOIN D'AIDE !!!! :O ] (Nargzul)

mardi 14 mars 2006 à 16:53:09 | a n'en plus rien comprendre. Deux même valeurs qui lors du test indique false

Nargzul

Bonjour,

J'ai un tableau, dans lequel je dois tester si les chiffre du tableau sauf le dernier sont égaux au dernier chiffre de ce même tableau. C'est pour répérer une éventuelle périodicité dans un programme destiné à transformer les chiffre à virgule en chiffre à virgule binaire.

Donc lors du test rien ne marche.. après 1 petite heure de recherche d'erreur, j'ai trouvé ou se situe l'erreur. seulement j'y comprend plus rien.

C'est au moment du test:
x:=0;
while(x<i)do begin
    if(tab[0][x]=tab[0][i])then finish:=true;
x=x+1;
end;

le i est le dernier chiffre du tableau employé, et le x est la valeur qui est incrémentée à chaque fois.

et lorsque c'était sensé passer true, cela continuait à chercher.

ne comprenant pas, j'ai mis des points de suivis sur tab[0][x] et sur tab[0][i] ainsi qu'un sur l'expression tab[0][x]=tab[0][i]

Et c'est de la que vient mon imcompréhension: tab[0][i] affiche 0,4 tab[0][x] fait de même, par contre l'expression me met false.

je me suis dis que c'était peut-etre comme sous java ou il faut faire des equals, mais même pas, car la c'est carrément le même objet qui est analysé les deux fois, mais bon dans le doute, j'ai transformé ma ligne de comparaison en: if(floattostr(tab[0][x])=floattostr(tab[0][i]))then finish:=true;
comme ca je compare bel et bien uniquement du texte. mais même résultat à la fin. je suis désespéré, et je sais franchement pas ou chercher...

mardi 14 mars 2006 à 20:46:42 | Re : a n'en plus rien comprendre. Deux même valeurs qui lors du test indique false

DeltaFX

Si c'est un tableau 2D, déja l'acces à une case du tableau ca s'ecrit : tab[0,x]
ensuite ton bout de code là c'est pas propre:

x:=0;
while(x<i)do begin
    if(tab[0][x]=tab[0][i])then finish:=true;
x=x+1;
end;

Primo par souci de lisibilité vaut mieux ecrire
if  tab[0,x] = tab[0,i] then finish:=true;  avec les espaces


Deuxio ton while bidule est inutile
for x:=0 to i-1 do
finish:=
tab[0,x] = tab[0,i];

Troisio un test = avec des nombres a virgules, euh bof .

Et pour finir en beauté, t'es obligé de convertir tes nombres en string pour pouvoir accéder au niéme chiffre apres la virgule !


mercredi 15 mars 2006 à 04:29:04 | Re : a n'en plus rien comprendre. Deux même valeurs qui lors du test indique false

f0xi

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !


unité Math :


function CompareValue(constA,B:Integer):TValueRelationship; overload;
function CompareValue(constA,B:Int64):TValueRelationship; overload;
function CompareValue(constA,B:Single;Epsilon:Single =0):TValueRelationship; overload;
function CompareValue(constA,B:Double;Epsilon:Double =0):TValueRelationship; overload;
function CompareValue(constA,B:Extended;Epsilon:Extended =0):TValueRelationship; overload;




Finish := false;
i      := high(Tab[0]);
while not finish do begin
   Finish := (CompareValue(tab[0,x], tab[0,i], 0.0002) = EqualsValue);
   inc(x);
end;


Epsilon definit pour les comparaisons sur réel l'aproximation d'egaltiée entre les deux nombres.

A < B +Ê    (A est inferieur a au moins B ou B - Epsilon)
A = B +/-Ê  (A est egale a B ou au moins B+ ou - Epsilon)
A > B +Ê    (A est superieur a au moins B ou B + Epsilon)

CompareValue renvois respectivement
LessThanValue       = -1  :: (A < B)Ê
EqualsValue            = 0   :: (A = B)Ê
GreaterThanValue  = 1   :: (A > B)Ê


La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.


mercredi 15 mars 2006 à 07:35:47 | Re : a n'en plus rien comprendre. Deux même valeurs qui lors du test indique false

Nargzul

Bon, déjà merci pour vos réponse.

@DeltaFX:
-Pour les tableau je savais pas, j'ai toujours utilisé cela en delphi, et ca avait toujours marché jusqu'a ce que tu me dise que c'est po le cas ^^
-Pour la lisibilité, j'y penserai à l'avenir
-développe ce que tu veux dire avec mon égal? mon chiffre à virgule n'en contient que 3 ou 4 maximum, donc c'est pas si grand... et c'est jamais un nombre infini, car c'est l'utilisateur qui les rentre, et les seules opération qu'on fait dessus, c'est des *2.
-Vu la réponse après toi, ya plus simple(et pour rappel, j'ai déjà essayé de transformer mes valeurs en string)

@Foxi
-c'est exactement ce qu'il me faut, maintenant le test marche!!! Merci mille fois!(j'avais vu cette fonction, mais je savais pas ce qu'était EqualsValue)

mercredi 15 mars 2006 à 10:29:00 | Re : a n'en plus rien comprendre. Deux même valeurs qui lors du test indique false

DeltaFX

Facile : le point 3, le test = sur des nombres à virgule c'est pilpoil ce qu'a dit Foxi juste apres, il  faut  passer par les CompareValue  et leur donner un epsilon. Ignorant moi aussi l'existance de CompareValue, pour faire des test je passais par :

J'ai besoin de 5 chiffres significatifs donc je multiplie les trucs a comparer par 100000, un coup de "trunc", je cast en integer  et apres je teste.

 D'ailleurs pour ta recherche de périodicité dans les décimale, tu peux essayer :
si x est ton  nombre  a tester

for i =1 to 10 do {test sur 10 decimales}
begin
    e:= power(10,i)*X - X
    if e  < 0.000001 then {un truc  tres petit}
       begin
         finish:= true;
         break;
       end;
end;



Cette discussion est classé dans : chiffre, test, tableau, tab, false


Répondre à ce message

Sujets en rapport avec ce message

passer un tableau de variant à un paramètre Integer [ par manudel ] Je déclare un tableau de Variant : tab := VarArrayCreate([0,100],varVariant);que j'alimente.quand il est alimenté, il a cette forme :1,2,3,4,5,6,7,8, Comment faire un tableau de variables?? [ par xyowz ] Bonjour, je suis débutant et je cherche à faire un tableau de variables.. Je m'explique:je prend le tableau suivant par ex: 1 2 3 Recupérer les coordonnées dans tableau [ par djalouk ] Voila, dans le cadre de mes études, je developpe un petit jeu de pion.Alors j'ai crée dynamiquement un tableau de tshape de la facon suivantebegin Fo Problème avec un set length [ par TierSeN ] Bonjour tous le monde mon problème et délicat et une des solution qui consiste a créer un type me bloque.J'ai en fait une unit dans laquelle je déclar tableau multi dimensions [ par Cisaks ] Bonjour, J'aurais voulu avoir de l'aide sur le fait de trier un tableau a double dimensions ex: tab[0][0] = 'test' tab[0][1] = 123 -- tab[1][0] = 'tit Problème de tableaux... [ par orelien ] Bonjour,J'aimerais créer un tableau à deux dimensions et y insérer des chiffres (des entiers).Les valeurs horizontales sont des entiers et celles de l Affichage tableau de chiffre [ par Nargzul ] Bonjour, J'aimerais essayer de faire un tit prog pour résoudre les sudoku, mais mon premier problème est comment les afficher? ya-t-il un composant suppression de doublons dans un tableau [ par lola937 ] Bonjour, je travaillle actuellement sur les tableaux et les tris.Le programme que je dois réaliser est le suivant: Soient t un tableau de taille n e Remplir Tableau deux dimensions [ par lusitano69 ] Bonjour j'aimerais savoir comment remplir un tableau a deux dimensions.Avec ces données là que j'ai dans un fichier a part txt remplir mon tableau de problème variant-autre [ par Nargzul ] J'ai une fonction qui doit soit me retourner false, soit me retourner un résultat(qui est un tableau à deux dimensions) donc je récupère cela dans un


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,827 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.