Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Teoria capítol 5, Apuntes de Introducción a la Informática

Asignatura: Fonaments d'informàtica, Profesor: , Carrera: Enginyeria en Electrònica Industrial i Automàtica (GEI), Universidad: UAB

Tipo: Apuntes

Antes del 2010

Subido el 30/07/2008

sergiprc
sergiprc 🇪🇸

4

(29)

494 documentos

1 / 32

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Fonaments d'informàtica
5. Instruccions i subprogrames predefinits
Índex del tema
Objectius..................................................................................................................................1
5.1 Introducció..........................................................................................................................1
5.2 Instruccions segons funcionalitat.......................................................................................4
5.2.1 Instrucció assignació..................................................................................................5
5.2.2 Entrada de dades.......................................................................................................5
5.2.3 Visualització de dades................................................................................................7
5.2.4 Pseudomatemátiques...............................................................................................13
5.2.5 Tractament de caràcters..........................................................................................16
5.2.6 Altres funcions..........................................................................................................24
5.3 Resum del capítol............................................................................................................32
Objectius
1. Saber les instruccions més habituals que tenim disponibles per a cridar des del nostre
programa.
2. Saber interpretar la declaració d’una funció per a poder-la utilitzar en el nostre programa.
3. Saber diferenciar entre funció i procediment i entre pas per valor d’un paràmetre o pas per
referència.
4. Tenir un primera presa de contacte amb les estructures de control que s’utilitzen en els
exemples de les diferents funcions que s’esmenten.
5.1 Introducció.
En aquest capítol, veurem les instruccions que tindrem a l’abast per a programar el funcionament del
sistema.
Com a introducció al capítol anem a fer, en primer lloc, una justificació dels subprogrames.
Seguidament, anomenarem una possible classificació de les diferents instruccions segons utilització.
Finalment, en farem una introducció a la declaració d’una instrucció en llenguatge Pascal per poder
identificar la informació que ens dóna.
La necessitat de subprogrames com a instruccions del sistema.
Per a que el sistema funcioni, li haurem d’indicar quines instruccions volem que realitzi a cada
moment.
Les instruccions que disposarà el sistema, seran les que ens permetran indicar el que volem que es
faci cada moment i en quin ordre.
Aquestes instruccions les introduirem en format text per a generar el programa o conjunt
d’instruccions que realitzarà el sistema. La sintaxi del programa s’haurà d’ajustar al llenguatge de
programació que utilitzem. En el nostre cas tindrem, com ja hem comentat, dos llenguatges: el
pseudocodi, per a dissenyar el programa, i el Pascal, que és el que introduirem a la màquina i serà la
traducció de l’algorisme que n’hagi sortit del disseny.
En la majoria dels casos, amb alguna excepció que s’esmentarà, les instruccions les indiquem amb
el concepte de subprograma. Un subprograma un nom que serveix per a identificar-lo, i pot, a
més, necessitar que se li doni certa informació per a que pugui realitzar l’ordre que se li demana.
Com a exemple bàsic podem mencionar que, si tenim una funció que s’anomena “arrel”, que calcula
l’arrel quadrada d’un número, haurem d’indicar-li el número del qual en volem saber l’arrel.
1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20

Vista previa parcial del texto

¡Descarga Teoria capítol 5 y más Apuntes en PDF de Introducción a la Informática solo en Docsity!

Fonaments d'informàtica

5. Instruccions i subprogrames predefinits

Índex del tema Objectius.................................................................................................................................. 1 5.1 Introducció.......................................................................................................................... 1 5.2 Instruccions segons funcionalitat....................................................................................... 4 5.2.1 Instrucció assignació.................................................................................................. 5 5.2.2 Entrada de dades....................................................................................................... 5 5.2.3 Visualització de dades................................................................................................ 7 5.2.4 Pseudomatemátiques............................................................................................... 13 5.2.5 Tractament de caràcters.......................................................................................... 16 5.2.6 Altres funcions.......................................................................................................... 24 5.3 Resum del capítol............................................................................................................ 32

Objectius

  1. Saber les instruccions més habituals que tenim disponibles per a cridar des del nostre programa.
  2. Saber interpretar la declaració d’una funció per a poder-la utilitzar en el nostre programa.
  3. Saber diferenciar entre funció i procediment i entre pas per valor d’un paràmetre o pas per referència.
  4. Tenir un primera presa de contacte amb les estructures de control que s’utilitzen en els exemples de les diferents funcions que s’esmenten.

5.1 Introducció.

