Diferència entre revisions de la pàgina «M3 - Programació»

De wikiserver
Dreceres ràpides: navegació, cerca
(Continguts)
(Exercicis taules, cadenes i nous tipus de dades)
 
(253 revisions intermèdies per 2 usuaris que no es mostren)
Línia 1: Línia 1:
 
==UF1: Programació Estructurada ==
 
==UF1: Programació Estructurada ==
 
<!--
 
<!--
 +
[[ASIX-M3-UF1-Proves|BPUF1]]
 +
-->
 +
<pre>
 
A1. L’estructura del programa informàtic
 
A1. L’estructura del programa informàtic
 
A2. La composició alternativa
 
A2. La composició alternativa
Línia 7: Línia 10:
 
A5. Tractament de cadenes
 
A5. Tractament de cadenes
 
A6. Creació de nous tipus de dades
 
A6. Creació de nous tipus de dades
 +
 +
Nota NF1 = 0.2 Pe1 + 0.08 Pt1+ 0.08 Pt2 +  0.32 Pe2 + 0.32 Pe3
 +
 +
Pe1: Qüestionari
 +
Pt1: Pràctica taules
 +
Pt2: Pràctica nou tipus de dades
 +
Pe2: Prova programació: estructures de control, algoritmes de cerca i de recorregut
 +
Pe3: Prova programació: taules, cadenes i nous tipus de dades
 +
 +
</pre>
 +
===Continguts===
 +
<!--
 +
====Algoritmes / pseudocodi====
 +
 +
:*[[M3 - Programació estructurada / Continguts UF1: Pseudocodi|Pseudocodi]]
 +
 +
:*[[M3 - Programació estructurada / Continguts UF1: Exercicis Pseudocodi |Exercicis Pseudocodi]]
 
-->
 
-->
 +
====Variables, constants, entrada de dades i operadors====
 +
 +
:*[[M3 - Programació estructurada / Continguts UF1: Algorismes i programes |Algorismes i programes]]
 +
 +
[[Fitxer:shortcuts-80.pdf]]
 +
 +
:*[[M3 - Programació estructurada / Continguts UF1: Declaració, inicialització i ús de variables |Declaració, inicialització i ús de variables]]
 +
 +
:*[[M3 - Programació estructurada / Continguts UF1: Visualització i entrada de les dades en Java |Visualització i entrada de les dades en Java]]
 +
 +
:*[[M3 - Programació estructurada / Continguts UF1: Operadors numèrics i prioritats |Operadors numèrics i prioritats]]
 +
 +
:*[[M3 - Programació estructurada / Continguts UF1: Operadors amb dades de tipus lògic |Operadors amb dades de tipus lògic]]
 +
 +
 +
====Estructures de control====
 +
 +
===== Estructures alternatives=====
 +
 +
:*Les '''estructures alternatives''' permeten prendre decisions sobre quin conjunt d’instruccions cal executar en un punt del programa.
 +
 +
:*Tota estructura alternativa es basa en l’avaluació d’una expressió que ha de donar un resultat booleà: true (cert) o false (fals). Aquesta expressió s’anomena la '''condició lògica''' de l’estructura.
 +
 +
:*El conjunt d’instruccions que s’executarà dependrà del resultat de la condició lògica, i actuarà com una mena d’interruptor que marca el flux que cal seguir dins del programa.
 +
 +
:*[[M3 - Programació estructurada / Continguts UF1: Estructura alternativa |Estructura alternativa]]
 +
 +
===== Estructures iteratives=====
 +
 +
Les estructures de repetició o iteratives permeten repetir una mateixa seqüència d’instruccions diverses vegades, mentre es compleixi una certa condició.
 +
 +
::Anomenem '''bucle''' o cicle el conjunt d’instruccions que s’ha de repetir un cert nombre de vegades, i anomenem '''iteració''' cada execució individual del bucle.
 +
 +
::Un '''bucle infinit''' és una seqüència d’instruccions dins d’un programa que itera indefinidament, normalment perquè s’espera que s’assoleixi una condició que mai no s’arriba a produir.
 +
 +
::Forçosament dins de tot bucle hi ha d’haver instruccions que manipulin variables el valor de les quals permeti controlar la repetició o el final del bucle. Aquestes variables s’anomenen '''variables de control'''.
 +
 +
