{"id":1575,"date":"2024-05-14T10:35:00","date_gmt":"2024-05-14T08:35:00","guid":{"rendered":"http:\/\/labodemaths.fr\/WordPress3\/?p=1575"},"modified":"2024-06-03T11:31:38","modified_gmt":"2024-06-03T09:31:38","slug":"nsi-tp-percolation-1","status":"publish","type":"post","link":"https:\/\/labodemaths.fr\/WordPress3\/nsi-tp-percolation-1\/","title":{"rendered":"NSI, TP percolation 1"},"content":{"rendered":"\n<div class=\"wp-block-file\"><a href=\"https:\/\/labodemaths.fr\/WordPress3\/wp-content\/uploads\/2021\/05\/TP_percolation.pdf\">TP_percolation<\/a><a href=\"https:\/\/labodemaths.fr\/WordPress3\/wp-content\/uploads\/2021\/05\/TP_percolation.pdf\" class=\"wp-block-file__button\" download>T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p>La fonction grille() \u00e0 compl\u00e9ter et son affichage:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from random import *\nimport matplotlib.pyplot as plt\nimport numpy as np\n\ndef grille(largeur,hauteur,densite):\n    '''\n    genere une grille de dimensions donn\u00e9es avec une densit\u00e9 donn\u00e9e\n    '''\n    \n\ndef afficher(grille):\n    '''\n    affichage de la grille\n    '''\n    hauteur=len(grille)\n    largeur=len(grille&#91;0])\n    grille_a_afficher=np.zeros((largeur,hauteur))\n    for i in range(hauteur):\n        for j in range(largeur):\n            grille_a_afficher&#91;j,i]=grille&#91;j]&#91;i]    \n    plt.spy(grille_a_afficher)\n    plt.show()\n<\/code><\/pre>\n\n\n\n<h2>proposition correction<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>from random import *\nimport matplotlib.pyplot as plt\nimport numpy as np\n\ndef grille(largeur,hauteur,densite):\n    '''\n    g\u00e9n\u00e8re une grille sous la forme d'un tuple de tuples\n    de largeur et hauteur donn\u00e9es\n    chaque \u00e9l\u00e9ment de la grille a la probabilit\u00e9 densit\u00e9\n    d'\u00eatre plein\n    largeur : int\n    hauteur : int\n    densite : float\n    return : tuple\n    exemple : grille(10,10,0.1) retournera une grille al\u00e9atoire\n    du type\n    ((0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n    (0, 1, 0, 0, 0, 0, 0, 0, 0, 0),\n    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n    (0, 0, 0, 0, 0, 1, 0, 0, 0, 1),\n    (0, 0, 0, 0, 0, 0, 0, 0, 1, 0),\n    (0, 0, 1, 0, 0, 0, 0, 1, 0, 0),\n    (0, 0, 0, 0, 0, 0, 0, 0, 1, 0),\n    (0, 0, 0, 1, 0, 1, 0, 0, 0, 1),\n    (0, 1, 0, 0, 0, 0, 0, 1, 0, 0))\n    '''\n    grille=()\n    for j in range(hauteur):\n        ligne=()\n        for i in range(largeur):\n            if random()&lt;densite:\n                ligne+=(1,)\n            else :\n                ligne+=(0,)\n        grille+=(ligne,)\n    return grille\n                \ndef frequence(grille):\n    '''\n    retourne la frequence des 1 pr\u00e9sents dans la grille\n    grille : tuple de tuples\n    return : float\n    >>> g=((0, 0, 0, 0, 0, 0, 1, 0, 0, 0),\n    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n    (0, 0, 0, 0, 0, 0, 0, 1, 0, 1),\n    (0, 0, 0, 1, 1, 0, 0, 0, 0, 0),\n    (0, 0, 0, 0, 0, 0, 0, 1, 0, 0),\n    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0))\n    >>>print(frequence(g))\n    0.06\n    '''\n    compteur=0\n    for j in range(len(grille)):\n        for i in range(len(grille)):\n            if grille&#91;j]&#91;i]==1:\n                compteur+=1\n    return compteur\/((i+1)*(j+1))\n\ndef afficher(grille):\n    '''\n    affichage de la grille\n    '''\n    hauteur=len(grille)\n    largeur=len(grille&#91;0])\n    grille_a_afficher=np.zeros((largeur,hauteur))\n    for i in range(hauteur):\n        for j in range(largeur):\n            grille_a_afficher&#91;j,i]=grille&#91;j]&#91;i]    \n    plt.spy(grille_a_afficher)\n    plt.show()\n\ndef afficher_amas(grille):\n    mes_amas=amas(g)\n    hauteur=len(grille)\n    largeur=len(grille&#91;0])\n    grille_a_afficher=np.zeros((largeur,hauteur))\n    for i in range(hauteur):\n        for j in range(largeur):\n            if not(cellule_pas_dans_mes_amas(mes_amas,i,j)):\n                grille_a_afficher&#91;j]&#91;i]=1\n    plt.spy(grille_a_afficher)\n    plt.show()\n    \n    \n    \ndef amas(grille):\n    '''\n    d\u00e9termine les amas de cases vides de la grille\n    en partant du haut et de mani\u00e8re ordonn\u00e9e\n    grille : tuple de tuples contenant des 0 et des 1\n    return : tuple constitu\u00e9 de tuples contenant les coordonn\u00e9es\n    des cases formant un m\u00eame amas\n    >>>g=(\n    (0, 0, 1, 0, 0, 0, 1, 0, 1, 1),\n    (1, 1, 0, 1, 0, 0, 1, 0, 0, 1),\n    (0, 0, 1, 1, 1, 1, 0, 1, 0, 1),\n    (1, 0, 1, 1, 1, 0, 0, 1, 0, 0),\n    (0, 1, 1, 1, 0, 1, 0, 1, 1, 0),\n    (1, 1, 0, 0, 0, 1, 1, 0, 0, 0),\n    (0, 1, 0, 1, 0, 0, 1, 0, 0, 1),\n    (1, 0, 1, 0, 0, 1, 0, 1, 0, 0),\n    (0, 0, 0, 1, 1, 0, 0, 1, 1, 0),\n    (1, 1, 1, 0, 0, 0, 0, 1, 0, 0))\n    >>> amas(grille)\n    (((0,0),(1,0)),\n    ((3,0),(4,0),(5,0),(4,1),(5,1)),\n    ((7,0),(7,1),(8,1),(8,2),(8,3),(9,3),\n    (9,4),(7,5),(8,5),(9,5),(7,6),(8,6),\n    (8,7),(9,7),(9,8),(8,9),(9,9)))\n    '''\n    mes_amas=()\n    for i in range(len(grille&#91;0])):\n        if grille&#91;0]&#91;i]==0 and cellule_pas_dans_mes_amas(mes_amas,i,0):\n            amas=((i,0),)\n            frontiere=bord_cellules_amas(amas,grille,mes_amas)\n            while len(frontiere)!=0:\n                amas+=frontiere\n                frontiere=bord_cellules_amas(frontiere,grille,amas)\n            mes_amas+=(amas,)\n    \n    \n    return mes_amas\n\ndef cellule_pas_dans_amas(mon_amas,x,y):\n    '''\n    d\u00e9termine si une case appartient \u00e0 un amas\n    : mes_amas : tuple de tuples contenant nos amas\n    : x,y : int coordonn\u00e9es de la case\n    : return : boll\u00e9en\n    >>> amas=(\n    ((0,0)),\n    ((3,0),(4,0),(4,1))\n    )\n    >>> cellule_pas_dans_amas_finaux(amas,4,0)\n    False\n    >>> cellule_pas_dans_amas_finaux(amas_finaux,3,1)\n    True\n    '''\n    if (x,y) in mon_amas :\n            return False\n    return True\n\ndef cellule_pas_dans_mes_amas(mes_amas,x,y):\n    '''\n    d\u00e9termine si une case appartient \u00e0 un ensemble d'amas\n    : mes_amas : tuple de tuples contenant nos amas\n    : x,y : int coordonn\u00e9es de la case\n    : return : boll\u00e9en\n    >>> amas=(\n    ((0,0)),\n    ((3,0),(4,0),(4,1))\n    )\n    >>> cellule_pas_dans_amas_finaux(amas,4,0)\n    False\n    >>> cellule_pas_dans_amas_finaux(amas_finaux,3,1)\n    True\n    '''\n    for amas in mes_amas:\n        if (x,y) in amas :\n            return False\n    return True\n               \n            \ndef bord_cellules_amas(amas,grille,mes_amas):\n    '''\n    d\u00e9termine les cellules adjacentes l'amas\n    et n'appartenant pas \u00e0 cet amas en construction et aux\n    amas d\u00e9j\u00e0 d\u00e9termin\u00e9s\n    : amas : tuple\n    : grille : tuple\n    : amas : tuple\n    : return : tuple contenant les coordonn\u00e9es des cellules voisines d'un amas\n    >>>g=(\n    (0, 0, 1, 0, 0, 0, 1, 0, 1, 1),\n    (1, 1, 0, 1, 0, 0, 1, 0, 0, 1),\n    (0, 0, 1, 1, 1, 1, 0, 1, 0, 1),\n    (1, 0, 1, 1, 1, 0, 0, 1, 0, 0),\n    (0, 1, 1, 1, 0, 1, 0, 1, 1, 0),\n    (1, 1, 0, 0, 0, 1, 1, 0, 0, 0),\n    (0, 1, 0, 1, 0, 0, 1, 0, 0, 1),\n    (1, 0, 1, 0, 0, 1, 0, 1, 0, 0),\n    (0, 0, 0, 1, 1, 0, 0, 1, 1, 0),\n    (1, 1, 1, 0, 0, 0, 0, 1, 0, 0))\n    >>> mes_amas=(\n    ((0,0),(1,0)),\n    ((3,0),(4,0)),\n    )\n    >>> cases=(\n    (5,0),(4,1)\n    )\n    >>> print(bord_cellules_amas(cases,g,mes_amas))\n    ((5,1),)\n    >>>>>> cases=(\n    (7,0),(1,0)\n    )\n    >>> print(bord_cellules_amas(cases,g,mes_amas))\n    ((7,1),)\n    '''\n    retour=()\n    for case in amas :\n        x=case&#91;0]\n        y=case&#91;1]\n        if x&lt;len(grille&#91;0])-1:\n            if grille&#91;y]&#91;x+1]==0 and cellule_pas_dans_amas(mes_amas,x+1,y) and cellule_pas_dans_mes_amas(mes_amas,x+1,y):\n                retour+=((x+1,y),)\n        if x>0 :\n            if grille&#91;y]&#91;x-1]==0 and cellule_pas_dans_amas(mes_amas,x-1,y) and cellule_pas_dans_mes_amas(mes_amas,x-1,y):\n                retour+=((x-1,y),)\n        if y>0 :\n            if grille&#91;y-1]&#91;x]==0 and cellule_pas_dans_amas(mes_amas,x,y-1) and cellule_pas_dans_mes_amas(mes_amas,y-1,y):\n                retour+=((x,y-1),)\n        if y&lt;len(grille)-1:\n            if grille&#91;y+1]&#91;x]==0 and cellule_pas_dans_amas(mes_amas,x,y+1) and cellule_pas_dans_mes_amas(mes_amas,x,y+1):\n                retour+=((x,y+1),)\n    return on_enleve_les_doublons(retour)\n\ndef on_enleve_les_doublons(mon_tuple):\n    '''\n    retourne un tuple sans \u00e9l\u00e9ments en plusieurs exemplaires\n    : mon_tuple : tuple\n    : retour : tuple\n    >>> mon_tuple=((1,1),(0,1),(1,1),(2,1))\n    >>> print(on_enleve_les_doublons(mon_tuple))\n    ((1,1),(0,1),(2,1))\n    '''\n    retour =()\n    for elt in mon_tuple :\n        if not(elt in retour):\n            retour+=(elt,)\n    return retour\n\ndef percolation(grille):\n    '''\n    d\u00e9termine si un mas pr\u00e9sent dans les amas r\u00e9alise\n    la percolation\n    : grille : tuple de tuples\n    : mes_amas : tuple de tuples\n    : return : True si il y a percolation, False sinon\n    >>> g=((1, 0, 1, 1, 0, 1, 0, 1, 0, 1),\n    (0, 1, 1, 0, 1, 0, 1, 1, 1, 0),\n    (0, 0, 0, 0, 0, 1, 0, 0, 1, 0),\n    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0),\n    (1, 1, 1, 0, 0, 0, 0, 0, 0, 0),\n    (0, 1, 0, 0, 0, 0, 1, 0, 1, 0),\n    (1, 1, 0, 0, 0, 1, 1, 0, 0, 0), \n    0, 0, 1, 0, 0, 0, 1, 1, 0, 0),\n    (1, 0, 1, 0, 0, 1, 0, 1, 1, 0),\n    (0, 1, 0, 0, 1, 1, 1, 1, 0, 1))\n    >>> amas=(((1, 0),), ((4, 0),), ((6, 0),), ((8, 0),))\n    >>> print(percolation(grille)    True\n    >>>g=((0, 0, 0, 0, 0, 0, 0, 0, 0, 0), \n    (0, 1, 0, 0, 1, 0, 1, 0, 0, 0), \n    (0, 0, 1, 1, 0, 0, 0, 1, 0, 0), \n    (0, 0, 1, 1, 1, 1, 1, 0, 1, 0), \n    (1, 0, 0, 1, 0, 0, 1, 0, 1, 1), \n    (1, 0, 0, 1, 0, 0, 1, 1, 0, 1), \n    (1, 1, 1, 0, 1, 0, 0, 0, 0, 0), \n    (0, 1, 0, 1, 0, 0, 0, 1, 1, 0), \n    (1, 0, 0, 0, 0, 0, 1, 1, 0, 0), \n    (0, 0, 1, 1, 1, 0, 0, 0, 0, 0))\n    >>> amas=(((0, 0), (1, 0), (0, 1), (2, 0), (0, 2), (3, 0), (2, 1), (1, 2), (0, 3), (4, 0), (3, 1), (1, 3), (5, 0), (1, 4), (6, 0), (5, 1), (2, 4), (1, 5), (7, 0), (5, 2), (2, 5), (8, 0), (7, 1), (6, 2), (4, 2), (9, 0), (8, 1), (9, 1), (8, 2), (9, 2), (9, 3)),)\n    >>> print(percolation(grille))\n    False\n    '''\n    mes_amas=amas(grille)\r\n    for cellules in mes_amas:\r\n        for cellule in cellules:\r\n            if cellule&#91;1]==len(grille)-1:\r\n                return True\r\n    return False\n    \n\n\n\n\n\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>La fonction grille() \u00e0 compl\u00e9ter et son affichage: proposition correction<\/p>\n","protected":false},"author":2,"featured_media":1051,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[57],"tags":[],"_links":{"self":[{"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/posts\/1575"}],"collection":[{"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/comments?post=1575"}],"version-history":[{"count":9,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/posts\/1575\/revisions"}],"predecessor-version":[{"id":2498,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/posts\/1575\/revisions\/2498"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/media\/1051"}],"wp:attachment":[{"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/media?parent=1575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/categories?post=1575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/tags?post=1575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}