En aquest capítol, veurem les instruccions que tindrem a l’abast per a programar el funcionament del sistema. Com a introducció al capítol anem a fer, en primer lloc, una justificació dels subprogrames. Seguidament, anomenarem una possible classificació de les diferents instruccions segons utilització. Finalment, en farem una introducció a la declaració d’una instrucció en llenguatge Pascal per poder identificar la informació que ens dóna. La necessitat de subprogrames com a instruccions del sistema. Per a que el sistema funcioni, li haurem d’indicar quines instruccions volem que realitzi a cada moment. Les instruccions que disposarà el sistema, seran les que ens permetran indicar el que volem que es faci cada moment i en quin ordre. Aquestes instruccions les introduirem en format text per a generar el programa o conjunt d’instruccions que realitzarà el sistema. La sintaxi del programa s’haurà d’ajustar al llenguatge de programació que utilitzem. En el nostre cas tindrem, com ja hem comentat, dos llenguatges: el pseudocodi, per a dissenyar el programa, i el Pascal, que és el que introduirem a la màquina i serà la traducció de l’algorisme que n’hagi sortit del disseny. En la majoria dels casos, amb alguna excepció que s’esmentarà, les instruccions les indiquem amb el concepte de subprograma. Un subprograma té un nom que serveix per a identificar-lo, i pot, a més, necessitar que se li doni certa informació per a que pugui realitzar l’ordre que se li demana. Com a exemple bàsic podem mencionar que, si tenim una funció que s’anomena “arrel”, que calcula l’arrel quadrada d’un número, haurem d’indicar-li el número del qual en volem saber l’arrel.

Instruccions i subprogrames predefinits La manera d'indicar que volem que s’executi un subprograma, serà a través del seu nom i, en cas de que s’hagi d’afegir informació, aquesta s’afegirà entre els símbols de parèntesi i separada per comes en el cas de que n’hi hagi més d’una dada que donar-li. Exemples dels diferents casos de subprogrames esmentats els veiem als exemples 1 , 2 i 3. Observem que hi ha dos tipus de subprogrames: els que ens donen un valor com a resultat de la seva execució i els que no. Als primers, els anomenarem funcions i, als segons, procediments o accions. Exemples de funcions serien ‘sqrt’ o ‘whereX’ mentre que un exemple de procediment seria l’acció ‘gotoXY’. Classificació de les instruccions. Hi ha una instrucció especial que s’anomena assignació i a la que s'ha dedicat un apartat al capítol 4. Hi ha un altre conjunt d’instruccions que es dediquen a controlar quina és la seqüència correcte de les intrusions a realitzar. La seqüència per defecte és la que s’anomena seqüencial, i es tracta de realitzar un conjunt d’instruccions en un ordre preestablert, que sempre serà el mateix d’una execució a una altra del programa. Hi ha el que anomenarem estructures de control per a realitzar diferents decisions sobre quina ha de ser la següent instrucció a realitzar i les tractarem al capítol 6. Les demés instruccions seran crides a funcions o accions com les dels exemples anteriors. Treballarem amb la següent classificació de les instruccions:

  • Assignació: Emmagatzema un valor a una variable.
  • Estructures de control: Controlen el flux d'execució.
  • Funcions: Calculen un valor a partir de possibles paràmetres.
  • Procediments: Instruccions que ens ofereix el sistema. Biblioteques disponibles en Pascal Per a poder utilitzar les funcions i procediments que té el Pascal, utilitzem un concepte que anomenarem biblioteca. Funció que s’anomena ‘wherex’ que ens diu en quin punt de l’eix x imaginari en que es divideix la pantalla (per defecte de 80 columnes o eix x per 24 files o eix y) es troba el cursor en un moment determinat. No se l’hi ha de dona cap informació i ens retorna el valor esmentat. La crida seria de la forma: ColumnaActual:= WhereX; Exemple 1 Crida a una funció sense paràmetres Procediment que s’anomena gotoXY i posiciona el cursor a una posició de la pantalla donada (columna x i línia y) GotoXY( 17, 3 ); Exemple 3 Crida a una funció amb dos paràmetres (dos valors) Funció que s’anomena ‘sqrt’ i calcula l’arrel quadrada d’un valor. Li haurem de passar el valor. Recordem que un valor és qualsevol expressió que, un cop avaluada, en surt un valor d’un tipus de dades determinat. ArrelQuadrada:= Sqrt( 17 ); Exemple 2 Crida a una funció amb un paràmetre (un valor)

Instruccions i subprogrames predefinits

  1. A continuació indiquem, desprès del símbol ‘ : ’, el tipus de dades dels paràmetres que hem indicat en el punt 2.
  2. Si hi ha més paràmetres, indiquem ‘ ; ’, i els declarem repetint els passos a partir del pas 1. Un punt a comentar és la utilització del modificador “Var” en l’especificació dels paràmetres. Aquesta paraula calu indica que es passa una variable per referència. Quan especifiquem aquest modificador, estem expressant que a la funció li passarem una variable i que les modificacions, o valors que hi posi la funció o acció a la variable passada, quedaran a la variable original i podran ser consultats, en el programa, desprès de la instrucció que fa la crida a la funció o procediment.

5.2 Instruccions segons funcionalitat.

