Вы находитесь на странице: 1из 17

ENUNCIADOS EJERCICIOS

TEMA3: TIPOS DEFINIDOS POR EL USUARIO

TEMA3: ENUNCIADOS

1. Escribir un programa en Pascal que rellene un array con los nmeros pares comprendidos entre 1 y 10. 2. Escribir un programa en Pascal que rellene un array con los nmeros comprendidos entre 25 y 35 divididos por 3. 3. Escribir un programa en Pascal que rellene un array con cinco nmeros enteros consecutivos y haga una copia de ese array en otro. 4. Escribir un programa que pida al usuario n nmeros enteros para almacenarlos en un array de dimensin mayor igual que n. Posteriormente, el programa deber escribir dichos nmeros en pantalla en el orden inverso al que se introdujeron, indicando cual es el menor y el nmero de apariciones de este as como el lugar ( los lugares) que ocupaba en la lista inicial. (Ej. si la lista de enteros es: 2,-3,3,4,5,2,6,7,8,9,-3,2,1,0,0 , el menor es -3 que ocupa las posiciones 2, 3 y 11). 5. Escribir un programa que lea una serie de letras maysculas del alfabeto ingls, comprobando que se introducen ordenadas, y cree con ellas un vector. Deben almacenarse en el vector slo los datos correctos, es decir, letras maysculas del alfabeto ingls y en orden, rechazndose el resto. A continuacin el programa pedir una nueva letra y comprobar si est en el vector. Utilizar un valor centinela para el fin de datos. (Ej: Datos de entrada: A E D F T H U V Z $ [A, E, F, T, U,V,Z] ) 6. Realizar el ejercicio anterior castellano. considerando letras maysculas del alfabeto

7. Escribir un programa que Lea los datos de un vector completo y los visualice, posteriormente gire los datos del vector n posiciones hacia la derecha, comenzando de nuevo por el principio si es necesario. Ejemplo: Dado V: [4,5,6,7,8,0] tras girar los datos 2 posiciones a la derecha se obtiene: [8,0,4,5,6,7] 8. Escribir un programa que lea los datos de una matriz y los visualice por filas, indicando el nmero de la fila correspondiente. Ejemplo: 1, 2, 3, 4 5, 6, 7, 8 9,10,11,12 Resultado: Fila nmero 1: 1, 2, 3, 4 Fila nmero 2: 5, 6, 7, 8 ...............................
M ngeles Fdez de Sevilla Velln Pgina 2

Solicitar un dato y recorrer la matriz para localizarlo en la misma indicando si el dato se ha localizado y, en caso afirmativo, devolver la primera posicin en la que se encuentra (fila y columna). 9. Escribir un programa que defina los tipos de datos necesarios para leer las ventas en cinco das diferentes de los 10 empleados de una empresa y obtenga el total de ventas por empleado. Definir y utilizar un tipo de datos enumerado para los das de la semana. 10. Escribir un programa que lea una matriz cuadrada de orden menor o igual que 10, la visualice, busque sus elementos menor y mayor y la presenta en pantalla de nuevo con esos dos elementos intercambiados. 11. Escribir un programa que lea dos matrices de la pantalla de dimensiones NXM y MXR respectivamente, (N, M y R mximo 10) y obtenga la matriz producto de ambas. La salida del programa ser cada una de las matrices de entrada y el producto obtenido.

SOLUCIONES EJERCICIOS

TEMA2: TIPOS DEFINIDOS POR EL USUARIO

