SlideShare a Scribd company logo
1 of 13
CONSTANTS

const
                                                      const
nomConstant1 : tipus = valorConstant1;
                                                        N: enter = 100;
nomConstant2 : tipus = valorConstant2;
                                                      fconst
...
fconst

                                                  TIPUS

                                tipus
                                  color = {verd, blau, vermell groc, blanc};
                                  dia = {dilluns, dimarts, dimecres, dijous};
                                  mes = {gener, febrer, març, abril, maig};
                                ftipus

                                               VARIABLES


var                                                   var
nomVariable1 : tipusVariable1;                          t: taula(N) de enter;
nomVariable2 : tipusVariable2;                          i, n: enter;
...                                                   fvar
fvar


                                      COMPOSICIÓ ALTERNATIVA

siexpressiollavors                                    sin > 0llavors
accioa                                                  accio1
sino                                                  sino
acciob                                                  accio2
fsi                                                   fsi


                                        COMPOSICIÓ ITERATIVA

index := valor inicial;
                                        per index := valor inicial fins valor final [pas increment]
mentreindex ≤ valor final fer
                                          acció;
accio;
                                        fper
index := index + increment;
fmentre
ACCIONS
DECLARACIÓ:                                       DECLARACIÓ:
acciónom(param1, param2, ... , paramn)            acciósuma(ent x: enter, sor y: enter, entsor z: enter)
  ... cos de l’acció                                ... cos de l’acció
facció                                            facció

ASSIGNACIÓ:                                       ASSIGNACIÓ:
nom de l’acció (obj1, obj2, ... , objn)           suma (x,y,z)

                                          ACCIONS PREDEFINIDES
accioescriureEnter (ent e: enter)             Acció que visualitza per pantalla el valor de l’enter e
accioescriureReal (ent r: real)               Acció que visualitza per pantalla el valor del real r
accioescriureCaracter(ent c: caracter)        Acció que visualitza per pantalla el valor del caràcter c
                                                  EXEMPLE
                           Intercanviar les variables enteres x i y, z i w i v i u.

                                                     Exemple d’algorisme aplicant una acció:
                                                     accio intercanvia (entsor x: enter, entsor y: enter)
Exemple d’algorisme sense acció:
                                                     var
                                                     aux: enter;
{Pre: (x=X i y=Y) i (z=Z i w=W) i (v=V i u=U) }
                                                     fvar
aux := x;                                            aux := x;
x := y;                                                x := y;
y := aux;                                              y := aux;
aux:= z;                                             facció
z := w;                                              Podríem invocar l’acció en l’algorisme:
w := aux;
aux := v;                                            algorisme intercanviarValors
v := u;                                              {Pre: (x=X i y=Y) i (z=Z i w=W) i (v=V i u=U) }
u := aux;                                            intercanvia(x,y);
                                                     intercanvia(z,w);
{ Post: (x=Y i y=X) i (z=W i w=Z) i (v=U i u=V) }    intercanvia(u,v);
                                                     { Post: (x=Y i y=X) i (z=W i w=Z) i (v=U i u=V) }
                                                     falgorisme
FUNCIONS

funció nom(param1, param2, ... , paramn): tipus   funcioesPrimer (n: enter): booleà
  ...                                             ...
retornaexpressio;                                 retorna primer;
ffuncio                                           ffuncio

                                   FUNCIONS PREDEFINIDES
funciorealAEnter(x: real): enter
funcioenterAREal(x: enter): real
                                           Funcions de conversió de tipus
funciocaracterACodi(x: caràcter): enter
funciocodiACaracter(x: enter): caracter
                                           Funció que retorna un enter introduït pel teclat del
funciollegirEnter():enter
                                           computador
                                           Funció que retorna un caracter que ha estat introduït
funciollegirCaracter():caracter
                                           pel teclat del computador
                                           Funció que retorna un real que ha estat introduït pel
funciollegirReal():real
                                           teclat del computador
ESQUEMA DE RECORREGUT D’UNA SEQÜÈNCIA

algorismeesquemaRecorregut
var
   element: tipus;
fvar
   element := llegir();
inici tractament
mentrenofi sequenciafer(mentre no (element = marca) fer)
tractar element
avançar sequencia
       element := llegir();
fmentre
tractament final
falgorisme

                        ESQUEMA DE CERCA D’UNA SEQÜÈNCIA
algorismeesquemaCerca
var
 trobat: boolea;
 element : tipus;
