Вы находитесь на странице: 1из 26

Buscar

Inicio
Doc umentos

Documentos
Apuntes

Tests

Amor

M agazine

Creaciones

de Formac in profesional y enseanz as tc nic as

Seguridad

Vagoteca

Administrac in de sistemas informtic os

Blog

Sube tus documentos

Correo

Fundamentos de programac in

Seguir

Iniciaci a la programaci
Algorismes. Objectes. Taules. Parametritzaci de subprogrames. Compossici
Enviado por: Alberto Seco

Me gusta

Idioma: cataln

Pas:

Tweet

Espaa

13 pginas

Descargar

publicidad

INICIACI A LA PROGRAM ACI

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

INICIACI A LA PROGRAM ACI


TEMARI
I - Introducci. Concepte d'algorisme
II - Objectes. Constants, tipus i variables
III - Especificaci
IV - Assignaci
V - Composici seqencial
VI - Composici alternativa
VII - Composici iterativa
VIII - Seqencia, cerca i recorregut
IX - Taules
X - Parametritzaci de subprogrames
XI - Analisis descendent i triples
XII - Verificaci
I - INTRODUCCI. CONCEPTE D'ALGORISM E I PRGRAM A
Autmat: s qualsevol mecanisme capa de realitzar un treball de forma autnoma. Exemple d'autmats sencills: rellotge, rentadora.
Exemple d'autmats flexibles: l'ordinador.
Els primers tenen una cosa en com que, una vegada conectats, poden realitzar la seva funci sense intervenci externa, el seu treball es
sempre el mateix.
L'ordinador s una autmat de clcul gobernat per un programa, de tal manera que diferents programes farien treballar l'ordinador de diferent
manera.
Procs: execuci d'acci o accions que pot realitzar l'autmat. El procs modifica l'estat de l'entorn.
Exemple: autmat--> rentadora.
proces -----> programa de rentat.
Algorisme : es pot definir com la descripci de les accions que duu a terme un procs. Suposem que l'estat de l'entorn / algorisme en cada
moment es pot descriure donant els valors d'una quantitat finita de variables.
Programa: algorisme codificat o traduit a un llenguatge de programaci i que per tant l'eneten un ordinador.

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

II - OBJECTES. CONSTANTS, TIPUS I VARIABLES


OBJECTE: lloc ones pot ammagatzemar informaci. Hi ha dos tipus d'objectes:
Constants: el valor emmagatzemat no pot variar ni variar.
Declaraci: const
nom: tipus= valor
fconst
nom= poden ser lletres en majscules, dgits i subrallats.
tipus= defineix el rang de valors posibles i les operacions que es poden fer amb el valors. Els tipus podem ser: enters, reals, caracter o boolea.
El subrallat i el tipus sn Paraules Reservades i no es poden utilitzar en el programa, noms s'utilitza en el llenguatge algorismic.
Variables: seria una caixa on es pot guardar una dada, per de manera que pogui anar cambiant el seu contingut. El valor de la variable s el
de l'ultima dada introduda. Tota variable ha de tenir un nom per poder referir-nos a ella i s'ha de clasificar en tipos.
Declaraci: var
nom: tipus
fvar
nom= lletres minscules, dgits o signes
tipus= els mateixos que en les constants
NOTA:
-> No podem utilitzar paraules reservades com a nom d'objeces.
-> No podem declarar varis objectes amb el mateix nom.
-> Si volem declarar variables del mateix tipus podem fer una sola declaraci i separar-les utilitzant comes.
TIPUS: els tipus que hi han sn simples, enumeratius i estructurats (taules, tuples). Els tipus simples i enumeratius noms tindran un valor per
constant o variable i, en canvi, els estructurats poden tenir ms elements per noms un identificador.
-Simples: sn els de simbols predefinits per l'ordinador i poden ser:
Naturals: (cardinals) sn els nombres enters positius (0,.....,*). Els operadors que admet sn: div , mod , +, * , imparell (x).
Div : s la divisi entera. M od : dona el reste de la divisi.
Imparell (x): dona si x es imparell o parell, cert o fals. (odd (x))

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

