1  Introducció

Objectius

  • Entendre què vol dir programar i per a què serveix.
  • Distingir entre problema, algorisme i programa.
  • Reconèixer les propietats d’un bon algorisme.
  • Conèixer les grans fases del cicle de vida del programari.
  • Llegir i escriure un algorisme senzill en pseudocodi i en diagrama de flux.

Programar és donar instruccions a un ordinador perquè resolgui un problema.

L’ordinador és molt ràpid, però no té sentit comú. Fa exactament el que li dius, ni més ni menys. Si les instruccions estan mal escrites, el resultat serà erroni… i l’ordinador no s’adonarà de l’error. La responsabilitat és sempre del programador.

NotaLa idea clau

Un ordinador no “entén” el problema. Només segueix passos. La teva feina és convertir un problema en una seqüència de passos clara i sense ambigüitats.

Una analogia: la recepta de cuina

Pensa en una recepta. Una recepta és una llista de passos per obtenir un plat:

  1. Bull aigua amb sal.
  2. Aboca la pasta.
  3. Espera 9 minuts.
  4. Escorre l’aigua.
  5. Serveix.

Un algorisme és exactament això: una llista ordenada de passos per aconseguir un resultat.

Programar és escriure aquesta recepta amb tant de detall que fins i tot una màquina sense sentit comú la pugui seguir.

1.1 Problema, algorisme i programa

Concepte Definició Exemple
Problema La necessitat que volem resoldre Vull saber la mitjana de tres notes
Algorisme El pla de passos per resoldre’l Suma les tres notes i divideix per 3
Programa L’algorisme escrit en un llenguatge que l’ordinador executa El codi en Java


L’ordre importa. Primer entens el problema, després dissenyes l’algorisme i, només al final, l’escrius com a programa.

flowchart LR
    P["Problema<br/>(què vull)"] --> A["Algorisme<br/>(com ho faré)"]
    A --> C["Programa<br/>(codi executable)"]
    C --> R["Resultat"]

AlertaError típic: saltar directament al codi

La temptació de principiant és obrir l’editor i començar a escriure codi de seguida. Sense un algorisme pensat abans, acabaràs perdut. Primer pensa, després escriu.

1.2 Què és un algorisme?

Un algorisme és una seqüència finita i ordenada de passos que resol un problema.

No és un concepte informàtic modern: una recepta, les instruccions per muntar un moble o el procés per fer una arrel quadrada a mà són algorismes.

Propietats d’un bon algorisme

Un bon algorisme ha de complir:

Propietat Vol dir que… Contraexemple
Precís Cada pas és clar i sense ambigüitat “Posa una mica de sal” (quanta?)
Finit Acaba després d’un nombre limitat de passos “Repeteix per sempre” (no acaba mai)
Definit Amb les mateixes dades, dona sempre el mateix resultat Un pas que depèn de l’atzar sense control
Té entrada Rep unes dades inicials (potser cap)
Té sortida Produeix un o més resultats Un algorisme que no dona cap resultat no serveix

Exemple: la mitjana de tres notes

Vegem l’algorisme del problema de la taula anterior, escrit en llenguatge natural:

  1. Demana la primera nota.
  2. Demana la segona nota.
  3. Demana la tercera nota.
  4. Suma les tres notes.
  5. Divideix la suma entre 3.
  6. Mostra el resultat.

Observa que té entrada (les tres notes), uns passos precisos i una sortida (la mitjana). I acaba: és finit.

1.3 Les tres estructures bàsiques

Encara que un problema sigui molt complex, tot algorisme es pot construir combinant només tres tipus de construccions.

Ho va demostrar el teorema de Böhm-Jacopini.

  • Seqüència. Els passos s’executen un rere l’altre, de dalt a baix. És el cas de la recepta de la pasta.
  • Selecció (o condició). El programa decideix entre camins diferents segons una condició. “Si plou, agafa el paraigua; si no, no.”
  • Repetició (o bucle). Un grup de passos es repeteix diverses vegades. “Mentre quedin plats bruts, renta’n un.”

Amb aquestes tres peces, i combinant-les, es pot escriure qualsevol programa. És una idea molt potent: la complexitat neix de la combinació de coses senzilles.

1.4 Representació d’algorismes

Per escriure algorismes abans de tenir un llenguatge de programació, fem servir dues eines. Totes dues expressen la mateixa idea de maneres diferents.

  • Pseudocodi
  • Diagrama de flux

1.4.1 El pseudocodi

El pseudocodi és una manera d’escriure algorismes amb un llenguatge intermedi: més estructurat que el català normal, però sense les regles estrictes d’un llenguatge de programació. No s’executa a cap ordinador; és per a persones.

Aquest és l’algorisme de la mitjana en pseudocodi:

    Algorisme MitjanaTresNotes
        Escriure "Introdueix la primera nota:"
        Llegir nota1
        Escriure "Introdueix la segona nota:"
        Llegir nota2
        Escriure "Introdueix la tercera nota:"
        Llegir nota3
        mitjana ← (nota1 + nota2 + nota3) / 3
        Escriure "La mitjana és:", mitjana
    FiAlgorisme

