• STATISTIQUES
  • Il y a eu un total de 0 membres et 26874 visiteurs sur le site dans les dernières 24h pour un total de 26 874 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Le site du zero
    Découvrez gratuitement la programmation (C, C++, PHP, MySQL, XHTML, CSS...), Linux, le Mapping, la modé...
    Programmation
    [EN] Astalavista
    Un site aux ressources incontournable depuis plusieurs années, Astalavista est réellement devenue un cl...
    Hacking
    [FR] Root-me
    Script: 5, Système: 20, Cracking: 16, Cryptanalyse: 17, Programmation: 8, Réaliste: 11, Réseau: 10, Stéganog...
    Challenges
    [EN] Defcon
    Lancé en 1992 par Dark Tangent, DEFCON est la plus ancienne et la plus grande conférence underground de...
    Hacking
    [FR] InfoMirmo
    Apprentissage de l'informatique par l'intermédiaire de challenges de sécurité. Venez app...
    Hacking
    [FR] apprendre-a-manipuler
    Site d'apprentissage de la manipulation d'autrui.
    Hacking
    [EN] w3challs
    Ce site propose différents types de défis informatiques: piratage, craquage, cryptographie, stég...
    Hacking

  • 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
+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,609
Sujets : 71
Points: 465
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 316 14-04-2014, 22h21
Dernier message: Dobry
  [C]Un code compréhensible Trivial 5 610 26-08-2013, 09h54
Dernier message: Junky
  [C] Une idée de projet pour recommencer? Klepto 31 1,879 13-07-2013, 19h54
Dernier message: Trivial
  [C] Code ASCII InFamouZz 22 1,195 02-07-2013, 19h55
Dernier message: supersnail
  [C-AIDE] Fuzzer De Programme sakiir 2 212 16-05-2013, 11h21
Dernier message: Sh4dows
  [AIDE] Ajout d'une Lib en C sakiir 12 585 04-05-2013, 21h23
Dernier message: gruik
  [MASM] Extracteur de dll pour Backdoor.Win32.Papras Horgh 10 549 25-04-2013, 13h41
Dernier message: Kiwazaru
  [C + Gui] recherche d'une fonction pour listbox api Shark972 2 213 30-03-2013, 15h04
Dernier message: Shark972
  [C] Need help pour free en recursif... ark 3 243 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