Outils logiciels pour les cours Paris II

Cours Paris II

edit SideBar

Cours 7

  • Projets de TDs
    • Sujets 1: Moteur de recherche. Tous les projets nécessitent de coordonner Excel et Word.

On lit des fichiers F1.doc,....Fk.doc et on construit un vecteur pour chacun d'entre eux. On lit des mots clés M1,...,Ml et on cherche les fichiers les plus proches de ces mots. Tous les 4 sous-projets peu être réalisés indépendamment.

  • 1.1 Supprimer les mots courants. Lire tous les mots des fichiers et construire une liste L de mots courants: articles, prépositions, est, a ,.... Pour chaque mot qui n'est pas dans L, on demande à l'utilisateur s'il va dans L ou non.
  • 1.2 Pour chaque fichier, construire un k-gram des mots qui ne sont pas dans L
  • 1.3 Pour des mots clés M1,...Ml, calculer la distance au k-gram de chaque fichier
  • 1.4 Pour des mots clés M1,...Ml, afficher le nom des fichiers par distance croissante.
  • Sujets 2: Marches aléatoires
    • 2.1 Espace limité par un rectangle intérieur et un rectangle extérieur
    • 2.2 Espace limité par un rectangle et des obstacles aléatoires (carrés)
    • 2.3 Distribution graphique des points en dimension 1 et 2
    • 2.4 Approximation du volume d'un polytope (polytope des jeux à somme nulle)
  • Sujets 3: Valeurs boursières
    • 3.1 Afficher les valeurs d'une action (AAPL par exemple) dans le temps (à partir de Yahoo), sur un an par exemple. Soit une stratégie d'investisssement à partir d'un capital M: si la valeur monte, on vend, si elle baisse, on achète. Calculer le gain de cette stratégie et le comparer avec la stratégie aléatoire.
    • 3.2 Comparer des stratégies: la 1ère stratégie est aléatoire (on achète si le tirage est Pile, on vend si le tirage est FACE), la 2ème est déterministe (on achète si la valeur a monté, on vend si la valeur est descendue), la 3ème est l'inverse de la stratégie 2 ((on achète si la valeur est descendue, on vend si la valeur a monté). Afficher les gains cumulés des 3 stratégies. Considérer une 4ème stratégie aléatoire plus complexe (on achète si la valeur a baissé 2 jours de suite, on vend si elle est montée 2 jours de suite, et sinon on tire à PILE ou FACE pour savoir si on achète).
  • Sujets 4: Affichage de distributions
    • 3.1 Gaussienne en dimension 1
    • 3.2 Loi binomiale
    • 3.3 Soit la marche en dimension 1 à partir de l'origine, qui va à gauche avec proba p et à droite avec proba 1-p. On prendra p=1/2 au début. Décrire la loi qui décrit la probabilité d'être en position i à l'instant t.
  • Marche Aléatoire

A l'intérieur du rectangle déterminé par les points (1,1) et (m,m). La valeur de m est entrée par le formulaire ainsi que le nombre d’itérations.

Attention au tirage qui doit être uniforme. La fonction Rnd() (ou Rnd) crée une valeur uniforme entre 0 et 1.

 L = CInt((Rnd * 4) + 0.5)  crée une valeur 1,2,3,4 avec probabilité 1/4.
 L = CInt((Rnd * 4) + 0.3)  crée une valeur 1,2,3,4 avec probabilité non uniforme.

Le programme est décomposé en 2 boutons et un champs texte:

 Private Sub CommandButton1_Click()
 ' Bouton d'itération   i: entre 0 et m
 ' Bouton d'itération   j: entre 0 et m
 ' On affiche le point i+1, j+1 dans le carré 1,m-1


 i = Cells(2, 1)
 j = Cells(1, 2)
 k = 1
 m = Cells(2, 2)
 Do While k <= Cells(1, 1) + 1
 ' Tirage aléatoire
 Randomize
 L = CInt((Rnd * 4) + 0.5)
 '  
 If L = 1 Then i = Abs(i - 1)
 If L = 2 Then i = i + 1
 If L = 3 Then j = Abs(j - 1)
 If L = 4 Then j = j + 1

 If i > m Then i = m - 1
 If j > m Then j = m - 1
 Cells(i + 1, j + 1).Select
    With Selection.Interior
        .ColorIndex = 8
        .Pattern = xlSolid
    End With

 k = k + 1
 Loop
 Cells(2, 1) = i
 Cells(1, 2) = j

 End Sub

 Private Sub CommandButton2_Click()
 ' Bouton QUITTER
 ' Masquer Userform1
   UserForm1.Hide
 ' Récupérer la mem. occupée par userform1
   Unload UserForm1

 End Sub

 Private Sub TextBox1_Change()
 Cells(1, 1) = TextBox1.Value
 End Sub

 Private Sub TextBox2_Change()
 Cells(2, 2) = TextBox2.Value
 End Sub
  • Recherche Dichotomique dans un Tableau

Cette subroutine est essentielle pour tous les projets qui visent à traiter des mots.

Supposons que l’on place dans la colonne A un tableau de N mots triés, à partir de la ligne 2. La valeur de N est dans la cellule B1.