Enters: (-*,...., -1, 0 , 1,.....,*). Els operadors que admet sn: +, *, div , mod , valor absolut (abs(x)), el signe menys( - unari) i l'imparell (x).
Reals: son tots els nombres, decimals inclossos. Els operadors sn: +, *, /, abs(x), - (unari)
Carcters: sn els carcters ASCII, lletres minscules i majscules, tots els dgits i simbols (subrallat...). Els carcters estn ordenats i per tant
tindran un successor i un predecesor. Els carcters van entre comes: `a', `1'. Els operadors sn el succesor (suc(x))i el predecesor (pred (x)).
Boole: te dos elements (cert i fals) i tamb estan ordenats ja que fals es dona per ms petit que cert. Els operadors que es poden fer servir
sn els de comparaci. (>, <, <>, =>, =<, and, or)
Subrangs: aquest s'han de posar sempre entre corxets i entre els corxets li direm el primer i l'ltim element. Noms es poden fer subrangs amb
els tipus escalars, es a dir, que tenen un element predecesor i succesor, per tant es poden fer de naturals, enters, carcter, booleans i
d'enumeratius.
Declaraci: tipus
nom = [1 element .. ltim element*
ftipus
-Enumeratius: aquest tipus pot ser definit per l'usuari. Sn tipus ordenats i per tant es poden utilitzar com subrangs. Si desprs de l'enumeratiu
es fa un subrang aquest buscar el 1 element dels tipus d'enumeratius.
Declaraci: tipus
nom = (1 element, 2 element.....element n)
ftipus
Prioritats: 1- els unaris y la negaci
2- *, divisi, logaritmes
3- suma y resta
4- <, >, =<, >=, <>, =
5- "-> conjunci
6- "-> disjunci
III- ESPECIFICACI
Especificar s saber que fa l'algorisme. Es natural especificar un proces decribint la relaci entre els estats incial i final del mateix.
Formalitzarem aquesta relaci, denominada especificaci, amb l'ajut de predicats.
Un predicat o asserto s una relaci entre objectes a la que sempre es possible assignar un dels valors del conjunt (fals o cert) en funci dels

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

objectes involucrats.
El domini d'una de les variables ser el conjunt dels valors per la qual podem substituir en el predicat.
L'especificaci d'un algorisme constar de quatre elements:
1-Declaraci de variables.
2-Precondici, condicions inicials (entre claus {P}).
3-Nom de l'algorisme o acci.
4-Postcondici, condicions finals (entre claus {Q}).
On la precondici i la postcondici sn predicats sobre les variables. Aquests predicatsreflexen la situaci inicial i final pretessa de les variables
del nostre algorisme.
El punt 1 informa acerca de les variables que intervenen en el procs i el tipus de les mateixes. Els restants estableixen que, partint d'un estat
inicial que satisf la precondici (2), una vegada procesat l'algorisme (3) arribem a un estat final que verifica la postcondici (4).
En els predicats s'utilitzen les variables d'especificaci que permet donar un valor inicial qualsevol a les variables. S'escriuen en majscules.
Aquestes variables no formaran part mai de l'algorisme i no sn variables d'entorn. Ens donen una valor qualsevol inicial dintre dels permessos
pel tipus.
REGLES DE CONSEQNCIA D'UNA ESPECIFCCI
Direm que un algorisme S satisfa una certa especificaci amb precondici P y postcondici Q, su una vegada procesat S sobre unes variables
que cumpleixin P, aquestes pasin a cumplir Q. Les regles de la conseqncia sn:
-Si {P} A {Q} y R=>P llavors {R} A {Q}.
-Si {P} A {Q} y R=>Q llavors {P} A {R}.
IV- ASSIGNACI
La instrucci fundamental per escribir algorismes s l'assignaci que consisteix en donar un valor a una variable. Tot algorisme pot contemplarse com una combinaci de variables mes o menys complexes.
La seva sintaxis s:
x:=E
que es llegeix: x toma el valor que tingui E. E haur de ser una expressi vlida del mateix tipus que x.
La seva especificaci s: declaraci de variables
{E compleix Q}
x:=E

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

{x compleix Q}
L'axioma de la assignaci : Per tota variable x, tota expressi vlida del mateix tipus E y tot aserto o predicat Q, l'especificaci
x:tipus
{QxE}-------> substituci de x per E
x:=E
{Q}
s correcta.
A partir d'aquesta y amb l'ajut de la primera regla de conseqncia podem donar un procs per comprobar quan una assignaci cumpleix una
determinada especficaci. Aquest resultat se denomina regla d'inferncia de l'assignaci . Per tal que sigui correcte l'algorisme:
x:tipus
{P}
x:=E
{Q}
s'ha de cumplir que P ens impliqui la substituci de x per E: P=>QxE. Si volem que x satisfagi Q desprs d'haver-li assignat el valor d'E es
raonable demanar que el propi valor E cumpleixi Q.
V- COM POSICI SEQENCIAL
Es podem executar instruccions de manera consecutiva, aix s'anomena composici seqencial. Usem el simbol ; per a conectar dues
instruccions, indica que la funci s'ha acabat i que comena una altra. {P} A; B {Q}.
Per verificar l'algorisme s'ha de poder verificar a i b independenment, per la postcondici de tan sols A no s {Q} ser un aintermitja {R} que
far de postcondici de A i de precondici de B.
La regla d'inferencia: direm que l'especificaci {P} S1;S2 {Q} s correcta si podem trobar un predicat R que cumpleixi {P}S1{R} y {R}S2{Q}.
D'aquesta afirmaci es despren que el predicat R descriu els estats intermitjos possibles entre la execuci de S1 y S2.
Podem extender aquest postulat a un cas general utilitzant tants predicats intermitjos com sigui necesari, grcies a que la composici
seqencial s asociativa.
X, y :tipus Primer s'ha de comprobar
{P} l'ltima assignaci de
x:=E1; P=>(R)xE1 l'algorisme i anant cap a
{R} P=>(QyE2)xE1 munt.

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

y:=E2 R=>(Q)yE2
{Q}
Si un algorisme t la postcondici i la precondici iguals, no fa res.
VI- COM POSICI CONDICIONAL O ALTERNATIVA
La composici condicional permet decidir quin subalgorisme executar depenent de l'estat inicial.
Sintaxis: {P}
si
E1------->A1;
E2------->A2;
E3------->A3;
.
En------->An
fsi
{Q}
on A1,...,An s un conjunt d'insruccions i E1,...,En s un conjunt d'expressions lgiques, es a dir, expressions que evaluen a un valor boole.
Una parella (Ei, Ai), es denomina instrucci protegida, ja que la instrucci Ai no s'executa si la condici E1 s falsa.
Si la primera condici es certa s'executar A1 i si no, evalua la segent i si es certa s'executar i aix fins al final. En aquests cassos noms
s'executa una acci i es surt de la condici. Si hi ha ms d'una expressi certa s'executar la primera que sigui certa i sortir. Entre si i fsi hi
han d'apareixer totes les possibilitats.
Hi han dos tipus de conidcional la exclusiva i la general. La general es dona quan ms d'una branca poden ser ertes, i en l'exclusiva noms es
far certa una branca.
Regla d'inferencia de la composici alternativa: entenem que l'estructura alternativa est ben definida si es cumpleix que per l'estat inicial
P al menys una de les proteccions Ei es certa. P=> E1"E2"....."En.
Per a cada algorisme posible s'ha de verificar la precondici, que es formada per {P} i la condici Ei, i la postcondici {Q}. La nova precondici
formada es representa amb P*. En aquest cas es miren si els subprogrames de cadascuna de les branques sn correctes. ("I: 1 <= i <= n:
{P"Ei} Ai {Q}).
VII-COM POSICI ITERATIVA
Amb aquesta composici podem describir processos quina duraci dependi de l'estat inicial. Per resoldre aquest problema tenim el mentre .

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

Sintaxis:

mentre B
fer
S

On B s una expresi lgica i S una instrucci.


B: condici de continuaci
C: cos de la iteraci, cos del bucle

fmentre
L'algorisme S es realitza mentre B es fasi certa, i aix fins que B es fasi fals.
Tota iteraci planteja dos tipus de problemes:
1-Determinar l'efecte de la instrucci iterativa, per concretar-lo tindrem que buscar una relaci I que es mantingui inalterada desprs de cada
iteraci. Aquesta relaci s l'invariant.
2-Probar que la instrucci iterativa finalitza, per assegurar-nos aix haurem d'associar a cada iteraci una funci que dependi de les variables,
de manera que la relaci invariant (I) i condici de continuaci (B) permita assegurar que la funci s positiva i decreix en cada proces de la
instrucci iterativa. Aquesta funci s la funci de cota.
Expresant aix amb ms formalisme obtenim la regla d'inferncia.
1 fase (determinar que el mentre sigui correcte):
-Definir un invariant (condici que s'ha de cumplir sempre dintre del mentre).
-Mirar si la precondici P implica I. P=>I
-{I"B} S {I}.
-Que al surtir del bucle es cumpleix I"B=>Q.
2 fase (mirar si el mentre acaba o no):
-Definir una funci fita.
-La fita ha de ser positiva i que forzossament decreix I"B=>f>0.
-Desprs d'executar l'algorisme f ha decrescut {I"B"f=F}S{f<F}.
Ajudes per trobar l'invariant:
-Si {Q} est estructurada en conjuncions i te la negaci de B llavor I s {Q} per qitan la condici de continuaci. Tenint en compte que
normalment es compleix I"B=>Q quan estem verificant, podem tenir I agafant la postcondici Q i eliminant la conjunci B.
-Substituir les variables d'especificaci de la postcondici per variables de l'algorisme. Si la nova postcondici es cumpleix dintre del mentre,
llavors aquesta condici s l'invariant.
La composici iterativa tamb es pot fer amb el per i repetir :

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

per i:=E1 fins E2 fer


A

Executa A tantes vegades com la repetir


diferencia entre E1 i E2
A

fper

Es repeteix l'algo-risme fins que E es


cumpla. A s'executa al menys una vegada.

finsque E
frepetir

i,j:enter

|||

i:=E1; j:=E2

A;

mentre i=< j fer

mentre E fer

A;

A;

i:=i+1

fmentre

fmentre
VIII-ACCES SEQNCIAL, CERCA I RECORREGUT
Una seqncia es defineix com un conjunt finit d'objectes, del mateix tipus, que tenen associades les operacionsprimer element i segent
element que permiten, respectivament accedir al primer element i avanar a travs d'ella, element tras element. La longitud de la seqncia s
indeterminada. Per accedir a un element s'ha hagut de passar primer per tots els precessors.
L'actual(S) s l'element on es troba la seqncia. Els element tractats sn part esquerra de la seqncia (p.e.s) i els que queden per tractar,
incls l'actual s la part dreta de la seqncia (p.d.s).
Notaci angular: S=<,> on representa la p.e.(S) i la p.d.(S).
. reprsenta una concatenaci de seqncies.
Longitud (S)=k es defineix la lomgitud de la seqncia.
Declaraci:

S1,S2: seqncia de carcters


T: seqncia d'enters

OPERADORS
Crear(S): crea seqencies, comena a escriure a la seqncia.
Escriure(S,e): escriu un element e a la seqncia.
En aquests dos primers la seqncia encara no existeix.
Preparar(S): posa l'actual al primer element, comena a llegir la seqncia.

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

Actual(S): agafar l'element que estem mirant.


Avanar(S): ens posem a la segent posici, pasar al segent element.
Fi?(S): ens diu si hem arribat al final de la seqncia. Cert->final
En aquests quatre ltims la seqncia ja ha d'existir, sino donaria un error.
Especificacions dels operador primaris.
Crear(S):

{cert}

Escriure(S,e): {S=<,buida>}

crear(S)

escriure(S,e)

{S=<buida,buida>}

{s=<.e,buida>}

Preparar(S): {s=<,>

Avanar(S):

Actual(S):

{S=<,.e>}

preparar(S)

x:=actual(S)

{S=<buida,.>}

{S=<,e.> " x=e}

{S=<,e.>}

Fi?(S):

{S=<,>}

avanar(S)

b:=fi?(S)

{S=<.e,>}

{S=<,> " b=(=buida)}

D'aquests operadors primaris es poden deduir dos operadors ms, els opradors derivats:
llegir_primer(S,x):

preparar(S)
x:=actual(S)

llegir_segent(S,x): avanar(S)
x:=actual(S)

x s la variable on es guardara el primer element de la seqncia.


ESQUEMES DE RECORREGUT I CERCA
Cerca: buscar el primer element que cumpleixi una determinada condici.
Recorregut: fer operacions amb cada element, per exemple sumar tots els elements d'una seqncia. Seria el tractament dels elements de la
seqncia.
Mixtes: de tots els elements que cumpleixin una condici operar.
A ms les seqncies poden estar marcades o no. Una marca s un element del mateix tipus que la seqncia que esta conctenat al final de la
seqncia i que no es pot repetir al mig de la seqncia. En la seqncia marcada buida al menys hi ha d'apareixer la marca, i noms amb

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

aquestes seqncies es poden utilitzar els operadors derivats. Si la marca es troba al mig, la seq seria una seq sense marca, ja que la marca al
mig no es considera com a tal.
ESQUEM A DE CERCA AM B M ARCA
Donada una seqncia S acabada en un element F determineu si hi ha algn element e que sigui diferent de F i que tingui una propietat p(e)
Especificaci:

Algorisme:

S: seqncia d'elements var


trobat: boole

S: seq d'elements

{S=.F"F""p(F)}

trobat: boole

cerca

e: element

{trobat=("e:e":p(e)}

fvar
llegir_primer(S,e);
mentre p(e)"(e"F) fer
llegir_segent(S,e)
fmentre
trobat:= p(e)

I"{(p.e.(S)).(p.d.(S))= .F " F" " p(F) " ("x: x"p.e.(S):p(x)) " e=actual(S)}
fita" longitud (p.d.(S)).
ESQUEM A DE RECORREGUT AM B M ARCA
Donada una seq. S acabada en F, fer un tractament tractar(e, variables) amb tots els elements de la seq.

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

Especificaci:

Algorisme:

S: seq d'elements

var

(...altres variables...)

S: seq d'elements

{S=.F " F"}

(...altres variables...)

tractament

e: element

{tractada(,variables)} fvar
inicilitzar variables;
llegir_primer (S,e);
mentre e"F fer
tractar(e, variables)
llegir_segent (S,e)
fmentre
tractament final
I"{(pe(S)).(pd(S))=.F"F" " ("x: x"pe(S): tractada (x,variables))"e=actual(S)}
fita= longitud (pd(S))
ESQUEM A DE RECORREGUT SENSE M ARCA
Donada una seq. S, fer un tractament tractar (e,variables) amb tots els elements de la seq. Quan no hi ha marca no es poden utilitzar el
llegir_primer ni el llegir_segent.

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

et Of

Especificaci:

Algorisme:

S: seq d'elements

var

(...altres variables...)

S: seq d'elements

{S=}

(...altres variables...)

recorregut sense marca

fvar

{Tractar(,variables)}

inicialitzar variables;

Airport
Meeting
Hotel

preparar (S)
mentre fi?(S) fer
tractar (actual(S), variables)

Use our 4,000


square-feet
ballroom to
accommodate
up to 300
people!

avanar (S)
fmentre
tractament final
I"{pe(S).pd(S)= " tractar (pe(S), variables)}
fita= longitud (pd(S))
ESQUEM A DE CERCA SENSE M ARCA
Donada una seq. S, determinar si hi ha algn element que cumpleixi una propietat P(e)

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

b Has
Watch

Especificaci:

Algorisme:

S: seq d'elements

var

trobat: boole

S: seq d'elements

{S=}

trobat: boole

cerca_sensemarca

fvar

{trobat=("x: x": P(x) " trobat=> P(actual(S)} preparar (S)


mentre fi?(S) trobat fer
si P(actual(S))-> trobat:= cert
P(actual(S))-> avanar (S)
fsi
fmentre
I"{S= " ("x: x"(pe(S)): P(X)) " trobat=> P(actual(S)}.
fita" f=longitud (pd(S))+ boolenter(trobat).
No es pot posar noms longitud(pd(S)) perque si es troba l'element no s'avana i per tant s'ha de posar una condici que digui no trobat. pd(S)
queda igual al trobar l'elements desitjat i per tant la fita no disminueix i per tant, hi ha d'haver alguna cosa que disminueixi.
L'esquema mixte s una combinaci de l'esquema de cerca i recorregut
IX-ACCS DIRECTE. TAULES
L'accs directe t l'avantatge de que anem directament a l'element desitgat sense d'haver de passar pels anteriors elements a ell. Noms amb
l'index ja se sap quin element es vol.
Propietats de la taula:
-L'accs a la taula es realitza a travs d'un conjunt d'index totalment ordenats, finits i del mateix tipus. L'index s la quantitat de posicions on es
poden tenir elements, va entre corxets. Dona el rang de la taula, es a dir, la dimensi de la taula. Aquest ser de qualsevol tipus que tingui
ordenaci (enter, natural, carcter, subrang, enumeratiu i boole.
-En canvi, el tipus_base que s el contingut pot pertnyer a qualsevol conjunt, sn els elements que cont la taula.
-Si s'intenta a accedir a posicions inexistents d'una taula, el resultat no est definit.
Aix doncs, les dades que pot admetre l'accs directe poseeixen estructura de taules amb index com entrades i valors com a sortides.
Els algorismes que traten taules han de contenir una declaraci com:

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

Sintaxis:

nom: taula [index1,..,index n] de


tipus_base

L'accs a la informaci en una cel-la es fa mitjanant la segent expressi:


variable:= nom_taula[fila, columna]
Per esciure en la taula s'utilitza l'expressi segent:
nom_taula[fila,columna]:= E on E es una expressi
EXEMPLE
tipus
aules= (A201, A202, A203, )
assignatures= (IP, IC, F, AL)
ftipus
horari: taula[9..19, aules] de assignatures
a:= horari [9, A201] (llegir)
horari[10, A203]:= IC (escriure)
9

...

19

A201 IP
A202
A203

IC
AL

S'ha d'utilitzar tants mentres o per com indexos hi hagi per a que es recorri tota la taula. I tal com es defineixen els index, es com s'han de
llegir, encara que es llegeixi horitzontal o verticalment.
ESQUEM A DE RECORREGUT
Donada una taula t, fer un tractament amb tots els elements d'aquesta.

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

Especificaci:

Algorisme:

t: taula[a..b] d'element

var

(...altres varibales...)

t:taula [a..b d'element

{t=T" a"b}

(...altres variables...)

recorregut-taula

i:[a..b]

{("k: a"k"b: tractar(T[k],m))} fvar


inicialitzar variables
per i:=a fins b fer
tractar (T[i] ,var)
fper
tractamen final
I"{t=T " a"b ("k: a"k<i: Tractar (T[k], var))}
fita= no te fita perque la composici iterativa es un per.
Si l'algorisme es fes amb el mentre ,la variable i cambiaria per i:=[a..b+1], la condici de continuaci seria i"b+1, hi hauria un comptador al
mentre i:=i+1. En aquest cas si hi hauria fita que seria (b+1)-i i a l'invariant seria:
I"{t=T " a"b "("k: a"k<i: Tractar (T[k], var)) " a"i"b+1}.
ESQUEM A DE CERCA
Donada una taula, determinar si cont algn element e amb una propietat P(e).

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

Especificaci:

Algorisme:

t: taula [a..b] d'element

var

trobat: boole

t:taula [a..b] d'element

{t=T " a"b}

trobat: boole

cercar taula

i: [a..b]

{trobat= ("i: a"i"b: P(T[i]))} fvar


i:=a;
mentre (i"b) " P(t[i]) fer
i:=i+1
fmentre
trobat:= P(t[i])
I"{t=T " a"b " ("k: a"k<i: P(T[k])) " a"i"b}
fita= b-i
Observem que si s'imposara com a condici del bucle la expressi:
i"b y P(t[i])
l'algorisme seria incorrecte, ja que si ningn element satisfa P la variable i acabaria valent N+1 amb el que, tras l'ultima iteraci, es produiria un
error per accs a una posici no definida. Aix no pasa en l'esquema proposat, ja que, si la cerca no ha tingut xit, el bucle termina quan i=b i la
postcondici es igualment satisfeta.
En la cerca hi han dos possibilitats per millorar la cerca:
Cerca amb sentinella que millora el temps d'execuci.
Cerca dicotmica o binaria. La precondici es que la taula estigui ordenada. Es va a una posici aleatoria i es mira si el valor es mes gran o
mes petit que el desitjat i aix fins al final. S'utilitza quan s'han de fer moltes cerques.
CERCA AMB SENTINELLA
La sentinella seria una marca i sera l'element a buscar posat pel programador al final de l taula, es a dir, es posa una posici ms a la taula.
Aquest element a ms ha de cumplir la propietat desitjada.

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

Especificaci:

Algorisme:

t:taula [a..b+1] d 'element

var

trobat: boole

t: taula [a..b+1] d 'element

{t=T " a"b " P(sentinella)}

trobat: boole

cerca_sentinella

i:[a..b+1]

{trobat=("r: a"r"b: P(T[r]))} fvar


t[b+1]:= sentinella;
i:= a;
mentre P(t[i]) fer
i:=i+1;
fmentre
trobat:= (i"b+1)
I"{t=T " a"b+1 " ("x: a"x<i: P(T[x]))}
fita= b+1-i
CERCA DICOTMICA O BINARIA
La taula ha d'estar ordenada, es tenen dos indexs: un inferior i unn superior. Agafem un altre index k a l'atzar, si l'element es ms gran que el
trobat s'agafa la part dreta i si es mes petit la part esquerra i aix fins que es trobi o s'acabi la taula.

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

Especificaci:

Algorisme:

T: Taula [1..n] d 'enter

var

x: enter

t:taula [1..N] d 'enter

i: [1..N]

x: enter

{t=T " x=X " N>1 " ordenat (T)}

i, j, k: [1..N]

cerca_dicotmica

fvar

{(x"T) " (T[i]=X)}

i:=1;

Ordenat(T):("i: 1"i<N: T[i] " T[i+1]) j:=n;


mentre i<j fer
k:=(i+j) div 2
si x"t[k]-> j:=k;
x>t[k]-> i:=k+1;
fsi
fmentre
I"{t=T " x=X " N>1 " ordenat (T) " ((x"T) " (x"T[i..j]))}
fita=j-i
X-PARAM ETRITZACI DE SUBPROGRAM ES
TUPLAS
Els elements de tipus complexes estarn formats, per tipus ms simples. Per definir els primers en funci dels segons s'utilitzen constructors de
tipus. Comprobem que les estructures de taula i seqncia tenen en com que els seus components son del mateix tipus. El constructor que
introdum es la tupla, que permitir crear entitats complexes que les seves components, anomendes camps poden perteneixer a tipus
diferents.

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

Declaraci: nom tupla= tupla


camp1: tipus1
.
.
campn: tipusn
ftupla
Cada un d'aquests camps est dotat d'un identificador. Per referenciar cada un d'ells individualment empleem el conector . Entre el nom de
variable i els seus components.
Acabem de veure que el conector . Dota de significat a entitats, curtes o llargues, depenen de la complexitat de la tupla, el que pot resultat
pesat escriure. Per existeixen blocs de instruccions on totes les components referenciades d'una tupla comparteixen els identificadors inicials i
per tant es poden simplificar les expressions. No seria necessari estar repetint tot el temps la llista completa de camps i subcamps doncs no hi
hauria posibilitat de confusi. Per permitir la supresi de lapart com d'una colecci d'identificadors de camps introdum la instrucci amb.
Declaraci: amb variable.part coincidnt fer
referncias sol a la part variable
famb
L'accs a tuples de taules es fa de la segent manera:
nom variable [posici].camp
I per escirue en una tupla d'aquesta altra manera:
nom variable [posici].camp := expressi
ACCIONS I FUNCIONS
Al dissenay algorismes grans ens trobem a uns problemes com poden ser la dificultat en solucionar problemes de mitjana envergadura, errors
de codi redundant i que sn difcils d'entendre. Per solucionar aquest problemes s'utilitzen els subprogrames, els quals sn de dos tipus:
accions i funcions.
ACCIONS
Una acci es un algorisme disenyat de tal manera que es susceptible de ser cridat per altres algorismes que, a la seva vegada, poden ser
accions. En aquest context, s usual referir-se a l'algorisme que efectua la crida com algorisme principal.
La crida a una acci es realitza escribint el nom de l'acci seguit de les expressions sobre les quals desitgem que treballi. Aquestes van
tancadaes entre parntesis i en ordre en que han sigut especificades en l'acci que es cridada.

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

Declaraci: nom_acci (parametres reals)


La especificaci d'una acci te dos parts:
Capcelera: es on consta l'identificador o nom de l'acci i la llista de parametres formals. En aquesta llista s'indica el tipus de parmetres i la
seva clase.
Cos: compren la part de declaracions i instruccions que constitueixen l'acci.
Declaraci: acci nom_acci (parametres formals: tipus)
declaraci_variables_locals
{P (parmetres)}
cos_de_l'acci
{Q (parmetres)}
facci
Amb aquest protocol hem creat una via de comunicaci entre la instrucci de crida i l'acci que es cridada que facilita l'intercanvi d'informaci
entre les dues. A partir d'ara denominarem parmetres als objectes que intervenen en aquest protocol.
Els parmetres que s'escriuen en la instrucii de crida son els parmetres reals. En canvi, els que apareixen en l'acci que es cridada sn els
parmetres formals. Al emparallar els parmetres de les dues llistes de manera ordenada, han de coincidir en:
el nombre de parmetres
el tipus dels parmetres.
Pero no es necesari que coincideixin els identificadors dels parmetres reals i formals. Es a dir, la conexi es fa mitjanant la posici i no el
nom, per tant els parmetres formal i reals han de tenir el mateix nombre d'objectes.
Els parmetres es poden clasificar en:
-Entrada (ent): els objectes tenen un valor inicial i corresponen a aquells que surten a la precondici de l'algorisme.
-Sortida (sort): els objectes a on retornarem el resultat de l'acci, corresponen a les variables que surten a la postcondici.
-Entrada/Sortida (e/s): sn aquells que inicialment tenen un valor inicial i ams es poden utilitzar per retornar el resultat de l'acci, apareixen a
la pre i postcondicic.
NOTA
-Han de coincidr el nombre de parmetre real i formals.
-Han de coincidir els tipus dels parmetres formal i reals per posici.

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

-Els parmetres d'entrada no han de ser necesariament una variables, se li pot donar una expressi directament quan es fa la crida, i si es
variable ha de tenir un valor inicial abans de fer la crida.
-Els parmetres de sortida mai poden ser expressions i la variables noo h a de ser inicialitzada.
-Si es de ent/sort ha de ser una variable i ja inicialitzada.
FUNCIONS
Les funcions sn les accions que els parametres son d'entrada excepte un, que es de sortida. Les funcions sn un subconjunt de les accions i
qualsevol funci es pot expresar com una acci.
Les funcions nomes tenen parmetres de sortida i sempre retornen un element de sortida, donen el valor directament.
El fet de tenir un sol parmetre de sortida fa que la funci calculi un valor i permeti asignar aquest a una variable.
En la crida a una funci el parmetre de sortida no ha d'apareixer a la llista de parmetres d'entrada i el valor calculat per la funci es
referenciat per la crida misma.
Declaraci: variable := nom_funci
La declaraci de funcions i la protecci de dades es similar al cas de les accions, excepte en:
-La llista de parmetres formals noms contenen parmetres d'entrada.
-En la declaraci de la funci s'indica el tipus del valor que retorna, afegint-lo al final de la capcelera despres de tancar els parntesis i
separats per dos punts.
-Per indicar el valor que retorna la funci utilitzarem la paraula retorna.
Declaraci: funci nom_funci (parmetres formals) : tipus
{P} noms entrada element retornar
cos de la funci
{Q}
retorna E
ffunci
XI-ANALISIS I DISSENY DESCENDENT
El disseny descendent es basa en l'abstracci. La abstracci es basa en discernir els elements importants en un nivell donat i despreciar tots
els altres elements que en un nivell no sn importants.
El disseny descendent s'utilitza quan ja tenim algorismes dissenyats i verificats (reutilitzaci) i quan la unitat lgica i l'elemental no coincideixen.

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

-Unitat elemental: tipus de dades mes baix, tipus mes baix eel problema.
-Unitat lgica: tipus que s'obt en el nivell ms alt d'abstracci.
En el disseny descendent es poden distinguir tres fases:
1- Primer hem imaginat una unitat lgica de tractament i hem declarat una variables que la representa.
2- Aplicar el corespondent esquema sobre la unitat lgica.
3- Refinatment de les accions que han surgit, fins expresar-les en funci de les unitats elementals.
Quan es pasa d'un nivell superior d'abstracci a un nivell inferior es diu que s'ha fet una refinament.
Suposem que el conjunt de dades d'un problema pot dividir-se en unitats lgiques, progressivament ms sencilles, fins a arribar a les
elementals. Podem, llavors, resoldre el problema nivell per nivell, de manera que cada acci a refinar noms involucri a la unitat que defineix el
nivell i a la inmediatament inferior, mitjanant l'aplicaci d'un esquema conegut o inclos de instruccions elementals. Aix el nombre de nivells que
apareixin en una descomposic implicar un temps major eb la resoluci del problema per no una major dificultat conceptual ja que cada un
d'aquests nivells es resoldr d'una menra similar.
Avantages del disseny descendent:
-Legibilitat: el disseny descendent reflexa fielment el procs de construcci d'un algorisme, del mateix mode que informa sobre el seu
funcionament.
-Reutilitzaci: al fragmentar un algorisme en accions que resolen subproblemas associats mes sencills augmenta la probabilitat de que alguna
de les accions es pugui aprofitar en altres situacions.
-Depurabilitat i modificabilitat: si el nostre algorisme cont algn error inadvertit o si despres de dissenyar-lo s'ha de modificar per satisfer algn
canvi en la especificaci, la seva estructura d'accions i funcions permet detectar rpidament quals sn els fragments qua s'han de canviar.
ORDENACI DE TAULES
Utilitzarem els predicats segents:
-Ordenada (t, i, j)"("k: i"k<j: t[k] " t[k+1]).
-t[i..j] = T [i..j] Si i>j la taula es buida: ("k: i"k"j: t[k]=T[k]).
-No es poden afegir ni treure elements, s'agafa un element de a y es posa una sola vegada a b.
Pem (a, b, i, j)= ("k: i"k"j: (#r: i"r"j: a[r]=a[k])=(#r: i"r"j: b[r]=b[k])).
INSERCI
Es tenen dos blocs, un ordenat y l'altre desordenat. S'agafen elements del desordenat y s'inserta entre els valors de l'ordenat.
Aqu ordenar una posici ms es tradueix en averiguar la posici que li correspondria a l'element i-essim en la part ordenada i insertar-lo en
aquesta.

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

Inv"{ ordenada (t,i,r-1) " t[1..i-1]=T[1..i-1]"t[j+1..N]=T[j+1..N]" perm (t,T,i,j)}.


Var
r: [1..N]
fvar
per r=i+1 fins j fer
Inv'"{ordenada(t,i,s) " ordenada (t,s+1,r) " s"i " t[s+1]=T[r] " x=T[r]}
s:=r-1; x:=t[r]
mentre (t[s] > t[s+1]) " (s>i) fer
t[s+1]:= t[s];
t[s]:= x;
s:= s+1;
fmentre
si t[s] > t[s+1]----->t[s+1]:= t[s]; t[s]:=x;
t[s] " t[s+1]---->
fsi
fper
SELECCI
Tamb es tenen dos blocs, es busca l'element menor del bloc desordenat i es posa en l'ordenat i aix es repeteix fins que s'acaben els
elements.
Una segona aproximaci parteix de suposar que, a ms d'estar ordenat, els i-1 primers elements de la taula son els menors, es a dir, tot altre
elements de la taula es major o igual que t[i-1]. Consisteix en seleccionar el mnim valor d'entre els encara no ordenats i intercambiar-lo amb el
i-essim.
Acci ordenar (ent/sort t:taula [1..N] d 'enter; ent i, j:1..N)
P"{1"i"j"N " t=T}
Q"{ordenada (t,i,j) " t[1..i-1]=T[1..i-1] " t[j+1..N]=T[j+1..N] " perm(t,T,i,j)}
I"{ ordenada (t,i,r-1) " t[1..i-1]=T[1..i-1] " t[j+1..N]=T[j+1..N] " perm (t,T,i,j) " " l,m: i"l<r"m"j: t[l]"t[m]}
var

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

r:1..N
fvar
r:=i;
mentre r"j fer
min:= localizar_minimo (t,r,j)
{Inv " r"j " r"min"j " "m: r"m"j: t[min]"t[m]}
intercanviar (t[min], t[r]);
r:=r+1;
fmentre
funci localizar_minimo (ent t:taula [1..N] d 'enter; r, j: 1..N)
var min, l: 1..N fvar
min:= r;
per l:=r+1 fins j fer
si t[l]< t[min]----->min:= l;
t[l]" t[min]---->;
fsi
fper
retorna (min)
ffunci
10

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

Comunique con Ligatus

Comunique con Ligatus

Comunique con Ligatus

Descubra nuestra red de sitios Premium y maximice su

Descubra nuestra red de sitios Premium y maximice su

Descubra nuestra red de sitios Premium y maximice s

rendimiento. Ms informaciones aqu!

rendimiento. Ms informaciones aqu!

rendimiento. Ms informaciones aqu!

Correo

Inicio

Amor

Contacto

Descargar

Magazine

Documentos

Tests

Condiciones

Blog

Correo

Inicio

Amor

Contacto

Descargar

Magazine

Documentos

Tests

Condiciones

Blog

El Rincn del Vago, en Salamanca desde 1998 - Condiciones de uso - Contacto

Rincn del vago

Autocity

Chueca

PDF creado por htmlapdf.com a travs de la Interfaz de programacin

Вам также может понравиться