Anem a esmentar les diferents instruccions que tenim a l'abast quan programem amb Pascal. Per a classificar-les, ho farem segons funcionalitats agrupant així funcions que poden ser alternatives unes de les altres o, si més no, complementàries. De cada instrucció, que majoritàriament seran funcions o procediments, en mencionarem el que fa, la informació que se l'hi ha de donar, la capçalera indicada en la referència del Pascal i alguns exemples extrets de la mateixa documentació. Exemples utilitzats A les diferents funcionalitats que se’n fan aquest capítol, s’esmenten funcions i procediments que tenen alguna operativa relacionada amb la funcionalitat corresponent. Aquest exemples estan extrets directament de l’ajuda que ofereix el compilador de Pascal freepascal. Els exemples utilitzats del freepascal, comporten dos característiques:

  • Els comentaris, noms de variables, etc. estan en anglès.
  • En aquests exemples, s’utilitzen les possibilitats que dona el llenguatge en qüestió a estructures de control. En aquest punt, encara no hem vist el significat de les estructures de control. Podem veure’n en els exemples una primera presa de contacte i podem intuir el que fan traduint els noms Un exemple seria la següent declaració del procediment gotoxy: Procedure GotoXY (X: Byte; Y: Byte); donat que els dos paràmetres són del mateix tipus de dades, també podria ser declarat com: Procedure GotoXY (X,Y: Byte); Un altre exemple seria la declaració de la funció sqrt: Function SqRt (X: Double) : Double ; Exemple 5. Exemples de capçalera de procediments i funcions. Un exemple d'una variable passada per referència el tenim amb la funció readln, on li passem una o més variables per a que el procediment hi posi els valors que escriurà l’usuari del programa. x:integer; .... readln(x); // variable passada per referència per a què la // funció li assigni un valor writeln ('El valor de x és: ',x); // mostrem el valor que .... //té x desprès del readln Exemple 6. Exemple de variable modificada pel procediment readln.