TEMA2: SOLUCIONES
Nmero 1. PROGRAM numpares; (**************************************************************************** Este programa rellena un array con los nmeros pares comprendidos entre 1 y 10. ****************************************************************************) USES wincrt; CONST Max = 10; TYPE Vector = ARRAY[1..max] of INTEGER; VAR v:vector; i,j, num:integer; BEGIN ClrScr; i:=1; num:=1; WHILE num<=Max DO BEGIN IF num mod 2 = 0 THEN BEGIN v[i]:=num; i:=i+1; END; num:=num+1; END; (* visualizo resultado*) FOR j:= 1 TO i-1 DO writeln(' el nmero par es ', v[j]); readln; END. Nmero 2. PROGRAM numpares; (**************************************************************************** Este programa rellena un array con los nmeros comprendidios entre 25 y 35 divididos por 3. ****************************************************************************) USES wincrt; CONST limmin = 25; limmax = 35; divi=3; max=15; TYPE enu = 1..max; Vector = ARRAY[enu] of real; VAR v:vector; i,j, num:integer;

BEGIN ClrScr; i:=1; num:= limmin; WHILE (num<=limmax)and (i <= max) DO BEGIN v[i]:=num/3; i:=i+1; num:= num+1; END; (* visualizo resultado*) FOR j:= 1 TO i-1 DO writeln(' componente del vector ',limmin+j-1,' dividida entre ', divi,' es ', v[j]:8:2); readln; END.

Nmero 3. PROGRAM numconsecutivos; (**************************************************************************** Este programa rellena un vector con 5 nmeros consecutivos y hace una copia en otro vector ****************************************************************************) USES wincrt; CONST max=5; TYPE enu = 1..max; Vector = ARRAY[enu] of integer; VAR v1,v2:vector; i, num:integer; BEGIN ClrScr; i:=1; writeln(' Introduce nmero para hallar los ',max,' nmeros consecutivos'); readln(num); For i:= 1 TO max DO BEGIN v1[i]:=num+i; END; For i:= 1 TO max DO BEGIN v2[i]:=v1[i]; END;

(* visualizo resultado*) FOR i:= 1 TO max DO BEGIN writenl(' componentes del vector ',i,' del vector 1 es ', v1[i]); writeln(' componentes del vector ',i,' del vector 2 es ', v2[i]); END; readln; END. Nmero 4. PROGRAM numveces; (**************************************************************************** El programa deber escribir dichos nmeros en pantalla en el orden inverso al que se introdujeron, indicando cual es el menor y el nmero de apariciones de este as como el lugar que ocupaba en la lista inicial*** *************************************************************************) USES wincrt; CONST maximo=15; TYPE lista=ARRAY[1..maximo] OF INTEGER; VAR v:lista; min,i,n,apariciones:integer; BEGIN {Lectura de los datos} REPEAT Writeln('Dimension vector'); Readln(n); UNTIL (n <= maximo); FOR i:=1 TO n DO BEGIN writeln('DATO DE LA POSICIN N:', i); readln(v[i]) END; {Escribir los datos en orden inverso al de lectura} writeln('LA LISTA INICIAL, EN ORDEN INVERSO, ES:'); FOR i:=n DOWNTO 1 DO writeln(V[i],' '); {Bsqueda del entero ms pequeo en v} min:= v[1]; FOR i:= 2 TO n DO IF v[i] < min THEN min:= v[i]; { Bsqueda de la(s) posicin(es) del mnimo en v} apariciones:=0; writeln('EL MINIMO ES: ', MIN, ' Y OCUPABA LA(S) POSICION(ES): '); FOR i:=1 TO n DO IF v[i]=min THEN BEGIN writeln(i, ', '); apariciones:= apariciones+1;

