GeoJS: Ajuda als bombers!

Vols ajudar als bombers? Analitzant les dades sobre els incendis forestals dels darrers anys pots contribuir a fer previsions i ajudar a fer plans de protecció.

Com que s’ha d’analitzar molta informació, en aquesta activitat aprendràs a repetir instruccions sense haver-les de tornar a escriure (bucles) per tal de manipular moltes dades alhora (vectors).

Què hi dius? Et poses el casc?

Guió de la sessió presencial: Ajuda als bombers!

iniAbans de començar

Fitxa Didàctica (general)

Proposta de Dossier per a l’Alumne (.pdf)

Mapa risc d'incendis (font: http://www.gencat.cat/medinatural/incendis/mapaperill/ ) petjadaPas 1: Recompte d’incendis

El primer que pots fer per ajudar, és un recompte bàsic d’incendis per estudiar quan es produeixen i suggerir quants bombers fan falta.

  • puzzleRepte 1: Quant sumen els 100 primers nombres naturals?
    • Crea un programa que calculi la suma dels nombres de l’1 al 100 i la mostri en una finestra emergent.
    • Aquest repte serveix d’entrenament per a saber repetir instruccions al codi (fer bucles) ja que necessitaràs fer-ho en els altres reptes de l’activitat.
    • definitionLabel (font: http://findicons.com/icon/156894/label ) Bucle (loop): en programació s’usa la paraula bucle o iteració per referir-se a una part del programa que es repeteix diverses vegades. D’aquesta forma es pot repetir una instrucció sense haver-la d’escriure múltiples vegades. +info
    • bombetaIdees:
      • Recorda com obrir l’editor de JavaScript i tenir l’entorn com en aquesta imatge (pots fer una ullada a aquestes indicacions).
      • A continuació tens un exemple que et pot donar idees per a assolir el teu repte. Convé que estiguis ja familiaritzat amb el JavaScript en Geogebra (si no és així fes primer aquesta activitat inicial).
      • Exemple bucle per a repetir instruccions:
        /* Bucle per escriure 10 cops el missatge */
        for ( var compta = 0 ; compta < 10 ; compta++ ){
          /* Dins del bucle: instr. que es repetirà */
          alert("M'agrada molt programar!")
        }
        
        /* Fora del bucle: instr. que no es repetirà */
        alert("Ho sento, però algú ho havia de dir!")
        
        • La instrucció for és una de les disponibles per a repetir instruccions. Té tres arguments:
          • l’expressió que s’executarà un cop a l’inici: a l’exemple definim una variable que comptarà el nombre de repeticions i que té inicialment el valor 0.
          • la condició per a repetir el bucle: a l’exemple comprovem que el comptador encara no ha arribat al màxim.
          • l’expressió que s’executarà a cada repetició: a l’exemple, incrementem el valor del comptador (és equivalent a posar comptador = comptador + 1).
    • lupaPistes:
      var acumulador = 0
      for ( var comptador = 1 ; comptador <= 100 ; comptador++ ) {
        acumulador = acumulador + comptador
      }
      
      alert("Total: " + acumulador)
      
    • interrogantPregunta 1: Sabries trobar el mateix resultat sense sumar nombre a nombre? Descriu-lo.
  • puzzleRepte 2: Quin és el promig d’incendis?
    • Crea un programa que obtingui el nombre d’incendis de cada mes del full de càlcul, l’emmagatzemi en un vector de dades (tens descrit vector a continuació), en calculi la mitjana a través d’una funció i mostri el resultat retornat per la funció en una cel·la del full de càlcul.
    • Copia les dades següents al full de càlcul: (dades del 2013 extretes de l’activitat Incendis a Catalunya de l’Institut d’Estadística de Catalunya.)
      • A B
        1 ENTRADA
        2 Mes: Incendis:
        3 Gener 20
        4 Febrer 56
        5 Març 29
        6 Abril 36
        7 Maig 18
        8 Juny 61
        9 Juliol 123
        10 Agost 93
        11 Setembre 40
        12 Octubre 25
        13 Novembre 65
        14 Desembre 36
        15
        16 SORTIDA
        17 Mitjana:
      • Pots usar “copiar i enganxar” per transferir-hi totes les dades de cop. Si teniu problemes amb alguna versió de Geogebra per a fer el “copiar i enganxar”, podeu fer-lo primer sobre un programa de full de càlcul (ex. LibreOffice Calc) i després copiar columna a columna des d’aquest full de càlcul al full de càlcul del Geogebra.
    • definitionLabel (font: http://findicons.com/icon/156894/label ) Vector (array): en programació s’usa la paraula vector per referir-se a una estructura capaç d’emmagatzemar un conjunt de dades una darrera l’altra. De forma que es pot emmagatzemar una dada a la primera posició, una altra a la segona… i després recuperar la dada de la posició que ens interessi. D’aquesta forma, en una sola variable tipus vector podem emmagatzemar un conjunt de valors que guardin una relació entre si. +info
    • bombetaIdees:
      • Exemple ús d’un vector amb dades escrites al programa:
        /* Definim una variable tipus vector */
        var pesos = []
        
        /* Omplim el vector amb múltiples dades */
        pesos[0] = 55.3 /* Per exemple, hi podem */
        pesos[1] = 68.1 /*   guardar el pes de   */
        pesos[2] = 60.7 /*   vàries persones.    */
        
        /* Mostrem una dada concreta del vector */
        alert("Pes en segona posició: " + pesos[1] )
        
        /* Mostrem quants elements té vector: 3 */
        alert("Num. elements: " + pesos.length )
        
        • Fixa’t que l’índex del primer element és 0 (això passa en la majoria de llenguatges de programació). De manera que el segon element no té l’índex 2 sinó 1. Així que l’element n-essim té l’índex n-1.
      • Exemple ús d’un vector amb dades del full de càlcul:
        /* Definim una variable tipus vector */
        var pesos = []
        
        /* Omplim el vector a partir del full de càlc.*/
        const FILA_INI = 6
        const NUM_FILES    = 3
        for ( var i = 0 ; i < NUM_FILES ; i++ ) {
          pesos[i]= ggbApplet.getValue("A"+(i+FILA_INI))
        }
        
        /* Mostrem el contingut del vector */
        for ( var i = 0 ; i < pesos.length ; i++ ) {
          alert("Posició "+i+" : "+ pesos[i])
        }
        
      • Exemple de passar i rebre vectors en una funció:
        /* Funció que rep i retorna un vector */
        function doblaElsValors( entrada ) {
          var sortida = []
        
          /* Calculem el doble de cada element */
          for ( var i = 0; i < entrada.length ; i++ ) {
            sortida[i] = entrada[i] * 2
          }
        
          return sortida
        }
        
        /* Podem declarar tot el vector de cop */
        var vector = [7, 2, 9]
        
        var resultat = doblaElsValors( vector )
        
        /* Podem mostrar tot el vector de cop */
        alert("Resultat: " + resultat )
        
    • lupaPistes:
      - En una sola variable tipus vector podem emmagatzemar les dades del nombre d'incendis que cada mes (és a dir, dotze quantitats). De forma que a la primera posició podem guardar el número d'incendis que s'han produit al Gener, a la segona posició el nombre que s'ha produit a Febrer i així successivament fins el nombre d'incendis de Desembre a la dotzena posició. D'aquesta forma, després és possible consultar el nombre d'incendis de qualsevol mes a través d'aquesta única variable.
      1r: Posar les dades del full de càlcul en un vector:
      2n: Sumar tots els elements del vector
        var suma = 0
        for ( var i = 0 ; i < vector.length ; i++ ) {
         suma = suma + vector[i]
        }
      3r: Dividir del nombre d'elements
        alert("Mitjana: " + (suma / vector.length) )
      
  • puzzleRepte 3: Sabries utilitzar el Geogebra per comprovar el valor de la mitjana?
    • Usa les eines del full de càlcul de Geogebra per calcular la mitjana i comprovar que la que calcula el teu programa és correcta.
    • lupaPistes:
      Inserir "= Mitjana[A1:A5]" en una cel·la del full de càlcul.
      
  • interrogantPregunta 2: Recomanaries disposar cada mes del mateix nombre d’efectius per tal cobrir la mitjana d’incendis mensual?
  • interrogantPregunta 3: Si amb unes altres dades de nombre d’incendis d’un altre clima s’obté la mateixa mitjana, recomanaries la mateixa distribució de bombers?

petjadaPas 2: Distribució dels incendis al llarg de l’any

  • puzzleRepte 1: Quants mesos tenen una quantitat d’incendis superiors a la mitjana?
    • Afegeix una altra funció al teu programa que rebi el vector de dades d’incendis i la mitjana calculada (amb la funció que ja tens), i retorni el nombre de mesos que tenen una quantitat d’incendis superiors a aquesta mitjana. El teu programa ha d’acabar ensenyant el resultat en una cel·la del full de càlcul.
    • definitionLabel (font: http://findicons.com/icon/156894/label ) Bifurcació condicional: en programació s’anomena bifurcació condicional o construcció alternativa a una part del programa en que s’executen unes instruccions o bé unes altres en funció d’una condició. D’aquesta forma és possible que el programa faci accions diferents segons les circumstàncies. Per exemple, podem fer un càlcul diferent en funció de l’edat de l’usuari. +info
    • definitionLabel (font: http://findicons.com/icon/156894/label ) Condició: en programació s’anomena condició a una expressió que acaba essent certa o falsa (boolean), de manera que si és certa direm que es compleix la condició i si no ho és direm que no es compleix. Per exemple l’expressió ( x > 2 ) serà certa sempre que la variable x tingui un valor superior a 2 i falsa sempre que sigui inferior. Habitualment aquestes expressions s’usen a les bifurcacions condicionals explicades anteriorment. +info
    • bombetaIdees:
      • Exemple que conté instruccions que només s’executen si es compleix una condició:
        /* Preguntem el preu d'un producte */
        var import = prompt("Quin preu té el producte?")
        
        /* Si és major de 100€ apliquem un descompte */
        if ( import > 100 ) {
          /* Descomptem el 5% */
          import = 0,95 * preu
        }
        
        alert("Has de pagar " + import + " euros.")
        
      • Exemple de bifurcació que conté instruccions en cas de no complir-se la condició:
        /* Preguntem l'edat de l'usuari */
        var edat = prompt("Quina edat tens?")
        
        /* Comprovem si és major d'edat */
        if ( edat >= 18 ) {
          /* En cas afirmatiu: pot entrar al local*/
          alert("Pots entrar ja que ets major d'edat.")
        } else {
          /* En cas contrari, calcularem quants anys
             li falten per poder entrar */
          var f = 18 - edat
          alert("No pots entrar, et falten "+f+" anys")
        }
        
    • lupaPistes:
      comptador=0
      per a i=1 fins a 12 increments 1
         si mes(i)> mitjana  llavors
              comptador = comptador + 1
         fi_si
      fi_per
      
    • interrogantPregunta 4: Saber el nombre de mesos que tenen una quantitat d’incendis superiors a la mitjana fa variar la teva resposta a la pregunta 2?
  • puzzleRepte 2: Bombers Diagrama BarresDissenyar un diagrama de barres que ens aporti informació sobre la distribució d’incendis per mesos.
    • Fes una funció que rebi el vector de dades i la mitjana, i dibuixi el diagrama de barres corresponent, afegint-hi un segment a l’alçada de la mitjana.
    • bombetaIdees:
      • Fes primer una funció que rebi el número de mes i la freqüència, i dibuixi una barra en la posició (mes-1,0) (mes,0) amb altura igual a la freqüència.
      • Exemple per dibuixar un rectangle en Geogebra:
        const g=ggbApplet
        /* Dibuixar rectangle donats els seus
           vèrtexs de forma ordenada */
        g.evalCommand("p_"+4+"=Polygon[(3,0),(4,0),"+
                                      "(4,2),(3,2)]")
        
      • Per evitar que apareguin multitud d’etiquetes al gràfic (se’n crea una per cada segment), ves al menú “Opcions”, submenú “Etiquetes” i tria l’opció “Etiqueta només els punts nous”.
      • Exemple per dibuixar un segment en Geogebra:
        const g=ggbApplet
        /* Dibuixar un segment donats els seus extrems*/
        g.evalCommand("s"=Segment[(-1,30),(15,30)]")
        
      • Recorda que pots canviar l’escala dels eixos fent un clic amb el botó secundari del ratolí sobre un dels eixos de coordenades i escollint l’opció “Eix X : Eix Y” del menú contextual.
    • lupaPistes:
      func diagrama(vector, mitjana)
           per a i=1 fins a 12 increments 1
             poligon_i(vector[i])
           fi_per
           segment(mitjana)
      fi_func
      
    • interrogantPregunta 5:  Què passaria si tots els mesos tinguessin el mateix nombre d’incendis? Reflexiona sobre la informació que aporta la mitjana segons la distribució de la variable estadística.
  • puzzleRepte 3: Sabries utilitzar el Geogebra per comprovar el diagrama de barres?
    • Usa les eines estadístiques del full de càlcul de Geogebra per a crear el diagrama de barres i comparar-lo al el que ha dibuixat el teu programa al repte anterior.
    • bombetaIdees:
      • Un cop seleccionats els noms dels mesos i les freqüències d’incendis al full de càlcul, pots fer clic al  botó “Anàlisi d’una variable” GeogebraBotoAnalisiVariable. Pots trobar més informació aquí, o en aquest vídeo.
    • lupaPistes:
      1. Selecciona els noms dels mesos i les freqüències d'incendis al full de càlcul.
      2. Prem el botó "Anàlisi d'una variable".
      3. Prem la icona d'engranatge per veure les opcions, i selecciona "Dades i freqüències".
      4. Selecciona només els mesos al full de càlcul i prem la icona de la mà de la columna esquerra.
      5. Prem la icona d'engranatge per veure les opcions, i selecciona "Textos".
      6. Selecciona només les freqüències i prem la icona de la mà de la columna dreta.
      7. Prem el botó "Fes anàlisi".
      
  • interrogantPregunta 5: Al llarg de l’any quantes planificacions diferents de bombers faries?

interrogantPregunta de Síntesi: En veuries capaç de descriure un parell de situacions on et podrien ser útils les tècniques que après en aquesta activitat? Descriu-les per tal de compartir-les en grup.

mesI després…

Captura de pantalla de l'aplicació d'ajuda als bombers en GeoJSFelicitats! Has aconseguit fer una aplicació amb la que analitzar estadísticament les dades d’incendis i aconsellar els bombers!

Així que amb aquesta activitat has aprés com:

  • usar bucles per a repetir instruccions.
  • usar vectors per emmagatzemar i manipular moltes dades.
  • usar condicions per executar diferents instruccions en funció de la situació.
  • dibuixar polígons i segments a la zona gràfica de Geogebra.

Ara pots continuar amb

  • Repte Extra 1: Mostrar el nom dels mesos al diagrama de barres.
  • Repte Extra 2: Mostrar el nom de les estacions i dibuixar les barres en diferents colors segons l’estació.
  • Repte Extra 3: Calcular el subtotal de nombre d’incendis per estació.

Fitxa DidàcticaFitxa didàctica

Teniu a disposició informació docent sobre les activitats de Geogebra amb JavaScript (GeoJS) i una fitxa didàctica general sobre com desenvolupar les activitats d’EduLogiX. A més, a continuació teniu alguns detalls concrets sobre el contingut de l’activitat en curs:

  • Pas 1: Recompte d’incendis
    • Repte 1: Quant sumen els 100 primers nombres naturals?
      • Esquemes de programació: bucle, comptador, acumulador.
      • Conceptes matemàtics: suma d’una progressió aritmètica.
    • Repte 2: Quin és el promig d’incendis?
      • Estructures de dades: vector de dades, entrada de múltiples elements per omplir un vector (el nombre d’incendis .
      • Esquemes de programació: bucle consulta dades amb acumulador (esquema recorregut), funció que rep un vector i retorna un valor (la mitjana).
      • Conceptes matemàtics: mitjana aritmètica.
    • Repte 3:
      • Eines de Geogebra: utilitzar comandes de Geogebra per comprovar un càlcul determinat.
  • Pas 2: Distribució del nombre d’incendis al llarg de l’any
    • Repte 1: Quants mesos tenen una quantitat d’incendis superiors a la mitjana?
      • Esquemes de programació: bucle amb condicional simple i acumulador (esquema recorregut).
      • Conceptes matemàtics: distribució d’una població (reflexió sobre el paper de la mitjana en l’estudi de la distribució).
    • Repte 2: El diagrama de barres ens aportarà informació sobre la distribució d’incendis per mesos?
      • Conceptes matemàtics: distribució d’una població.
    • Repte 3: Sabries utilitzar el Geogebra per comprovar el diagrama de barres?
      • Eines de Geogebra: utilitzar les comandes gràfiques d’estadística descriptiva per fer l’anàlisi d’una variable.

feather Autoria: Manel Martínez i Pascual i Jordi Campos i Miralles; inspirada en l’activitat Incendis a Catalunya de l’Institut d’Estadística de Catalunya.

Licencia de Creative CommonsPodeu usar el contingut i modificar-lo d’acord amb la Llicència Creative Commons Reconeixement-CompartirIgual 4.0.

Anuncis

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

Connecting to %s