Fonaments d'informàtica utilitzats de l’anglès (principalment while que es traduiria per mentre , if que es trauria per un si de condició i else que el podem traduir per en cas contrari ). Pseudocodi. En pseudocodi utilitzarem, com a instruccions més especials, les instruccions genèriques d’entrada i sortida de dades ja mencionades anteriorment en l'apartat corresponent com: LLEGIR ( ) O be: ESCRIURE ( <llista d'expressions a mostrar> ) Hem de deixar clar que el pseudocodi s’ha fet per indicar el guió del programa i hem de fer-ho de la manera més clara possible. Això implica els següents punts: § En el pseudocodi no caldrà explicar totes les instruccions que tindrà el programa final. Per exemple, si s’ha de donar valor a una variable, en pseudocodi utilitzarem la instrucció “LLEGIR ()”, mentre que en el programa final tindrem més en compte l’aspecte que donem a l’usuari, escrivint prèviament un missatge que informi a l’usuari de la dada que esperem que entri i en quin format. § Si volem utilitzar una instrucció, significativa de l’algorisme, que sabem que tenim disponible en Pascal i no s’ha definit en pseudocodi, sempre podem introduir la instrucció nova, normalment fent la traducció al català per a coherència del llenguatge. Segons això, encara que no les haguéssim declarat formalment, si és necessari, sempre podrem incloure instruccions com “HiHaTecla()” o “Retard(50)” pensant en les funcions “keypressed” o el procediment “delay” del Pascal.

5.2.1 Instrucció assignació.

Ja hem vist que la instrucció assignació serveix per a assignar un valor a una variable. Hem de tenir en compte el tipus de dades amb que s’ha declarat la variable, doncs el valor que hi assignarem s’hi haurà d’acoblar. En el cas més senzill, el valor que assignem a una variable serà del mateix tipus de dades que la variable i no hi ha cap intervenció extraordinària del compilador. Pot passar que el valor obtingut sigui d’un tipus de dades amb un marge de valors inferior al marge de valor que té el tipus de dades de la variable. Per exemple quan volem posar un integer dins d’un real o quan volem assignar un caràcter a un tipus de dades string. En aquest cas, el compilador farà el canvi de forma transparent. Aquest concepte l'hem anomenat coerció. Pot passar el cas contrari, en que no hi ha una conversió evident entre els tipus de dades, com pot ser el fet de possar un valor real dins d’una variable de tipus enter o un string dins d’un tipus de dades numèric. Per aquest casos, haurà de ser el programador el que faci una manipulació del valor per a fer l’assignació correctament com per exemple extreure el valor enter d’un real per emmagatzemar-lo en un variable entera o seleccionar el primer caràcter del string.

5.2.2 Entrada de dades

Per poder introduir valors en el moment de l’execució del programa, disposem de les funcions, ja comentades, read i readln. La declaració d’aquestes funcions és una mica especial per tres motius: § Els paràmetres són variables passades per referència però no el podem especificar el tipus de dades de la variable passada per què serveix per a qualsevol tipus de dades. § Si la primera variable que es passa és de tipus Text (encara no hem vist el tractament de fitxers), les dades les extraurà d’un fitxer del sistema, mentre que, si no és així, les extraurà del teclat. § El nombre de variables que es passen és indeterminat i la funció posarà valors a totes les variables que se li passin.

Fonaments d'informàtica extreu la lectura d’aquesta zona, sempre que hi hagi prou dades, en cas contrari, esperarà que es polsin les tecles al teclat. El que fa aquesta funció és indicar-nos si en el buffer hi ha alguna tecla memoritzada o no. L’interès d’aquesta funció és el de que, si sabem que hi ha una tecla al buffer, sabrem que la propera lectura d’una tecla no s’haurà d’esperar a ser polsada. Les tecles que no donen informació per sí soles, com shift, alt o ctrl, no es tenen en compte en aquesta funció. Declaració de la funció: Function KeyPressed : Boolean; Errors: No en genera cap. Delay Aquest procediment no és pròpiament d’introducció de dades però té una funcionalitat amb certa afinitat. El que fa aquesta funció és congelar l’execució del programa durant un interval de temps que es dona al moment de fer la crida en unitats de mil·lèsimes de segon. Aquest valor de temps és aproximadament l’espera real que es fa i podria ser una espera molt superior si el sistema està ocupat fent altres tasques. Declaració del procediment: Procedure Delay (DTime: Word); Errors: No en genera cap.

5.2.3 Visualització de dades

Un apartat important per a que el programa mostri la informació que calcula són les funcions per a visualitzar dades. Exemple extret del manual de Pascal: Program Example ; uses Crt ; { Program to demonstrate the KeyPressed function. } begin WriteLn ( ’Waiting until a key is pressed ’ ) ; repeat until KeyPressed ; { The key is not Read , so it should also be outputted at the commandline } end. Exemple 8. Exemples d'utilització de la funció keypressed Exemple extret del manual de Pascal: Program Example ; uses Crt ; { Program to demonstrate the Delay function. } var i : longint ; begin WriteLn ( ’ Counting Down ’ ) ; for i :=10 downto 1 do begin WriteLn ( i ) ; Delay ( 1000 ) ; {Wait one second } end ; WriteLn ( ’BOOM!!! ’ ) ; end. Exemple 9. Exemples d'utilització del procediment delay

Instruccions i subprogrames predefinits Write, Writeln Les més utilitzades i genèriques són les accions write i writeln que, al igual que el readln, són una mica especials per què: § Si la primera variable passada és de tipus text, s’escriu la informació en un fitxer de text. § El nombre de valors que li passem és indeterminat. § El tipus de dades dels valors passats és indeterminat. La diferència entre write i writeln és que la segona afegeix un salt de línia, és a dir, situa el cursor a l’inici de la següent línia desprès d’escriure les dades. Declaració del procediment: Procedure Write ([Var F : filetype,] V1 [,V2,...,Vn]); El format de visualització de les dades depèn del tipus de dades que es visualitzi i es pot especificar una certa modificació del format afegint, darrera del valor a visualitzar, fins a 2 valors més separats pel símbol ‘:’ amb el següent format:

  • El primer valor indica el nombre de caràcters mínim a visualitzar. Si el que s’escriu té menys caràcters dels que s’indiquen, s’afegiran espais en blanc al davant fins arribar al valor de caràcters mínims indicats.
  • El segon valor sols és útil en el cas de les variables de tipus real i serveix per a indicar el nombre de decimals que es visualitzaran (amb les aproximacions oportunes si és el cas) Errors: Es pot produir algun error que faci finalitzar el programa i es pot canviar el comportament a través de la configuració del compilador. Biblioteca CRT A la biblioteca CRT trobarem les següents funcions: cursorOn, cursorOff, cursorBig, clrScr, whereX, whereY, gotoXY,delLine, InsLine, textColor, textBackground, lowVideo, highVideo, normVideo entre d'altres. Seguidament passem a comentar aquestes funcions com a més utilitzades, considerant que n'hi ha d'altres que podrem consultar al manual del compilador. També indiquem que normalment el nom de la funció dóna una idea intuïtiva del que fa. CursorOn Mostra el cursor a la pantalla. És el comportament habitual a no ser que en algun moment s’hagués amagat. No té informació addicional a passar. Declaració del procediment: Procedure CursorOn ; Errors: No en genera cap. Exemple extret del manual de Pascal: Program Example ; { Program to demonstrate the Write ( ln ) function. } Var F : File of Longint ; L : Longint ; begin Write ( ’ This is on the first line! ’ ) ; { No CR/ LF pair! } Writeln ( ’And this too... ’ ) ; Writeln ( ’ But this is already on the second line... ’ ) ; Assign ( f , ’test.tmp ’ ) ; Rewrite ( f ) ; For L :=1 to 10 do write ( F , L ) ; { No writeln allowed here! } Close ( f ) ; end. Exemple 10. Exemples d'utilització dels procediments write i writeln

Instruccions i subprogrames predefinits WhereY Ens dóna la posició Y de l’eix de pantalla considerant la posició 1 com la més alta de la pantalla i hi ha, per defecte, 25 línies a la pantalla. Declaració de la funció: Function WhereY : Byte; Errors: No en genera cap. GotoXY Posiciona el cursor en un lloc determinat de la pantalla. La notació en els eixos X i Y és la mateixa que en les dues funcions anteriors. Se li indica la posició en el eix X i en el Y on volem situar el cursor per aquest ordre. La declaració del procediment seria: Procedure GotoXY (X: Byte; Y: Byte); Errors: No en genera cap. DelLine Abreviació de l’anglès “delete line” o “esborrar línia”. Esborra físicament la línia en la que es troba el cursor fent pujar una línia totes les línies que hi ha a partir de l’esborrada. Aquest efecte de fer pujar o baixar tot un conjunt de línies de la pantalla s’anomena en anglès amb el concepte de “scroll”. El cursor es manté a la mateixa coordenada x,y en que estava abans d’esborrar la línia. Declaració del procediment: Procedure DelLine ; Errors: No en genera cap. Exemple extret del manual de Pascal: Program Example ; uses Crt ; { Program to demonstrate the GotoXY function. } begin ClrScr ; GotoXY (10 ,10) ; Write ( ’ 10 ,10 ’ ) ; GotoXY (70 ,20) ; Write ( ’ 70 ,20 ’ ) ; GotoXY ( 1 , 22 ) ; end. Exemple 13. Exemples d'utilització del procediment GootoXY Exemple extret del manual de Pascal: Program Example ; uses Crt ; { Program to demonstrate the DelLine function. } begin ClrScr ; WriteLn ; WriteLn ( ’ Line 1 ’ ) ; WriteLn ( ’ Line 2 ’ ) ; WriteLn ( ’ Line 2 ’ ) ; WriteLn ( ’ Line 3 ’ ) ; WriteLn ; WriteLn ( ’Oops , Line 2 is listed twice , ’ , ’ let’’s delete the line at the cursor position.’ ) ; GotoXY ( 1 , 3 ) ; ReadKey ; DelLine ; GotoXY ( 1 , 10 ) ; end. Exemple 14. Exemples d'utilització del procediment DelLine

Fonaments d'informàtica InsLine Funció que crea una línia en blanc a la posició on es troba el cursor, fent córrer les línies que hi ha de la posició fins al final de pantalla un línia cap avall amb l’efecte de scroll esmentat a la funció anterior. La informació de l’última línia, si n’hi havia, es perd. Declaració del procediment: Procedure InsLine ; Errors: No en genera cap. TextColor Permet de definir el color del text amb que s’escriuran el missatges, a partir del moment en que es cridi i fins que es faci un nou canvi. Declaració del procediment: Procedure TextColor (CL: Byte); Errors: No en genera cap. La informació passada, de tipus byte, és un valor que indica el codi del color que es vol utilitzar. Per tal de no tenir de memoritzar els colors, hi ha definides en el sistema unes constant que estan associades als valor dels diferents colors. Aquestes constants són: Black, Blue, Green, Cyan, Red, Magenta, Brown, LightGray, DarkGray, LightBlue, LightGreen, LightCyan, LightRed, LightMagenta, Yellow, White, Blink Cada constant té associat un valor i, per tant, sabent que la constant “red” té associat el valor 4, seria el mateix la instrucció “textcolor(red)” que “textcolor(4)”, però la primera és més entenedora del color utilitzat i dóna lloc a menys errors. La constant Blink no és un color sinó que és un afegit que fa que el text faci intermitència. Així, si volem un text en color groc intermitent, utilitzarem la instrucció “textcolor(Yellow+Blink)”. Exemple extret del manual de Pascal: Program Example; uses Crt ; { Program to demonstrate the InsLine function. } begin ClrScr ; WriteLn ; WriteLn ( ’ Line 1 ’ ) ; WriteLn ( ’ Line 3 ’ ) ; WriteLn ; WriteLn ( ’Oops , forgot Line 2 , let’’s insert at the cursor position ’ ) ; GotoXY ( 1 , 3 ) ; ReadKey ; InsLine ; Write ( ’ Line 2 ’ ) ; GotoXY ( 1 , 10 ) ; end. Exemple 15. Exemples d'utilització del procediment InsLine Exemple extret del manual de Pascal: ProgrProgram Example ; uses Crt ; { Program to demonstrate the TextColor function. } begin WriteLn ( ’ This is written in the default color ’ ) ; TextColor (Red ) ; WriteLn ( ’ This is written in Red ’ ) ; TextColor (White ) ; WriteLn ( ’ This is written in White ’ ) ; TextColor ( LightBlue ) ; WriteLn ( ’ This is written in LightBlue ’ ) ; end. Exemple 16. Exemples d'utilització del procediment TextColor

Fonaments d'informàtica Declaració del procediment: Procedure NormVideo ; Errors: No en genera cap. Biblioteca GRAPH Aquesta biblioteca té funcions per a realitzar visualitzacions gràfiques a pantalla mitjançant el FreePascal. En funció del sistema operatiu que estiguem executant, la visualització pot variar. En concret, utilitzant windows, veurem que s’obre una finestra addicional per a visualitzar gràfics. Entre les funcions disponibles a aquesta biblioteca, fent una enumeració ràpida de les més habituals, podem esmentar:

  • DetectGraph per detectar el mode de video actiu,
  • InitGraph per inicialitzar el mode de video que ha de estar en consonància amb el mode de video de la màquina,
  • GetMaxX per obtenir la posició x màxima en el eix horitzontal tenint en compte que ara els valors son punts de la pantalla, que en anglès s’anomenen pixels,
  • GetMaxY fa el corresponent a la funció anterior amb l’eix vertical,
  • Funcions de canvi colors del primer pla (front-Color o fore-Color) i fons (backColor o backGround-Color).
  • Funcions per dibuixar arcs, línies, elipses, rectes, pixels (punts a la pantalla gràfica) i omplir zones segons una mostra de trama prèvia.

5.2.4 Pseudomatemátiques

En la visió d’expressions, ja hem vist i utilitzat funcions matemàtiques. En general, amb les funcions que hi ha a la biblioteca sysunit n’hi ha suficient per la major part de càlculs habituals, però també tenim funcions complementàries a la unit math. Normalment seran funcions que retornen un valor, amb la qual cosa, la seva declaració serà com a function i no com a procedure. Hi ha casos en que, segons les dades donades, n’obtenim un resultat o un altre. Així, hi ha la funció random sense paràmetre i la funció random(<número enter>) que retorna un valor diferent. Un altre exemple són les funcions que tracten amb tipus de dades ordinal , on es pot substituir el tipus ordinal per qualsevol tipus enter, caràcter o booleà. Dins aquestes funcions hi ha les anomenades ord , pred , succ , high o low. Esmentem les funcions que tenen un sentit una mica diferent de les que normalment utilitzem quan parlem de matemàtiques. Entre aquestes, hi ha les que tracten amb números aleatoris i les que utilitzem per canviar el tipus de dades o fer-ne un ús de les parts del número, en especial dels de coma flotant. És per això que aquest apartat l’hem anomenat de funcions pseudomatemàtiques. Pel que respecte a les funcions matemàtiques, podria ser útil fer una ullada al manual per a fer-se’n una idea de les funcions incloses ja, tant a la biblioteca estàndard, com a la pròpia de matemàtiques (unit math). Random Serveix per a generar un número aleatori. Té dos maneres de ser utilitzada, en funció del paràmetre que en la declaració es marca com opcional. Declaració de la funció: Function Random [(L : Longint)] : Longint or Real; Errors: No en genera cap. Si no donem el paràmetre, retorna un valor aleatori, diferent en cada crida, comprès entre 0 inclusiu i 1 exclusiu de tipus real (part decimal que diferencia els diferents valors retornats). Si a la crida li senyalem un valor enter, retorna un valor aleatori entre 0 inclusiu i el nombre donat exclusiu. Aquest nombre es podria calcular agafant la part entera de multiplicar el nombre donat pel

Instruccions i subprogrames predefinits valor retornat per la funció random sense paràmetre ( random(100) seria semblant a fer trunc(100 * random ) ). En quan a la seqüència retornada cal esmentar que a cada execució serà la mateixa, amb un ordre de generació que es pot considerar aleatori segons els càlculs estadístics. És per això que la seqüència es diu que és pseudoaleatòria. Per evitar aquest comportament, tindrem la funció randomize comentada seguidament. Randomize Funció que s’utilitza per a canviar la seqüència repetida a cada execució que s’obté amb la funció random. Podríem dir que la funció random ens dona valors com si els anés traient d’una baralla de cartes que té un ordre pseudoaleatori. Al cridar la funció randomize podem imaginar que el que es fa és barrejar la baralla per què a les següents crides de random la seqüència obtinguda no sigui l’habitual. Aquesta funció sols s’ha de cridar un cop durant el programa, normalment a les instruccions inicials del programa. Si cridem el procediment més d’una vegada, sobretot si la crida és desprès d’haver utilitzat la funció random, a les següents crides de la funció random perdrem les característiques de la seqüència aleatòria. Declaració del procediment: Procedure Randomize; Errors: No en genera. Trunc Aquesta funció ens dona la part sencera d’un nombre en coma flotant. Literalment, el que es fa és treure la part decimal i quedar-se amb la part sencera per a crear un nombre enter. La particularitat d’aquesta funció és que ens serveix per passar un nombre real en un nombre de tipus Longint. Declaració de la funció: Function Trunc (X : Real) : Longint; Errors: No en genera. Exemple extret del manual de Pascal: Program Example ; { Program to demonstrate the Random and Randomize functions. } Var I , Count , guess : Longint ; R : Real ; begin Randomize ; { This way we generate a new sequence every time the program is run } Count :=0 ; For i :=1 to 1000 do If Random >0.5 then inc ( Count ) ; Writeln ( ’Generated ’ ,Count , ’ numbers > 0.5 ’ ) ; Writeln ( ’ out of 1000 generated numbers. ’ ) ; count :=0 ; For i:=1 to 5 do begin write ( ’Guess a number between 1 and 5 : ’ ) ; readln (Guess ) ; If Guess= Random (5)+1 then inc ( count ) ; end ; Writeln ( ’You guessed ’ ,Count , ’ out of 5 correct. ’ ) ; end. Exemple 19. Exemple d'utilització de les funcions per valors aleatoris

Instruccions i subprogrames predefinits

5.2.5 Tractament de caràcters

Ja s’ha comentat el tipus de dades String. En aquest apartat indiquem les funcions que es dediquen a fer tractaments sobre aquest tipus de dades. Un valor de tipus de dades String el podem intuir com una seqüència de caràcters (tipus de dades char). Les funcions que mostrem s’ocupen a fer tractaments d’aquest caràcters que hi ha dins un valor String. Indicar que si volem mostrar un caràcter en particular dels que hi ha al conjunt String, ho podem indicar a partir de la seva posició (1 pel valor de més a l’esquerra i successivament 2,3,4,... recorrent-lo d’esquerra a dreta), amb els operadors [ ]. Ho veiem a l'exemple 24. Abans d'observar l’exemple, recordem que els literals de tipus String s’indiquen igual que els caràcters entre els símbols ‘ ‘. Hi ha caràcters difícils d’especificar en un literal, per la qual cosa, si sabem el seu valor segons la taula ASCII, els podem indicar amb el caràcter # al davant del número. També recalquem que, amb aquests tipus de dades, tenim la instrucció := per assignar un valor String a una variable de tipus String. El valor String es pot formar amb una expressió que en resulti un valor String o un valor char que el Pascal ja sap transformar en String.Mitjançant la coerció corresponent que fa de manera automàtica el compilador. Un altre operador a indicar és el de suma. La suma de dos valors de tipus String es fa creant un String que concatena els valors dels strings que formen la suma. A l’exemple 24 és important saber diferenciar en la segona instrucció writeln, la concatenació que es fa en el segon paràmetre de la crida (s1+ ‘. ’+s2) que és una expressió de tipus String, de la concatenació que es fa en la writeln a partir de l’escriptura dels diferents paràmetres passats que es separen amb el símbol ‘,’. Les funcions que es mencionen en aquest apartat estan incloses a la llibreria sysunit i, per tant, no necessiten la inclusió de cap altre unit. Exemple extret del manual de Pascal: Program Example; { Program to demonstrate the Round function. } begin Writeln ( Round ( 1234.56 ) ) ; { Prints 1235 } Writeln ( Round ( -1234.56) ) ; { Prints - 1235 } Writeln ( Round ( 12.3456 ) ) ; { Prints 12 } Writeln ( Round ( -12.3456) ) ; { Prints - 12 } end. Exemple 23. Exemple d'utilització de la funció round Exemple extret del manual de Pascal: Program ExempleStrings; Var s1,s2,s3:String; Begin s1:= ‘Texte’; s2:= ‘Un altre ’ + s1; {s2 val ‘Un altre Texte’} s3:= #27; {a s3 es genera un string a partir del } {caràcter de codi ASCII 27 (valor especial de la tecla ESC)} writeln (‘s1 val “’,s1,‘”, el primer caràcter de s2 val “’, s2[1], ‘”.’); writeln (‘La concatenació de s1 amb literal i s2 es: “’, s1+‘. ’+s2,‘”.’); {Mostra: s1 val “Texte”, el primer caràcter de s2 val “U”. La concatenació de s1 amb literal i s2 es: “Texte. Un altre Texte”. } end. Exemple 24. Exemple d'utilització de variable de tipus de dades string.

Fonaments d'informàtica Chr Aquesta funció, a partir d’un valor enter de tipus byte, genera un caràcter de tipus char amb el codi ASCII corresponent a aquest valor. Es pot considerar una funció de canvi de tipus de dades de enter a char. Declaració de la funció: Function Chr (X : byte) : Char; Errors: No en genera Recordem que la taula ASCII és una assignació arbitrària, internacionalment acceptada, per tal d’assignar un número concret a cada signe representable (lletres, dígits, puntuacions, etc.). A partir d’aquesta taula, si enviem un seguit de números (codis ASCII) d’un país o sistema d’ordinadors a un altre, i els transcrivim segons aquesta taula, el resultant serà un text comprensible a la lectura com si d’un llibre es tractés. Dins aquesta taula també hi ha valors especials per a funcions com començar línia nova o començar pàgina nova. A l'exemple 25 , es juga amb el valor de salt de línia per pantalla que és el conjunt dels caràcter amb codi 10 (salt de línia) i 13 (retorn de carro). En aquest exemple es podria haver substituir chr(10) per #10 i chr(13) per #13, però si el valor que volem convertir en caràcter és a una variable, suposem anomenada valor , haurem d’utilitzar chr(valor) ja que #valor no seria entès donat que el símbol # és per indicar valors literals indicant el número corresponent a la taula ASCII del símbol o funció que volem representar. Copy Aquesta funció genera un String a partir d’una part d’un String original. Se li dona l’String original, el lloc on començar a copiar o posició del primer caràcter a copiar i el nombre de caràcters a copiar. Declaració de la funció: Function Copy(S:String; Index:Integer; Count:Integer):String; Errors: No en genera. Si el paràmetre anomenat Count és més gran que el nombre de caràcters disponibles, la còpia es pararà a la longitud disponible. Si el paràmetre anomenat Index és més gran que la longitud de caràcters de l’String original, el resultat serà un String buit. Exemple extret del manual de Pascal: Program Example; { Program to demonstrate the Chr function. } begin Write ( chr (10) , chr (13) ) ; { The same effect as Writeln ; } end. Exemple 25. Exemple d'utilització de la funció chr i carcaters especials. Exemple extret del manual de Pascal: Program Example; { Program to demonstrate the Copy function. } Var S, T : String ; begin T:= ’1234567’ ; S:= Copy ( T , 1 , 2 ) ; { S: = ’12’ } S:= Copy ( T , 4 , 2 ) ; { S: = ’45’ } S:= Copy ( T , 4 , 8 ) ; { S:= ’4567’ } end. Exemple 26. Exemple d'utilització de la funció copy.

Fonaments d'informàtica com és un Char). Seria la funció inversa de chr vista anteriorment on es genera un Char a partir del seu valor ASCII. Pos Funció que cerca una String dins un altre i ens dóna la posició on el troba o 0 si no es dóna el cas. Declaració de la funció: Function Pos(Substr:String;S:String):Integer; Errors: No en genera. La cerca es fa tenint en compte les majúscules i minúscules com a caràcters diferents. Si es vol que no ho consideri es podria passar els dos Strings a minúscules en el moment de fer la crida a la funció. A l'exemple 30 , per buscar el caràcter ‘z’, ja sigui minúscula o majúscula, dins l’string S, podríem haver utilitzat l’expressió: If Pos ( ’z’ , lower (S)) = 0 then..... StringOfChar Funció per a generar un String que tindrà com a contingut la repetició d’un caràcter el nombre de vegades que s’indica. Declaració de la funció: Function StringOfChar(c:char;r:Integer):String; Errors: No en genera. Exemple extret del manual de Pascal: Program Example ; { Program to demonstrate the Lowercase function. } Var I : Longint ; begin For i := ord ( ’A ’ ) to ord ( ’Z ’ ) do write ( lowercase ( chr ( i ) ) ) ; Writeln ; Writeln ( Lowercase ( ’ABCDEFGHIJKLMNOPQRSTUVWXYZ ’ ) ) ; end. Exemple 29. Exemple d'utilització de la funció lowercase. Exemple extret del manual de Pascal: Program Example; { Program to demonstrate the Pos function. } Var S : String ; begin S:= ’The first space in this sentence is at position : ’ ; Writeln ( S, pos ( ’ ’ ,S ) ) ; S:= ’The last letter of the alphabet doesn’’t appear in this sentence ’ ; If ( Pos ( ’Z’ ,S) = 0 ) and ( Pos ( ’z’ ,S) = 0 ) then Wri teln (S) ; end. Exemple 30. Exemple d'utilització de la funció pos. Exemple extret del manual de Pascal: Program Example ; {$H+} { Program to demonstrate the StringOfChar function. } Var S : String ; begin S:= StringOfChar ( ’ ’ ,40)+ ’ Aligned at column 41. ’ ; Writeln ( s ) ; end. Exemple 31. Exemple d'utilització de la funció stringofchar.

Instruccions i subprogrames predefinits A l’exemple 31 , hi ha una ordre diferent de les vistes fins ara, que és la que per al programa es mostra com a comentari, però que és interpretada pel compilador. Els comentaris que comencen amb el caràcter $, indiquen una configuració específica del compilador. En aquest cas {$H+} especifica al compilador que generi un format d’string llarg, on es pugui superar la longitud de 255 caràcters de màxim que hi ha per defecte, evitant la restricció que originalment en fa el Pascal standard. Per a d'altres opcions s'hauria de consultar el manual del compilador freePascal. Delete Aquesta funció serveix per esborrar uns caràcters d’un String indicant la posició d’inici i el nombre de caràcters a esborrar. Una característica especial d’aquesta funció és que l’String a manipular ha d’estar en una variable i aquesta variable és passada per referència com hem comentat a la introducció del capítol en la declaració d’una funció i els seus paràmetres. En aquest cas la variable té el valor inicial a manipular i és on obtindrem el valor final ja manipulat. És per això que la funció no retorna cap valor i per tant es declara com a procediment. Declaració del procediment: Procedure Delete(var S:string; Index:Integer; Count:Integer); Errors: No en genera. Insert Funció semblant a l’anterior on, en aquest cas, inserim un string dins un altre a la posició indicada. L’String a inserir és el primer paràmetre, l’String origen i destí és la variable passada per referència com a segon paràmetre i el tercer paràmetre és el valor de la posició on s’inserirà. Declaració del procediment: Procedure Insert(Source:String;var S:String; Index:Integer); Errors: No en genera. Exemple extret del manual de Pascal: Program Example; { Program to demonstrate the Delete function. } Var S : String ; begin S:= ’This is not easy !’ ; Delete ( S, 9 , 4 ) ; { S:= ’This is easy !’ } end. Exemple 32. Exemple d'utilització del procediment delete. Exemple extret del manual de Pascal: Program Example; { Program to demonstrate the Insert function. } Var S : String ; begin S:= ’Free Pascal is difficult to use! ’ ; Inser t ( ’NOT ’ ,S, pos ( ’difficult’ ,S ) ) ; writeln ( s ) ; {’Free Pascal is NOT difficult to use! ’} end. Exemple 33. Exemple d'utilització del procediment insert.