









Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Una descripción detallada de las estructuras de control en programación, con énfasis en la estructura secuencial, alternativa y iterativa. Se incluyen diagramas de flujo y ejemplos en pseudocódigo y pascal para facilitar la comprensión. Además, se explican conceptos relacionados como la negación de negación, la commutación de and y or, y las estructuras case y iterativa de repetición.
Tipo: Apuntes
1 / 17
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!










Fonaments d'informàtica
Índex del tema Objectius.................................................................................................................................. 1 6.1. Recopilació de les representacions de sintaxi utilitzades................................................ 1 6.2. Estructura seqüencial. ..................................................................................................... 2 6.3. Estructura alternativa........................................................................................................ 3 6.3.1. Estructura alternativa bàsica..................................................................................... 3 6.3.2. Estructura alternativa derivada................................................................................. 9 6.4. Estructura iterativa.......................................................................................................... 12 6.4.1. Estructura iterativa bàsica....................................................................................... 12 6.4.1. Estructura iterativa de repetició............................................................................... 13 6.4.1. Estructura iterativa de comptatge........................................................................... 14 6.5. Sintaxi de les estructures de control en pseudocodi...................................................... 15 6.5.1. Estructures alternatives........................................................................................... 15 6.5.1. Estructures iteratives............................................................................................... 16
Hem vist el concepte d’algorisme com a guió del que haurà de fer el programa. L’elaboració de l’algorisme és un pas previ a la creació del programa. Per a documentar les instruccions d’un algorisme hem introduït dues representacions. Una d’elles gràfica, que anomenàvem diagrama de flux, i una altra més semblant al llenguatge que utilitzem en la programació de l’ordinador, anomenat pseudocodi. En aquesta representació el que ens interessa realment és la comprensió del que s’ha de fer i com, més que la seva correcció en la forma d’escriure, el que anomenem sintàcticament correctament. Representació d’un algorisme : en la representació d’un algorisme ens interessa més que quedi clar què s’ha de fer i com, que no pas la correcció sintàctica de com està expressat. Aquest algorisme, per a ser traduït a un programa en un llenguatge com el Pascal, ha de seguir les normes sintàctiques que dicta el llenguatge. Aquestes normes són importants per determinar exactament el que ha de fer el programa a cada moment i no es pot permetre l’ambigüitat en la seva interpretació. Per especificar les normes sintàctiques d’un llenguatge tenim dues eines de representació que són:
Estructures de control Sintaxi del Pascal: Un programa escrit en Pascal ha de ser sintàcticament correcte per què no hi pugui haver interpretacions ambigües del compilador. La representació de la sintaxi permesa en el llenguatge ens ve donada, en la pròpia definició del llenguatge, en un format de representació de sintaxi dels esmentats (BNF o diagrama sintàctic). És important que tinguem una certa fluïdesa a interpretar aquests diagrames per a poder comprendre el que expressen i determinar per què una instrucció no és acceptada per la màquina!!!. Quan un error és sintàctic, la màquina no podrà interpretar el programa, mentre que quan és semàntic la màquina pot executar el programa, però el programa no fa el que hauria de fer correctament. Un cas habitual d’error semàntic és quan ens equivoquem en el càlcul d’una expressió, tot i que estigui ben formulada, per exemple sumar 7 en lloc de multiplicar per 7. Els errors semàntics provenen de l’especificació de l’algorisme i son més difícils de detectar per què la màquina no ens podrà avisar. En aquest capítol veurem les estructures de control que permeten que el programa pugui decidir entre fer unes instruccions o unes altres en funció de certs valors. Això farà que el programa prengui decisions i que sembli que la màquina té una espurna d’intel·ligència. Aquesta capacitat per a prendre decisions provindrà de la capacitat de preveure situacions que n’hagi fet el programador al realitzar el programa.
Fins ara, amb les nocions que hem vist, el nostre programa és una llista d’instruccions que s’executen seqüencialment una rera l’altre. Aquesta és una estructura seqüencial. Estructura seqüencial és aquella en que les instruccions sempre s’executen en el mateix ordre o seqüència Quan descrivim les estructures de control, en mostrarem el seu equivalent d’execució a través d’un diagrama de flux que ens mostri l’equivalent. En aquest cas, el diagrama de flux d’una estructura seqüencial seria el de la il·lustració 1. Veiem que hi ha un únic flux d’execució i, quan se surt d’un element, s’entra al següent, sense possibilitat de camins alternatius, fins arribar a l’últim element de la seqüència, en aquest cas, la fi de l’algorisme. També identificarem, mitjançant diagrama sintàctic o la forma BNF, la sintaxi correcte de l’estructura de control. En aquest cas, la forma BNF d’una estructura seqüencial seria la il·lustració 2 En aquesta definició, les construccions anomenades assignació i cridaProcediment són les utilitzades en el capítol anterior corresponent a instruccions i subprogrames predefinits en el Pascal La construcció anomenada blocBeginEnd és el que fem servir per enumerar les instruccions d’un programa. Veiem que es pot fer un aniuament utilitzant una altra construcció blocBeginEnd dins de la primera a l'exemple 1. Aniuament d’estructures és quan dins d’una estructura hi ha inclosa una altra construcció de la mateixa estructura. Il·lustració 1 algorisme típic d'un càlcul.
Estructures de control Veiem que, en funció d’una condició o pregunta feta en el romboide, el flux seguirà cap a la branca etiquetada amb l’afirmació (Es compleix) o cap a l’altra etiquetada amb la negació (No es compleix) i continuarà el flux d’execució cap a baix, però mai passarà per les dues branques de sortida del romboide alhora. El sentit del flux d’execució a l’estructura alternativa sempre és cap a baix. Es fa una cosa o una altre i se segueix, però mai es torna enrera. Un altra punt a destacar del diagrames de flux de les estructures de control, és que parteixen d’un punt provenint del flux d’execució i, un cop expressada l’estructura, torna a confluir en un punt per a seguir el flux. Quan traduïm un programa a la seva representació gràfica cada estructura de control tindrà un punt d’entrada i un de sortida, però ens pot passar que en intentar traduir un gràfic al programa corresponent, ens n’adonem que no podem agrupar els punts d’entrada i sortida d’una possible estructura. Això serà indicació de que el gràfic, tal com està expressat no és estructurat i no disposem d'una estructura de control en Pascal que l’implementi. Un diagrama de flux serà estructurat quan podem agrupar punts d’entrada i punts de sortida per a identificar les diferents estructures de control. Si un diagrama de flux no és estructurat, l’haurem d’estructurar abans de poder escriure el programa equivalent en Pascal. Un diagrama de flux no estructurat, podria ser el de la il·lustració 5. A aquest diagrama, veiem que es barregen les dues branques i, per tant, hi ha instruccions que s’hi arriba des de les dues branques, com en el cas de instruccions-2. Quan, en un diagrama de flux, la sortida d’una part del romboide es dirigeix a l’altre sortida del romboide, sense haver confluït en un punt, el diagrama no serà estructurat i, per tant, no el podrem traduir al Pascal. Una possible estructuració del diagrama anterior passaria per a separar les línies que s’encreuen entre les sortides del romboide. Si en fem una enumeració del que es fa a cada branca, en tindrem la següent llista d’instruccions:
Fonaments d'informàtica Segons aquesta seqüència, podem reescriure el diagrama de la il·lustració 5 com el de la il·lustració
Veiem que ara el diagrama fa el mateix que en el cas anterior i, a més, té una similitud amb el diagrama que hem donat de l’estructura de control alternativa si en fem les agrupacions senyalades per la línia discontínua a cada branca de la sortida. Podem comprovar que les agrupacions que hem fet es corresponen a una altra estructura de control alternativa i, per tant, hi ha un aniuament d’estructures alternatives. Per a fer la normalització, hem repetit les instruccions que teníem comunes a ambdues branques, de manera que ara es pot separar cada branca individualment. Un cop normalitzat el gràfic podrem identificar els punts següents:
Fonaments d'informàtica Una altra consideració de l’estructura és que té dues formes, en funció de que hi hagin instruccions a fer en la branca negativa o no. Si no hi ha res a la branca que es correspon al no compliment de la condició, no hi haurà l’apartat que comença amb la paraula clau else. En veiem dos exemples de diagrama de flux i la seva corresponent traducció al Pascal a les il·lustracions 10 i 11. A l’exemple de la il·lustració 11 , veiem que, en faltar les instruccions de la branca que s’identifica com a ‘si’ (quan es compleix la condició), hem hagut de fer la pregunta a la inversa. Hem de vigilar amb les expressions lògiques, doncs és un error habitual el considerar que not(a>b) sigui a<b, quan en realitat és a<=b. Sols és opcional la branca identificada com a ‘no’. Si la que no té instruccions és la branca identificada com a ‘si’, haurem de fer la pregunta a la inversa per a què es canviïn les respostes de ‘si’ per ‘no’ respectivament. Un exemple de l’estructura alternativa bàsica en un programa Pascal, entre d’altres instruccions seria el de l'exemple 3 En aquest exemple el programa demana un valor per teclat i comprova si és parell o senar per a treure el missatge corresponent a cada cas. Desprès s’espera la pulsació d’una tecla amb la instrucció ReadKey. Veiem que, encara que el llenguatge no ens obligui, és bo escriure les estructures de control amb les indentacions adequades. Indentació és l’estil d’escriptura on els subapartats d’un element tenen els inicis de línia més a la dreta. En l’estructura alternativa, els subapartats a considerar són les instruccions que es realitzen en cas d'avaluar la condició com a cert, un apartat, i les instruccions que es realitzen en cas de que la condició s’avaluï fals, l’altre. Il·lustració 10 Gràfic i traducció al Pascal d'una instrucció alternativa bàsica. if a>b then
Il·lustració 11 Dos traduccions al Pascal del mateix diagrama de flux. if not(a>b) then
if a<=b then
Readln(varEntera); if (varEntera mod 2) = 0 then writeln (‘valor parell’) else writeln (‘valor senar’); ReadKey; Exemple 3 Exemple d'una estructura alternativa en un programa de Pascal.
Estructures de control Anem a veure un recordatori o recopilació de les operacions més habituals utilitzades com a condicions. Seran aquelles que donin un resultat lògic. Hi trobem tant el grup d’operacions relacionals com el d’operacions lògiques. Operacions relacionals És habitual la utilització de les operacions relacionals entre valors de tipus de dades semblants. Recordem que el tipus de dades resultat d’una relació és boolean. La llista d’operadors relacionals és la següent: <, >, <=, >=, <> i =. Una qüestió important a recordar són els símbols de comparació de desigualtat i d’igualtat. En un cas es fa amb els símbols <> i en l’altre cas és important no confondre-ho amb la instrucció d’assignació. Operacions lògiques Una altra operativa habitual d’utilització en les decisions dels programes és la de barrejar diferents condicions en una sola pregunta. Els operadors lògics que més s’utilitzen són: Not, Or i And. En aquest cas és important recordar dues qüestions bàsiques:
Estructures de control Aquesta estructura alternativa amb múltiple opcions, l'anomenem en Pascal com a estructura case i en veiem el diagrama de flux i la seva traducció corresponent al Pascal a la il·lustració 14. A la il·lustració 15 podem veure la forma general de l'estructura a partir del seu diagrama sintàctic. A partir d'aquest diagrama sintàctic veiem que tenim la possibilitat de posar diferents valors possibles en un mateix cas, separant-los per comes. També veiem que hi ha la possibilitat de definir subrangs de valors. Veiem una utilització d’aquestes possibilitats a l'exemple 4. El tipus de dades de l’expressió a comparar ha de coincidir amb el tipus de dades de les constant expressades en cada cas i ha de ser un tipus de dades enumeratiu. En cas de que en una opció s’hagi de realitzar més d’una instrucció, les inclourem en un bloc begin- end. Il·lustració 13 Cas típic on podrem utilitzar l'estructura alternativa múltiple.
if n=100 then write (‘Recepcio’) else if n=101 then write (‘comercial’) else if n=107 then write(‘compres’) else if n=120 then write(‘gerencia’) else write(‘desconegut’);
Fonaments d'informàtica Hem de tenir en compte que l’estructura s’acaba amb un end. És un error habitual l’oblit d’aquest identificador de finalització les primeres vegades que s’utilitza l’estructura alternativa múltiple en Pascal. Il·lustració 14 Aplicació de l'estructura alternativa múltiple a l'exemple de la il·lustració 13. case n of 100: write (‘Recepcio’); 101: write (‘comercial’); 107: write(‘compres’); 120: write(‘gerencia’); else write(‘desconegut’); end; Il·lustració 15 Aplicació de l'estructura alternativa múltiple a l'exemple de la il·lustració 13. case tecla of ‘s’,’S’: Begin writeln(‘fi programa’); Sortida; end; ‘a’..’d’,’x’,’A’..’D’,’X’: Opcio(tecla); else writeln(‘opcio no contemplada’); end; Exemple 4 Aplicació de casos amb valors múltiples i subrangs en una estructura case.
Fonaments d'informàtica Hi sol haver una variable que intervé a tots els apartats. En l’exemple 5 , aquesta variable és l’anomenada i. A vegades, aquesta variable no intervé a la seqüència que s’itera i sols s’utilitza per comptar nombre d’iteracions. D’altres vegades, tota l’estructura s’allunya de l’esquema esmentat. Podem veure dos casos on ens allunyem de l'estructura habitual d'una iteració a l'exemple 6.
En aquesta estructura, en lloc de fer la pregunta abans de cada iteració, es fa desprès. La diferència principal és que, en aquest cas, sempre es fa una iteració com a mínim. Una altra diferència important és que la condició, en aquest cas és de sortida de la iteració (es seguirà iterant fins que la condició sigui certa). En veiem un exemple d’utilització al llistat de la il·lustració 18 , juntament amb el diagrama de flux corresponent. Hi ha dos diagrames de flux que operen de la mateixa manera. El primer cas és tradueix com a l'estructura iterativa bàsica i el segon cas és el que ens ocupa on veiem que en aquesta estructura iterativa ens estalviem representacions repetides com és la seqüència-1 de l'exemple. A l'exemple de la il·lustració 18 , la seqüència del programa de Pascal es correspon a demanar una tecla i la condició de repetir la seqüència és la de que la tecla no sigui ni el caràcter 's' ni el caràcter 'n'. while a>25 do begin write (sqr(a)); a:=a-2; end; readln(taulaMultiplicar); i:=1; while i<10 do begin writeln (i:2,’ : ’,taulaMultiplicar*i); i:=i+1; end; Exemple 5 Estructura iterativa més habitual en Pascal. Inicialització à i:= Condició de sortida à i ≥ 10 Sequència à writeln ….. Increment à i:=i+ Expressió lógica à a> seqüència à bloc begin-end Exemple 6 Estructura iterativa en Pascal sense l'estructura més habitual. i:=1; while i<10 do begin FerSo1; EsperarSegons(1); FerSo2; EsperarSegons(1); i:=i+1; end; resposta:=’x’; while resposta<>’s’ and resposta<>’n’ begin writlen(’ contesta ’’s’’ o ’’n’’ ’); resposta:=readkey; end;
Estructures de control És una estructura una mica especial en Pascal en quan a la seqüència d’instruccions a reiterar. Fixeu-vos amb l’exemple que comentem que no és una instrucció com seria un bloc begin-end , sinó que és un conjunt d’instruccions i el bloc de repetició el marquen les paraules reservades repeat per indicar l’inici i until <condició> per a indicar la fi. Podem incloure les instruccions a repetir dins un bloc begin-end , però si no ho fem, no estarem creant una estructura errònia. Veiem a la il·lustració 18 com podem fer el mateix comportament d'una estructura iterativa de repetició a partir de l’estructura iterativa bàsica. Això significa que, com que hi ha una traducció directe i, per tant, podem considerar que l’estructura iterativa de repetició conserva les restriccions de la programació estructurada.
Pel casos que hem comentat anteriorment, on intervé una variable que compta iteracions, tenim una estructura que ens simplifica l’escriptura i dona claretat de lectura al programa. El diagrama sintàctic és el de la il·lustració 19. El comportament de l’estructura és el següent:
Estructures de control
Una nota a remarcar sobre l'estructura iterativa de repetició mostrada a la il·lustració 23 és que la condició de sortida funciona al revés de com ho fa en Pascal. Aquí anirem repetint les instruccions mentre l’expressió lògica sigui certa. Il·lustració 21 Diagrama sintàctic de l'estructura alternativa múltiple en pseudocodi. Il·lustració 22 Diagrama sintàctic de l'estructura iterativa bàsica en pseudocodi. Il·lustració 23 Diagrama sintàctic de l'estructura iterativa de repetició en pseudocodi.
Fonaments d'informàtica Una variació respecte al Pascal de l'estructura iterativa de comptatge, és que el comptatge endavant o enrera es fa a partir del valor increment. Si és positiu, és incremental amb el valor de l’increment. Si és negatiu, és decremental. Si no s’especifica, es considera que el valor d'increment és 1. Il·lustració 24 Diagrama sintàctic de l'estructura iterativa de comptatge en pseudocodi.