Normalment, les variables de control dins d’un bucle es poden englobar dins d’algun d’aquests tipus de comportament:
 +
 +
:* '''Comptador''': una variable de tipus enter que va augmentant o disminuint, indicant de manera clara el nombre d’iteracions que caldrà fer.
 +
 +
:* '''Acumulador''': una variable en què es van acumulant directament els càlculs que es volen fer, de manera que en assolir cert valor es considera que ja no cal fer més iteracions. Si bé s’assemblen als comptadors, no són ben bé el mateix.
 +
 +
:* '''Semàfor''': una variable que serveix com a interruptor explícit de si cal seguir fent iteracions. Quan ja no en volem fer més, el codi simplement s’encarrega d’assignar-li el valor específic que servirà perquè la condició avaluï false.
 +
 +
:*[[M3 - Programació estructurada / Continguts UF1: La sentència for|La sentència for]]
 +
 +
:*[[M3 - Programació estructurada / Continguts UF1: La sentència while|La sentència while]]
 +
 +
:*[[M3 - Programació estructurada / Continguts UF1: La sentència do/while|La sentència do/while]]
 +
 +
===== Esquemes de tractament seqüencial=====
 +
 +
'''Introducció'''
 +
 +
Un esquema de programació no és altra cosa que un model de solució per a a una família de problemes de programació homòlegs. L'ús d'esquemes de programació és una eina imprescindible per al programador atès que el seu ús facilita molt la solució de problemes i rebaixa considerablement la taxa d'errors de programació.
 +
 +
Aquesta estratègia de treball no és única de l'àmbit de la programació sinó que també l'apliquem en altres disciplines. Per exemple, a física quan aprenem a resoldre problemes de tir parabòlic o a matemàtiques quan aprenem a calcular primitives fent integració per parts.
 +
 +
La metodologia general segueix aquests passos:
 +
 +
:• Identificació del tipus de problema.
 +
:• Caracterització dels elements característics.
 +
:• Aplicació de l'esquema.
 +
 +
En aquest material introduïrem els esquemes seqüencials, és a dir els que s'apliquen a dades que tenen estructura de seqüència.
 +
 +
'''Seqüències'''
 +
 +
Una seqüència és un conjunt de dades de qualsevol tipus que es caracteritzen per estar disposades «en forma de fila», ja sigui des d'un punt de vista físic o conceptual. Moltes de les dades que manipula un programa tenen estructura de seqüència. Per exemple, un
 +
string com ara "Hola nois", pot ser considerat com una seqüència de caràcters ('H', 'o', 'l',...) o una matriu de reals com una seqüència de files. Més formalment, una seqüència és una conjunt de dades tal que:
 +
 +
:• És finit.
 +
:• Conté un element que és el primer de la seqüència
 +
:• Es pot definir la relació de "següent", que donat un element de la seqüència, diu quin ve a darrera.
 +
 +