Fixa’t en el símbol : vol dir “assigna”, és a dir, “guarda aquest valor aquí”.

1.4.2 El diagrama de flux

Un diagrama de flux és la representació visual del mateix algorisme. Fa servir figures connectades per fletxes que indiquen l’ordre. Cada figura té un significat:

Figura Significat
Òval / rectangle arrodonit Inici i final
Rectangle Una acció o procés (càlcul, assignació)
Paral·lelogram Entrada o sortida de dades (llegir / escriure)
Rombe Una decisió (pregunta amb resposta sí/no)
Fletxa El sentit del flux

Aquest és el diagrama de flux de la mitjana:

flowchart TD
    inici([Inici]) --> lec[/"Llegir nota1, nota2, nota3"/]
    lec --> calc["mitjana ← (nota1+nota2+nota3) / 3"]
    calc --> esc[/"Escriure mitjana"/]
    esc --> fi([Final])

NotaDues cares de la mateixa moneda

El pseudocodi i el diagrama de flux no competeixen: expliquen el mateix algorisme. El diagrama va bé per veure el flux d’un cop d’ull; el pseudocodi va bé quan l’algorisme és llarg i el dibuix quedaria massa gran.

Exemple amb decisió: parell o senar

Vegem un algorisme amb una selecció. Volem dir si un número és parell o senar.

    Algorisme ParellOSenar
        Escriure "Introdueix un número enter:"
        Llegir n
        Si (n mòdul 2) = 0 llavors
            Escriure "És parell"
        Si no
            Escriure "És senar"
        FiSi
    FiAlgorisme

L’operació mòdul dona el residu d’una divisió. Si el residu de dividir per 2 és zero, el número és parell. El mateix algorisme, en diagrama de flux:

flowchart TD
    inici([Inici]) --> lec[/"Llegir n"/]
    lec --> dec{"n mòdul 2 = 0?"}
    dec -->|Sí| par[/"Escriure 'És parell'"/]
    dec -->|No| sen[/"Escriure 'És senar'"/]
    par --> fi([Final])
    sen --> fi

1.5 El cicle de vida del programari

Un programa real no neix de cop. Es construeix seguint unes fases. Aquest procés s’anomena cicle de vida del programari. Encara que hi ha diferents models, gairebé tots inclouen aquestes fases:

flowchart TD
    A["1 · Anàlisi<br/>Què ha de fer?"] --> B["2 · Disseny<br/>Com ho farà?"]
    B --> C["3 · Codificació<br/>Escriure el programa"]
    C --> D["4 · Proves<br/>Funciona bé?"]
    D --> E["5 · Manteniment<br/>Corregir i millorar"]
    E -.->|nous requisits| A

  • Anàlisi. Entenem el problema i decidim què ha de fer el programa (els requisits).
  • Disseny. Decidim com ho farà: dissenyem els algorismes i l’estructura.
  • Codificació. Traduïm el disseny a un llenguatge de programació. És el que la gent associa a “programar”, però és només una fase.
  • Proves. Comprovem que el programa fa el que ha de fer i busquem errors.
  • Manteniment. Un cop en marxa, cal corregir errors nous i afegir millores.
ImportantLa codificació és una part petita

En projectes reals, l’anàlisi, el disseny i les proves ocupen molt més temps que la codificació. Un bon algorisme pensat abans t’estalvia hores d’esmenar codi després.

Errors: la realitat de programar

Programar és equivocar-se i corregir. Hi ha tres grans tipus d’errors que trobaràs:

Tipus d’error Quan apareix Exemple
Sintàctic En escriure el codi; l’ordinador no l’entén Oblidar un símbol obligatori
D’execució Quan el programa corre i peta Dividir per zero
Lògic El programa corre, però el resultat és incorrecte Sumar quan calia restar


Els lògics són els més perillosos: el programa no es queixa, però dona resultats erronis. Un bon algorisme, ben traçat des del principi, ajuda a evitar-los.

1.6 Resum

  • Programar és donar a l’ordinador una seqüència de passos precisos per resoldre un problema. L’ordinador no té sentit comú: fa exactament el que li dius.
  • Cal distingir problema (què vull), algorisme (com ho faré) i programa (el codi executable). Sempre en aquest ordre.
  • Un bon algorisme és precís, finit, definit, i té entrada i sortida.
  • Tot algorisme es construeix combinant tres estructures: seqüència, selecció i repetició.
  • El pseudocodi i el diagrama de flux expressen el mateix algorisme: un amb text estructurat, l’altre amb figures.
  • El cicle de vida del programari té fases (anàlisi, disseny, codificació, proves, manteniment); la codificació n’és només una part.
  • Hi ha errors sintàctics, d’execució i lògics; els lògics són els més difícils de detectar..