diff --git a/quad10/fenomens/lab/p1/.gitignore b/quad10/fenomens/lab/p1/.gitignore
new file mode 100644
index 0000000..c43abb3
--- /dev/null
+++ b/quad10/fenomens/lab/p1/.gitignore
@@ -0,0 +1,5 @@
+# Output:
+P1-exercici-1
+P1-exercici-2
+P1-exercici-3
+configuration.*
diff --git a/quad10/fenomens/lab/p1/Makefile b/quad10/fenomens/lab/p1/Makefile
new file mode 100644
index 0000000..1f95dc8
--- /dev/null
+++ b/quad10/fenomens/lab/p1/Makefile
@@ -0,0 +1,19 @@
+all: P1-exercici-1.o P1-exercici-2.o P1-exercici-3.o
+P1-exercici-1.o: mt19937ar.o P1-exercici-1.f90
+	gfortran -c P1-exercici-1.f90
+	gfortran P1-exercici-1.o mt19937ar.o -o P1-exercici-1
+P1-exercici-2.o: mt19937ar.o writeconfig.o P1-exercici-2.f90
+	gfortran -c P1-exercici-2.f90
+	gfortran P1-exercici-2.o writeconfig.o mt19937ar.o -o P1-exercici-2
+P1-exercici-3.o: mt19937ar.o writeconfig.o magne.o P1-exercici-3.f90
+	gfortran -c P1-exercici-3.f90
+	gfortran P1-exercici-3.o writeconfig.o mt19937ar.o magne.o -o P1-exercici-3
+mt19937ar.o: mt19937ar.f
+	f77 -c mt19937ar.f
+writeconfig.o: writeconfig.f90
+	gfortran -c writeconfig.f90
+magne.o: magne.f90
+	gfortran -c magne.f90
+
+clean:
+	rm -f configuration.eps configuration.tex configuration.svg P1-exercici-1 P1-exercici-2 P1-exercici-3 *.o
diff --git a/quad10/fenomens/lab/p1/P1-exercici-1.f90 b/quad10/fenomens/lab/p1/P1-exercici-1.f90
new file mode 100644
index 0000000..df09b6b
--- /dev/null
+++ b/quad10/fenomens/lab/p1/P1-exercici-1.f90
@@ -0,0 +1,26 @@
+program p1e1
+  implicit none
+  integer*4 :: SEED, i, NRAND
+  real*8 :: x, sum1, sum2, sigma, genrand_real2
+
+  SEED = 23456
+  NRAND = 50000
+
+  call init_genrand(SEED)
+
+  sum1 = 0.0d0
+  sum2 = 0.0d0
+
+  do i = 1, NRAND
+    x = genrand_real2()
+    write (*, *) i, x
+    sum1 = sum1 + x
+    sum2 = sum2 + x*x
+  enddo
+
+  sum1 = sum1/real(NRAND)
+  sum2 = sum2/real(NRAND)
+  sigma = dsqrt(sum2 - sum1*sum1)
+
+  write (*, *) sum1, sigma
+endprogram p1e1
diff --git a/quad10/fenomens/lab/p1/P1-exercici-2.f90 b/quad10/fenomens/lab/p1/P1-exercici-2.f90
new file mode 100644
index 0000000..50ae82a
--- /dev/null
+++ b/quad10/fenomens/lab/p1/P1-exercici-2.f90
@@ -0,0 +1,7 @@
+program p1e2
+  implicit none
+  integer*4, PARAMETER :: L = 64
+  integer*2 S(1:L, 1:L)
+
+  call WRITECONFIG(S, L)
+endprogram p1e2
diff --git a/quad10/fenomens/lab/p1/P1-exercici-3.f90 b/quad10/fenomens/lab/p1/P1-exercici-3.f90
new file mode 100644
index 0000000..0760be7
--- /dev/null
+++ b/quad10/fenomens/lab/p1/P1-exercici-3.f90
@@ -0,0 +1,10 @@
+program p1e3
+  implicit none
+  integer*4, PARAMETER :: L = 64
+  integer*2 :: S(1:L, 1:L)
+  real*8 :: MAGNE
+
+  call WRITECONFIG(S, L)
+  print *, "Magnetització:"
+  print *, MAGNE(S, L)
+endprogram p1e3
diff --git a/quad10/fenomens/lab/p1/P1-plotconfig.gnu b/quad10/fenomens/lab/p1/P1-plotconfig.gnu
new file mode 100755
index 0000000..f3cdee3
--- /dev/null
+++ b/quad10/fenomens/lab/p1/P1-plotconfig.gnu
@@ -0,0 +1,17 @@
+#!/usr/bin/env gnuplot -c
+outputfile = 'configuration' # Nom de la imatge resultant (sense extensió)
+datafile = 'configuration.conf' # Nom del fitxer de dades que es vol usar
+L=64
+symbsize=0.6
+
+set terminal cairolatex size 10cm, 7cm
+set output outputfile.'.tex'
+
+set size square
+set xrange [0.5:L+0.5]
+set yrange [0.5:L+0.5]
+plot datafile using 1:2 with points pt 5 ps symbsize t ""
+
+set terminal svg dashed size 600, 600 font "Computer Modern,Tinos,Helvetica,15"
+set output outputfile.'.svg'
+replot
diff --git a/quad10/fenomens/lab/p1/README.md b/quad10/fenomens/lab/p1/README.md
new file mode 100644
index 0000000..ba62b21
--- /dev/null
+++ b/quad10/fenomens/lab/p1/README.md
@@ -0,0 +1,13 @@
+# Pràctica 1: sistema operatiu, editor, FORTRAN i generador de nombres pseudo-aleatoris
+**Data: 21 d'abril de 2022**
+
+- Fer 3 programes obligatoris:
+   - `P1-exercici-1.f`: genera nombres a l'atzar uniformes amb `mt19937`.
+   - `P1-exercici-2.f`: genera una matriu d'spins a l'atzar LxL (L = 64).
+   - `P1-exercici-3.f`: genera una matriu d'spins a l'atzar i mesura la imantació.
+
+- Fer 1 programa optatiu:
+   - `P1-exercici-4.f`: genera nombres a l'atzar discrets.
+
+## Instruccions per compilar
+Per compilar, executeu `make all`.
diff --git a/quad10/fenomens/lab/p1/magne.f90 b/quad10/fenomens/lab/p1/magne.f90
new file mode 100644
index 0000000..0e7df92
--- /dev/null
+++ b/quad10/fenomens/lab/p1/magne.f90
@@ -0,0 +1,17 @@
+real*8 function MAGNE(S, L)
+  implicit none
+  integer*4, intent(in) :: L
+  integer*2, intent(out) :: S(1:L,1:L)
+  integer*4 :: i, j
+  real*8 :: mag
+  mag = 0d0
+
+  do i = 1, L
+    do j = 1, L
+      mag = mag + S(i, j)
+    enddo
+  enddo
+
+  magne = mag
+  return
+end function MAGNE
diff --git a/quad10/fenomens/lab/p1/mt19937ar.f b/quad10/fenomens/lab/p1/mt19937ar.f
new file mode 100644
index 0000000..be81d16
--- /dev/null
+++ b/quad10/fenomens/lab/p1/mt19937ar.f
@@ -0,0 +1,282 @@
+c
+c  A C-program for MT19937, with initialization improved 2002/1/26.
+c  Coded by Takuji Nishimura and Makoto Matsumoto.
+c
+c  Before using, initialize the state by using init_genrand(seed)  
+c  or init_by_array(init_key, key_length).
+c
+c  Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
+c  All rights reserved.                          
+c  Copyright (C) 2005, Mutsuo Saito,
+c  All rights reserved.                          
+c
+c  Redistribution and use in source and binary forms, with or without
+c  modification, are permitted provided that the following conditions
+c  are met:
+c
+c    1. Redistributions of source code must retain the above copyright
+c       notice, this list of conditions and the following disclaimer.
+c
+c    2. Redistributions in binary form must reproduce the above copyright
+c       notice, this list of conditions and the following disclaimer in the
+c       documentation and/or other materials provided with the distribution.
+c
+c    3. The names of its contributors may not be used to endorse or promote 
+c       products derived from this software without specific prior written 
+c       permission.
+c
+c  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+c  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+c  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+c  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+c  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+c  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+c  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+c  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+c  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+c  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+c  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+c
+c
+c  Any feedback is very welcome.
+c  http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
+c  email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)
+c
+c-----------------------------------------------------------------------
+c  FORTRAN77 translation by Tsuyoshi TADA. (2005/12/19)
+c
+c     ---------- initialize routines ----------
+c  subroutine init_genrand(seed): initialize with a seed
+c  subroutine init_by_array(init_key,key_length): initialize by an array
+c
+c     ---------- generate functions ----------
+c  integer function genrand_int32(): signed 32-bit integer
+c  integer function genrand_int31(): unsigned 31-bit integer
+c  double precision function genrand_real1(): [0,1] with 32-bit resolution
+c  double precision function genrand_real2(): [0,1) with 32-bit resolution
+c  double precision function genrand_real3(): (0,1) with 32-bit resolution
+c  double precision function genrand_res53(): (0,1) with 53-bit resolution
+c
+c  This program uses the following non-standard intrinsics.
+c    ishft(i,n): If n>0, shifts bits in i by n positions to left.
+c                If n<0, shifts bits in i by n positions to right.
+c    iand (i,j): Performs logical AND on corresponding bits of i and j.
+c    ior  (i,j): Performs inclusive OR on corresponding bits of i and j.
+c    ieor (i,j): Performs exclusive OR on corresponding bits of i and j.
+c
+c-----------------------------------------------------------------------
+c     initialize mt(0:N-1) with a seed
+c-----------------------------------------------------------------------
+      subroutine init_genrand(s)
+      integer s
+      integer N
+      integer DONE
+      integer ALLBIT_MASK
+      parameter (N=624)
+      parameter (DONE=123456789)
+      integer mti,initialized
+      integer mt(0:N-1)
+      common /mt_state1/ mti,initialized
+      common /mt_state2/ mt
+      common /mt_mask1/ ALLBIT_MASK
+c
+      call mt_initln
+      mt(0)=iand(s,ALLBIT_MASK)
+      do 100 mti=1,N-1
+        mt(mti)=1812433253*
+     &          ieor(mt(mti-1),ishft(mt(mti-1),-30))+mti
+        mt(mti)=iand(mt(mti),ALLBIT_MASK)
+  100 continue
+      initialized=DONE
+c
+      return
+      end
+c-----------------------------------------------------------------------
+c     initialize by an array with array-length
+c     init_key is the array for initializing keys
+c     key_length is its length
+c-----------------------------------------------------------------------
+      subroutine init_by_array(init_key,key_length)
+      integer init_key(0:*)
+      integer key_length
+      integer N
+      integer ALLBIT_MASK
+      integer TOPBIT_MASK
+      parameter (N=624)
+      integer i,j,k
+      integer mt(0:N-1)
+      common /mt_state2/ mt
+      common /mt_mask1/ ALLBIT_MASK
+      common /mt_mask2/ TOPBIT_MASK
+c
+      call init_genrand(19650218)
+      i=1
+      j=0
+      do 100 k=max(N,key_length),1,-1
+        mt(i)=ieor(mt(i),ieor(mt(i-1),ishft(mt(i-1),-30))*1664525)
+     &           +init_key(j)+j
+        mt(i)=iand(mt(i),ALLBIT_MASK)
+        i=i+1
+        j=j+1
+        if(i.ge.N)then
+          mt(0)=mt(N-1)
+          i=1
+        endif
+        if(j.ge.key_length)then
+          j=0
+        endif
+  100 continue
+      do 200 k=N-1,1,-1
+        mt(i)=ieor(mt(i),ieor(mt(i-1),ishft(mt(i-1),-30))*1566083941)-i
+        mt(i)=iand(mt(i),ALLBIT_MASK)
+        i=i+1
+        if(i.ge.N)then
+          mt(0)=mt(N-1)
+          i=1
+        endif
+  200 continue
+      mt(0)=TOPBIT_MASK
+c
+      return
+      end
+c-----------------------------------------------------------------------
+c     generates a random number on [0,0xffffffff]-interval
+c-----------------------------------------------------------------------
+      function genrand_int32()
+      integer genrand_int32
+      integer N,M
+      integer DONE
+      integer UPPER_MASK,LOWER_MASK,MATRIX_A
+      integer T1_MASK,T2_MASK
+      parameter (N=624)
+      parameter (M=397)
+      parameter (DONE=123456789)
+      integer mti,initialized
+      integer mt(0:N-1)
+      integer y,kk
+      integer mag01(0:1)
+      common /mt_state1/ mti,initialized
+      common /mt_state2/ mt
+      common /mt_mask3/ UPPER_MASK,LOWER_MASK,MATRIX_A,T1_MASK,T2_MASK
+      common /mt_mag01/ mag01
+c
+      if(initialized.ne.DONE)then
+        call init_genrand(21641)
+      endif
+c
+      if(mti.ge.N)then
+        do 100 kk=0,N-M-1
+          y=ior(iand(mt(kk),UPPER_MASK),iand(mt(kk+1),LOWER_MASK))
+          mt(kk)=ieor(ieor(mt(kk+M),ishft(y,-1)),mag01(iand(y,1)))
+  100   continue
+        do 200 kk=N-M,N-1-1
+          y=ior(iand(mt(kk),UPPER_MASK),iand(mt(kk+1),LOWER_MASK))
+          mt(kk)=ieor(ieor(mt(kk+(M-N)),ishft(y,-1)),mag01(iand(y,1)))
+  200   continue
+        y=ior(iand(mt(N-1),UPPER_MASK),iand(mt(0),LOWER_MASK))
+        mt(kk)=ieor(ieor(mt(M-1),ishft(y,-1)),mag01(iand(y,1)))
+        mti=0
+      endif
+c
+      y=mt(mti)
+      mti=mti+1
+c
+      y=ieor(y,ishft(y,-11))
+      y=ieor(y,iand(ishft(y,7),T1_MASK))
+      y=ieor(y,iand(ishft(y,15),T2_MASK))
+      y=ieor(y,ishft(y,-18))
+c
+      genrand_int32=y
+      return
+      end
+c-----------------------------------------------------------------------
+c     generates a random number on [0,0x7fffffff]-interval
+c-----------------------------------------------------------------------
+      function genrand_int31()
+      integer genrand_int31
+      integer genrand_int32
+      genrand_int31=int(ishft(genrand_int32(),-1))
+      return
+      end
+c-----------------------------------------------------------------------
+c     generates a random number on [0,1]-real-interval
+c-----------------------------------------------------------------------
+      function genrand_real1()
+      double precision genrand_real1,r
+      integer genrand_int32
+      r=dble(genrand_int32())
+      if(r.lt.0.d0)r=r+2.d0**32
+      genrand_real1=r/4294967295.d0
+      return
+      end
+c-----------------------------------------------------------------------
+c     generates a random number on [0,1)-real-interval
+c-----------------------------------------------------------------------
+      function genrand_real2()
+      double precision genrand_real2,r
+      integer genrand_int32
+      r=dble(genrand_int32())
+      if(r.lt.0.d0)r=r+2.d0**32
+      genrand_real2=r/4294967296.d0
+      return
+      end
+c-----------------------------------------------------------------------
+c     generates a random number on (0,1)-real-interval
+c-----------------------------------------------------------------------
+      function genrand_real3()
+      double precision genrand_real3,r
+      integer genrand_int32
+      r=dble(genrand_int32())
+      if(r.lt.0.d0)r=r+2.d0**32
+      genrand_real3=(r+0.5d0)/4294967296.d0
+      return
+      end
+c-----------------------------------------------------------------------
+c     generates a random number on [0,1) with 53-bit resolution
+c-----------------------------------------------------------------------
+      function genrand_res53()
+      double precision genrand_res53
+      integer genrand_int32
+      double precision a,b
+      a=dble(ishft(genrand_int32(),-5))
+      b=dble(ishft(genrand_int32(),-6))
+      if(a.lt.0.d0)a=a+2.d0**32
+      if(b.lt.0.d0)b=b+2.d0**32
+      genrand_res53=(a*67108864.d0+b)/9007199254740992.d0
+      return
+      end
+c-----------------------------------------------------------------------
+c     initialize large number (over 32-bit constant number)
+c-----------------------------------------------------------------------
+      subroutine mt_initln
+      integer ALLBIT_MASK
+      integer TOPBIT_MASK
+      integer UPPER_MASK,LOWER_MASK,MATRIX_A,T1_MASK,T2_MASK
+      integer mag01(0:1)
+      common /mt_mask1/ ALLBIT_MASK
+      common /mt_mask2/ TOPBIT_MASK
+      common /mt_mask3/ UPPER_MASK,LOWER_MASK,MATRIX_A,T1_MASK,T2_MASK
+      common /mt_mag01/ mag01
+CC    TOPBIT_MASK = Z'80000000'
+CC    ALLBIT_MASK = Z'ffffffff'
+CC    UPPER_MASK  = Z'80000000'
+CC    LOWER_MASK  = Z'7fffffff'
+CC    MATRIX_A    = Z'9908b0df'
+CC    T1_MASK     = Z'9d2c5680'
+CC    T2_MASK     = Z'efc60000'
+      TOPBIT_MASK=1073741824
+      TOPBIT_MASK=ishft(TOPBIT_MASK,1)
+      ALLBIT_MASK=2147483647
+      ALLBIT_MASK=ior(ALLBIT_MASK,TOPBIT_MASK)
+      UPPER_MASK=TOPBIT_MASK
+      LOWER_MASK=2147483647
+      MATRIX_A=419999967
+      MATRIX_A=ior(MATRIX_A,TOPBIT_MASK)
+      T1_MASK=489444992
+      T1_MASK=ior(T1_MASK,TOPBIT_MASK)
+      T2_MASK=1875247104
+      T2_MASK=ior(T2_MASK,TOPBIT_MASK)
+      mag01(0)=0
+      mag01(1)=MATRIX_A
+      return
+      end
diff --git a/quad10/fenomens/lab/p1/writeconfig.f90 b/quad10/fenomens/lab/p1/writeconfig.f90
new file mode 100644
index 0000000..5313d0b
--- /dev/null
+++ b/quad10/fenomens/lab/p1/writeconfig.f90
@@ -0,0 +1,28 @@
+subroutine WRITECONFIG(S, L)
+  implicit none
+  integer*4, intent(in) :: L
+  integer*2, intent(out) :: S(1:L,1:L)
+  integer*4 :: SEED, i, j
+  real*8 :: genrand_real2
+
+  SEED = 23456
+  call init_genrand(SEED)
+
+  do i = 1, L
+    do j = 1, L
+      S(i, j) = merge(1, -1, genrand_real2() < .5d0)
+    enddo
+  enddo
+
+  open(1, file = "configuration.conf")
+
+  do i = 1, L
+    do j = 1, L
+      if (S(i, j) == 1) then
+        write(1, *) i, j
+      endif
+    enddo
+  enddo
+
+  close(1)
+end subroutine WRITECONFIG