END; writeln('EN LA LISTA DE DATOS INICIAL'); writeln(' EN TOTAL ESTA :', apariciones,' veces' ); readkey; END. Nmero 5. PROGRAM AlfabetoIngles; (**************************************************************************** Este programa lee una serie de letras maysculas del alfabeto ingls, comprobando que se introducen ordenadas, y crea con ellas un vector. Almacenar en el vector slo los datos correctos, es decir, letras maysculas del alfabeto ingls y en orden, rechazndose el resto. A continuacin el programa pide una nueva letra y comprueba si est en el vector. Utilizar un valor centinela para el fin de datos *************************************************************************) USES wincrt; CONST max=29; fin ='$'; TYPE vector_letras = ARRAY [ 1.. max] OF CHAR; VAR letras : vector_letras; i, j, posicion : integer; letra : char; encontrado, seguir : boolean; {Lectura del primer dato} BEGIN writeln (' INTRODUCE UNA LETRA'); REPEAT {Comprobar que es letra mayscula} readln(letras [1]); UNTIL (( letras [1] >= 'A' ) AND (letras [1] <= 'Z')) OR (letras[1]= fin); {Lectura del vector, comprobando que cada letra es mayor que la anterior} i:=1; WHILE ( i <= max) AND (letras[i] <>fin ) DO BEGIN i:=i+1; REPEAT writeln ('INTRODUCE OTRA LETRA, MAYOR QUE LA ANTERIOR'); readln (letras [i]); UNTIL ((( letras [i] >= 'A' )and(letras [i] <= 'Z')) and (letras [i] >letras [i-1])) or (letras [i] =fin); END; {Compruebo si esta ordenado} FOR j:=1 to i DO writeln(letras[j]); {Solicitar una letra nueva, comprobando que lo es} writeln ( ' QUE LETRA QUIERES COMPROBAR?'); REPEAT readln( letra); UNTIL ((letra>='A') and (letra<='Z')) ;

encontrado := false; seguir := true; {Bsqueda de la nueva letra en el vector} j:= 1; WHILE (not encontrado ) AND seguir DO IF letras [ j] = letra THEN BEGIN encontrado := true; posicion := j END ELSE IF (j= max) THEN seguir:= false ELSE j:= j+1; IF ENCONTRADO THEN writeln ( ' LA LETRA ESTA EL LA POSICION :' , POSICION) ELSE writeln( ' LA LETRA NO ESTA EN EL VECTOR'); readkey; END. Nmero 6. PROGRAM AlfabetoCastellano; (**************************************************************************** Este programa lee una serie de letras maysculas del alfabeto castellano, comprobando que se introducen ordenadas, y crea con ellas un vector. Almacenar en el vector slo los datos correctos, es decir, letras maysculas del alfabeto ingls y en orden, rechazndose el resto. A continuacin el programa pide una nueva letra y comprueba si est en el vector. Utilizar un valor centinela para el fin de datos *************************************************************************) USES wincrt; CONST max=30; fin ='$'; TYPE vector_letras = ARRAY [ 1.. max] OF CHAR; VAR letras : vector_letras; i, j, posicion : integer; letra : char; encontrado, seguir : boolean; {Lectura del primer dato} BEGIN writeln (' INTRODUCE UNA LETRA'); REPEAT {Comprobar que es letra mayscula} readln(letras [1]); UNTIL (( letras [1] >= 'A' ) AND (letras [1] <= 'Z')) OR (letras[1]= fin); {Lectura del vector, comprobando que cada letra es mayor que la anterior} i:=1; WHILE ( i <= max) AND (letras[i] <>fin ) DO BEGIN i:=i+1;

REPEAT writeln ('INTRODUCE OTRA LETRA, MAYOR QUE LA ANTERIOR'); readln (letras [i]); UNTIL (( letras [i] >= 'A' ) AND (letras [i] <= 'Z') AND (letras [i] >letras [i-1])) OR ((letras [i] = '') AND (letras [i-1] <= 'N' ) AND (letras[i-1] >='A')) OR (( letras [i-1] = '') AND (letras [i] >= 'O') AND (letras [i]<= 'Z') ) OR (letras [i] =FIN); END; {Compruebo si esta ordenado} FOR j:=1 to i DO writeln(letras[j]); {Solicitar una letra nueva, comprobando que lo es} writeln ( ' QUE LETRA QUIERES COMPROBAR?'); REPEAT readln( letra); UNTIL ((letra>='A') and (letra<='Z')) OR (letra='') ; encontrado := false; seguir := true; {Bsqueda de la nueva letra en el vector} j:= 1; WHILE (not encontrado ) AND seguir DO IF letras [ j] = letra THEN BEGIN encontrado := true; posicion := j END ELSE IF (letras [j]<>'') AND (letras[j]> LETRA ) OR ((letras[j]='') AND (letra<='N'))OR ((letras[j]>='O') AND (letra = '')) OR (j= MAX) THEN seguir:= false ELSE j:= j+1; IF ENCONTRADO THEN writeln ( ' LA LETRA ESTA EL LA POSICION :' , POSICION) ELSE writeln( ' LA LETRA NO ESTA EN EL VECTOR'); readkey; END. Nmero 7. PROGRAM GiroVectorVersion1; (**************************************************************************** Este programa lee los datos de un vector completo , los visualice, posteriormente los gira los datos del vector n posiciones hacia la derecha, comenzando de nuevo por el principio si es necesario. *************************************************************************) USES wincrt; USES wincrt; CONST N=6; valor_nulo=0; TYPE tdimension=1..N; tvector=array[tdimension] of integer;

10

VAR i,j:tdimension; v: tvector; veces, aux:integer;

BEGIN {lectura de los datos del vector completo} FOR i:= 1 TO N DO BEGIN writeln(' valor del vector ', i); readln( v[i]); END; {visualizar los datos del vector completo} FOR i:= 1 TO N DO write( v[i],' , '); {girar los datos del vector} writeln(' cuantas veces giramos el vector '); readln (veces); FOR j:=1 TO veces DO BEGIN aux:= v[n]; FOR i:= n DOWNTO 2 DO v[i]:= v[i-1]; v[1]:= aux; END; writeln; {visualizar los datos del vector completo} FOR i:= 1 TO N DO write( v[i],' , '); Readkey; end.

PROGRAM GiroVectorVersion2; (**************************************************************************** Este programa lee los datos de un vector completo , los visualice, posteriormente los gira los datos del vector n posiciones hacia la derecha, comenzando de nuevo por el principio si es necesario. *************************************************************************) USES wincrt; CONST max=20; TYPE dim=1..max; vector = ARRAY [ dim] OF integer; VAR w,v:vector; i,n,f:integer;

BEGIN REPEAT writeln(' Escriba dimensin del vector'); readln(f); UNTIL (f>= 1 ) AND (f<= max); FOR i:= 1 TO f DO BEGIN writeln (' Dime datos del vector',i); readln(v[i]); END; FOR i:= 1 TO f DO BEGIN writeln (' La componente ',i,' es: ', v[i]); END; writeln('Escriba posiciones que girara el vector'); readln(n); FOR i:= 1 TO f DO BEGIN IF (n+i)MOD f <>0 THEN w[(n+i)MOD f]:=v[i] ELSE w[f]:=v[i] END; FOR i:= 1 TO f DO BEGIN v[i]:=w[i]; writeln(v[i]); END; readkey; END. Nmero 8. PROGRAM leerMatriz; (**************************************************************************** Este programa lee datos de una matriz y los visualice por filas, indicando el nmero de la fila correspondiente. Solicita un dato y recorrer la matriz para localizarlo en la misma indicando si el dato se ha localizado y, en caso afirmativo, devuelve la primera posicin en la que se encuentra (fila y columna). *************************************************************************) USES wincrt; CONST df=10; dc=12; TYPE dfe=1..df; dce=1..dc; matriz = ARRAY [dfe,dce] OF integer; VAR m:matriz; i,j,f,c,posf,posc:byte; num:integer; enc:boolean; BEGIN

12

