• STATISTIQUES
  • Il y a eu un total de 1 membres et 4920 visiteurs sur le site dans les dernières 24h pour un total de 4 921 personnes!


    1 membre s'est inscrit dans les dernières 24h!


    Membres: 2 606
    Discussions: 3 580
    Messages: 32 820
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] dcode
    dcode.fr est le site indispensable pour décoder des messages, tricher aux jeux de lettres, résoudre des énigmes...
    Outils / Add-on
    [EN] This is legal
    Basic: 10, Realistic: 5, Programming: 1, Bonus: 11, SQL: 2, Encryption: 6, Application: 4, User Contributed: 3
    Challenges
    [FR] Newbie Contest
    Crackme: 35, Cryptographie: 49, Hacking: 27, Javascript/Java: 17, Logique: 31, Programmation: 23, Stéganographie: 53
    Challenges
    [EN] Net Force
    Javascript: 9, Java Applets: 6, Cryptography: 16, Exploits: 7, Cracking: 14, Programming: 13, Internet: 15, Steganograph...
    Challenges
    [FR] frameip
    le site de partage des connaissances du monde TCPIP
    Protocole
    [FR] Comment ca marche
     Gratuit et accessible à tous, ce site de communauté permet de se dépanner, se faire aider ...
    Webmaster
    [EN] Bright Shadows
    JavaScript: 13, Exploit: 27, Crypto: 69, CrackIt: 52, Stegano: 67, Flash: 3, Programming: 16, Java-Applet: 10, Logic: 20...
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[C] Besoin d'aide pour débugger mon code
20-03-2013, 20h59 (Modification du message : 22-03-2013, 01h12 par Polo.)
Message : #1
Polo Hors ligne
Benêt en chef
*



Messages : 110
Sujets : 4
Points: 25
Inscription : Mar 2013
[C] Besoin d'aide pour débugger mon code
Bonjour à tous,
J'essaie actuellement d'adapter une formule mathématique (permettant de calculer la latitude à partir de la latitude isométrique) en langage C, dont le schéma séquentiel est le suivant :
[Image: Ce460je.png]

Donc pour l'instant j'ai réussit à faire ce code, mais j'ai manifestement fait une erreur quelque part car il me retourne toujours le même nombre, à savoir 4.940656e-324 :

Code C :
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <errno.h>


int main()
{
    double L = 1.00552653648, e = 0.08199188998;
    float pi = 3.141592654;
    int i = 0;
    double epsilon = -1 * pow(10, 11);

    double *Phi = malloc(i * sizeof(double));
    if (Phi == NULL)
        exit(2);

    Phi[0] = 2 * atan( exp(L) ) - pi/2;

    do
    {
        i++;

        Phi = realloc(Phi, i * sizeof(double));

        if (Phi == NULL)
            exit(2);

        Phi[i] = log( tan((pi/4) + (L/2)) * pow( ((1-e*sin(L)) / (1+e*sin(L))), e/2 ) );

        printf("%le", &Phi[i]);

    } while(abs(Phi[i]-Phi[i-1]) < epsilon);

    //double Phi_f = Phi[i];

    free(Phi);
}
 


PS : j'ai oublié de vous prévenir que mon niveau était plutôt classé dans "débutant" en C Blush

Toute aide est la bienvenue ... :/

EDIT : J'ai oublié de préciser que j'ai des valeurs de test dont je connais les futurs résultats :
[Image: b9xndPj.png]



Y'a du nouveau ... je viens de réaliser que je m'étai trompé dans la valeur de epsilon (j'avais mis -1 * pow(10, 11) au lieu de pow(10,-11) ) et l'erreur qu'il me renvoie est désormais :
Code :
realloc(): inval id next size: 0x00000000013fc010
:/
+1 (0) -1 (0) Répondre
20-03-2013, 21h13 (Modification du message : 20-03-2013, 21h19 par supersnail.)
Message : #2
supersnail Hors ligne
Éleveur d'ornithorynques
*******



Messages : 1,610
Sujets : 72
Points: 466
Inscription : Jan 2012
RE: [C] Besoin d'aide pour débugger mon code
Bonjour,

Déjà
Code :
&Phi[i]
ça te renvoie l'adresse en mémoire de la valeur Phi[i]: donc là tu affiches à l'écran l'adresse de ton pointeur interprété comme un double par printf :')

Un
Code C :
 printf("%le", Phi[i]);
suffirait ici Wink