Per exemple, el enters de 1 a 10 tenen estructura de seqüència atès que són un conjunt finit, tenen un primer ben definit (l'1) i la relació de següent consisteix a sumar una unitat a l'anterior.
 +
 +
:*[[M3 - Programació estructurada / Continguts UF1: Esquema de recorregut|Esquema de recorregut]]
 +
 +
:*[[M3 - Programació estructurada / Continguts UF1: Esquema de cerca|Esquema de cerca]]
 +
<!---->
 +
 +
====Tipus de dades compostes====
 +
 +
:*[[M3 - Programació estructurada / Continguts UF1: Taules |Taules]]
 +
 +
:*[[M3 - Programació estructurada / Continguts UF1: Cadenes de caràcters |Cadenes de caràcters]]
 +
 +
:*[[M3 - Programació estructurada / Continguts UF1: El tipus char |El tipus char]]
 +
 +
:*[[M3 - Programació estructurada / Continguts UF1: Classes |Classes]]
 +
<!---->
 +
 
===Activitats===
 
===Activitats===
:*[[M3 - Programació estructurada / Exercicis UF1: Seqüencials |Exercicis seqüencials]]
 
  
:*[[M3 - Programació estructurada / Exercicis UF1: D'estructura alternativa |Exercicis d'estructura alternativa]]
+
====Exercicis seqüencials, estructura alternativa i iteratius====
 +
 
 +
 
 +
:*[[M3 - Programació estructurada / Exercicis UF1: Seqüencials |Exercicis seqüencials]] / [[M3 - Programació estructurada / Exercicis UF1: Seqüencials-Solucions| Solucions]]
 +
 
 +
:*[[M3 - Programació estructurada / Exercicis UF1: Expressions lògiques|Exercicis avaluar expressions lògiques]] / [[M3 - Programació estructurada / Exercicis UF1: Expressions lògiques-Solucions| Solucions]]
 +
 
 +
:*[[M3 - Programació estructurada / Exercicis UF1: Fer expressions lògiques |Exercicis trobar expressions lògiques]] / [[M3 - Programació estructurada / Exercicis UF1: Fer expressions lògiques-Solucions| Solucions]]
 +
 
 +
:*[[M3 - Programació estructurada / Exercicis UF1: D'estructura alternativa preliminars|Exercicis d'estructura alternativa preliminars]] / [[M3 - Programació estructurada / Exercicis UF1: D'estructura alternativa preliminars-Solucions| Solucions]]
 +
 
 +
:*[[M3 - Programació estructurada / Exercicis UF1: D'estructura alternativa |Exercicis d'estructura alternativa]] / [[M3 - Programació estructurada / Exercicis UF1: D'estructura alternativa-Solucions| Solucions]]
 +
 
 +
:*[[M3 - Programació estructurada / Exercicis UF1: For |Exercicis amb For]] / [[M3 - Programació estructurada / Exercicis UF1: For-Solucions| Solucions]]
 +
 
 +
:*[[M3 - Programació estructurada / Exercicis UF1: Recorregut |Exercicis de recorregut]] / [[M3 - Programació estructurada / Exercicis UF1: Recorregut-Solucions| Solucions]]
 +
 
 +
:*[[M3 - Programació estructurada / Exercicis UF1: Cerca |Exercicis de cerca]] / [[M3 - Programació estructurada / Exercicis UF1: Cerca-Solucions| Solucions]]
 +
 
 +
:*[[M3 - Programació estructurada / Exercicis UF1: Iteratius |Més exercicis iteratius]] / [[M3 - Programació estructurada / Exercicis UF1: Iteratius-Solucions| Solucions]]
 +
 
 +
<!---->
 +
<!--
 +
'''Proves exercicis seqüencials, estructura alternativa i iteratius 20/21'''
 +
 
 +
:*[[M3 - Programació estructurada / Exercicis UF1: Proves |Proves]]
 +
-->
 +
<!--
 +
:*[[M3 - Programació estructurada / Exercicis UF1: Proves+Solucions |Proves + Solucions]]
 +
-->
 +
 
 +
====Exercicis taules, cadenes i nous tipus de dades====
 +
 
 +
:*[[M3 - Programació estructurada / Exercicis UF1: Taules |Exercicis taules]]
  
:*[[M3 - Programació estructurada / Exercicis UF1: For |Exercicis amb For]]
+
:*[[M3 - Programació estructurada / Exercicis UF1: Taules - Problemes |Exercicis taules - Problemes]]
  
:*[[M3 - Programació estructurada / Exercicis UF1: Recorregut |Exercicis de recorregut]]
+
:*[[M3 - Programació estructurada / Exercicis UF1: Taules - Pokemons |Exercici taules - Pokemons]]
  
:*[[M3 - Programació estructurada / Exercicis UF1: Cerca |Exercicis de cerca]]
+
:*[[M3 - Programació estructurada / Exercicis UF1: Cadenes |Exercicis de cadenes]]
  
:*[[M3 - Programació estructurada / Exercicis UF1: Iteratius |Més exercicis iteratius]]
+
:*[[M3 - Programació estructurada / Exercicis UF1: classe Character |Exercicis de classe Character]]
  
==UF3: Fonament de gestió de fitxers==
+
:*[[M3 - Programació estructurada / Exercicis UF1: Classes|Exercicis Classes]] / [[M3 - Programació estructurada / Exercicis UF1: Menú|Prototipus menú]]
 +
<!---->
 +
<!--
 +
'''Proves exercicis taules, cadenes i nous tipus de dades 20/21'''
  
===Continguts===
+
:*[[M3 - Programació estructurada / Exercicis UF1: Proves_T_C_TD |Proves]]
 +
-->
 +
<!--
 +
:*[[M3 - Programació estructurada / Exercicis UF1: Proves_T_C_TD+Solucions |Proves + Solucions]]
 +
-->
 +
<!--
 +
====Proves OnLine====
  
:*[[M3 - Programació estructurada / Continguts UF3: Fitxers orientats a byte |Fitxers orientats a byte]]
+
- Exercicis seqüencials, estructura alternativa i iteratius
'''Accés següèncial'''
 
  
Les dades s’emmagatzemen com una seqüència de valors, i per tant, l’esquema general que s'aplica en fitxers orientats a caràcter també es pot aplicar a
+
:*[[M3 - Programació estructurada / Exercicis UF1 Part1: Proves OnLine |Proves Online UF1 1a. Part]]
aquest altre tipus.
 
  
Representació de les dades en format binari.
+
- Exercicis taules, cadenes i nous tipus de dades
  
{|border="2" cellpadding="4" cellspacing="0" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;"
+
:*[[M3 - Programació estructurada / Exercicis UF1 Part2: Proves OnLine |Proves Online UF1 2a. Part]]
! align="left" width="170 px" style="background:Lavender; color:Black"|Tipus
 
! align="left" width="150 px" style="background:Lavender; color:Black"|Paura clau Java
 
! align="left" width="100 px" style="background:Lavender; color:Black"|Mide (bytes)
 
|-
 
|caràcter||char||2
 
|-
 
|byte||byte||1
 
|-
 
|enter curt||short||2
 
|-
 
|enter simple||int||4
 
|-
 
|enter llarg||long||8
 
|-
 
|real de simple precisió||float||4
 
|-
 
|real de doble precisió||doble||8
 
|}
 
  
'''Inicialització'''
+
- Tota la UF1
  
<pre>
+
:*[[M3 - Programació estructurada / UF1: Proves OnLine |Proves Online UF1]]
    import java.io.File;
+
-->
    import java.io.RandomAccessFile;    // s’usa tant per llegir com per escriure dades
 
    RandomAccessFile raf = new RandomAccessFile(File ruta, String mode); 
 
                                            // File ruta per especificar la ruta del fitxer
 
                                            // String mode per especificar el mode de treball a l'hora de processar el fitxer
 
</pre>
 
  
Dels modes de treball possibles el dos més utilitzats són:
+
===Pràctiques===
  
:*'''r:''' mode lectura. Errors si el fitxer no existeix o si s'invoca a mètodes d'escriptura.
+
:*[[M3 - Programació estructurada / Pràctiques UF1: Pt1 |Pt1 - Taules]] / [[M3 - Programació estructurada / Continguts UF1: System.out.printf |System.out.printf]] / [[M3 - Programació estructurada / Continguts UF1: Colors |Colors]]
  
:*'''rw:''' mode escriptura-lectura. Si el fitxer no existeix, es crearà un de nou buit. Si existeix, no s’esborren les seves dades.
+
:*[[M3 - Programació estructurada / Pràctiques UF1: Pt2 |Pt2 - Classes]]
 +
<!---->
  
'''Escriptura de dades'''
+
<!--
 +
====Repàs UF1====
  
L’única manera de generar fitxers orientats a byte que puguin ser llegits correctament és mitjançant codi d’un programa.
+
Exercicis seqüencials: 1, 4
  
Cada cop que es fa una operació de lectura o escriptura, l’apuntador es desplaça automàticament el mateix nombre de bytes amb què s’ha operat.
+
Exercicis d'estructura alternativa: 2, 4, 5, 6, 11
  
Mètodes disponibles per escriure dades:
+
Exercicis amb For: 3, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, '''19, 20, 21, 22, 23'''
  
{|border="2" cellpadding="4" cellspacing="0" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;"
+
Exercicis de recorregut: 1, 2, 3, 4, 5, 6
! align="left" width="170 px" style="background:Lavender; color:Black"|Mètode
 
! align="left" width="150 px" style="background:Lavender; color:Black"|Bytes escrits
 
|-
 
|writeBoolean(boolean b)||1
 
|-
 
|writeByte (byte v)||1
 
|-
 
|writeChar(char c)||2
 
|-
 
|writeDouble(double d)||8
 
|-
 
|writeFloat(float f)||4
 
|-
 
|writeInt(int i)||4
 
|-
 
|writeLong(long l)||8
 
|-
 
|writeShort(short s)||2
 
|}
 
  
Exemple d'escriptura de 20 enters:
+
Exercicis de cerca: 1, 2, 3, 4, 5, 6
<pre>
 
    public class EscriureEntersBinari {
 
  
      public static void main(String[] args) throws IOException {
+
Més exercicis iteratius: '''1, 2, 3, 4, 5'''
 +
-->
  
        EscriureEntersBinari programa = new EscriureEntersBinari();
+
==UF2: Disseny modular i recursivitat==
        programa.inici();
 
    }
 
  
    public void inici() throws FileNotFoundException, IOException {
+
===Continguts===
  
      File f = new File("Enters.bin");
+
:*[[M3 - Programació estructurada / Continguts UF2: Disseny modular |Disseny descendent o modular]]
      RandomAccessFile raf = new RandomAccessFile(f, "rw");
 
      int valor = 1;
 
      for (int i = 0; i < 20; i++) {
 
          raf.writeInt(valor);
 
          valor = valor * 2;
 
      }
 
      System.out.println("Fitxer escrit satisfactòriament.");
 
      raf.close();
 
    }
 
  }
 
</pre>
 
  
'''Sobreescriptura de fitxers'''
+
:*[[M3 - Programació estructurada / Continguts UF2: Classes i biblioteques |Classes i biblioteques]]
  
La classe '''RandomAccessFile''' quan escriu en un fitxer, no esborra les dades existents, per la qual cosa pot quedar "brossa" al final del fitxer. En molts casos caldrà eliminar els bytes sobrants un cop acabada l'escriptura.
+
:*[[M3 - Programació estructurada / Continguts UF2: Recursivitat |Recursivitat]]
  
Mètodes emprats:
+
===Activitats===
  
:* '''setLength(long mida).''' Modifica la mida del fitxer. Si el valor especificat és més petit que la mida actual, s’eliminen totes les dades per sobre de la
+
:*[[M3 - Programació estructurada / Exercicis UF2: Exercicis mètodes |Exercicis mètodes]] / [[M3 - Programació estructurada / Exercicis UF2: Colors|Colors]]
mida especificada. Si és més gran, el contingut extra és indefinit.
 
  
:* '''long getFilePointer().''' Avalua la posició on és en aquests moments l’apuntador, mesurat en el nombre de bytes des de l’inici del fitxer.
+
:*[[M3 - Programació estructurada / Exercicis UF2: Mastermind |Mastermind]]
  
:* '''long length().''' Retorna la mida del fitxer en bytes.
+
:*[[M3 - Programació estructurada / Exercicis UF2: Recursivitat bàsics|Recursivitat bàsics]]
  
Exemple: reemplaç del contingut delfitxer “enters.bin” (20 valors enters), per cinc valors enters -1. El resultat final és un fitxer de només 20 bytes, en lloc de 80.
+
:*[[M3 - Programació estructurada / Exercicis UF2: Recursivitat |Recursivitat]]
  
<pre>
+
:*[[M3 - Programació estructurada / Exercicis UF2: Exercicis repàs programació estructurada|Exercicis repàs programació estructurada]]
    public class SobreescriureEntersBinari {
 
  
      public static void main(String[] args) throws IOException {
 
  
        SobreescriureEntersBinari programa = new SobreescriureEntersBinari();
+
===Pràctiques===
        programa.inici();
 
      }
 
  
      public void inici() throws FileNotFoundException, IOException {
 
       
 
        File f = new File("Enters.bin");
 
        RandomAccessFile raf = new RandomAccessFile(f, "rw");
 
        long apuntador = raf.getFilePointer();
 
        System.out.println("Inici: Apuntador a posició " + apuntador);
 
        for (int i = 0; i < 5; i++) {
 
          raf.writeInt(-1);
 
        }
 
        apuntador = raf.getFilePointer();
 
        System.out.println("Fi: Apuntador a posició " + apuntador);
 
        raf.setLength(apuntador);
 
        raf.close();
 
        System.out.println("Fitxer modificat correctament.");
 
    }
 
  }
 
</pre>
 
  
'''Lectura de dades'''
+
:*[[M3 - Programació estructurada / Pràctiques UF2: Pt1 |Pt1 - Disseny modular]]
  
hi ha un mètode específic per a cada tipus de dades:
+
:*[[M3 - Programació estructurada / Pràctiques UF2: Pt2 |Pt2 - Disseny modular]]
  
{|border="2" cellpadding="4" cellspacing="0" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;"
+
:*[[M3 - Programació estructurada / Pràctiques UF2: Pt3 |Pt3 - Recursivitat]]
! align="left" width="170 px" style="background:Lavender; color:Black"|Mètode
+
<!---->
! align="left" width="150 px" style="background:Lavender; color:Black"|Tipus de dada llegida
+
<!--
|-
+
'''Proves disseny modular i recursivitat 2020-21'''
|readByte()||byte
 
|-
 
|readShort()||short
 
|-
 
|readInt()||int
 
|-
 
|readLong()||long
 
|-
 
|readFloat()||float
 
|-
 
|readDouble()||double
 
|-
 
|readBoolean()||boolean
 
|-
 
|readChar()||char
 
|}
 
  
L'intent de llegir més enllà del darrer valor provocarà una excepció. Es pot calcular quants valors d’un tipus conté el fitxer fent una simple divisió: mida
+
:*[[M3 - Programació estructurada / Exercicis UF2: Proves_DM_R |Proves]]
fitxer/mida tipus.
+
-->
  
Exemple: lectura del fitxer "Enters.bin".
+
==UF3: Fonament de gestió de fitxers==
  
<pre>
+
===Continguts===
    public class LlegirEntersBinari {
 
  
      public static void main(String[] args) throws IOException {
+
:*[[M3 - Programació estructurada / Continguts UF3: Clase File |Clase File]]
  
        LlegirEntersBinari programa = new LlegirEntersBinari();
+
:*[[M3 - Programació estructurada / Continguts UF3: Fitxers de text |Fitxers de text]]
        programa.inici();
 
      }
 
  
      public void inici() throws IOException {
+
:*[[M3 - Programació estructurada / Continguts UF3: Fitxers orientats a byte |Fitxers orientats a byte]]
 
        File f = new File("Enters.bin");
 
        RandomAccessFile raf = new RandomAccessFile(f, "r");
 
        long numEnters = f.length() / 4;
 
        System.out.println("Hi ha " + numEnters + " enters.");
 
        for (int i = 0; i < numEnters; i++) {
 
          int valor = raf.readInt();
 
          System.out.println("S’ha llegit el valor " + valor);
 
        }
 
        raf.close();
 
      }
 
    }
 
</pre>
 
  
'''Lectura incorrecta de dades'''
+
===Activitats===
  
La classe '''RandomAccessFile''' quan executa qualsevol dels seus mètode de lectura, sempre llegeix el nombre de bytes associats al tipus de dada que es vol llegir, i els interpreta al valor que correspon dins aquest tipus. El programa no ens avisarà en cap excepció.
+
:*[[M3 - Programació estructurada / Activitats UF3: Clase File |Clase File]]
  
====Arxius d’accés directe====
+
:*[[M3 - Programació estructurada / Activitats UF3: Fitxers de text |Fitxers de text]]
  
'''Posicionament'''
+
:*[[M3 - Programació estructurada / Activitats UF3: Fitxers orientats a byte |Fitxers orientats a byte]]
 +
<!---->
  
'''Lectura directa de dades'''
+
==UF4: Programació Orientada a Objectes. Fonaments ==
  
'''Escriptura directa de dades'''
+
===Activitats===
  
'''Seek més enllà de la mida del fitxer'''
+
:*[[M3 - Programació Orientada a Objectes / Activitats UF4: Classes |Classes]]
 +
<!---->
 +
<!--
 +
:*[[M2 - Bases de dades / Apunts UF3 : Exercicis OnLine paquets i triggers| Paquets i triggers ]]
 +
-->

Revisió de 19:29, 8 gen 2024

UF1: Programació Estructurada

A1. L’estructura del programa informàtic
A2. La composició alternativa
A3. Disseny d’algorismes iteratius 
A4. Tractament de taules
A5. Tractament de cadenes
A6. Creació de nous tipus de dades

Nota NF1 = 0.2 Pe1 + 0.08 Pt1+ 0.08 Pt2 +  0.32 Pe2 + 0.32 Pe3

Pe1: Qüestionari
Pt1: Pràctica taules
Pt2: Pràctica nou tipus de dades
Pe2: Prova programació: estructures de control, algoritmes de cerca i de recorregut
Pe3: Prova programació: taules, cadenes i nous tipus de dades

Continguts

Variables, constants, entrada de dades i operadors

Fitxer:Shortcuts-80.pdf


Estructures de control

Estructures alternatives
  • Les estructures alternatives permeten prendre decisions sobre quin conjunt d’instruccions cal executar en un punt del programa.
  • Tota estructura alternativa es basa en l’avaluació d’una expressió que ha de donar un resultat booleà: true (cert) o false (fals). Aquesta expressió s’anomena la condició lògica de l’estructura.
  • El conjunt d’instruccions que s’executarà dependrà del resultat de la condició lògica, i actuarà com una mena d’interruptor que marca el flux que cal seguir dins del programa.
Estructures iteratives

Les estructures de repetició o iteratives permeten repetir una mateixa seqüència d’instruccions diverses vegades, mentre es compleixi una certa condició.

Anomenem bucle o cicle el conjunt d’instruccions que s’ha de repetir un cert nombre de vegades, i anomenem iteració cada execució individual del bucle.
Un bucle infinit és una seqüència d’instruccions dins d’un programa que itera indefinidament, normalment perquè s’espera que s’assoleixi una condició que mai no s’arriba a produir.
Forçosament dins de tot bucle hi ha d’haver instruccions que manipulin variables el valor de les quals permeti controlar la repetició o el final del bucle. Aquestes variables s’anomenen variables de control.

Normalment, les variables de control dins d’un bucle es poden englobar dins d’algun d’aquests tipus de comportament:

  • Comptador: una variable de tipus enter que va augmentant o disminuint, indicant de manera clara el nombre d’iteracions que caldrà fer.
  • Acumulador: una variable en què es van acumulant directament els càlculs que es volen fer, de manera que en assolir cert valor es considera que ja no cal fer més iteracions. Si bé s’assemblen als comptadors, no són ben bé el mateix.
  • Semàfor: una variable que serveix com a interruptor explícit de si cal seguir fent iteracions. Quan ja no en volem fer més, el codi simplement s’encarrega d’assignar-li el valor específic que servirà perquè la condició avaluï false.
Esquemes de tractament seqüencial

Introducció

Un esquema de programació no és altra cosa que un model de solució per a a una família de problemes de programació homòlegs. L'ús d'esquemes de programació és una eina imprescindible per al programador atès que el seu ús facilita molt la solució de problemes i rebaixa considerablement la taxa d'errors de programació.

Aquesta estratègia de treball no és única de l'àmbit de la programació sinó que també l'apliquem en altres disciplines. Per exemple, a física quan aprenem a resoldre problemes de tir parabòlic o a matemàtiques quan aprenem a calcular primitives fent integració per parts.

La metodologia general segueix aquests passos:

• Identificació del tipus de problema.
• Caracterització dels elements característics.
• Aplicació de l'esquema.

En aquest material introduïrem els esquemes seqüencials, és a dir els que s'apliquen a dades que tenen estructura de seqüència.

Seqüències

Una seqüència és un conjunt de dades de qualsevol tipus que es caracteritzen per estar disposades «en forma de fila», ja sigui des d'un punt de vista físic o conceptual. Moltes de les dades que manipula un programa tenen estructura de seqüència. Per exemple, un string com ara "Hola nois", pot ser considerat com una seqüència de caràcters ('H', 'o', 'l',...) o una matriu de reals com una seqüència de files. Més formalment, una seqüència és una conjunt de dades tal que:

• És finit.
• Conté un element que és el primer de la seqüència
• Es pot definir la relació de "següent", que donat un element de la seqüència, diu quin ve a darrera.

Per exemple, el enters de 1 a 10 tenen estructura de seqüència atès que són un conjunt finit, tenen un primer ben definit (l'1) i la relació de següent consisteix a sumar una unitat a l'anterior.

Tipus de dades compostes

Activitats

Exercicis seqüencials, estructura alternativa i iteratius


Exercicis taules, cadenes i nous tipus de dades

Pràctiques


UF2: Disseny modular i recursivitat

Continguts

Activitats


Pràctiques

UF3: Fonament de gestió de fitxers

Continguts

Activitats

UF4: Programació Orientada a Objectes. Fonaments

Activitats