REPEAT writeln(' Escriba nmero de filas'); readln(f); writeln(' Escriba nmero de columnas'); readln(c); UNTIL ((f>= 1 ) AND (f<= df))AND ((c>= 1 ) AND (c<= dc)); FOR i:= 1 TO f DO FOR j:= 1 TO c DO BEGIN writeln (' Dime datos matriz fila ',i, ' columna ',j); readln(m[i,j]); END; FOR i:= 1 TO f DO BEGIN FOR j:= 1 TO c DO write (m[i,j],' '); writeln; END; writeln('Dime dato que buscas'); readln(num); enc:=false; i:=1; j:=1; WHILE (i<=f) AND (NOT enc) DO BEGIN WHILE (j<=c) AND (NOT enc) DO BEGIN IF m[i,j] = num THEN BEGIN enc:= true; posf:=i; posc:=j; END; j:=j+1; END; i:=i+1; j:=1; END; IF enc THEN writeln( 'las posiciones de la matriz son: ',posf,' y ',posc) ELSE writeln(' el elemento no esta en la matriz'); readkey; END.

Nmero 9. PROGRAM TiposVentas; (**************************************************************************** Este programa define tipos de datos necesarios para leer las ventas en cinco das diferentes de 10 empleados de una empresa y ha de obtener el total de ventas por empleado. Empleando un tipo de datos enumerado para los das de la semana. *************************************************************************) USES wincrt;
TYPE VENDEDOR=1..10; DIAS= (Lunes, Martes, Miercoles, Jueves, Viernes); LABORABLES=Lunes..Viernes; VECTORVENTAS= ARRAY [VENDEDOR, LABORABLES] OF REAL; VECTORVENDEDORES = ARRAY [VENDEDOR] OF REAL; VAR VENTAS: VECTORVENTAS; {Almacenar las ventas por empleado y da} NVENDEDOR: VENDEDOR; DIA: DIAS; VENDEDORES: VECTORVENDEDORES; {Almacenar los totales de ventas por empleado} SUMA, SUMATOTAL: REAL; BEGIN {Lectura de los datos de la matrz} FOR NVENDEDOR := 1 TO 10 DO FOR DIA:= Lunes TO Viernes DO BEGIN writeln ('Ventas del vendedor:', NVENDEDOR, 'el:'); CASE DIA OF {NO SE PUEDE ESCRIBIR EL VALOR DE TIPO ENUMERADO} Lunes : writeln('Lunes'); Martes : writeln('Martes'); Miercoles : writeln('Mircoles'); Jueves : writeln('Jueves'); Viernes : writeln('Viernes'); END; {CASE} readln (VENTAS [NVENDEDOR, DIA]) END; {FOR} {Calculo de la suma de ventas para cada vendedor y en total} SUMATOTAL := 0; FOR NVENDEDOR := 1 TO 10 DO BEGIN SUMA := 0; FOR DIA := Lunes TO Viernes DO SUMA := SUMA + VENTAS [NVENDEDOR, DIA]; VENDEDORES [NVENDEDOR]:= SUMA ; SUMATOTAL := SUMATOTAL + SUMA; END; {Resultados} FOR NVENDEDOR:= 1 TO 10 DO writeln ('El total de ventas del vendedor nmero ', NVENDEDOR, ' es ', VENDEDORES[NVENDEDOR]:5:2); writeln ('Las ventas totales son: ', SUMATOTAL:5:2) END.

Nmero 10. PROGRAM MatrizCuadrada;

14