Enfin (remarque purement "esthétique"), vaut mieux allouer avec malloc un tableau d'une certaine taille, et le réallouer que lorsque ça "déborde" plûtot que de realloc à chaque fois qu'on veut rajouter un truc du temps (realloc ça peut pomper au niveau perfs, donc autant en réduire l'usage Wink )

Edit: erreur du pow corrigée (ou presque) :')
Mon blog

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
+1 (0) -1 (0) Répondre
20-03-2013, 22h03 (Modification du message : 20-03-2013, 22h03 par Polo.)
Message : #3
Polo Hors ligne
Benêt en chef
*



Messages : 110
Sujets : 4
Points: 25
Inscription : Mar 2013
RE: [C] Besoin d'aide pour débugger mon code
Merci pour toutes ces remarques je vais commencer par corriger tout ça Smile

Concernant mon epsilon j'ai corrigé l'erreur (cf en bas de mon premier post) c'était une erreur d'étourderie, comme bien souvent ^^

Par contre concernant ta remarque "estéthique", qui serait apparemment une solution à l'erreur que j'ai avec realloc (cf en bas du premier post ... ), j'en ai tenu compte et j'ai modifié mon code comme ceci :
Code C :

int main()
{
    double L = 1.00552653648, e = 0.08199188998;
    float pi = 3.141592654;
    int i = 10, n = 0; // n sert de compteur dans la boucle et i définit la taille de base du tableau de Phi
    double x = pow(10, -11);

    double *Phi = malloc(i * sizeof(double));
    if (Phi == NULL)
        exit(2);

    Phi[0] = 2 * atan( exp(L) ) - pi/2;
    printf("%le \n", Phi[0]);
    do
    {
        n++;
        if(sizeof(Phi) >= n) // si ça commence à déborder...
        {
            i += 10; // on en rajoute 10 d'un coup ...
            Phi = realloc(Phi, i * sizeof(double));
            if (Phi == NULL)
                exit(3);
        }


       // on continue ...

        Phi[i] = log( tan((pi/4) + (L/2)) * pow( ((1-e*sin(L)) / (1+e*sin(L))), e/2 ) );

        printf("%le", Phi[i]);

    } while(abs(Phi[i]-Phi[i-1]) < x); // tant que notre marge d'erreur n'est pas atteinte, on continue...

    //double Phi_f = Phi[i];

    free(Phi); // on libère la place en mémoire

    return 0;
}
 


Donc ça marche déjà mieux (façon de parler), mais je n'ai toujours pas les bons résultats ; j'obtiens ceci :
Code :
8.69343e-01
1.230778e+00

Donc là je comprends pas car il est apparement arrivé à la fin de la boucle et ... j'ai pas ce que je devrais avoir (cad : 0.872 664 626 00) oO
Correction : il est bien arrivé à la fin de la boucle mais n'itère qu'une seule fois... Je vais chercher pourquoi (vous pouvez vous aussi hein Tongue )...
+1 (0) -1 (0) Répondre
22-03-2013, 01h00 (Modification du message : 22-03-2013, 01h00 par notfound.)
Message : #4
notfound Hors ligne
#!/usr/bin/env bash
*



Messages : 687
Sujets : 47
Points: 271
Inscription : Sep 2012
RE: [C] Besoin d'aide pour débugger mon code
Je passe vite fait ! J'ai regardé 2 secondes ton truc, t'as FAIL au niveau de :

Code C :

 printf("%le", Phi[i]);
/* J'ai remplacé par %f par exemple */
 


Le résultat m'a l'air cohérent au détail près que :
Code BASH :

┌ NotFound@Debian_squeeze:/tmp$
└→  ./a.out
Résultat : 0.040996
 


Je n'obtiens que la moitié du résultat (0.040996 * 2 = 0,081991)
En espérant t'avoir aidé un minimum

Hackmicalement
+1 (0) -1 (0) Répondre
22-03-2013, 01h08 (Modification du message : 22-03-2013, 01h08 par Polo.)
Message : #5
Polo Hors ligne
Benêt en chef
*



Messages : 110
Sujets : 4
Points: 25
Inscription : Mar 2013
RE: [C] Besoin d'aide pour débugger mon code
Merci de ces conseils Smile

Hier MacYavel m'a apporté beaucoup d'aide sur IRC, et on a finalement réussit à aboutir à ce code (ça peut peut-être intéresser qqun Tongue ) :
Code C :

int main ()
{
    double L = 1.00552653648, e = 0.08199188998;
    double pi = 3.141592654;
    double x = 1e-11;
    double a, b = 0;

    b = 2 * atan( exp(L) ) - pi/2;

    do {

    a = b;
    // formule secondaire de calcul de b :
    // b = log( tan((pi/4) + (L/2)) * pow( ((1+e*sin(a)) / (1-e*sin(a))), e/2 ) );
    b = 2*atan( pow( ((1+e*sin(a)) / (1-e*sin(a))), e/2 ) * exp(L)) - pi/2;


    } while(abs(a-b) > x);

    printf("%le", b);
    return b;
}
 


Ce code est normalement fonctionnel. Smile
+1 (0) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [ASM] Interruption 2d, détection d'un debugger Dobry 5 269 14-04-2014, 22h21
Dernier message: Dobry
  [C]Un code compréhensible Trivial 5 450 26-08-2013, 09h54
Dernier message: Junky
  [C] Une idée de projet pour recommencer? Klepto 31 1,339 13-07-2013, 19h54
Dernier message: Trivial
  [C] Code ASCII InFamouZz 22 900 02-07-2013, 19h55
Dernier message: supersnail
  [C-AIDE] Fuzzer De Programme sakiir 2 170 16-05-2013, 11h21
Dernier message: Sh4dows
  [AIDE] Ajout d'une Lib en C sakiir 12 466 04-05-2013, 21h23
Dernier message: gruik
  [MASM] Extracteur de dll pour Backdoor.Win32.Papras Horgh 10 357 25-04-2013, 13h41
Dernier message: Kiwazaru
  [C + Gui] recherche d'une fonction pour listbox api Shark972 2 156 30-03-2013, 15h04
Dernier message: Shark972
  [C] Need help pour free en recursif... ark 3 165 27-11-2011, 00h57
Dernier message: walafc0

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut