Problemes tipus examen.

Un exemple d’exercicis per la prova escrita. S’han d’analitzar que s’imprimirà per pantalla.

# -*- coding: utf-8 -*-
cadena = ['Aglà', 'Granot arbori', 'Bolet de fems o de tinta', 'Corb marí', 'Zooplàncton', 'Ferrassa']
cadena2 = [1,4,5,6,7,3]
nom =  'Corb marí'


def cercaMax(cadena):
    max=0
    for i in cadena:
        if max < i:
            max = i
    return max

def cercaMax2(cadena):
    m = cadena[0]
    p = 0
    z = 0
    for i in cadena:
        if m < i:
            m = i
            z = p
        p += 1        
    return z

#trobar una cadena
a = 0
for i in cadena:
    if i == nom:
        print(a)
    a +=1

#trobar una cadena
a = 5
for i in cadena:
    if i == nom:
        print(a)
    a +=2

a = 0
for i in cadena:
    print("bon dia")

a = 0
print(cercaMax2(cadena), "---",cercaMax(cadena2))
Fes l’anàlisi i dedueix què fa aquest alortime?

Solucions

aplicació seguretat controlaMaquina.
"""
Una aplicació de seguretat controlaMaquina reb  una llistes de valors que indiquen les temperatures d’una màquina. 
A cada rebuda de dades l’aplicació ha de imprimir el valor màxim i el mínim. 
També ha d’imprimir el nombre de vegades que ha superat el valor 3 (sols una vegada superat i desprès baixa i el torna superar, són dos pics).
Exemples de valors:

    Entrada de valors: [1,2,4,4,5,6,7,1,2,5]
    Sortida de valors: “màxim: 7, mínim: 1, variat: 2
    Entrada de valors: [1,4,1,4,1,4]
    Sortida de valors: “màxim: 4, mínim: 1, variat: 3
"""
def controlaMaquina(llista):
    maxim=0
    minim=1000
    supera=0
    superat=False
    for i in llista:
        if maxim<i:
            maxim=i
        if minim>i:
            minim=i
        if(not superat) and (i>3):
            superat=True
            supera+=1
        if(superat) and (i<3):
            superat=False
    print("-He analitzat la llista ", llista)
    print("el màxim és: ", maxim,". El mínim: ", minim, ", supera: ", supera )



entrada=[1,2,4,4,5,6,7,1,2,5]
controlaMaquina(entrada)

entrada=[1,4,1,4,1,4]
controlaMaquina(entrada)


entrada=[3,4,1,2,3,4,5,6,7,8,9,8,1,4,6,2,4,2,4,1,4,1,4,1,4]
controlaMaquina(entrada)
"""
Volem saber si una paraula és capicua:

    entrada: “capicua”, sortida: no és capicua
    entrada: “anna”, sortida: és capicua.
"""

def capicua(paraula):
    
    r= True             #EN PRINCIPI CONSIDERAM QUE LA PARAULA SÍ ÉS CAPICUA
    j = len(paraula) - 1    #la longitud de la paraula per recorrer d'un cap a l'altre
    
    for i in paraula:
        if i != paraula[j]:
            r=False
        j-=1

    return r

def printCapicua(paraula):
    print("La paraula ", paraula , end=" ")
    if (capicua(paraula)):
        print("és capicua")
    else:
        print("No és capicua")
    return True




entrada="caac"
printCapicua(entrada)

entrada="caca"
printCapicua(entrada)
"""
Volem calcular el total de una comanda d’articles. La llista durà el preu, quantitat i, si n’hi ha, descompte de cada item.

    entrada: [[2,3.5],[4,12.1],[1,3.5]]
    sortida: 48.9
    entrada: [[2,3.5,10],[4,12.1],[1,3.5]]
    sortida: 48.2


"""

def total(llista):
    t=0
    for i in llista:
        t += i[0]*i[1]
    return t

def printTotal(l):
    print("La llista ", l , " suma total: ", total(l))
    

entrada= [[2,3.5],[4,12.1],[1,3.5]]
printTotal(entrada)

entrada= [[2,3],[42,0.1],[1,3.5]]
printTotal(entrada)
"""
Volem calcular el total de una comanda d’articles. La llista durà el preu, quantitat i, si n’hi ha, descompte de cada item.

    entrada: [[2,3.5],[4,12.1],[1,3.5]]
    sortida: 48.9
    entrada: [[2,3.5,10],[4,12.1],[1,3.5]]
    sortida: 48.2


"""

def mitjana(llista):
    t=0
    for i in llista:
        t += i
    return t/len(llista)

def printMitjana(l):
    print("La llista ", l , " mitjana: ", mitjana(l))
    




entrada= [1,32,4,56,3,12,3,54,6,3,2,1,34,4,2,1]
printMitjana(entrada)

entrada= [7,6,5,4,5,4,3,4,6,7,8,9]
printMitjana(entrada)

FUNCIONS

Ja sabem com funcionen les variables i algunes estructures. En aquest capítol aprenem les funcions. Un element que serveix per ordenar, millorar el rendiment i aclarir codi.

Definició

És una part del codi amb nom propi que a partir d’unes entrades genera unes sortides. Coses a tenir en compte:
– Una funció no s’executa si no la invoquen.
– Una funció ha d’estar implementada.
– Hi ha funcions primitives, pròpies del llenguatge.
– Existeix una funció principal que s’anomena main, aquesta si que s’executa i conté la part principal del codi.