(**************************************************************************** Este programa lee una matriz cuadrada de orden menor o igual que 10, la visualiza, busca sus elementos menor y mayor y los presenta en pantalla de nuevo con esos dos elementos intercambiados. *************************************************************************)
USES wincrt; CONST N=10; M=10 (U otros cualesquiera) TYPE Matriz = ARRAY [1..N , 1..M] OF INTEGER; VAR V : Matriz; I, J, MAYOR, MENOR: INTEGER; POSMENOR, POSMAYOR:ARRAY[1..2] OF INTEGER; {Vectores que almacenan las posiciones (fila y columna) del mayor y menor} BEGIN {Lectura} FOR i 1 TO N DO FOR j1 TO M DO BEGIN writeln(Dato: , i:2, j:2, ?); readln(v[i,j] ); END; {Visualizar la matrz} FOR I:=1 TO N DO BEGIN FOR J:=1 TO M DO write(V[I,J]:4); {Visualizar la fila} writeln; {Salto de lnea para la siguiente fila de la matriz} END; {Buscar mximo y mnimo, guardando las posiciones de ambos} MAYOR:=V[1,1]; MENOR:=V[1,1]; FOR i1 TO N DO FOR j1 TO M DO IF V[i,j]> MAYOR THEN BEGIN MAYOR := V[i,j]; POSMAYOR[2]:=J; POSMAYOR[1]:=I; END ELSE IF V[i,j] < MENOR THEN BEGIN MENOR := V[i,j]; POSMENOR[2]:=J; POSMENOR[1]:=I; END; writeln (El menor es , MENOR, y est en la fila:, posmayor[1], y columna:, posmayor[2]); writeln (El mayor es , MAYOR, y est en la fila:, posmenor[1], y columna:, posmenor[2]); {Intercambio de mximo y mnimo en la matriz} AUX:=V[FILMAYOR,COLMAYOR]; V[FILMAYOR,COLMAYOR]:= V[FILMENOR,COLMENOR]; V[FILMENOR,COLMENOR]:=AUX;

writeln(LA MATRIZ CON LOS DATOS INTERCAMBIADOS ES:) FOR I:=1 TO N DO BEGIN FOR J:=1 TO M DO write(V[I,J]:4);{Visualizar la fila} writeln; {Salto de lnea para la siguiente fila de la matriz} END; Readkey; END.

Nmero 11. PROGRAM MultiplicaMatrices; (**************************************************************************** Este programa lee dos matrices de la pantalla de dimensiones NXM y MXR respectivamente, (N, M y R mximo 10) y obtenga la matriz producto de ambas. La salida del programa ser cada una de las matrices de entrada y el producto obtenido. *************************************************************************) USES wincrt; {LEE DOS MATRICES, DE DIMENSIONES N*M Y M*R, OBTENIENDO SU PRODUCTO} CONST MAX=10; TYPE MATRIZ=ARRAY[1..MAX,1..MAX] OF INTEGER; VAR A,B,C:MATRIZ; N,M,S,R:1..MAX; {DIMENSIONES VALIDAS DE 1 A MAX} I,j,K,SUMA:integer;

BEGIN REPEAT writeln('DAME LAS DIMENSIONES DE LA PRIMERA MATRIZ, (MAXIMO:', MAX, ')'); read(N,M); writeln('DAME LAS DIMENSIONES DE LA SEGUNDA MATRIZ ,(MAXIMO:', MAX, ')'); read(S,R); UNTIL ( M=S) ; writeln('DATOS DE LA PRIMERA MATRIZ'); FOR I:=1 TO N DO FOR J:=1 TO M DO BEGIN writeln('DAME EL ELEMENTO (',I, ' , ',J,') '); readln(A[I,J]); END; writeln('DATOS DE LA SEGUNDA MATRIZ'); FOR I:=1 TO M DO FOR J:=1 TO R DO BEGIN writeln('DAME EL ELEMENTO (',I, ' , ',J,') '); readln(B[I,J]) END; FOR I:=1 TO N DO FOR J:=1 TO M DO

16

BEGIN SUMA:=0; FOR K:=1 TO R DO SUMA:= SUMA + A[I,K]*B[K,J]; C[I,J]:=SUMA; END; writeln('PRIMERA MATRIZ:'); writeln; FOR I:=1 TO N DO BEGIN FOR J:=1 TO M DO write(A[I,J], ' '); writeln; {LINEA SIGUIENTE} END; writeln; writeln('SEGUNDA MATRIZ:'); writeln; FOR I:=1 TO M DO BEGIN FOR J:=1 TO R DO write(B[I,J], ' '); writeln; {LINEA SIGUIENTE} END;

writeln; writeln('DATOS DE LA MATRIZ PRODUCTO'); writeln; FOR I:=1 TO N DO BEGIN FOR J:=1 TO R DO write(C[I,J], ' '); writeln; {LINEA SIGUIENTE} END; READKEY; END.

Вам также может понравиться