
















































































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
Documento que contiene diferentes ejercicios en pascal relacionados con el manejo de vectores y matrices, incluyendo el cálculo del módulo de un vector, la determinación de matriz 3x3, la conversión de un vector de xifras a entero y procedimientos para ordenarlo. Además, incluye funciones para obtener el número más grande y pequeño que se pueden formar con las xifras de un número.
Tipo: Ejercicios
1 / 88
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!

















































































Pràctica 1. Arquitectura del computador
1.2 Esquema de l’arquitectura d’un ordinador:
Instrucció
CPU
Pràctica 2. Codificació
2.1 Canvis de base.
Completar la següent taula:
Binari Hexadecimal Decimal 10000000.11 80.C 128. 10011101.11001 9D.C8 157. 10111110.10100111 BE.A7 190.
2.2 Codificació de nombres enters amb signe.
a) Representar els nombres 223 i -223 en binari en els diferents codis per a la
representació d’enters amb signe.
Binari
223 11011111 Binari natural -223 No es pot representar 223 011011111 Signe i magnitud -223 111011111 223 011011111 Complement a 2 -223 100100001
223^111011111 Excés ( 256 ) -223^000100001
b) Calcular el valor decimal del nombre binari 10100111(2 representat en els
diferents codis.
Decimal Binari Natural (^10100111) (2 167 Signe i Magnitud (^10100111) (2 -
Complement a 2 (^10100111) (2 - Excés ( 128 ) (^10100111) (2 39
2.3 Aritmètica binària.
Realitzar les següents operacions en 8 bits i complement a 2, donant el valor del
resultat en decimal.
Sumar
26 + 24 = 50 -15 + 82 = 67 84 + 69 = 103 -46 + (-10) = -
+ 2 6 0 0 0 1 1 0 1 0 + 2 4 + 0 0 0 1 1 0 0 0
0 0 1 1 0 0 1 0
+ 5 0^0 0 1 1 0 0 1
- 1 5 1 1 1 1 0 0 0 1
+ 8 2 +^0 1 0 1 0 0 1 1 0 1 0 0 0 0 1 1
+ 6 7^0 1 0 0 0 0 1
+ 8 4^0 1 0 1 0 1 0 + 6 9 +^0 1 0 0 0 1 0
1 0 0 1 1 0 0 1
- 1 0 3 0 1 1 0 0 1 1 1
OVERFLOW!
- 4 6 1 1 0 1 0 0 1 0 - 1 0 + 1 1 1 1 0 1 1 0
1 1 1 0 0 1 0 0 0
- 5 6^0 0 1 1 1 0 0
2.4 Codificació de nombres reals Representar 123.12 segons norma IEEE 754 en simple precisió. Utilitzar truncat o arrodoniment si fos necessari.
6
0 1 0 0 0 0 1 0 1 1 1 1 0 1 1 0 0 0 1 1 1 1 0 1 0 1 1 1 0 0 0 1
01000001 1 01101100 1 01110101 0 01101101 0 01101110 0 01100101 1
Pràctica 3. Entorn Turbo Pascal
3.1 Suma d’enters
El resultat de les sumes hauria de ser:
200 + 350 = 550 250 – 300 = - 20000 + 30000 = - 40000 – 10 = -
El que ha passat a les dues últimes sumes és que s’ha produït un error de desbordament
(overflow). Els nombres de tipus integer en Turbo Pascal es codifiquen en binari
seguint un sistema de representació de 16 bits i complement a dos. Això fa que el rang
de representació dels enters vagi del –32768 al 32767. Els resultats correctes de la
tercera suma, 50000, i de la quarta suma, 39990, estan per sobre del nombre enter més
gran que podem representar, 32767.
Si voleu un rang de representació més gran a l’hora de treballar amb nombres enters, feu
servir el tipus longint. Trobareu més informació d’ell a l’ajuda de Turbo Pascal (tecles
CTRL+F1).
3.2 Suma de reals
El resultat de les sumes hauria de ser:
250.30 + 300.50 = 5.5080000000E+ 1E12 + 1.0 = 1.0000000000E+ 333333333333333.333 + 6.667 = 3.3333333333E+ 987654321004 + -987654321002 = 2.0000000000E+ 123456789876543 + 0 = 1.2345678988E+
El tipus real del Turbo Pascal té un rang de representació de 2.9e
12 xifres significatives. És per això que hi ha una pèrdua de precisió a les sumes segona
(13 xifres), tercera (18 xifres) i cinquena (15 xifres). A aquesta última suma podeu
observar com el Pascal arrodoneix el nombre real.
Si voleu més precisió a l’hora de treballar amb nombres reals a Turbo Pascal, feu servir
els tipus double i extended. Trobareu més informació sobre ells a l’ajuda de Turbo
Pascal (tecles CTRL+F1).
Per cert, sabíeu que el tipus real de simple i doble precisió definits per l’estàndard IEEE
754 que vàrem veure a codificació, a Pascal són el tipus SINGLE i DOUBLE,
respectivament. El tipus REAL de 6 bytes és únic del Pascal i generalment incompatible
amb altres llenguatges. Normalment l’arquitectura interna dels microprocessadors està
optimitzada per treballar amb nombres reals codificats per aquest estàndard de la IEEE.
Per motius d'eficiència i compatibilitat és millor treballar amb el tipus DOUBLE i, de fet, a
Delphi 4 el tipus REAL ja és un sobrenom del tipus DOUBLE.
Programa en Pascal
PROGRAM Sequencial;
VAR ax, ay, bx, by, mx, my : REAL;
BEGIN (* Demanem el primer punt *) WRITE('Coordenades del primer punt separades per espais: '); READLN(ax, ay);
(* Demanem el segon punt *) WRITE('Coordenades del segon punt separades per espais: '); READLN(bx, by);
(* Calculem el punt mig *) mx := (ax + bx)/2; my := (ay + by)/2;
(* Mostrem el resultat *) WRITELN('El punt mig és (' , mx:4:2, ',', my:4:2, ')'); END.
4.3 Dissenyeu un algorisme en pseudocodi i realitzeu el corresponent programa
en Pascal que, donat un nombre enter que designa un període de temps
expressat en segons, retorni l’equivalent en dies, hores, minuts i segons.
Per exemple: 24000 segons seran 0 dies, 6 hores, 40 minuts i 0 segons.
Per exemple: 7400 segons seran 0 dies, 2 hores, 3 minuts i 20 segons.
Programa en Pascal, solució 1
PROGRAM A4_3_a; VAR temps : LONGINT; segons, minuts, hores, dies : INTEGER; BEGIN (* Demanem els segons *) WRITE('Introdueix un període de temps expressat en segons : '); READLN(temps);
(* Calculem els segons i el temps que resta en minuts *) segons := temps MOD 60; temps := temps DIV 60;
(* Calculem els minuts i el temps que resta en hores *) minuts := temps MOD 60; temps := temps DIV 60;
(* Calculem les hores i el temps que resta en dies *) hores := temps MOD 24; dies := temps DIV 24;
(* Visualitzem els resultats *) WRITELN('Això són ', dies, ' dies, ', hores, ' hores, ', minuts, ' minuts i ', segons, ' segons.'); END.
Programa en Pascal, solució 2
PROGRAM A4_3_b; VAR temps : LONGINT; BEGIN (* Demanem el temps en segons *) WRITE('Introdueix un període de temps expressat en segons : '); READLN(temps);
(* Imprimim els dies i calculem el temps que resta en segons ) WRITE('Això són : ' , temps DIV (246060) , ' dies, '); temps := temps MOD (2460*60);
(* Imprimim les hores i calculem el temps que resta en segons ) WRITE(temps DIV (6060) , ' hores, '); temps := temps MOD (60*60);
(* Imprimim els minuts i imprimim el temps que resta en segons *) WRITE(temps DIV 60 , ' minuts i '); WRITELN(temps MOD 60 , ' segons.'); END.
c) c és un símbol de l’alfabet.
A les expressions de pertinença a un conjunt (operador IN) hem de tenir
cura de que els elements siguin d’un tipus numerable (enter o caràcter), el
nombre d’elements del conjunt no superi els 256, i que els seus valors
estiguin entre 0 i 255.
5.3 Observeu el següent programa en Pascal que, introduïts tres nombres
qualsevol pel teclat, calcula el mínim i el màxim dels tres nombres i els mostra per
pantalla.
Responeu les següents qüestions:
informació rebuda en avaluar una expressió lògica, i així no fer preguntes redundants, augmentant així l’eficiència del codi. Al IF en negreta, si c és el màxim ja no cal preguntar si és el mínim.
altra manera amb menys comparacions? Crec que no.
Programa en Pascal
VAR min, max : REAL; (* Aquí guardarem el mínim i el màxim ) a, b, c : REAL; ( Aquí guardarem el valors introduït *)
BEGIN WRITE('Introdueix el primer valor '); READLN(a); min := a; max := a;
WRITE('Introdueix el segon valor '); READLN(b); IF b > max THEN max := b ELSE min := b;
WRITE('Introdueix el tercer valor '); READLN(c); IF c > max THEN max := c ELSE IF c < min THEN min := c;
WRITELN('El mínim és ', min);
WRITELN('El màxim és ', max); END.
5.4 Observeu el següent programa en Pascal que, a partir del número del dia de
la setmana introduït (de 1 a 7), si aquest és laboral escriu el nom del dia
corresponent per la pantalla, i si no escriu festiu.
Responeu les següents qüestions:
quan l’expressió i els valors a comparar són d’un tipus numerable, és a dir, enter o caràcter.
enlloc de l’alternativa múltiple CASE? Sí, tota estructura CASE es pot substituir per estructures IF niuades. Al programa d’exemple quedaria:
IF dia = 1 THEN WRITELN('dilluns') ELSE IF dia = 2 THEN WRITELN('dimarts') ELSE IF dia = 3 THEN WRITELN('dimecres') ELSE IF dia = 4 THEN WRITELN('dijous') ELSE IF dia = 5 THEN WRITELN('divendres') ELSE IF (dia = 6) OR (dia = 7) THEN WRITELN('festiu') ELSE WRITELN('incorrecte');
facilitat per afegir noves comparacions.
Programa en Pascal
VAR dia : 1..7;
BEGIN WRITE('Introdueix un dia de la setmana (entre 1 i 7) : '); READLN(dia);
WRITE(' El dia és ... ');
CASE dia OF 1: WRITELN('dilluns'); 2: WRITELN('dimarts'); 3: WRITELN('dimecres'); 4: WRITELN('dijous'); 5: WRITELN('divendres');
Programa en Pascal
VAR mida : REAL;
BEGIN WRITE('Introdueix la mida del cargol : '); READLN(mida);
IF (mida < 1) OR (mida >= 8.5) THEN WRITELN('Mida incorrecte') ELSE IF mida < 3 THEN WRITELN('Petit') ELSE IF mida < 5 THEN WRITELN('Mitjà') ELSE IF mida < 6.5 THEN WRITELN('Gran') ELSE WRITELN('Molt gran'); END.
5.7 Amplieu l’exercici 4.2 per tal que, a més a més de trobar el punt mig dels dos
punts de l’espai bidimensional, escrigui per pantalla a quin quadrant del pla
pertany aquest punt resultant.
Programa en Pascal
VAR ax, ay, bx, by, mx, my : REAL;
BEGIN (* Demanem el primer punt *) WRITE('Coordenades del primer punt separades per espais: '); READLN(ax, ay);
(* Demanem el segon punt *) WRITE('Coordenades del primer punt separades per espais: '); READLN(bx, by);
(* Calculem el punt mig *) mx := (ax + bx)/2; my := (ay + by)/2;
(* Mostrem els resultats *) WRITELN('El punt mig és (' , mx:4:2, ',', my:4:2, ')');
(* Comprovem i mostrem el quadrant del punt resultat *) IF mx > 0 THEN IF my > 0 THEN WRITELN('1er. quadrant') ELSE IF my < 0 THEN WRITELN('4rt. quadrant') ELSE WRITELN('Sobre l''eix X')
IF mx < 0 THEN IF my > 0 THEN WRITELN('2on. quadrant') ELSE IF my < 0 THEN WRITELN('3er. Quadrant') ELSE WRITELN('Sobre l''eix X') ELSE IF my <> 0 THEN WRITELN('Sobre l''eix Y') ELSE WRITELN('Origen de coordenades'); END.
5.8 Dissenyeu un algorisme en pseudocodi i realitzeu el corresponent programa
en Pascal que ens permetin resoldre l’equació de segon grau a x
2
formula matemàtica que resol aquesta equació és la següent:
2 4
2
b b a c x
Cal tenir en compte els casos ‘especials’ en la seva resolució:
2
En Pascal, per calcular l’arrel quadrada podem utilitzar SQRT(x) i per elevar al
quadrat SQR(x).
Programa en Pascal
VAR a , b , c : REAL; discriminant : REAL;
BEGIN WRITELN('Programa per resoldre equacions de segon grau'); WRITELN('=============================================');
(* Demanem els coeficients de l'equació *) WRITE('Introdueixi el coeficient del terme de grau 2 : '); READLN(a); WRITE('Introdueixi el coeficient del terme de grau 1 : '); READLN(b); WRITE('Introdueixi el coeficient del terme de grau 0 : '); READLN(c);
(* Comprovem que l'equació realment sigui de segon grau ) IF a = 0 THEN WRITELN('L''equació no és de segon grau.') ( Una altre opció era resoldre l'equació de 1er grau *) ELSE
arcsin := arctan(x/sqrt(1-sqr(x))); arcsin := arcsin *180 / PI; WRITELN('L''arcsinus de ', x:5:3, ' és ' , arcsin:5:3, ' graus'); END; END.
5.10 Dissenyeu un algorisme en pseudocodi i realitzeu el corresponent programa
en Pascal que, donada una data (dia, mes i any), determini si la data correspon a
un valor vàlid. Les dates seran tres dades de tipus enter que correspondran a un
dia, un mes i un any (dd, mm, aa).
S’ha de tenir present el valor dels dies en funció dels mesos i dels anys. És a dir:
Programa en Pascal
VAR dia, mes, any : INTEGER;
BEGIN WRITE('Introdueixi una data (dia, mes i any) : '); READLN(dia, mes, any);
CASE mes OF
1,3,5,7,8,10,12 : IF (dia >= 1) AND (dia <= 31) THEN WRITELN('Data correcta') ELSE WRITELN('Data incorrecta');
4,6,9,11 : IF (dia >= 1) AND (dia <= 30) THEN WRITELN('Data correcta') ELSE WRITELN('Data incorrecta');
2 : IF (dia >= 1) AND ((dia <= 28) OR ((dia = 29) AND ((any MOD 4) = 0))) THEN WRITELN('Data correcta') ELSE WRITELN('Data incorrecta');
ELSE WRITELN('Data incorrecta');
END; END.
5.11 Dissenyeu un algorisme en pseudocodi i realitzeu el corresponent programa
en Pascal que ens permeti escollir entre les següents opcions:
Cal observar que no existeix en Pascal una funció que permeti directament el
logaritme en una base qualsevol. En el seu lloc podem fer servir la següent
fórmula: log b a = ln a / ln b
Programa en Pascal
VAR opcio : INTEGER; a , b : REAL;
BEGIN WRITELN; WRITELN('----------------------------------'); WRITELN('1. Sinus'); WRITELN('2. Logaritme neperià'); WRITELN('3. Logaritme en una base qualsevol'); WRITELN('----------------------------------');
WRITE('Quina opció vol? '); READLN(opcio); WRITELN;
CASE opcio OF
1 : BEGIN WRITE('Introdueix un nombre en graus '); READLN(a); WRITELN('El sinus de ', a:4:2, ' és ', SIN(a*PI/180):5:3); END;
2 : BEGIN WRITE('Introdueix un nombre '); READLN(a); WRITELN('El logaritme neperià de ', a:4:2, ' és ', LN(a):5:3); END;
3 : BEGIN WRITE('Introdueix un nombre '); READLN(a); WRITE('Introdueix la base '); READLN(b); WRITELN('El logaritme en base ', b:4:2,' de ', a:4:2, ' és ', LN(a)/LN(b):5:3); END;
ELSE WRITELN('Opció incorrecta');
END; END.