Característiques de les funcions

  • Facilitar la lectura del codi: separam en bloc de instruccions “repetitives”.
    Per exemple alhora de dibuixar un arbre podriem dir dibuixaArbre(posició,mida)
  • Permetre l’abstracció: separa el QUÈ del COM,
    Donam un nom a una acció i el programador no importa que sapiga la seva implementació.
    Això sí, la implementació ha d’estar ben definida.
  • Reutilitzar el codi: Una bona funció estalvia feina.
  • Dividim el problema en petits problemes diferents.
  • El codi és més fàcil de mantenir: Cada part de codi és independent.
'''
EXEMPLE DE FUNCIONS
'''

def sumaLlista(llista):
#Funció que retornarà la suma d'una llista
#passada per paràmetre.
    a= 0
    for e in llista:
        a=a+e
    return a


#programa que crida la funció vàries vegades 
#i imprimeix el resultat.
llista1=[2,3,4,5,67,8,9,12,3,4,5,6,7]
llista2=[2,3,4,5,67,8,9,12,3,4,5,6,7]
llista3=[2,3,4,5,67,8,9,12,3,4,5,6,7]
print("La suma de la llista és: ",sumaLlista(llista1))
print("La suma de la llista és: ",sumaLlista(llista2))
print("La suma de la llista és: ",sumaLlista(llista3))

Com crear una funció

  1. INVOCACIÓ D’UNA FUNCIÓ. EL QUÈ. Una funció té:
    NOM: ha de ser únic i definitori de la funció
    PARÀMETRES ENTRADA: són les dades que d’entrada a la funció
    RETORN O SORTIDA: és el resultat de es operacions Nosaltres ja hem usat funcions, la instrucció print és una funció primitiva del python. print("Som un paràmetre") Com ja sabem aquesta funció ens imprimeix sobre consola el QUÈ li passam per paràmetre.
  2. IMPLEMENTACIÓ D’UNA FUNCIÓ. EL COM. La implementació d’una funció és el codi que té com objectiu realitzar unes operacions sobre els paràmetres que li donam i retornar un resultat.
    El resultat pot ser un número, una lista d’objectes, un gràfic per pantalla, … La forma d’una funció és: nom_de_la_funcio (parametre1, parametre2){ .... operacions ... return valor } per exemple si volem fer una funció que ens sumi dos nombres: suma_dos_nombres(a,b){ return a + b } per definir una nova funció a python es fa de la següent manera:
    • S’inicia amb la paraula clau def
    • Desprès té el nom de la funció, el nom:
      • Comença amb minúscula, normalment s’usen només minúscules.
      • No pot tenir espais
    • Dins un parèntesis hi ha els paràmetres.
    • desprès dos punts.
    • Els següent és El codiExemples:
    • una funció que imprimeix “Bon dia” def print_bon_dia(): print ("Bon dia!!") #per invocar dues vegades print_bon_dia() print_bon_dia()
    • Ordenament d’una llista. “Algorisma bimbolla” def bubbleSort(array):
      n = len(array) for i in range(n):
      for j in range(0, n-i):
      if array[j] > array[j+1]:
      array[j], array[j+1] = array[j+1], array[j] array = [200 ,190, 1200, 1, 2, 4, 55, 1000, 6, 800]
      bubbleSort(array) print(array)

Primitives de la llibreria arcade


L’instrucció print() és un output d’informació textual. En aquesta secció coneixem un output gràfic, un output que permet combinar formes, posicions, colors, … sobre una finestra.

En aquesta secció usam la llibreria arcade. S’han de fer uns exercicis bàsics i una pràctica de programació usant funcions.

Es important realitzar consultes al manual de la pàgina oficial de la llibreria arcade. Aquesta pàgina també conté tutorials de llarga durada que mostren usos concrets d’aquesta llibreria.

Instal·lació d’arcade

Per poder usar una llibreria extra s’ha d’instal·lar. Usam el dipòsit de paquets pip, que permetrà instal·lar paquets sense la necessitat ser superusuari.

Amb el terminal ens situam dins la nostra carpeta de treballs. Al terminal escrivim “pip install arcade”.

En cas de no tenir instal·lat pip es poden seguir les instruccions https://linuxhint.com/installing_pip_linux_mint/

Primer programa

Per dibuixar el programa es divideix en vàries parts bàsiques:

  1. Importació de la llibreria
  2. Obertura de la finestra
  3. Render de dibuixat de inici i de final
  4. Execució de l’arcade.
"""
This is a sample program to show how to draw using the Python programming
language and the Arcade library.
"""

1. Import the "arcade" library
import arcade

2. Open up a window.
# From the "arcade" library, use a function called "open_window"
# Set the window title to "Drawing Example"
# Set the dimensions (width and height)
arcade.open_window(600, 600, "Drawing Example")

# Set the background color
arcade.set_background_color(arcade.csscolor.SKY_BLUE)

3. Get ready to draw
arcade.start_render()

# Draw a rectangle
# Left of 0, right of 599
# Top of 300, bottom of 0
arcade.draw_lrtb_rectangle_filled(0, 599, 300, 0, arcade.csscolor.GREEN)

# Tree trunk
arcade.draw_rectangle_filled(100, 320, 20, 60, arcade.csscolor.SIENNA)

# Tree top
arcade.draw_circle_filled(100, 350, 30, arcade.csscolor.DARK_GREEN)

arcade.draw_text("Arbor Day - Plant a Tree!",
                150, 230,
                arcade.color.BLACK, 24)

# Finish drawing
arcade.finish_render()

4. Keep the window up until someone closes it.
arcade.run()

Colors RGB

