Blocage de mon programme

Résolu
kobeymane Messages postés 58 Date d'inscription dimanche 29 janvier 2012 Statut Membre Dernière intervention 29 avril 2012 - 14 févr. 2012 à 14:19
kobeymane Messages postés 58 Date d'inscription dimanche 29 janvier 2012 Statut Membre Dernière intervention 29 avril 2012 - 16 févr. 2012 à 14:14
Bonjour,

En tant que débutant je veux créer un programme qui calcul l'integrale numérique de sin(x).dx comme première étape puis permettre à l'utilisateur de saisir sa fonction comme il veut.

Le programme contient certainement une faute que je n'arrive pas à la détécter. Il est correcte au niveau de la syntaxe, il s'agit une faute de compilation que je l'ignore.

L'algorithme de ce programme est basé sur le calcul de l'integrale par la méthode des rectangles à point milieu dont le principe est simple:

** Donner les bornes supérieure 'b' et inférieure 'a'.

** Décomposer l'intervale [a,b] en des petits éléments de surface 'dx', ici c'est h (voir programme ci dessous).

** Pour chaque élément de surface calculer l'aire compris dans le rectangle de largeur dx et hauteur f(x) par l'expression mathématique de cette méthode.

** Effectuer la somme de ces petites surfaces pour obtenir finalement la surface délimitée par la droite x=a, x=b et la courbe f(x) qui est bien l'integrale de f(x)dx entre a et b.

L'interface de ce programme est simplement composé de deux textbox pour saisir a et b, d'un boutton calculer et un textbox pour y afficher le résultat.

Voici la totalité du programme:

Public Class Form1
    Dim a, b As Single
    Dim c, d As String
    Dim aire As Double

    Public Function integrale(ByVal a As Single, ByVal b As Single)
        Dim k, n As Integer
        Dim h As Double
        n = 10000
        aire = 0
        h = (b - a) / n
        For k = a To b Step h
            aire = aire + h * (Math.Sin(k + h) + Math.Sin(k)) / 2
        Next k
        Return aire
    End Function

    Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged
        'saisie de borne inférieure
        c = TextBox2.Text
        a = Single.Parse(c)


    End Sub


    Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        'saisie de la borne supérieure
        d = TextBox3.Text
        b = Single.Parse(d)
    End Sub

    Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim z As Decimal

        integrale(a, b)
        z = aire
        TextBox4.Text = CStr(z)

    End Sub

End Class


Lors de la compilation,en appuyant sur F5, je saisie les bornes et quand je click sur le bouton calculer, le programme se bloque, je n'arrive pas a avoir le résultat et je n'ai qu'à arrêter le débogage.

Ce programme est la base de calcul de certaines formules dans les mathématiques des signaux.

J'ai vraiment besoin de votre aide. MERCI d'avance.

6 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 févr. 2012 à 14:44
interesse toi a ta boucle

elle semble infinie. surement du a un conflit integer/double

place un point d'arret sur cette ligne (F9) tu seras fixé

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
3
kobeymane Messages postés 58 Date d'inscription dimanche 29 janvier 2012 Statut Membre Dernière intervention 29 avril 2012
14 févr. 2012 à 23:06
effectivement j'ai trouvé le conflit integer - double j'ai donc changé k en double ainsi que toute autre faute, mais un problème se pose encore:
je calcule à la main l'integrale de 1 à 2 de sin(x).dx ça donne: 0.99945. mais le programme donne -0.45969

ou est le problème encore ? merci de me repondre
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 févr. 2012 à 01:24
Bonjour,
Je ne vois personnellement rien à reprocher (après tes corrections de typage des numériques) au code de ta fonction integrale, dans la mesure où il exécute bien les opérations que tu lui demandes d'exécuter.
Sont-elles, par contre, les opérations qui correspondent au traitement algébrique à faire ? ===>> ça, c'est un aspect hors développement (purement algébrique).


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 févr. 2012 à 02:03
d'autre part :
- ton programme donne z 0,95654 avec a 1 et b = 2

- si tu as un z négatif, c'est que b est inférieur à a (et que donc tu as saisi "1" en textbox3 et "2" en textbox2)

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

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

Posez votre question
kobeymane Messages postés 58 Date d'inscription dimanche 29 janvier 2012 Statut Membre Dernière intervention 29 avril 2012
16 févr. 2012 à 13:53
Bonjour,
Dans le cas d'une erreur de saisie, j'ai corrigé le problème en permuttant les valeurs de a et b (dans le cas si l'utilisateur se trompait). il suffit juste de mettre:
If a > b Then
            h = a
            a = b
            b = h
        End If

        If a = b Then
            Return aire
            Exit Function
        End If

en + j'ai rendu toutes les variable en type Double

Mais je remarque que si je lui donne a=1 et b=2 ça me donne 0.45 puis si je fais a=2 et b=1 selon la modification normalement il y aura pas problème, mais je vois que les valeurs ne sont pas identiques, c'est bizzare !!?
0
kobeymane Messages postés 58 Date d'inscription dimanche 29 janvier 2012 Statut Membre Dernière intervention 29 avril 2012
16 févr. 2012 à 14:14
le cas ou a=b donc la fonction retourne aire=0 sa valeur d'initialisation.
Malgré cette petite amélioration je n'ai pas les valeurs extactes des intégrales en cas d'erreur ni dans le cas normale et en plus lorsque je fais a=0 le programme se bloque, c'était ça mon problème depuis le début. Merci de m'aider
0
Rejoignez-nous