Exemple : N=4 et dans la colonne1:

 ab
 bb
 nn
 zz

On souhaite lire un mot à l’aide d’un formulaire. Si ce mot est dans le tableau, on afficher un message MsgBox ("Mot trouvé"). Sinon, on insère le mot dans le tableau, à l’aide de l’instruction

		Selection.EntireRow.Insert

L’insertion se fait au-dessus du mot sélectionné. Le tableau résultant doit TOUJOURS être trié.

La recherche se fait en comparant le mot s à insérer au point milieu du tableau (approximativement Cells(N/2,1)), puis en divisant l’intervalle de recherche par 2 à chaque itération.

Concevoir un Formulaire avec une zone de texte, et deux boutons (Next, Stop) sur le modèle ci-dessous.

Le Bouton 1 est NEXT et parcourt dichotomiquement le tableau. L’état du tableau est défini par le triplet (Bottom, i, N) qui décrit la decomposition possible en deux sous-tableaux. On s’arrête lorque N=i+1. Une difficulté est que soit Bottom+1=i, soit Bottom+2=i.

Si s est dans la partie basse, il faut donc comparer s à Cells(Bottom), Cells (Bottom+1) et peut-être Cellls(Bottom+2). Ce qui complique légèrement le programme.

 Private Sub CommandButton1_Click()
 s = Cells(1, 3)
 '
 ' Recherche S entre 1 et N de la colonne A2....AN+1.
 ' NT est le nombre d'éléments après la subroutine: NT=NT+1 (insertion) ou NT=N
 '
 '
 N = Cells(1, 2)
 NT = N
 Bottom = 1
 k = 1
 I = Bottom + CInt((N - Bottom) / 2)
 Cells(2, 3) = Bottom
 Cells(2, 4) = I
 Cells(2, 5) = N
 '
 ' Tant que La taille (N-i) du sous-tableau est > 2 on divise '
 '
 Do While (N - I > 1)

    If s < Cells(I + 1, 1) Then
    N = I

    ElseIf s = Cells(I + 1, 1) Then MsgBox ("Egalité")
    GoTo ExitEgalité
    Else: Bottom = I
    End If

 I = Bottom + CInt((N - Bottom) / 2)
 Cells(2 + k, 3) = Bottom
 Cells(2 + k, 4) = I
 Cells(2 + k, 5) = N
 k = k + 1
 Loop
 '
 ' La taille (N-i) du sous-tableau supérieur est maintenant = 2 donc N=i+1 ' Il faut regarder si s est dans le sous tableau inférieur de taille 2 ou 3.
 '

 If s = Cells(Bottom + 1, 1) Or s = Cells(Bottom + 2, 1) Or s = Cells(Bottom + 3, 1) Then
 MsgBox ("Egalitélimite")
 GoTo ExitEgalité

 ElseIf s < Cells(Bottom + 1, 1) Then Cells(Bottom + 1, 1).Select
 Selection.EntireRow.Insert
 Cells(Bottom + 1, 1) = s
 NT = NT + 1
 GoTo ExitEgalité

 ElseIf s < Cells(Bottom + 2, 1) Then Cells(Bottom + 2, 1).Select
 Selection.EntireRow.Insert
 Cells(Bottom + 2, 1) = s
 NT = NT + 1
 GoTo ExitEgalité

 ElseIf s < Cells(Bottom + 3, 1) Then
 Cells(Bottom + 3, 1).Select
 Selection.EntireRow.Insert
 Cells(Bottom + 3, 1) = s
 NT = NT + 1
 GoTo ExitEgalité

 End If

 ' Ou si s est dans le tableau supérieur
 ' On insère une nouvelle ligne si nécessaire et place s '
 ' Attention : il faut un saut de ligne après le Then…..du If   (ce problème créait les difficultés lors du TD du 14
 ' Novembre). Une erreur
  ' de compilation était générée au niveau du ElseIf……

 If s = Cells(I + 1, 1) Or s = Cells(N + 1, 1) Then
 MsgBox ("Egalitélimite")
 GoTo ExitEgalité

 ElseIf s < Cells(I + 1, 1) Then Cells(I + 1, 1).Select
 Selection.EntireRow.Insert
  Cells(I + 1, 1) = s
 NT = NT + 1
 GoTo ExitEgalité

 ElseIf s < Cells(N + 1, 1) Then Cells(N + 1, 1).Select
 Selection.EntireRow.Insert
 Cells(N + 1, 1) = s
 NT = NT + 1
 GoTo ExitEgalité

 Else: Cells(N + 2, 1).Select
 Selection.EntireRow.Insert
  Cells(N + 2, 1) = s
 NT = NT + 1
 End If

 ExitEgalité:
 Cells(1, 2) = NT
 End Sub

 Private Sub CommandButton2_Click()
 ' Bouton QUITTER
 ' Masquer Userform1
   UserForm1.Hide
 ' Récupérer la mem. occupée par userform1
   Unload UserForm1
 End Sub

 Private Sub TextBox1_Change()
 Range("C1").Value = TextBox1.Value
 End Sub

Fichier Excel avec les macros marche aléatoire

Fichier Excel avec les macros recherche dichotomique

UP2