Per especificar els colors a “arcade” podem usar tres formes diferents:
– L’API de colors arcade.color amb els seus noms
– L’API de colors CSS arcade.csscolor
– Especificant els colors amb RGB: un grup de 3 bytes (8 bits) on cada un representa la quantitat de Red, Green o Blue. Són nombres de 0 a 255.

Posició dels objectes

Utilitza un sistema de coordenades del quart quadrat.

Coordenades de posició

Dibuixant Formes

La llibreria arcade disposa d’unes primitives amb les que es poden dibuixar les imatges que formen cada objecte.

'''DIBUIXANT ELEMENTS
La llibreria arcade disposa d'unes primitives (funcions de dibuix) que ens permeten dibuixar:'''
import arcade

# Open up a window.
# From the "arcade" library, use a function called "open_window"
# Set the window title to "Drawing Example"
# Set the dimensions (width and height)
arcade.open_window(600, 600, "Drawing Example")

# Set the background color
arcade.set_background_color(arcade.csscolor.SKY_BLUE)

# Get ready to draw
arcade.start_render()

#Rectangles: 
arcade.draw_lrtb_rectangle_filled(0, 599, 300, 0, arcade.csscolor.GREEN)
#Cercles: 
arcade.draw_circle_filled(100, 350, 30, arcade.csscolor.DARK_GREEN)
#Elipses: 
arcade.draw_ellipse_outline(300, 300, 350, 200, arcade.csscolor.RED, 3)
#Arcs: 
arcade.draw_arc_filled(300, 340, 60, 100, arcade.csscolor.DARK_GREEN, 0, 180)
#Triangles: 
arcade.draw_triangle_filled(400, 400, 370, 320, 430, 320, arcade.csscolor.GREEN)
#Polígons: 
arcade.draw_polygon_filled(((500, 400),
(480, 360),
(470, 320),
(530, 320),
(520, 360)
),
arcade.csscolor.DARK_GREEN)
#Línies: 
arcade.draw_line(500, 550, 550, 600, arcade.color.YELLOW, 3)
#Texte: 
arcade.draw_text("Arbor Day - Plant a Tree!",150, 230,arcade.color.BLACK, 24)

# Finish drawing
arcade.finish_render()

# Keep the window up until someone closes it.
arcade.run()

Exercicis

  1. FES QUATRE QUADRATS DE DIFERENTS COLORS QUE, entre tots, OCUPIN TOTA LA PANTALLA.
  2. DIBUIXA AL QUADERN UN DISSENY D’UN ARBRE AMB VARIES COPES.
  3. Fes el disseny d’un personatge animal.

Abans d’acabar la sessió has de pensar a pujar el codi a github.
git add .
git commit -m “data avui”
git push

ESTRUCTURES DE DADES. LLISTES

fig.ice_cube_tray

Un programa sol necessitar emmagatzemar conjunts de dades, com pot ser una llista de compra, un llistat d’amics de xarxes socials, participants a un joc,…. Les estructures de dades són la solució per aquests casos.

