Академический Документы
Профессиональный Документы
Культура Документы
Inicio
Doc umentos
Documentos
Apuntes
Tests
Amor
M agazine
Creaciones
Seguridad
Vagoteca
Blog
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
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
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
{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.
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 .
Sintaxis:
mentre B
fer
S
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 :
fper
finsque E
frepetir
i,j:enter
|||
i:=E1; j:=E2
A;
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:
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.
{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.>}
Fi?(S):
{S=<,>}
avanar(S)
b:=fi?(S)
{S=<.e,>}
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)
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: 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.
Especificaci:
Algorisme:
S: seq d'elements
var
(...altres variables...)
S: seq d'elements
(...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.
et Of
Especificaci:
Algorisme:
S: seq d'elements
var
(...altres variables...)
S: seq d'elements
{S=}
(...altres variables...)
fvar
{Tractar(,variables)}
inicialitzar variables;
Airport
Meeting
Hotel
preparar (S)
mentre fi?(S) fer
tractar (actual(S), variables)
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)
b Has
Watch
Especificaci:
Algorisme:
S: seq d'elements
var
trobat: boole
S: seq d'elements
{S=}
trobat: boole
cerca_sensemarca
fvar
Sintaxis:
...
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.
Especificaci:
Algorisme:
t: taula[a..b] d'element
var
(...altres varibales...)
{t=T" a"b}
(...altres variables...)
recorregut-taula
i:[a..b]
Especificaci:
Algorisme:
var
trobat: boole
trobat: boole
cercar taula
i: [a..b]
Especificaci:
Algorisme:
var
trobat: boole
trobat: boole
cerca_sentinella
i:[a..b+1]
Especificaci:
Algorisme:
var
x: enter
i: [1..N]
x: enter
i, j, k: [1..N]
cerca_dicotmica
fvar
i:=1;
-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.
-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.
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
Correo
Inicio
Amor
Contacto
Descargar
Magazine
Documentos
Tests
Condiciones
Blog
Correo
Inicio
Amor
Contacto
Descargar
Magazine
Documentos
Tests
Condiciones
Blog
Autocity
Chueca