fvar
element := llegir();
trobat := fals;
mentrenofi sequenciai no trobat fer(mentre no (element = marca) i no trobat fer
actualitzar trobat
si no trobat llavors
tractar element
avançar sequencia
element := llegir();
fsi
fmentre
tractament final
falgorisme
TAULES

var                                                   var
nom: taula[mida] detipus;                             recaptacioCinema: taula[7] deenter;
fvar                                                  fvar
                                     OPERACIONS ELEMENTALS
Si tenim la taula
var                                       podrem fer:
t:taula[10] de enter;                     t[3]   Accedim a l’element de tercera posició
fvar
Si tenim la taula                         podrem fer:
var                                       aparicions[1] fa referència al primer element de la taula,
aparicions: taula[26] de enter;           aparicions[2] al segon, aparicions[3] al tercer i així
fvar                                      successivament.
                                      ASSIGNACIÓ D’UNA TAULA
                                                t[5] := 11;
                                        LECTURA I ESCRIPTURA
                                  Escriu en el dispositiu de sortida el valor contingut en el posició 2
escriureEnter(t[2])
                                  de la taula “t”.
escriureEnter(t)                  No té sentit. Provocaria Error
                                  Llegeix una dada del dispositiu d’entrada i l’assigna a la posició 4
t[14] := llegirEnter()
                                  de la taula “t”.
t := llegirEnter()                No té sentit. Provocaria Error
                                      TAULES BIDIMENSIONALS
La declaració de l’exemple anterior seria:
var
recaptacioCinema: taula[7,3] de enter;
fvar
Per assignar una recaptació de 84, el divendres, a
la sala 2:
recaptacioCinema[5,2] := 84;
declaració:
var
recaptacioCinema: taula[7] de taula [3] de enter;
fvar

Assignació:
recaptacioCinema[5][2] := 84;
TUPLES
                     tipus
                     proveidor: tupla
                     nom: taula[15]de caracter;
                                 telefon, fax: enter;
                          ftupla
                     ftipus
                     var
                       proveidor1, proveidor2: proveïdor;
                     fvar
                                       OPERACIONS ELEMENTALS
               ACCÉS CORRECTE                                         ACCÉS INCORRECTE

                                                    nom[1] {No es pot fer referència al camp sense
proveidor1.nom[1] {1er caràcter del camp nom                  indicar el nom de la tupla}
                   de la tuplaproveidor1}           proveïdor.telefon{No es pot fer servir el tipus
proveidor2.telefon                                                    proveïdor com si for una variable}
proveidor1.fax                                      fax.proveidor1 {primer ha d’anar el nom de la
                                                    tupla i després el nom del camp}

                                               ASSIGNACIÓ
                                    proveidor1.telefon := 935847259;
                                    proveidor2.telefon := 934528632;

                                         LECTURA I ESCRIPTURA
a.x :=llegirReal()     Llegeix una dada del dispositiu d’entrada i l’assigna al camp x de la tupla a.
a := llegirReal()      No té sentit, ja que implica operar amb la tupla sencera. Dóna error.
escriureReal(a.x)      Escriu en el dispositiu de sortida el valor contingut en el camp x de la tupla a.
escriureReal(a)        No té sentit, ja que implica operar amb la tupla sencera. Dóna error.

tipus
                                                    tipus
llistaMes = {gener, febrer, març, abril,
                                                      nota = {N, D, C, B, A};
maig, juny, juliol, agost,
                                                      alumne = tupla
setembre, octubre,
                                                                   codiMatricula: enter;
novembre, desembre};
                                                                   nom: taula [25] decaracter;
data = tupla
                                                                   adreçaE: taula[40]decaracter;
dia: enter;
                                                                   notesPAC: taula[5] de nota;
        mes: llistaMes;
                                                                   qualificació: nota;
        any: enter;
                                                           ftupla
        ftupla
                                                    ftipus
ftipus
PROBLEMES RESOLTS

INTERCANVI DE VALORS
{ Pre: x= X i y = Y}
aux := x;
x := y;
y := aux;
{ Post: x=Y i y = X }

CALCULAR EL MÀXIM DE DOS NOMBRES ENTERS
{ Pre: x= X i y = Y}
si x > y llavors
z :=x;
sinó
z := y;
fsi
{ Post: z = màxim(X;Y) }

CALCULAR EL FACTORIAL D’UN NÚMERO
El factorial d’un nombre és el producte de tots els números des de l’1 fins al nombre. Exemple: El
factorial de 5 és 5x4x2x1 = 120.
algorisme factorial
var
         i, n, fact := enter;
fvar
n := llegirEnter ();
{Per: n = N i N > 0}
fact := 1                  //es parteix d’uns valors inicials
i := 1             // Se situa en el primer element de la seqüència
mentre i ≤ n fer           //La condició serà certa per a tots els elements entre i i n
         fact := fact * i;      //fact( que conté el producte dels nombres tractats fins al moment) es
multiplica pel valor que té i en aquesta seqüència.
         i := i + 1;       //Fem avançar la seqüència.
fmentre
{Post: n=N, N>0, fact és el factorial de i-1 i i=n + 1, per tant, fac és el factorial de N}
escriureEnter(fact);
falgorisme
DIVISOR D’UN NÚMERO (Esquema de recorregut)
Algorisme que donat un nombre enter positiu escrigui els divisors pel dispositiu de sortida. Sabem
que un número és divisor d’un altre si aquesta divisió és exacta.
algorisme divisors
var
         n := enter;
         i := enter;
fvar
n := llegirEnter ();
{ Pre: n=N i N ≥0 }
i := 2
mentre i < n fer
         // Els divisors de n més petits que i s’han escrit pel dispositiu de sortida
         si n mod i = 0 llavors             //esbrinem si i és divisor de n
                   escriureEnter (i);       //Si ho és, l’algorisme l’escriu
         fsi
         i := i + 1;              // per a fer avançar la seqüència, incrementarem i
fmentre
{ Post: la seqüència de tots els divisors de N s’ha escrit pel dispositiu de sortida }
falgorisme

SUMA DE LES XIFRES D’UN NÚMERO (Esquema de recorregut)
Donat un número enter, escriu pel dispositiu de sortida un altre número enter que correspongui a
la suma de les xifres del primer. Exemple: si el nombre és 7463, l’algorisme escriurà 20 (7+4+6+3).
algorismesumaDigits
var
         n, suma, d := enter;//n és el número que llegim, d és la variable que guarda el dígit a
                                 cada iteració.
fvar
n := llegirEnter ();
{ Pre: n=N i N≥0 }
d := n mod 10;          //Es divideix per 10 per a calcular el mod. En la variable d es guarda
cada iteració
suma := 0;                      //La suma s’inicialitza a 0
mentreno (n=0) fer //no(n=0) podria ser n>0 o n≠0
         suma := suma + d;      //Aquí va sumant a cada iteració
         n := n div 10;         //Es divideix n per 10 per a eliminar el darrer dígit
         d := n mod 10;         //Es busca el darrer dígit següent
fmentre
escriureEnter (suma);
{ Post: la suma dels dígits de N s’ha escrit pel dispositiu de sortida }
falgorisme
NOMBRES PRIMERS (Esquema de cerca)
Funció que determina si un nombre enter positiu és primer o no i retorna cert en cas afirmatiu i
fals en cas contrari.Els nombres primers només poden ser dividits per la unitat i per ells mateixos.
funcioesPrimer (n: enter): boolea;
{ Pre: n> 0 }
var
        trobat, primer: boolea;
        i: enter;
fvar
i := 2;                         //Inicialitzarem i a 2
trobat := fals;
mentre i < n i no trobat fer
        si n mod i = 0 llavors          //Cerquem un divisor de n
                trobat := cert;
        fsi
        sino trobat llavors             //Si trobat és fals s’incrementa l’índex
                i := i + 1;
        fsi
fmentre
primer := no trobat;            //El nombre és primer si no s’ha trobat cap divisor
retorna primer;
{ Post: primer és cert si n és primer i als en cas contrari }
ffuncio

COMPTAR QUANTES VEGADES APAREIX LA LLETRA A (Recorregut aplicat a l’entrada)
En una frase acabada amb un punt que s’introdueix pel teclat.
algorismecomptaLletraA
var
car: caracter;            //reflecteix l’estat de la seqüència i conté el darrer element llegit que es
                          correspon amb el capçal de la seqüència.
n: enter;                 //Conté el nombre de lletres ‘a’ que hi ha abans del capçal
fvar
car := llegirCaracter();
n := 0;
mentreno car =’.’ fer
si car = ‘a’ llavors
n := n + 1;      // Si troba una lletra ‘a’ incrementarem ‘n’
fsi
car := llegirCaracter();
fmentre
    escriureEnter();
falgorisme
TROBAR UNA LLETRA ‘A’ (Esquema de cerca aplicat a l’entrada)
És semblant a l’exemple anterior, però en aquest es resol amb una cerca perquè la seqüència no
s’ha de continuar processant a partir del moment que es troba una lletra “a”.
algorismesurtLletraA
var
trobat: boolea;
car: caracter;
fvar
car := llegirCaracter();
trobat := fals;
mentreno (car = '.' ) i no trobat fer
                 //Cap dels elements llegits anteriors a l’últim no és una lletra “a”. L’últim és a car
    trobat := car = 'a';
si no trobat llavors
    car := llegirCaracter();
fsi
fmentre
                 // Si trobat és cert, car és una lletra “a”; si és fals, car és el punt final
    si trobat llavors
    escriureCaracter('S');
    sinó
    escriureCaracter('N');
fsi
falgorisme

MITJANA ARITMÈTICA (Esquema de recorregut aplicat a l’entrada)
Sèrie de nombres reals que es llegiran de l’entrada. Hi haurà almenys un nombre i tots els
nombres són diferents de 0.0. Darrere de l’últim element de la sèrie hi haurà un 0.0.
algorisme mitjana
var
x, suma: real; //suma dels nombres
n: enter;        //comptador
fvar
x := llegirReal();
n := 0;
suma := 0.0;
mentre no (x = 0.0) fer
suma := suma + x;
n := n + 1;
x := llegirReal();
fmentre
escriureReal(sum/enterAREal(n));
falgorisme
INDICAR SI UNA SÈRIE DE NOTES ESTÀ FORMADA EXCLUSIVAMENT PER APROVATS
(Esquema de cerca aplicat a l’entrada)
Les notes “A”, “B”, “C” (C+) són aprovats i “c” (C-) i “D” són suspensos. Darrere l’últim element de
la sèrie hi haurà una “Z”.

algorismetothomAprova
var
         trobat: boolea;
         car: caracter;
fvar
car := llegirCaracter();
trobat := fals;
mentre no (car = “Z”) ino trobat fer
         trobat := (car =’c’) o (car =’D’);
         si no trobat llavors
         car :=llegirCaracter();
         fsi
fmentre
   // Si trobat és cert, car és un suspens, si és fals car és “Z”
   si trobat llavors
         escriureCaracter(‘N’);
   sinó
         escriureCaracter(‘S’);
   fsi
falgorisme
NOTA MITJANA DE SUSPENSOS O 0.0 SI NO HI HA SUSPENSOS
(Combinació d’esquemes de recorregut i de cerca)
Algorisme que llegeix una sèrie de notes entre 0.0 i 10.0, ordenada descendentment i marcada
amb un -1.0. L’algorisme en dóna la nota mitjana dels suspensos o 0.0 si no hi ha suspensos. Un
suspens és qualsevol nota inferior a 5.0.
algorismemitjanaSuspensos
var
x, suma, resultat: real;              // x és la nota que anem llegint, suma va sumant els suspesos i
                                      resultat és el resultat final
n: enter;                     // n és el comptador de suspesos
trobat: boolea;
fvar
x := llegirReal();
trobat := fals;
mentre no (x= -1.0) ino trobat fer
trobat := x < 5.0                     //perquè trobat sigui cert, ha de ser menor que 5.0
si no trobat llavors
x := llegirReal();
fsi
fmentre
//cap de les notes llegides anterior a l’última no és un suspens. L’ultima és a x. Si trobat és cert, x
és un suspens; si és fals, x és -1.0.
n := 0;
suma := 0.0;
mentre no (x= -1.0) fer
//suma = suma de tots els valors llegits a partir del primer suspens llevat de l’últim, que és la
marca i n = nombre d’elements sumats.
suma := suma + x ;
n := n + 1
x := llegirReal();
fmentre
    si n > 0 llavors
         resultat := suma/enterAReal(n);
    sino
         resultat := 0.0;
    fsi
    escriureReal(resultat);
falgorisme
LONGITUD DE LA PRIMERA PARAULA D’UNA ENTRADA
(Combinació d’esquemes de recorregut i de cerca)
Si no hi ha cap paraula, la resposta és 0.
{ Pre: A l’entrada es llegeixen una seqüència de caràcters que no conté cap punt seguida d’un punt}
longPrimPar
{ Post: Escriu la longitud long de la primera paraula (seqüència de lletres majúscules seguides o 0 si
no hi ha cap lletra}

algorismelongPrimPar
var
car: caracter;
n: enter;                // n és el nombre de lletres llegides
trobat: boolea;
fvar
LLEGEIG CARÀCTERS FINS A TROBAR LA PRIMERA LLETRA DE LA PRIMERA PARAULA
car := llegirCaracter();
trobat := fals;
mentre no (car = ’.’) ino trobat fer
trobat := (car ≤ ‘Z’) i (car ≥ ‘A’);             //perquè trobat sigui cert, ha de ser un caràcter
                                                 contingut entre A i Z
si no trobat llavors
car := llegirCaracter();
fsi
fmentre
// cap dels caràcters llegits anteriors a l’últim no és una lletra. L’últim és a car. Si trobat és cert, car
és una lletra; si és fals, car és el punt final.
LLEGEIG CARÀCTERS FINS A TROBAR EL PRIMER SEPARADOR POSTERIOR A LA PRIMERA
PARAULA I VA COMPTANT LES LLETRES LLEGIDES. –si no hi ha paraula, la primera cerca fracassa i
la segona cerca acaba immediatament sense entrar en el bucle i deixa el comptador a 0.
trobat := fals;
n := 0;
mentre no (car = ’.’) ino trobat fer
trobat := (car ≤ ‘Z’) o (car ≥ ‘A’);
si no trobat llavors
       n := n + 1;
       car := llegirCaracter();
fsi
fmentre
// Si trobat és cert, car és un separador, si és fals, car és el punt final, n és el nombre de lletres
llegides.
    escriureEnter(n);
falgorisme

More Related Content

More from Paquita Ribas

Tipografia · Resum materials · Paquita Ribas
Tipografia · Resum materials · Paquita RibasTipografia · Resum materials · Paquita Ribas
Tipografia · Resum materials · Paquita RibasPaquita Ribas
 
Tipografia · Resum llibre
Tipografia · Resum llibreTipografia · Resum llibre
Tipografia · Resum llibrePaquita Ribas
 
Taller de Color · Pac 1 · Paquita Ribas
Taller de Color · Pac 1 · Paquita RibasTaller de Color · Pac 1 · Paquita Ribas
Taller de Color · Pac 1 · Paquita RibasPaquita Ribas
 
Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Paquita Ribas
 
Fotografia Digital - Resum mòdul 3
Fotografia Digital - Resum mòdul 3Fotografia Digital - Resum mòdul 3
Fotografia Digital - Resum mòdul 3Paquita Ribas
 
Fotografia Digital - Resum mòdul 2
Fotografia Digital - Resum mòdul 2Fotografia Digital - Resum mòdul 2
Fotografia Digital - Resum mòdul 2Paquita Ribas
 
Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Paquita Ribas
 
Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Paquita Ribas
 
Tractament i Publicació d'Àudio - Super-resum
Tractament i Publicació d'Àudio - Super-resumTractament i Publicació d'Àudio - Super-resum
Tractament i Publicació d'Àudio - Super-resumPaquita Ribas
 
Tractament i Publicació d'Àudio - Resum mòdul 6
Tractament i Publicació d'Àudio - Resum mòdul 6Tractament i Publicació d'Àudio - Resum mòdul 6
Tractament i Publicació d'Àudio - Resum mòdul 6Paquita Ribas
 
Tractament i Publicació d'Àudio - Resum mòdul 5
Tractament i Publicació d'Àudio - Resum mòdul 5Tractament i Publicació d'Àudio - Resum mòdul 5
Tractament i Publicació d'Àudio - Resum mòdul 5Paquita Ribas
 
Tractament i Publicció d'Àudio - Resum mòdul 4
Tractament i Publicció d'Àudio - Resum mòdul 4Tractament i Publicció d'Àudio - Resum mòdul 4
Tractament i Publicció d'Àudio - Resum mòdul 4Paquita Ribas
 
Tractament i Publicació d'Àudio - Resum mòdul 3
Tractament i Publicació d'Àudio - Resum mòdul 3Tractament i Publicació d'Àudio - Resum mòdul 3
Tractament i Publicació d'Àudio - Resum mòdul 3Paquita Ribas
 
Tractament i Publicació d'Àudio - Resum mòdul 2
Tractament i Publicació d'Àudio - Resum mòdul 2Tractament i Publicació d'Àudio - Resum mòdul 2
Tractament i Publicació d'Àudio - Resum mòdul 2Paquita Ribas
 
Tractament i publicació d'Àudio - Resum modul 1
Tractament i publicació d'Àudio -  Resum modul 1Tractament i publicació d'Àudio -  Resum modul 1
Tractament i publicació d'Àudio - Resum modul 1Paquita Ribas
 
Gestió de projectes Resumen mod 8
Gestió de projectes Resumen mod 8Gestió de projectes Resumen mod 8
Gestió de projectes Resumen mod 8Paquita Ribas
 
Gestió de projectes - Resum mod 7
Gestió de projectes - Resum mod 7Gestió de projectes - Resum mod 7
Gestió de projectes - Resum mod 7Paquita Ribas
 
Gestió de projectes - Resum mod 6
Gestió de projectes - Resum mod 6Gestió de projectes - Resum mod 6
Gestió de projectes - Resum mod 6Paquita Ribas
 
Gestió de projectes - Resum mod 5
Gestió de projectes - Resum mod 5Gestió de projectes - Resum mod 5
Gestió de projectes - Resum mod 5Paquita Ribas
 

More from Paquita Ribas (20)

Tipografia · Resum materials · Paquita Ribas
Tipografia · Resum materials · Paquita RibasTipografia · Resum materials · Paquita Ribas
Tipografia · Resum materials · Paquita Ribas
 
Tipografia · Resum llibre
Tipografia · Resum llibreTipografia · Resum llibre
Tipografia · Resum llibre
 
Taller de Color · Pac 1 · Paquita Ribas
Taller de Color · Pac 1 · Paquita RibasTaller de Color · Pac 1 · Paquita Ribas
Taller de Color · Pac 1 · Paquita Ribas
 
Licencias
LicenciasLicencias
Licencias
 
Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1
 
Fotografia Digital - Resum mòdul 3
Fotografia Digital - Resum mòdul 3Fotografia Digital - Resum mòdul 3
Fotografia Digital - Resum mòdul 3
 
Fotografia Digital - Resum mòdul 2
Fotografia Digital - Resum mòdul 2Fotografia Digital - Resum mòdul 2
Fotografia Digital - Resum mòdul 2
 
Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1
 
Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1
 
Tractament i Publicació d'Àudio - Super-resum
Tractament i Publicació d'Àudio - Super-resumTractament i Publicació d'Àudio - Super-resum
Tractament i Publicació d'Àudio - Super-resum
 
Tractament i Publicació d'Àudio - Resum mòdul 6
Tractament i Publicació d'Àudio - Resum mòdul 6Tractament i Publicació d'Àudio - Resum mòdul 6
Tractament i Publicació d'Àudio - Resum mòdul 6
 
Tractament i Publicació d'Àudio - Resum mòdul 5
Tractament i Publicació d'Àudio - Resum mòdul 5Tractament i Publicació d'Àudio - Resum mòdul 5
Tractament i Publicació d'Àudio - Resum mòdul 5
 
Tractament i Publicció d'Àudio - Resum mòdul 4
Tractament i Publicció d'Àudio - Resum mòdul 4Tractament i Publicció d'Àudio - Resum mòdul 4
Tractament i Publicció d'Àudio - Resum mòdul 4
 
Tractament i Publicació d'Àudio - Resum mòdul 3
Tractament i Publicació d'Àudio - Resum mòdul 3Tractament i Publicació d'Àudio - Resum mòdul 3
Tractament i Publicació d'Àudio - Resum mòdul 3
 
Tractament i Publicació d'Àudio - Resum mòdul 2
Tractament i Publicació d'Àudio - Resum mòdul 2Tractament i Publicació d'Àudio - Resum mòdul 2
Tractament i Publicació d'Àudio - Resum mòdul 2
 
Tractament i publicació d'Àudio - Resum modul 1
Tractament i publicació d'Àudio -  Resum modul 1Tractament i publicació d'Àudio -  Resum modul 1
Tractament i publicació d'Àudio - Resum modul 1
 
Gestió de projectes Resumen mod 8
Gestió de projectes Resumen mod 8Gestió de projectes Resumen mod 8
Gestió de projectes Resumen mod 8
 
Gestió de projectes - Resum mod 7
Gestió de projectes - Resum mod 7Gestió de projectes - Resum mod 7
Gestió de projectes - Resum mod 7
 
Gestió de projectes - Resum mod 6
Gestió de projectes - Resum mod 6Gestió de projectes - Resum mod 6
Gestió de projectes - Resum mod 6
 
Gestió de projectes - Resum mod 5
Gestió de projectes - Resum mod 5Gestió de projectes - Resum mod 5
Gestió de projectes - Resum mod 5
 

Programació. Resum d'algorismes i problemes resolts - Resum - Multimedia (UOC) - Paquita Ribas

  • 1. CONSTANTS const const nomConstant1 : tipus = valorConstant1; N: enter = 100; nomConstant2 : tipus = valorConstant2; fconst ... fconst TIPUS tipus color = {verd, blau, vermell groc, blanc}; dia = {dilluns, dimarts, dimecres, dijous}; mes = {gener, febrer, març, abril, maig}; ftipus VARIABLES var var nomVariable1 : tipusVariable1; t: taula(N) de enter; nomVariable2 : tipusVariable2; i, n: enter; ... fvar fvar COMPOSICIÓ ALTERNATIVA siexpressiollavors sin > 0llavors accioa accio1 sino sino acciob accio2 fsi fsi COMPOSICIÓ ITERATIVA index := valor inicial; per index := valor inicial fins valor final [pas increment] mentreindex ≤ valor final fer acció; accio; fper index := index + increment; fmentre
  • 2. ACCIONS DECLARACIÓ: DECLARACIÓ: acciónom(param1, param2, ... , paramn) acciósuma(ent x: enter, sor y: enter, entsor z: enter) ... cos de l’acció ... cos de l’acció facció facció ASSIGNACIÓ: ASSIGNACIÓ: nom de l’acció (obj1, obj2, ... , objn) suma (x,y,z) ACCIONS PREDEFINIDES accioescriureEnter (ent e: enter) Acció que visualitza per pantalla el valor de l’enter e accioescriureReal (ent r: real) Acció que visualitza per pantalla el valor del real r accioescriureCaracter(ent c: caracter) Acció que visualitza per pantalla el valor del caràcter c EXEMPLE Intercanviar les variables enteres x i y, z i w i v i u. Exemple d’algorisme aplicant una acció: accio intercanvia (entsor x: enter, entsor y: enter) Exemple d’algorisme sense acció: var aux: enter; {Pre: (x=X i y=Y) i (z=Z i w=W) i (v=V i u=U) } fvar aux := x; aux := x; x := y; x := y; y := aux; y := aux; aux:= z; facció z := w; Podríem invocar l’acció en l’algorisme: w := aux; aux := v; algorisme intercanviarValors v := u; {Pre: (x=X i y=Y) i (z=Z i w=W) i (v=V i u=U) } u := aux; intercanvia(x,y); intercanvia(z,w); { Post: (x=Y i y=X) i (z=W i w=Z) i (v=U i u=V) } intercanvia(u,v); { Post: (x=Y i y=X) i (z=W i w=Z) i (v=U i u=V) } falgorisme
  • 3. FUNCIONS funció nom(param1, param2, ... , paramn): tipus funcioesPrimer (n: enter): booleà ... ... retornaexpressio; retorna primer; ffuncio ffuncio FUNCIONS PREDEFINIDES funciorealAEnter(x: real): enter funcioenterAREal(x: enter): real Funcions de conversió de tipus funciocaracterACodi(x: caràcter): enter funciocodiACaracter(x: enter): caracter Funció que retorna un enter introduït pel teclat del funciollegirEnter():enter computador Funció que retorna un caracter que ha estat introduït funciollegirCaracter():caracter pel teclat del computador Funció que retorna un real que ha estat introduït pel funciollegirReal():real teclat del computador
  • 4. ESQUEMA DE RECORREGUT D’UNA SEQÜÈNCIA algorismeesquemaRecorregut var element: tipus; fvar element := llegir(); inici tractament mentrenofi sequenciafer(mentre no (element = marca) fer) tractar element avançar sequencia element := llegir(); fmentre tractament final falgorisme ESQUEMA DE CERCA D’UNA SEQÜÈNCIA algorismeesquemaCerca var trobat: boolea; element : tipus; fvar element := llegir(); trobat := fals; mentrenofi sequenciai no trobat fer(mentre no (element = marca) i no trobat fer actualitzar trobat si no trobat llavors tractar element avançar sequencia element := llegir(); fsi fmentre tractament final falgorisme
  • 5. TAULES var var nom: taula[mida] detipus; recaptacioCinema: taula[7] deenter; fvar fvar OPERACIONS ELEMENTALS Si tenim la taula var podrem fer: t:taula[10] de enter; t[3] Accedim a l’element de tercera posició fvar Si tenim la taula podrem fer: var aparicions[1] fa referència al primer element de la taula, aparicions: taula[26] de enter; aparicions[2] al segon, aparicions[3] al tercer i així fvar successivament. ASSIGNACIÓ D’UNA TAULA t[5] := 11; LECTURA I ESCRIPTURA Escriu en el dispositiu de sortida el valor contingut en el posició 2 escriureEnter(t[2]) de la taula “t”. escriureEnter(t) No té sentit. Provocaria Error Llegeix una dada del dispositiu d’entrada i l’assigna a la posició 4 t[14] := llegirEnter() de la taula “t”. t := llegirEnter() No té sentit. Provocaria Error TAULES BIDIMENSIONALS La declaració de l’exemple anterior seria: var recaptacioCinema: taula[7,3] de enter; fvar Per assignar una recaptació de 84, el divendres, a la sala 2: recaptacioCinema[5,2] := 84; declaració: var recaptacioCinema: taula[7] de taula [3] de enter; fvar Assignació: recaptacioCinema[5][2] := 84;
  • 6. TUPLES tipus proveidor: tupla nom: taula[15]de caracter; telefon, fax: enter; ftupla ftipus var proveidor1, proveidor2: proveïdor; fvar OPERACIONS ELEMENTALS ACCÉS CORRECTE ACCÉS INCORRECTE nom[1] {No es pot fer referència al camp sense proveidor1.nom[1] {1er caràcter del camp nom indicar el nom de la tupla} de la tuplaproveidor1} proveïdor.telefon{No es pot fer servir el tipus proveidor2.telefon proveïdor com si for una variable} proveidor1.fax fax.proveidor1 {primer ha d’anar el nom de la tupla i després el nom del camp} ASSIGNACIÓ proveidor1.telefon := 935847259; proveidor2.telefon := 934528632; LECTURA I ESCRIPTURA a.x :=llegirReal() Llegeix una dada del dispositiu d’entrada i l’assigna al camp x de la tupla a. a := llegirReal() No té sentit, ja que implica operar amb la tupla sencera. Dóna error. escriureReal(a.x) Escriu en el dispositiu de sortida el valor contingut en el camp x de la tupla a. escriureReal(a) No té sentit, ja que implica operar amb la tupla sencera. Dóna error. tipus tipus llistaMes = {gener, febrer, març, abril, nota = {N, D, C, B, A}; maig, juny, juliol, agost, alumne = tupla setembre, octubre, codiMatricula: enter; novembre, desembre}; nom: taula [25] decaracter; data = tupla adreçaE: taula[40]decaracter; dia: enter; notesPAC: taula[5] de nota; mes: llistaMes; qualificació: nota; any: enter; ftupla ftupla ftipus ftipus
  • 7. PROBLEMES RESOLTS INTERCANVI DE VALORS { Pre: x= X i y = Y} aux := x; x := y; y := aux; { Post: x=Y i y = X } CALCULAR EL MÀXIM DE DOS NOMBRES ENTERS { Pre: x= X i y = Y} si x > y llavors z :=x; sinó z := y; fsi { Post: z = màxim(X;Y) } CALCULAR EL FACTORIAL D’UN NÚMERO El factorial d’un nombre és el producte de tots els números des de l’1 fins al nombre. Exemple: El factorial de 5 és 5x4x2x1 = 120. algorisme factorial var i, n, fact := enter; fvar n := llegirEnter (); {Per: n = N i N > 0} fact := 1 //es parteix d’uns valors inicials i := 1 // Se situa en el primer element de la seqüència mentre i ≤ n fer //La condició serà certa per a tots els elements entre i i n fact := fact * i; //fact( que conté el producte dels nombres tractats fins al moment) es multiplica pel valor que té i en aquesta seqüència. i := i + 1; //Fem avançar la seqüència. fmentre {Post: n=N, N>0, fact és el factorial de i-1 i i=n + 1, per tant, fac és el factorial de N} escriureEnter(fact); falgorisme
  • 8. DIVISOR D’UN NÚMERO (Esquema de recorregut) Algorisme que donat un nombre enter positiu escrigui els divisors pel dispositiu de sortida. Sabem que un número és divisor d’un altre si aquesta divisió és exacta. algorisme divisors var n := enter; i := enter; fvar n := llegirEnter (); { Pre: n=N i N ≥0 } i := 2 mentre i < n fer // Els divisors de n més petits que i s’han escrit pel dispositiu de sortida si n mod i = 0 llavors //esbrinem si i és divisor de n escriureEnter (i); //Si ho és, l’algorisme l’escriu fsi i := i + 1; // per a fer avançar la seqüència, incrementarem i fmentre { Post: la seqüència de tots els divisors de N s’ha escrit pel dispositiu de sortida } falgorisme SUMA DE LES XIFRES D’UN NÚMERO (Esquema de recorregut) Donat un número enter, escriu pel dispositiu de sortida un altre número enter que correspongui a la suma de les xifres del primer. Exemple: si el nombre és 7463, l’algorisme escriurà 20 (7+4+6+3). algorismesumaDigits var n, suma, d := enter;//n és el número que llegim, d és la variable que guarda el dígit a cada iteració. fvar n := llegirEnter (); { Pre: n=N i N≥0 } d := n mod 10; //Es divideix per 10 per a calcular el mod. En la variable d es guarda cada iteració suma := 0; //La suma s’inicialitza a 0 mentreno (n=0) fer //no(n=0) podria ser n>0 o n≠0 suma := suma + d; //Aquí va sumant a cada iteració n := n div 10; //Es divideix n per 10 per a eliminar el darrer dígit d := n mod 10; //Es busca el darrer dígit següent fmentre escriureEnter (suma); { Post: la suma dels dígits de N s’ha escrit pel dispositiu de sortida } falgorisme
  • 9. NOMBRES PRIMERS (Esquema de cerca) Funció que determina si un nombre enter positiu és primer o no i retorna cert en cas afirmatiu i fals en cas contrari.Els nombres primers només poden ser dividits per la unitat i per ells mateixos. funcioesPrimer (n: enter): boolea; { Pre: n> 0 } var trobat, primer: boolea; i: enter; fvar i := 2; //Inicialitzarem i a 2 trobat := fals; mentre i < n i no trobat fer si n mod i = 0 llavors //Cerquem un divisor de n trobat := cert; fsi sino trobat llavors //Si trobat és fals s’incrementa l’índex i := i + 1; fsi fmentre primer := no trobat; //El nombre és primer si no s’ha trobat cap divisor retorna primer; { Post: primer és cert si n és primer i als en cas contrari } ffuncio COMPTAR QUANTES VEGADES APAREIX LA LLETRA A (Recorregut aplicat a l’entrada) En una frase acabada amb un punt que s’introdueix pel teclat. algorismecomptaLletraA var car: caracter; //reflecteix l’estat de la seqüència i conté el darrer element llegit que es correspon amb el capçal de la seqüència. n: enter; //Conté el nombre de lletres ‘a’ que hi ha abans del capçal fvar car := llegirCaracter(); n := 0; mentreno car =’.’ fer si car = ‘a’ llavors n := n + 1; // Si troba una lletra ‘a’ incrementarem ‘n’ fsi car := llegirCaracter(); fmentre escriureEnter(); falgorisme
  • 10. TROBAR UNA LLETRA ‘A’ (Esquema de cerca aplicat a l’entrada) És semblant a l’exemple anterior, però en aquest es resol amb una cerca perquè la seqüència no s’ha de continuar processant a partir del moment que es troba una lletra “a”. algorismesurtLletraA var trobat: boolea; car: caracter; fvar car := llegirCaracter(); trobat := fals; mentreno (car = '.' ) i no trobat fer //Cap dels elements llegits anteriors a l’últim no és una lletra “a”. L’últim és a car trobat := car = 'a'; si no trobat llavors car := llegirCaracter(); fsi fmentre // Si trobat és cert, car és una lletra “a”; si és fals, car és el punt final si trobat llavors escriureCaracter('S'); sinó escriureCaracter('N'); fsi falgorisme MITJANA ARITMÈTICA (Esquema de recorregut aplicat a l’entrada) Sèrie de nombres reals que es llegiran de l’entrada. Hi haurà almenys un nombre i tots els nombres són diferents de 0.0. Darrere de l’últim element de la sèrie hi haurà un 0.0. algorisme mitjana var x, suma: real; //suma dels nombres n: enter; //comptador fvar x := llegirReal(); n := 0; suma := 0.0; mentre no (x = 0.0) fer suma := suma + x; n := n + 1; x := llegirReal(); fmentre escriureReal(sum/enterAREal(n)); falgorisme
  • 11. INDICAR SI UNA SÈRIE DE NOTES ESTÀ FORMADA EXCLUSIVAMENT PER APROVATS (Esquema de cerca aplicat a l’entrada) Les notes “A”, “B”, “C” (C+) són aprovats i “c” (C-) i “D” són suspensos. Darrere l’últim element de la sèrie hi haurà una “Z”. algorismetothomAprova var trobat: boolea; car: caracter; fvar car := llegirCaracter(); trobat := fals; mentre no (car = “Z”) ino trobat fer trobat := (car =’c’) o (car =’D’); si no trobat llavors car :=llegirCaracter(); fsi fmentre // Si trobat és cert, car és un suspens, si és fals car és “Z” si trobat llavors escriureCaracter(‘N’); sinó escriureCaracter(‘S’); fsi falgorisme
  • 12. NOTA MITJANA DE SUSPENSOS O 0.0 SI NO HI HA SUSPENSOS (Combinació d’esquemes de recorregut i de cerca) Algorisme que llegeix una sèrie de notes entre 0.0 i 10.0, ordenada descendentment i marcada amb un -1.0. L’algorisme en dóna la nota mitjana dels suspensos o 0.0 si no hi ha suspensos. Un suspens és qualsevol nota inferior a 5.0. algorismemitjanaSuspensos var x, suma, resultat: real; // x és la nota que anem llegint, suma va sumant els suspesos i resultat és el resultat final n: enter; // n és el comptador de suspesos trobat: boolea; fvar x := llegirReal(); trobat := fals; mentre no (x= -1.0) ino trobat fer trobat := x < 5.0 //perquè trobat sigui cert, ha de ser menor que 5.0 si no trobat llavors x := llegirReal(); fsi fmentre //cap de les notes llegides anterior a l’última no és un suspens. L’ultima és a x. Si trobat és cert, x és un suspens; si és fals, x és -1.0. n := 0; suma := 0.0; mentre no (x= -1.0) fer //suma = suma de tots els valors llegits a partir del primer suspens llevat de l’últim, que és la marca i n = nombre d’elements sumats. suma := suma + x ; n := n + 1 x := llegirReal(); fmentre si n > 0 llavors resultat := suma/enterAReal(n); sino resultat := 0.0; fsi escriureReal(resultat); falgorisme
  • 13. LONGITUD DE LA PRIMERA PARAULA D’UNA ENTRADA (Combinació d’esquemes de recorregut i de cerca) Si no hi ha cap paraula, la resposta és 0. { Pre: A l’entrada es llegeixen una seqüència de caràcters que no conté cap punt seguida d’un punt} longPrimPar { Post: Escriu la longitud long de la primera paraula (seqüència de lletres majúscules seguides o 0 si no hi ha cap lletra} algorismelongPrimPar var car: caracter; n: enter; // n és el nombre de lletres llegides trobat: boolea; fvar LLEGEIG CARÀCTERS FINS A TROBAR LA PRIMERA LLETRA DE LA PRIMERA PARAULA car := llegirCaracter(); trobat := fals; mentre no (car = ’.’) ino trobat fer trobat := (car ≤ ‘Z’) i (car ≥ ‘A’); //perquè trobat sigui cert, ha de ser un caràcter contingut entre A i Z si no trobat llavors car := llegirCaracter(); fsi fmentre // cap dels caràcters llegits anteriors a l’últim no és una lletra. L’últim és a car. Si trobat és cert, car és una lletra; si és fals, car és el punt final. LLEGEIG CARÀCTERS FINS A TROBAR EL PRIMER SEPARADOR POSTERIOR A LA PRIMERA PARAULA I VA COMPTANT LES LLETRES LLEGIDES. –si no hi ha paraula, la primera cerca fracassa i la segona cerca acaba immediatament sense entrar en el bucle i deixa el comptador a 0. trobat := fals; n := 0; mentre no (car = ’.’) ino trobat fer trobat := (car ≤ ‘Z’) o (car ≥ ‘A’); si no trobat llavors n := n + 1; car := llegirCaracter(); fsi fmentre // Si trobat és cert, car és un separador, si és fals, car és el punt final, n és el nombre de lletres llegides. escriureEnter(n); falgorisme