En aquest tema estudiam l’estructura de dades llista. Són un tipus de dades que permet emmagatzemar dades de qualsevol tipus (nombres, cadenes, altres llistes, …, són mutables i dinàmiques (poden crèixer).

  • ENTREGA: 2 EXERCICIS PRÀCTICS.

Crear una llista

A la imatge x és una variable llista que conté 8 elements, a la llista estan enumerats (posicionats) de la posició 0 a la posició 7. Així, el primer element és el número 3 i el darrer de la llista el número 1, aquests són a les posicions 0 i 7 respectivament. Té 8 elements.

Si volem fer la seva declaració ho podem fer amb el següent codi:

x=[3,8,7,0,5,5,2,1]
print(x)
#mostra per pantalla: [3, 8, 7, 0, 5, 5, 2, 1]

Mètodes, operar sobre llistes

x= list(38705521)
print(x)
#mostra per pantalla: ['3', '8', '7', '0', '5', '5', '2', '1']

Una llista pot contenir diferents tipus d’elements:

x=["som a la posició 0", 4, 2 , ["1",2], "som a la posició 4"]
print(x)
#mostra per pantalla: ['som a la posició 0', 4, 2, ['1', 2], 'som a la posició 4']

Accedir als elements

S’accedeix per posició

llista=[1,2.9,"Gimnèsia", [4,3],5]

print (llista[0]) # 1
print (llista[1]) # 2.9
print (llista[2]) # Gimnèsia
print (llista[3]) # [4,3]
print (llista[3][0]) # 4
print (llista[3][1]) # 3
print (llista[1:3]) # [2.9, 'Gimnèsia']
print (llista[1:6]) # [2.9,"Gimnèsia", [4,3],5]
print (llista[1:6:2]) # [2.9, [4, 3]]

Mètodes, operar sobre llistes

Els mètodes ens permeten operar sobre els objectes, en aquest cas exploram alguns mètodes que es poden usar sobre una llista en python.

  • append(): afegeix al final de la llista
  • clear(): buida una llista
  • extend(): uneix dues llistes
  • count(a): conta les vegades que apareix l’element a dins una llista
  • index(a): torna, si existeix, la posició on es troba l’element a.
  • insert(p,a): insereix l’element ‘a’ a la posició ‘p’. (
  • len(): retorna la longitud de la llista.
  • pop(): Treu el darrer ítem de la llista i el borra. Es pot especificar posició.
  • remove(a): Borra el primer ítem que concordi amb ‘a’
  • reverse(): dona la volta a la llista actual
  • sort(): ordena de menor a major. Sobre llistes del mateix tipus.
#EXEMPLES AMB ELS MÈTODES LLISTA.

llista=[1,2.9,"Gimnèsia", [4,1],5,5]

#APPEND
llista.append("afegim item")
print("- Metode append:", llista)

#COUNT
n=llista.count(1)
print("- Mètode count: El nombre 1 surt ", n , " vegades")

n=llista.count(5)
print("- Mètode count: El nombre 5 surt ", n , " vegades")

#INDEX
posicio=llista.index(5)
print("- Mètode index: L'element 5 es troba a la posició", posicio)

#INSERT
llista.insert(3,"som item nou")
print("- Mètode insert:", llista)

#LEN
print("- Mètode len: la longitud de la llista és", len(llista))

#POP
llista.pop()
print("- Mètode pop: La llista ara és:", llista)

#REMOVE
llista.remove(2.9)
print("- Mètode remove: La llista ara és:", llista)

#REVERSE
llista.reverse()
print("- Mètode reverse: llista girada: ", llista)

#SORT
llistaInt=[3,4,2,8,6,5,4,3]
llistaInt.sort()
print("- Mètode sort: llista ordenada", llistaInt)

!!!SORTIDA
- Metode append: [1, 2.9, 'Gimnèsia', [4, 1], 5, 5, 'afegim item']
- Mètode count: El nombre 1 surt  1  vegades
- Mètode count: El nombre 5 surt  2  vegades
- Mètode index: L'element 5 es troba a la posició 4
- Mètode insert: [1, 2.9, 'Gimnèsia', 'som item nou', [4, 1], 5, 5, 'afegim item']
- Mètode len: la longitud de la llista és 8
- Mètode pop: La llista ara és: [1, 2.9, 'Gimnèsia', 'som item nou', [4, 1], 5, 5]
- Mètode remove: La llista ara és: [1, 'Gimnèsia', 'som item nou', [4, 1], 5, 5]
- Mètode reverse: llista girada:  [5, 5, [4, 1], 'som item nou', 'Gimnèsia', 1]
- Mètode sort: llista ordenada [2, 3, 3, 4, 4, 5, 6, 8]
!!!

Accedir a una llista

Per accedir a una llista disposarem de vàries formes, cada una serà útil per alguna solució. Amb el bucle for in podem obtenir el contingut de la posició i la posició.

Al codi següent s’expliquen diferents formes de recórrer una llista:

#PODEM ACCEDIR ALS SEUS ELEMENTS
llista=[1,3,4,5,4]
for item in llista:
    print(item)

#PODEM ACCEDIR USANT LA SEVA POSICIÓ. AMB RANGE()
for i in range(len(llista)):
    print(llista[i])

#SORTIDA DELS DOS CODIS
1
3
4
5
4
 

Exemples pràctics

En aquest apartat mostram varis exemples per veure l’aplicació pràctica d’aquest element.

  • Una aplicació de seguretat controlaMaquina reb  una llistes de valors que indiquen les temperatures d’una màquina. 
    A cada rebuda de dades l’aplicació ha de imprimir el valor màxim i el mínim. També ha d’imprimir el nombre de vegades que ha superat el valor 3 (sols una vegada superat i desprès baixa i el torna superar, són dos pics).
    Exemples de valors:
    • Entrada de valors: [1,2,4,4,5,6,7,1,2,5]
    • Sortida de valors: “màxim: 7, mínim: 1, variat: 2
    • Entrada de valors: [1,4,1,4,1,4]
    • Sortida de valors: “màxim: 4, mínim: 1, variat: 3
  • Volem saber si una paraula és capicua:
    • entrada: “capicua”, sortida: no és capicua
    • entrada: “anna”, sortida: és capicua.
  • Volem calcular el total de una comanda d’articles. La llista durà el preu, quantitat i, si n’hi ha, descompte de cada item.
    • entrada: [[2,3.5],[4,12.1],[1,3.5]]
    • sortida: 48.9
    • entrada: [[2,3.5,10],[4,12.1],[1,3.5]]
    • sortida: 48.2
  • Càlcul de la mitjana de una llista

Exercicis

#1.Executa i comenta el comportament del següent codi
llista = [5, 2, 6, 8, 101]
print(llista[0])
print(llista[4])
print(llista[5])

#2. Què imprimeix el següent codi?
llista = [5, 2, 6, 8, 101]
for item in llista:
    print(item)

#3. Que fa el següent codi?
llista = [5, 2, 6, 8, 101]
for item in llista:
    if item % 2 == 0:
        print(item)

#4. Què fa el següent codi?
llista=[5]
for i in range(5):
    llista.append(i)
print(llista)

#5. Comprova el que fa el següent codi:
print(len("Bon dia"))
print(len("Bon") + len("dia"))
print(len("2"))
print(len(2))

#6. Què imprimeix el següent codi?
print("Les illes" + "Gimnèsises")
print("Gimnèsies" + "Pitiuses"[0])
print(("Gimnèsies" + "Pitiuses")[0])

#7. Què imprimeix el següent codi:
paraula="Som una paraula"
for lletra in paraula:
    print(lletra)
print("Per acabar, imprimim la quarta posició: ", paraula[4])
print("Per acabar, imprimim i la sexta posició: ", paraula[6])

#8 Què imprimeix el següent codi?
s = "0123456789"
print(s[1])
print(s[:3])
print(s[3:])

Exercicis per entregar

Fes dos dels exercicis pràctics.

Llenguatges de programació

Què és un llenguatge de programació?

Un llenguatge de programació és un llenguatge informàtic utilitzat per controlar el comportament d’una màquina, normalment un ordinador.

Cada llenguatge té una sèrie de regles sintàctiques i semàntiques estrictes que cal seguir per escriure un programa informàtic, i que en descriuen l’estructura i el significat respectivament.

Aquestes regles permeten especificar tant la classe de dades amb què treballarà el programa com les accions que realitzarà.

Mentre que alguns llenguatges es defineixen per una especificació formal (un document), altres són definits oficiosament per una implementació concreta (un compilador).

Diferència entre programa i procès.

Un programa és l’arxiu document( arxiu.js, arxiu.py, arxiu.sh, …) o arxiu compilat(arxiu.exe, a.out, …) que conté les instruccions del programa.

Un procès és un programa en execució. Ho és, per exemple, aquest navegador on llegiu el text.

Els processos quan estan en execució ocupen espai dins la memòria principal de l’ordinador. Es divideix en tres parts: instruccions, dades i pila.

Per veure els processos en execució podeu usar la instrucció top.

Tipus de Llenguatges de programació

Exemples de llenguatges

Llenguatge assemblador:

//
// Assembler program to print "Hello World!"
// to stdout.
//
// X0-X2 - parameters to linux function services
// X16 - linux function number
//
.global _start             // Provide program starting address to linker
.align 2

// Setup the parameters to print hello world
// and then call Linux to do it.

_start: mov X0, #1     // 1 = StdOut
        adr X1, helloworld // string to print
        mov X2, #13     // length of our string
        mov X16, #4     // MacOS write system call
        svc 0     // Call linux to output the string

// Setup the parameters to exit the program
// and then call Linux to do it.

        mov     X0, #0      // Use 0 return code
        mov     X16, #1     // Service command code 1 terminates this program
        svc     0           // Call MacOS to terminate the program

helloworld:      .ascii  "Hello World!\n"

A la pàgina https://pythontutor.com/ podem veure l’execució pas a pas i comportament a la memòria principal d’alguns llenguatges de programació.

Interfície de comandes 2/2

Desprès d’haver mirat http://aula.gimnesia.net/2019/05/28/unitat-1-ecosistema-de-treball

Teoria tutorial: https://www.shellscript.sh/index.html



1. Variables I.

El programa demana a l’usuari les variables usant la instrucció READ.
El prorama pot modificar les variables.

https://www.shellscript.sh/variables1.html

# Programa que usa VARIABLES.
# Pere Antoni Bennàssar Albons.
#https://www.pcresumen.com/menu-software/33-scripting/bash/51-operaciones-aritmeticas-y-la-logica-en-bash
#https://www.shellscript.sh/variables1.html

#un programa empra variables

var1="som una variable"             #"var1" té el valor "som una variable"


echo "La variable var1 val $var1"   #Feim un echo del contingut de la variable
var1=123                            #Canviam el contingut de la variable
echo "La variable var1 val $var1"   #Feim un echo del contingut dela variable              

#Al llenguatge sh una variable pot contenir tant nombres com paraules.
#es tracten de diferent forma com veure en el següent

#Aquí és un text i al sumar fa un append (afegeix a la cua del text)
var1="som texte"
var1=$var1+1
echo "La variable var1 val $var1" 

#Aquí és un nombre i a la suma fa una suma Normal
var1=100
let var1=$var1+1                    #prova de suma
echo "sumam 1 i val: $var1"      

let var1=$var1-1                    #prova de resta
echo "Restam 1 i val: $var1"     

let var1=$var1*2                    #prova de multiplicació
echo "Multiplicvam per 2: $var1"     
 

let var1=$var1/2                    #prova de divisió
echo "Dividim entre 2: $var1"     

let var1=$var1%12
echo "en modul 12 es $var1"

1.1 Exercici guiat:

-Fes un programa shell script que calculi la mitja de tres nombres:
+solució1:
. el primer que hem de fer és tenir lloc per els valors que volem calcular, en aquest cas són tres i farem tres variables.

#exercici guiat 1
#solució 1:
#el programa llegeix per petició de read.

echo "Insereix el primer nombre"
read nombre1
echo "Insereix el segon nombre"
read nombre2
echo "Insereix el tercer nombre"
read nombre3
let resultat=$nombre1+$nombre2+$nombre3
let resultat=$resultat/2
echo "el resultat de la mitja de $nombre1 , $nombre2 i $nombre3 es $resultat "

EXERCICI:
– Fes un programa que contengui tres variables. I que mostri el resultat de la suma, la resta i la multiplicació de les tres.
– Fes que el programa agafi per paràmetre el valor de una de les tres variables.
– Fes un programa que calculi l’equació de segon grau de tres paràmetres.

{\displaystyle x_{1,2}={\frac {-b\pm {\sqrt {b^{2}-4ac}}}{2a}}}

2. Codis especials (wildcards)

3. Control de codi. Loops.

#!/bin/sh

#LOOP MITJANçANT FOR:
echo ------------------------
echo 1. ITERACIONS AMB FOR:
echo ------------------------
echo - Iteracions sobre llistes
for i in 1 2 3 4 5
do
  echo "Looping ... number $i"
done

echo - Iteracions sobre llistes i fitxers del sistema:

#podem cercar dins carpetes.
#!/bin/sh
for i in hello 1 * 2 goodbye 
do
  echo "Looping ... i is set to $i" #i serà el nom de cada arxiu.
done

echo ------------------------
echo 2. ITERACIONS AMB WHILE:
echo ------------------------

#!/bin/sh
INPUT_STRING=hello
while [ "$INPUT_STRING" != "bye" ]
do
  echo "Please type something in (bye to quit)"
  read INPUT_STRING
  echo "You typed: $INPUT_STRING"
done

INTERFÍCIE DE COMANDES (2/2)

Exploram l’ecosistema on treballarem. Les eines, els llenguatges i els procediments de treball que durem a terme durant tot el curs.

  • Llenguatge màquina: Instruccions sobre un terminal.
  • Servei de transmisió d’arxius. FTP.

PART I. EL SHELL

Per què preocupar-se?
Per què necessiteu aprendre la línia d’ordres de totes maneres? Bé, deixa’m explicar-vos una història. Fa uns anys teníem un problema on treballava. Hi havia una unitat compartida en un dels nostres servidors de fitxers que es continuava omplint. No mencionaré que aquest sistema operatiu heretat no admetia les quotes dels usuaris; aquesta és una altra història. Però el servidor es va continuar omplint i va impedir que la gent treballés. Un dels nostres enginyers de programari va passar una bona part d’un dia escrivint un programa C++ que anava a buscar tots els directoris de l’usuari i que afegiria l’espai que utilitzaven i faria un llistat dels resultats. Com que em vaig veure obligat a utilitzar el sistema operatiu heretat mentre estava treballant, vaig instal·lar-hi un entorn de línia d’ordres similar al Linux. Quan vaig saber el problema, em vaig adonar que podia fer tot el treball que havia realitzat aquest enginyer amb aquesta sola línia:
du -s * | sort -nr > $HOME/user_space_report.txtLes interfícies gràfiques d’usuari (GUI) són útils per a moltes tasques, però no són bones per a totes les tasques. Fa temps que sent que la majoria d’ordinadors actuals no alimenten electricitat. En canvi, semblen alimentats pel moviment de “bombament” del ratolí. Se suposa que els ordinadors ens alliberaren del treball manual, però, quantes vegades heu realitzat alguna tasca, creieu que l’ordinador hauria de ser capaç de fer, però heu acabat fent la vostra tasca treballant el ratolí? Assenyalar i fer clic, apuntar i fer clic.
text de linuxComand.org

Per aprendre  shell seguim la pàgina de linuxcommand.org. Si voleu, podeu consultar el llibre “The linux Command Line” -Whilliam Shotts.

Resum dels continguts

    1. Què és el shell?

El shell és el terminal de comandes d’instruccions mode text que s’usa per controlar un ordinador.

    1. Navegar per el sistema

És molt important saber on estam situats a l’arbre de directoris. Mitjançant la shell podem navegar dins el sistema usant, entre altres, les intruccions:

    • pwd: mostra el directori actual
    • cd: canvia de directori
    • ls: mostra el contingut d’un directori
  1. Explorar
    Podem veure el contingut i les propietats dels fitxers.

    • ls -l:
      [cc lang=”bash”]-rw——- 1 bshotts bshotts 576 Apr 17 1998 weather.txt
      drwxr-xr-x 6 bshotts bshotts 1024 Oct 9 1999 web_page
      -rw-rw-r– 1 bshotts bshotts 276480 Feb 11 20:41 web_site.tar
      -rw——- 1 bshotts bshotts 5743 Dec 16 1998 xmas_file.txt
      ———- ——- ——- ——– ———— ————-
      | | | | | |
      | | | | | File Name
      | | | | +— Modification Time
      | | | +————- Size (in bytes)
      | | +———————– Group
      | +——————————– Owner
      +———————————————- File Permissions[/cc]
    • less: Mostra arxius de text.
    • file: indica el tipus d’arxiu.
  2. Un tour guiat
    • /home: El directori que conté els sub-directoris personals dels usuaris. Cada un dels usuaris té privilegis complets sobre els arxius i els sots-directoris del seu directori personal.
    • /bin: És el directori que inclou les instruccions de la línia de comandament de Linux, els quals són comuns amb UNIX (els estudiarem ara).
    • /boot: Aquest directori conté els fitxers necessaris per a l’arrencada.
    • /dev: Arxius dels dispositius del sistema. A Linux, com en UNIX, qualsevol dispositiu de l’ordinador (una impressora, un disc dur, un CD-ROM, una tarja de so …) és un fitxer. Això permet que es pugui fer servir la definició d’una ruta d’arxiu dins del sistema d’arxius com a forma per accedir a qualsevol dispositiu.
    • /etc: Aquest directori conté arxius de configuració del sistema. Aquests arxius es creen durant el procés d’instal·lació i sols poden ser modificats pel superusuari root.
    • /usr: És un directori que té una estructura pròpia i que conté els programes amb dret d’execució per tots els usuaris.
    • /lib: Incorpora els arxius de les llibreries d’accés compartit.
    • /mnt: És el directori en el qual es “munten” els sistemes de fitxers de dispositius d’emmagatzemament massius de dades (discos durs, disquets, CD-ROM, discos durs del tipus usb o càmeres digitals, …) o de sistemes d’arxius situats en altres ordinadors connectats en xarxa. A Linux no es fan “connexions d’unitats de xarxa”, sinó que es defineixen a quines unitats i a quins directoris s’hi ha d’accedir de forma remota i llavors s’incorporen a l’estructura de directoris de l’ordinador local mitjançant aquest directori.
    • /proc: És un directori usat pel nucli del sistema per emmagatzemar arxius generats durant l’execució de processos.
    • /root: És el directori personal del superusuari.
    • /sbin: Conté arxius de configuració inicial del sistema (alguns compartits amb els que es troben al directori /etc) i eines d’administració, utilitats i ordres generals exclusives de root.
    • /tmp: En aquest arxiu es troben fitxers d’ús no permanent per part de tots els usuaris del sistema (tothom té permís d’escriptura en aquest directori). El seu contingut se sol esborrar en sortir del sistema.
    • /opt: Aquest directori no es troba a totes les distribucions. Si existeix, sol contenir paquets de programari que no es troben incorporats a una distribució de Linux i que l’administrador va afegint al sistema.
    • /var: És un directori en el qual es desen els arxius associats a les cues d’impressió, on es diposita el correu electrònic dels usuaris, arxius històrics i, en general, aquells arxius que es van actualitzant mentre es porten a terme els distints processos del sistema.
  3. Manipulació de fitxers
    • cp: Copiar un arxiu o directori
    • mv: Moure o renombrar arxius i directoris
    • rm: Borrar fitxers i directoris
    • mkdir: Crear directoris.
  4. Treballant amb comandes
    • type: Mostra informació sobre una comanda
    • witch: Mostra la localització d’una comanda
    • help: Mostra informació de la comanda, paràmetres i us. (ex: mkir –help)
    • man: Mostra un manual de referència de la comanda.
  5. Redireccionament d’entrada i sortida
    • redireccionament amb > i >>
    • Tuberies d’instruccions amb |
  6. Expansió
    1. echo: per mostrar text i directoris.
    2. Variables amb $, expresions amb ( )
    3. { } per tasques repetitives
  7. Permisos

    1. chmod – modify file access rights
    2. su – temporarily become the superuser
    3. sudo – temporarily become the superuser
    4. chown – change file ownership
    5. chgrp – change a file’s group ownership
  8. Control de tasques

Recerca de comandes shell:

  1. Sistema de fitxers Linux / Intèrpret d’ordres
  2. Comandes terminal Linux
  3. més de 400 comandes …
  4. Més comandes…

Exercicis

  1. Exercicis de redireccionament.
    1. Crear una carpeta “tic2” a la direcció /Documents del vostre usuari.
    2. Dins aquesta carpeta hi heu de crear una carpeta “exercicis”.
    3. Fer un arxiu exercici1.txt amb el vostre nom.
    4. Afegir l’historial de comandes que heu fet fins ara.
    5. Afegir a l’arxiu la vostra ip d’aula mitjançant ifconfig.
  2.  Exercicis de tuberies, descarrega l’arxiu dites.txt
    1. Amb cerca i reemplaça llevam les línies buides, miram aquesta web per fer-ho desde l’interfície de comandes. (usam el gedit)
    2. Ordenam i mostram l’arxiu. “cat dites.txt | sort”
    3. El mateix mostrant el número de línia amb “cat -n …”
    4. Cream un arxiu ditesordenat.txt ordenat sense número de línia.
    5. Cream un arxiu exercicis.txt on posam la data de creació, el nom, “EXERCICI 2”, la història de les darreres 10 instruccions i els dos arxius de dites creats.
  3. Volem reordenar dites de manera aleatòria i que ens mostri una sola línia.
    1. Cerca la instrucció de redirecció aquí
    2. Consulta el manual de sort.
    3. Afegeix la instrucció a l’arxiu exercici.txt
  4. Estudia i explica el significat de la instrucció : du -s * | sort -nr > $HOME/user_space_report.txt

Pràctica 1

Aquesta pràctica consisteix en dissenyar i implementar un script per enregistrar les entrades al nostre ordinador. Per realitzar l’implementació de l’script seguim les indicacions:

  1. L’script ho escriu tot sobre un arxiu “bitacora.txt” dins la capeta tic2 d’usuari.
  2. Cada obertura de sessió escriu les dades:
    1. Capçalera de nova sessió. S’ha de fer una diagrames ASCII una capçalera.
    2. Dins la capçalera:
      1. La data de creació.
      2. El vostre nom.
      3. El nom d’usuari.
      4. Una dita aleatoria de “dites.txt”
  3. Obrir el doument amb el gedit.
  4. Durant la sessió s’han d’anotar els exercicis. Aquí reprendrem les tasques de disseny.
  5. A cada final de sessió:
    1. Una línia de tall
    2. D’afegir l’historial de les comandes realitzades.
    3. Una línia de tall amb “fi de sessió”.
  6. Cada sessió s’ha de fer una còpia dins una carpeta “copies” amb nom bitacora-“data.txt”
  7. L’script ha de ser executable, per tant l’hi haurem de canviar els permisos a 755.
  8. Hem de moure l’script dins una carpeta bin. Agregam aquesta carpeta  a la variable $PATH per poder executar l’sript com a una instrucció del sistema.

Indicacions per la pràctica

Per realitzar aquesta operació són necessaries dues coses, tenir un script funcional i conèixer la variable d’entorn $PATH per afegir la nostra instrucció.

  1. Script funcional, és un arxiu que té els permisos d’execució,  755 i es modifica amb l’instrucció chmod. Exemple guiat
    1. Volem transformar l’arxiu s2 a executable, mostrant el contingut de la carpeta podem veure que “s1” és executabe (permisos 755) i “s2″ no (permisos 544).
      [cc lang=”bash”]@ls -l
      total 8
      -rwxr-xr-x 1 pere pere 74 de se 21 12:06 s1
      -rw-r–r– 1 pere pere 75 de se 21 12:07 s2
      [/cc]
    2. Canviam a executable. De 544 a 755.
      [cc lang=”bash”]
      #Aquesta primera instrucció és per recordar com havia fet la instrucció chmod abans 😉
      #grep cerca un string dins alguna llista, carpeta, arxius, …
      #en aquest cas feim la cerca  dins “history” usant una tuberia
      pere@Lenovo:~/Documents/tic2/exercicis/bin$ history | grep chmod
      89 chmod 755 s1.txt
      327 chmod 755 s12
      341 history | grep chmod
      pere@Lenovo:~/Documents/tic2/exercicis/bin$ chmod 755 s2
      pere@Lenovo:~/Documents/tic2/exercicis/bin$ ls -l
      total 8
      -rwxr-xr-x 1 pere pere 74 de se 21 12:06 s1
      -rwxr-xr-x 1 pere pere 75 de se 21 12:07 s2
      [/cc]
    3. Per provar si l’script és funcional l’executam amb “./” davant el nom de l’arxiu.
      [cc lang=”bash”]pere@Lenovo:~/Documents/tic2/exercicis/bin$ ./s2
      Som s2 i som executable 😉
      Hello World!!
      [/cc]
  2. Script com a instrucció del sistema. Per realitzar aquesta tasca afegirem la carpeta on guardam els scripts dins la variable $PATH i reiniciarem sessió d’usuari.
    1. Afegim la carpeta dels scripts a l’arxiu ~/.bashrc
      [cc lang=”bash”]
      #########################################################################
      1-Afegim la carpeta dels scripts a l’arxiu ~/.bashrc
      #a la darrera línia de l’arxiu “.bashrc” hi afegim la nostra carpeta bin
      #fent un append com el següent
      pere@Lenovo:~$ echo “export PATH=$PATH:~/Documents/tic2/bin/ >> ~/.bashrc
      #Mostram la variable $PATH i veim que encara no està actualitzada
      pere@Lenovo:~$ echo $PATH
      /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games#L’actualitzam amb la comanda source
      pere@Lenovo:~$ source ~/.bashrc#Comprovam que està actualitzada 🙂
      pere@Lenovo:~$ echo $PATH
      /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/pere/Documents/tic2/bin/##################################################################
      #!! Fixat que ~/Documents s’ha substituit per /home/pere/Documents
      ##################################################################[/cc]
    2. Reiniciam l’usuari.

PART II. SERVEI FTP

A informàtica un servei és un programa que espera una ordre per donar un servei. Aquest programa resideix dins ordinador que s’anomena Servidor, el dispositiu que fa demandes s’anomena Client.
Els Serveis són la base fonamental del funcionament de les xarxes ja que permeten accions remotes desde un ordinador, tablet, smartphone o altres. Són exemples l’EMAIL11, HTTP, HTTPS, DHCP, DNS, …

Què és?

El servei FTP “File Transfer Protocol” és un servei que ens permet connectar a un servidor d’allotjament web i gestiona la pujada, baixada, borrat de carpetes i arxius.

Quan es realitza una connexió s’estableix un vincle entre un client (el teu ordinador) i el servidor d’allotjament. El port que utilitza el servei és, per defecte, el 21.

Client Servidor?

S’estableix una comunicació entre dues computadores en que una és el client (nostra) i una altra fa de servidor(proveïdor).

Llegim la següent definició que ens aclarirà un poc el concepte.

“En informàtica s’anomena arquitectura client-servidor, a la relació establerta entre dues entitats, el servidor, ofereix un recurs de qualsevol tipus (físic, de programar, de dades, etc.) a l’altre (el client) perquè aquesta en tregui un profit o avantatge. El més habitual és que d’una entitat servidora se n’aprofitin diverses o moltes entitats clients.

Per a la comunicació entre clients i servidors s’utilitza un protocol de comunicacions, que descriu com es poden comunicar i quines informacions es poden intercanviar (HTTP per a pàgines web, Wi-Fi per a xarxes sense fils,…).

Característiques d’un servidor;

  • Passiu (esclau)
  • Espera peticions
  • Quan rep una petició la processa i retorna una resposta

Característiques d’un client;

  • Actiu (mestre)
  • Envia peticions
  • A l’enviar una petició espera una resposta i la processa

Per exemple, un servidor de correu, conté el correu electrònic de múltiples clients. Un programa client de correu electrònic, demana al servidor de correu si hi ha nous missatges per a l’usuari el servidor li pot contestar que sí o que no, en cas afirmatiu el client demana al servidor que li enviï aquests correus i el servidor els envia al client i els elimina de la seva base de dades.”

Com funciona?

Per usar un servei FTP necessitam tenir:

  • Un servidor amb el servei FTP en marxa.
  • Saber la seva direcció IP o nom DNS i el seu port
  • Tenir activat un usuari al servidor.
  • Un gestor FTP que controlam desde el client.

Pràctica 2. Usam un FTP.

L’objectiu d’aquesta pràctica és conèixer el funcionament d’aquest servei i practicar sobre un entorn real. Connectarem a un servidor de tres maneres diferents:

  • Mitjançant un navegador
  • Amb el programa FileZilla
  • Usant un script al shell 😉
  1. Mitjançant un navegador

    Els navegadors s’han convertit en eines excepcionals per dur a terme tàsques on abans s’havia de disposar de programes especials, en aquest cas usarem un navegador per realitzar una pujada i gestió d’arxius a un servidor.

    La pràctica consisteix en pujar el vostre bitacora.txt al servidor, amb les credencials donades.

    Abans de pujar l’arxiu li heu de canviar el nom a numeroDeUsuari.txt, per exemple si ets l’usuari 04 has de posar com a nom “04.txt”.

    Desprès revisa si surt a la pàgina bitacores.gimnesia.net


pràctiques extres per mirar: https://practice.geeksforgeeks.org/

https://francisconi.org/linux/comandos/grep

Codificació de la informació

    1. Teoria de xarxes

    2. Instal·lació de SO mint al virtualBox

    3. Integració Serveis a xarxa LAN, exemple de càmera web

    4. Pràctica Servidor LAMP local.

    5. Teoria Serveis.

UNITAT2. SEGURETAT INFORMÀTICA