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


Prácticas Pascal: Ejercicios de Vectorización y Operaciones Matriciales - Prof. 7337, Ejercicios de Ingeniería Mecánica

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

2010/2011

Subido el 15/01/2011

mpluton
mpluton 🇪🇸

4.4

(11)

5 documentos

1 / 88

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Fonaments d’Informàtica
Solucions de les pràctiques
Curs 2001/02
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58

Vista previa parcial del texto

¡Descarga Prácticas Pascal: Ejercicios de Vectorización y Operaciones Matriciales - Prof. 7337 y más Ejercicios en PDF de Ingeniería Mecánica solo en Docsity!

Fonaments d’Informàtica

Solucions de les pràctiques

Curs 2001/

Pràctiques Pascal Pràctica 1. Arquitectura del computador

Pràctica 1. Arquitectura del computador

1.2 Esquema de l’arquitectura d’un ordinador:

Instrucció

Instrucció

Instrucció

Instrucció

Dada

Dada

Dada

Memòria

Registres

Mòduls d’E/S

CPU

Unitat de control

del Programa

Unitat Lògica i

Aritmètica (ALU)

Registres

Bus de dades

Bus de memòria

DMA

Perifèrics (món exterior):

discos, teclat, vídeo, impressora, etc.

Pràctiques Pascal Pràctica 2. Codificació

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) = -

Pràctiques Pascal Pràctica 2. Codificació

+ 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.

123.12(10 = 1111011.000111101011100001 (2 = 1.111011000111101011100001 (2 × 2

6

  • 123.12 és positiu, per tant el signe és representa amb 0.
  • En excés 127, l’exponent 6 es representa com 6+127 = 133(10 = 10000101(
  • La mantissa és 111011000111101011100001, que té 24 bits quan hauria de tenir 23 bits. Truncant la mantissa a 23 bits obtenim la nova mantissa 11101100011110101110000 i arrodonint a 23 bits obtenim la nova mantissa
    1. Treballarem amb el valor arrodonit, donat que amb ell obtenim una precisió més gran.

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

Pràctiques Pascal Pràctica 2. Codificació

01000001 1 01101100 1 01110101 0 01101101 0 01101110 0 01100101 1

Pràctiques Pascal Pràctica 3. Entorn Turbo Pascal

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

  • a 1.7e 38 , amb 11-

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.

Pràctiques Pascal Pràctica 4. Seqüencials

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.

Pràctiques Pascal Pràctica 4. Seqüencials

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.

Pràctiques Pascal Pràctica 5. Estructures alternatives

c) c és un símbol de l’alfabet.

((c >= 'a') AND (c <= 'z')) OR ((c >= 'A') AND (c <= 'Z'))

c in ['a'..'z' , 'A'..'Z']

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:

  • Per què s’utilitzen estructures alternatives niuades? Per aprofitar la

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.

  • Fa servir comparacions repetides o innecessàries? No. Es podria fer d’una

altra manera amb menys comparacions? Crec que no.

Programa en Pascal

PROGRAM A5_3;

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);

Pràctiques Pascal Pràctica 5. Estructures alternatives

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 es pot emprar l’alternativa múltiple a Pascal i quan no? Es pot emprar

quan l’expressió i els valors a comparar són d’un tipus numerable, és a dir, enter o caràcter.

  • Es podria escriure aquest programa amb estructures alternatives IF niuades,

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');

  • Quines avantatges té llavors el CASE sobre l’IF? Millor llegibilitat i més

facilitat per afegir noves comparacions.

Programa en Pascal

PROGRAM A5_4;

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');

Pràctiques Pascal Pràctica 5. Estructures alternatives

Programa en Pascal

PROGRAM A5_6;

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

PROGRAM A5_7;

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')

Pràctiques Pascal Pràctica 5. Estructures alternatives

ELSE

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

  • b x + c = 0. La

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ó:

  • L’equació és de primer grau ( a = 0), però es pot calcular el resultat fent servir l’algorisme de l’exercici 5.5.
  • Les arrels són imaginàries ( b

2

  • 4 ac < 0), però es pot mostrar el resultat separant la part real de la imaginària.

En Pascal, per calcular l’arrel quadrada podem utilitzar SQRT(x) i per elevar al

quadrat SQR(x).

Programa en Pascal

PROGRAM A5_8;

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

Pràctiques Pascal Pràctica 5. Estructures alternatives

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:

  • Els mesos 1, 3, 5, 7, 8, 10 i 12 tenen 31 dies.
  • Els mesos 4, 6, 9 i 11 tenen 30 dies.
  • El mes 2 te 28 dies, excepte quan l’any és divisible per 4, que té 29 dies.

Programa en Pascal

PROGRAM A5_10;

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:

  1. Calcular el sinus d’un nombre a.

Pràctiques Pascal Pràctica 5. Estructures alternatives

  1. Calcular el logaritme neperià d’un nombre a.
  2. Calcular el logaritme en base b d’un nombre a.

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

PROGRAM A5_11;

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.