Fundamentos de Programación en Pascal: Ejercicios Resueltos de Cadenas, Arrays y Matrices
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 26,45 KB
Operaciones con Cadenas y Caracteres en Pascal
Esta sección aborda ejercicios fundamentales para manipular cadenas de texto y caracteres individuales en Pascal, utilizando funciones intrínsecas del lenguaje.
Ejercicio 67: Obtener la Longitud de una Cadena
Obtener la longitud de la cadena "esternocleidomastoideo", utilizando la función LENGTH(S), que devuelve la longitud de la cadena S.
PROGRAM EJER67;
USES CRT;
VAR
cadena: STRING;
BEGIN
ClrScr;
WRITELN('Introduzca una cadena para saber su longitud:');
WRITELN('');
READLN(cadena);
WRITELN('');
WRITE('La longitud de la cadena es de: ');
WRITE(LENGTH(cadena), ' caracteres');
END.
Ejercicio 68: Buscar Subcadenas en Pascal
Obtener la primera posición en la que comienza la subcadena "fragi" en la cadena "supercalifragilisticoexpialidoso". Utilizar la función POS(SB,S) que devuelve la posición de la primera aparición de la subcadena SB en la cadena S.
PROGRAM EJER68;
USES CRT;
VAR
cadena: STRING;
subcadena: STRING;
posi: INTEGER;
BEGIN
ClrScr;
cadena := 'supercalifragilisticoexpialidoso';
subcadena := 'fragi';
posi := POS(subcadena, cadena);
WRITE(posi);
END.
Ejercicio 69: Transformar Cadena a Mayúsculas
Transformar la cadena "Lenguaje Pascal" en la cadena "LENGUAJE PASCAL". Utilizar la función UPCASE(C) que transforma un carácter C a mayúscula.
PROGRAM EJER69;
USES CRT;
VAR
cadena: STRING;
i: INTEGER;
BEGIN
ClrScr;
cadena := 'Lenguaje Pascal';
FOR i := 1 TO LENGTH(cadena) DO
cadena[i] := UPCASE(cadena[i]);
WRITE(cadena);
END.
Ejercicio 70: Transformar Cadena a Minúsculas
Transformar la cadena "VACA" en la cadena "vaca".
PROGRAM EJER70;
USES CRT;
VAR
cadena: STRING;
i, v_ascii: INTEGER;
BEGIN
ClrScr;
cadena := 'VACA';
FOR i := 1 TO LENGTH(cadena) DO
BEGIN
v_ascii := ORD(cadena[i]);
cadena[i] := (CHR(v_ascii + 32)); { Suma 32 para convertir a minúscula en ASCII }
END;
WRITE(cadena);
END.
Cálculos Numéricos y Lógica Básica en Pascal
Aquí se presentan ejercicios que cubren operaciones aritméticas, control de flujo y cálculos estadísticos básicos.
Ejercicio 71: Cálculos Aritméticos con Cuatro Datos
Escribir un programa en Pascal que lea 4 datos, calcule y visualice en pantalla su producto, suma y media aritmética.
PROGRAM EJER71;
USES CRT;
VAR
a, b, c, d: REAL;
producto, suma, media: REAL;
BEGIN
ClrScr;
WRITELN('Introduzca 4 datos para calcular las soluciones:');
WRITELN('');
WRITE('a: ');
READLN(a);
WRITE('b: ');
READLN(b);
WRITE('c: ');
READLN(c);
WRITE('d: ');
READLN(d);
WRITELN('');
producto := a * b * c * d;
suma := a + b + c + d;
media := suma / 4; { Corregido: la media de 4 números es la suma dividida por 4 }
WRITELN('El valor del producto de los números es: ', producto:10:2);
WRITELN('El valor de la suma de los números es: ', suma:10:2);
WRITELN('El valor de la media de los números es: ', media:10:2);
END.
Ejercicio 74: Visualización de Números con Control de Usuario
Escribir un programa en Pascal que escriba los números comprendidos entre 1 y 1000. El programa escribirá en la pantalla los números en grupos de 20, solicitando al usuario si quiere o no continuar visualizando el siguiente grupo de números.
PROGRAM EJER74;
USES CRT;
VAR
num: INTEGER;
resp: CHAR;
BEGIN
ClrScr;
FOR num := 1 TO 1000 DO { Corregido: el rango es hasta 1000 }
BEGIN
WRITELN(num);
IF (num MOD 20) = 0 THEN
BEGIN
WRITE('¿DESEA CONTINUAR? (S/N) --> ');
READLN(resp);
IF UPCASE(resp) <> 'S' THEN
BEGIN
WRITELN('Este programa ha finalizado.');
EXIT;
END;
END;
END;
END.
Ejercicio 75: Suma y Media de Números Pares e Impares
Escribir un programa en Pascal que calcule, independientemente, la suma y la media de los números pares e impares comprendidos entre 1 y 200.
PROGRAM EJER75;
USES CRT;
VAR
media_p, media_i: REAL;
suma_p, suma_i: LONGINT;
i, total_p, total_i: LONGINT;
BEGIN
ClrScr;
suma_p := 0; { Inicialización de variables }
suma_i := 0;
total_p := 0;
total_i := 0;
FOR i := 1 TO 200 DO
BEGIN
IF (i MOD 2) = 0 THEN
BEGIN
suma_p := suma_p + i;
total_p := total_p + 1;
END
ELSE
BEGIN
suma_i := suma_i + i;
total_i := total_i + 1;
END;
END;
IF total_i > 0 THEN
media_i := suma_i / total_i
ELSE
media_i := 0; { Evitar división por cero si no hay impares }
IF total_p > 0 THEN
media_p := suma_p / total_p
ELSE
media_p := 0; { Evitar división por cero si no hay pares }
WRITELN('La suma de los impares es: ', suma_i);
WRITELN('La suma de los pares es: ', suma_p);
WRITELN('La media de los impares es: ', media_i:5:2);
WRITELN('La media de los pares es: ', media_p:5:2);
END.
Ejercicio 76: Cálculo de Importe de Factura con IVA y Descuento
Escribir un programa en Pascal que calcule el importe de una factura sabiendo que el IVA a aplicar es del 12% y que si el importe bruto de la factura es superior a 50.000 pts se debe realizar un descuento del 5%.
PROGRAM EJER76;
USES CRT;
VAR
i_bruto, i_neto: REAL;
CONST
IVA = 0.12;
UMBRAL_DESCUENTO = 50000;
PORCENTAJE_DESCUENTO = 0.05;
BEGIN
ClrScr;
WRITE('Escriba el importe bruto: ');
READLN(i_bruto);
WRITELN('');
{ Aplicar IVA }
i_neto := i_bruto * (1 + IVA);
{ Aplicar descuento si corresponde }
IF i_neto > UMBRAL_DESCUENTO THEN
BEGIN
i_neto := i_neto * (1 - PORCENTAJE_DESCUENTO);
WRITE('El importe neto con descuento del 5% es de: ', i_neto:5:2, ' pts.');
END
ELSE
BEGIN
WRITE('El importe neto sin descuento es de: ', i_neto:5:2, ' pts.');
END;
END.
Ejercicio 77: Suma de Cuadrados de los Primeros 100 Números
Escribir un programa en Pascal que calcule la suma de los cuadrados de los 100 primeros números enteros.
PROGRAM EJER77;
USES CRT;
VAR
x: INTEGER;
suma: REAL;
BEGIN
ClrScr;
suma := 0; { Inicialización de la suma }
FOR x := 1 TO 100 DO
BEGIN
suma := suma + SQR(x);
END;
WRITE(suma);
END.
Ejercicio 78: Conversión de Unidades de Longitud
Escribir un programa en Pascal que visualice una tabla de conversión de kilómetros a millas marinas y millas terrestres:
- 1 milla marina = 1852 metros
- 1 milla terrestre = 1609 metros
PROGRAM EJER78;
USES CRT;
VAR
m, m_mar, m_terr: REAL; { metros, millas marinas y terrestres }
BEGIN
ClrScr;
WRITE('Introduzca el número de metros: ');
READLN(m);
WRITELN('');
m_mar := m / 1852;
m_terr := m / 1609;
WRITE(m:5:2, ' metros son: ', m_mar:5:2, ' millas marinas y ');
WRITE(m_terr:5:2, ' millas terrestres');
END.
Ejercicio 79: Suma de Números Negativos en Pascal
Escribir un programa en Pascal que lea 10 datos desde el teclado y sume solo aquellos que sean negativos.
PROGRAM EJER79;
USES CRT;
VAR
y, suma: REAL;
x: INTEGER;
BEGIN
ClrScr;
suma := 0; { Inicialización de la suma }
WRITELN('Debe introducir 10 datos, se sumarán solo los negativos:');
WRITELN('');
FOR x := 1 TO 10 DO
BEGIN
WRITE('Introduzca el dato ', x:2, ': ');
READLN(y);
IF y < 0 THEN
suma := suma + y;
END;
WRITELN('');
WRITE('El resultado de la suma de los números negativos es: ');
WRITELN(suma:5:2);
END.
Ejercicio 80: Cálculo de Sueldo Semanal por Turnos
Escribir un programa en Pascal que calcule el sueldo semanal de un trabajador a partir del número de horas trabajadas por día y las siguientes tarifas:
- 600 pts/hora: Turno de mañana
- 800 pts/hora: Turno de noche
- 1000 pts/hora: Turno de días festivos
PROGRAM EJER80;
USES CRT;
VAR
t_manana, t_noche, t_festivos: INTEGER;
total: LONGINT;
BEGIN
ClrScr;
WRITE('Introduzca las horas trabajadas por día, en cada turno, ');
WRITELN(' para calcular el sueldo semanal.');
WRITELN('');
WRITE('Horas del turno de mañana: ');
READLN(t_manana);
WRITE('Horas del turno de noche: ');
READLN(t_noche);
WRITE('Horas del turno de días festivos: ');
READLN(t_festivos);
WRITELN('');
total := (600 * t_manana) + (800 * t_noche) + (1000 * t_festivos);
WRITE('El sueldo semanal es de: ', total);
END.
Manejo de Arrays (Vectores) en Pascal
Esta sección se enfoca en la declaración, inicialización y manipulación de arrays unidimensionales.
Ejercicio 81: Rellenar un Array con Números Consecutivos
Escribir un programa en Pascal que rellene un array con los números enteros comprendidos entre 4 y 14.
PROGRAM EJER81;
USES CRT;
VAR
arr_num: ARRAY [4..14] OF INTEGER;
i: INTEGER;
BEGIN
ClrScr;
FOR i := 4 TO 14 DO
arr_num[i] := i;
FOR i := 4 TO 14 DO
BEGIN
WRITELN('Número: ', arr_num[i]);
END;
END.
Ejercicio 82: Rellenar un Array con Números Pares
Escribir un programa en Pascal que rellene un array con los números pares comprendidos entre 1 y 10.
PROGRAM EJER82;
USES CRT;
VAR
arr_num: ARRAY [1..10] OF INTEGER;
i: INTEGER;
BEGIN
ClrScr;
i := 1;
WHILE i <= 10 DO
BEGIN
arr_num[i] := i;
IF (i MOD 2) = 0 THEN
BEGIN
WRITELN(arr_num[i]);
END;
i := i + 1;
END;
END.
Ejercicio 83: Rellenar un Array con Números Divididos
Escribir un programa en Pascal que rellene un array con los números comprendidos entre 25 y 35 divididos por 3.
PROGRAM EJER83;
USES CRT;
VAR
arr_num: ARRAY [1..11] OF REAL; { El tamaño del array debe ser suficiente para el rango de índices usado }
i, j: INTEGER; { Se necesita un índice para el array y otro para el valor }
BEGIN
ClrScr;
j := 1; { Índice para el array }
FOR i := 25 TO 35 DO
BEGIN
arr_num[j] := i / 3;
WRITELN(arr_num[j]:5:2);
j := j + 1;
END;
END.
Ejercicio 84: Copiar Contenido de un Array a Otro
Escribir un programa en Pascal que rellene un array con cinco números enteros consecutivos y haga una copia de ese array en otro.
PROGRAM EJER84;
USES CRT;
VAR
arr_num1, arr_num2: ARRAY [5..10] OF INTEGER;
i: INTEGER;
BEGIN
ClrScr;
FOR i := 5 TO 10 DO
BEGIN
arr_num1[i] := i;
arr_num2[i] := arr_num1[i];
END;
WRITELN('Contenido del segundo array (copia):');
FOR i := 5 TO 10 DO
WRITELN(arr_num2[i]);
END.
Ejercicio 85: Multiplicar Elementos de un Array y Copiar
Escribir un programa en Pascal que rellene un array de 10 elementos con los números comprendidos entre 23 y 32 y copie en otro array esos números multiplicados por 0.35.
PROGRAM EJER85;
USES CRT;
VAR
arr_num1, arr_num2: ARRAY [23..32] OF REAL;
i: INTEGER;
BEGIN
ClrScr;
FOR i := 23 TO 32 DO
BEGIN
arr_num1[i] := i;
arr_num2[i] := (arr_num1[i] * 0.35);
END;
WRITELN('Elementos del segundo array (multiplicados por 0.35):');
FOR i := 23 TO 32 DO
WRITELN(arr_num2[i]:5:2);
END.
Ejercicio 86: Suma de los Primeros Números Pares en un Array
Escribir un programa en Pascal que rellene un array con los veinte primeros números pares y calcule su suma.
PROGRAM EJER86;
USES CRT;
VAR
arr_pares: ARRAY [1..20] OF INTEGER; { Array para los 20 primeros pares }
i, j, suma: INTEGER;
BEGIN
ClrScr;
suma := 0; { Inicialización de la suma }
j := 1; { Índice para el array arr_pares }
FOR i := 1 TO 40 DO { Iterar hasta encontrar 20 números pares }
BEGIN
IF (i MOD 2) = 0 THEN
BEGIN
IF j <= 20 THEN { Asegurarse de no exceder el tamaño del array }
BEGIN
arr_pares[j] := i;
suma := suma + i;
j := j + 1;
END;
END;
END;
WRITELN('La suma de los 20 primeros números pares es: ', suma);
END.
Ejercicio 87: Calcular la Media Aritmética de un Array
Escribir un programa en Pascal que solicite cinco números, los almacene en un array y luego calcule la media aritmética de esos números.
PROGRAM EJER87;
USES CRT;
VAR
arr_num: ARRAY [1..5] OF REAL;
i: INTEGER;
num_input: REAL; { Variable para leer la entrada, ya que arr_num es REAL }
media: REAL;
BEGIN
ClrScr;
media := 0; { Inicialización de la media }
WRITELN('Escriba 5 números para calcular su media aritmética: ');
FOR i := 1 TO 5 DO
BEGIN
WRITE('Número ', i, ': ');
READLN(num_input);
arr_num[i] := num_input;
END;
FOR i := 1 TO 5 DO
media := media + arr_num[i];
media := media / 5; { La media es la suma dividida por el número de elementos (5) }
WRITELN('La media aritmética es: ', media:5:2);
END.
Ejercicio 88: Encontrar el Valor Máximo en un Array
Escribir un programa en Pascal que, tras asignar los números 23, 45, 68, 99, 10, 15 y 4 a un array, determine la posición del array en la que se encuentra el máximo valor.
PROGRAM EJER88;
USES CRT;
CONST
arr_num: ARRAY [1..7] OF INTEGER = (23, 45, 68, 99, 10, 15, 4);
VAR
i: INTEGER;
max_val: INTEGER;
pos_max: INTEGER;
BEGIN
ClrScr;
max_val := arr_num[1]; { Inicializar con el primer elemento }
pos_max := 1;
FOR i := 2 TO 7 DO
BEGIN
IF arr_num[i] > max_val THEN
BEGIN
max_val := arr_num[i];
pos_max := i;
END;
END;
WRITE('El número mayor es: ', max_val, ' y su posición es: ', pos_max);
END.
Ejercicio 89: Suma de Elementos Positivos y Negativos en un Array
Escribir un programa en Pascal que, tras asignar los números -2, 5, 8, -9, 10, 15 y -4 a un array, calcule, independientemente, la suma de los elementos positivos y negativos.
PROGRAM EJER89;
USES CRT;
CONST
arr_num: ARRAY [1..7] OF INTEGER = (-2, 5, 8, -9, 10, 15, -4);
VAR
i: INTEGER;
suma_p, suma_i: INTEGER;
BEGIN
ClrScr;
suma_p := 0; { Inicialización de sumas }
suma_i := 0;
FOR i := 1 TO 7 DO
BEGIN
IF arr_num[i] >= 0 THEN
suma_p := suma_p + arr_num[i]
ELSE
suma_i := suma_i + arr_num[i];
END;
WRITELN('La suma de los números positivos es: ', suma_p); { Corregido: positivos }
WRITELN('La suma de los números negativos es: ', suma_i); { Corregido: negativos }
END.
Ejercicio 90: Encontrar Máximo y Mínimo en un Array
Escribir un programa en Pascal que, tras asignar los números 23, 45, 68, 99, 10, 15 y 4 a un array, determine las posiciones del array en las que se encuentran el máximo y el mínimo valor.
PROGRAM EJER90;
USES CRT;
CONST
arr: ARRAY [1..7] OF INTEGER = (23, 45, 68, 99, 10, 15, 4);
VAR
i, mayor, menor, posi_mayor, posi_menor: INTEGER;
BEGIN
ClrScr;
mayor := arr[1];
menor := arr[1];
posi_mayor := 1;
posi_menor := 1;
FOR i := 2 TO 7 DO
BEGIN
IF arr[i] > mayor THEN
BEGIN
mayor := arr[i];
posi_mayor := i;
END;
IF arr[i] < menor THEN
BEGIN
menor := arr[i];
posi_menor := i;
END;
END;
WRITELN('El número mayor es: ', mayor:3);
WRITELN('Su posición es: ', posi_mayor:3);
WRITELN('');
WRITELN('El número menor es: ', menor:3);
WRITELN('Su posición es: ', posi_menor:3);
END.
Operaciones con Matrices (Arrays Bidimensionales) en Pascal
Esta sección explora la manipulación de arrays bidimensionales, incluyendo búsqueda, suma y transformaciones.
Ejercicio 91: Encontrar el Valor Máximo en una Matriz
Escribir un programa en Pascal que determine la posición de la siguiente matriz en la que se encuentra el valor máximo.
23 45 68
34 99 12
25 78 89
PROGRAM EJER91;
USES CRT;
CONST
arr_num: ARRAY[1..3, 1..3] OF INTEGER = (
(23, 45, 68),
(34, 99, 12),
(25, 78, 89)
);
VAR
i, j, val_max, pos_max_i, pos_max_j: INTEGER;
BEGIN
ClrScr;
val_max := arr_num[1, 1];
pos_max_i := 1;
pos_max_j := 1;
FOR i := 1 TO 3 DO
BEGIN
FOR j := 1 TO 3 DO
BEGIN
IF arr_num[i, j] > val_max THEN
BEGIN
val_max := arr_num[i, j];
pos_max_i := i;
pos_max_j := j;
END;
END;
END;
WRITELN('VALOR MÁXIMO: ', val_max:3, ' POSICIÓN: (', pos_max_i:1, ',', pos_max_j:1, ')'); { Corregido formato de salida }
END.
Ejercicio 92: Suma de Elementos Positivos y Negativos en una Matriz
Escribir un programa en Pascal que sume, independientemente, los elementos positivos y negativos de la siguiente matriz:
-12 23 32
45 -56 -10
25 78 89
PROGRAM EJER92;
USES CRT;
CONST
arr_num: ARRAY [1..3, 1..3] OF INTEGER = (
(-12, 23, -32),
(45, -56, -10),
(25, 78, 89)
);
VAR
i, j, suma_p, suma_i: INTEGER;
BEGIN
ClrScr;
suma_p := 0; { Inicialización de sumas }
suma_i := 0;
FOR i := 1 TO 3 DO
BEGIN
FOR j := 1 TO 3 DO
BEGIN
IF arr_num[i, j] >= 0 THEN
suma_p := suma_p + arr_num[i, j]
ELSE
suma_i := suma_i + arr_num[i, j];
END;
END;
WRITELN('La suma de los números positivos es: ', suma_p); { Corregido: positivos }
WRITELN('La suma de los números negativos es: ', suma_i); { Corregido: negativos }
END.
Ejercicio 93: Multiplicar Elementos de una Matriz por un Escalar
Escribir un programa en Pascal que multiplique por dos los elementos de la siguiente matriz:
4 7 8
6 9 1
5 0 3
PROGRAM EJER93;
USES CRT;
CONST
arr_num: ARRAY [1..3, 1..3] OF INTEGER = (
(4, 7, 8),
(6, 9, 1),
(5, 0, 3)
);
VAR
mult, i, j: INTEGER;
BEGIN
ClrScr;
FOR i := 1 TO 3 DO
BEGIN
FOR j := 1 TO 3 DO
BEGIN
mult := arr_num[i, j] * 2;
WRITELN('Elemento (', i, ',', j, ') multiplicado por 2: ', mult:3);
END;
END;
END.
Ejercicio 94: Almacenar Cuadrados en una Matriz
Escribir un programa en Pascal que almacene en la segunda fila de la siguiente matriz los cuadrados de los datos de la primera fila:
3 6 7 8 9
0 0 0 0 0
PROGRAM EJER94;
USES CRT;
VAR { Cambiado a VAR porque se modificará }
arr_num: ARRAY [1..2, 1..5] OF INTEGER = (
(3, 6, 7, 8, 9),
(0, 0, 0, 0, 0)
);
VAR
j, cuad: INTEGER;
BEGIN
ClrScr;
FOR j := 1 TO 5 DO
BEGIN
cuad := SQR(arr_num[1, j]); { Cuadrado del elemento de la primera fila }
arr_num[2, j] := cuad; { Almacenar en la segunda fila }
WRITELN('Elemento [2,', j, '] (cuadrado): ', arr_num[2, j]);
END;
END.
Ejercicio 95: Suma de Filas en una Matriz
Escribir un programa en Pascal que sume los datos de cada una de las filas de la siguiente matriz; el resultado se almacenará en la última posición de cada fila:
3 6 7 8 9 0
1 4 3 2 7 0
PROGRAM EJER95;
USES CRT;
CONST
arr_num: ARRAY [1..2, 1..6] OF INTEGER = (
(3, 6, 9, 7, 8, 0),
(1, 4, 3, 2, 7, 0)
);
VAR
i, j, suma_fila: INTEGER;
BEGIN
ClrScr;
FOR i := 1 TO 2 DO
BEGIN
suma_fila := 0; { Inicializar suma para cada fila }
FOR j := 1 TO 5 DO { Sumar hasta la penúltima columna, la última es para el resultado }
BEGIN
suma_fila := suma_fila + arr_num[i, j];
END;
{ En un programa real, arr_num[i,6] = suma_fila; si la matriz fuera VAR }
WRITELN('La suma de la fila ', i, ' es: ', suma_fila);
END;
END.
Ejercicio 96: Suma de Columnas en una Matriz
Escribir un programa en Pascal que sume los datos de cada una de las columnas de la siguiente matriz; el resultado se almacenará en la última posición de cada columna:
3 2
4 6
8 9
0 0
PROGRAM EJER96;
USES CRT;
CONST
arr_num: ARRAY [1..4, 1..2] OF INTEGER = (
(3, 2),
(4, 6),
(8, 9),
(0, 0)
);
VAR
i, j, suma_columna: INTEGER;
BEGIN
ClrScr;
FOR j := 1 TO 2 DO { Iterar por columnas }
BEGIN
suma_columna := 0; { Inicializar suma para cada columna }
FOR i := 1 TO 3 DO { Sumar hasta la penúltima fila, la última es para el resultado }
BEGIN
suma_columna := suma_columna + arr_num[i, j];
END;
{ En un programa real, arr_num[4,j] = suma_columna; si la matriz fuera VAR }
WRITELN('La suma de la columna ', j, ' es: ', suma_columna);
END;
END.
Ejercicio 97: Suma de Filas, Columnas y Total en una Matriz
Escribir un programa en Pascal que sume los elementos de cada una de las filas y de las columnas de la siguiente matriz; el resultado de cada suma se almacenará en la última posición de la fila o columna correspondiente. Además, la suma total de todos los elementos de la matriz se almacenará en el elemento de la esquina inferior derecha de la matriz:
1 7 0
5 6 0
6 4 0
7 3 0
0 0 0
PROGRAM EJER97;
USES CRT;
CONST
arr_num: ARRAY [1..5, 1..3] OF INTEGER = (
(1, 7, 0),
(5, 6, 0),
(6, 4, 0),
(7, 3, 0),
(0, 0, 0)
);
VAR
i, j, total_matriz: INTEGER;
suma_h, suma_v: INTEGER; { Suma horizontal y vertical }
BEGIN
ClrScr;
total_matriz := 0;
WRITELN('--- Suma de Filas ---');
FOR i := 1 TO 4 DO { Sumar las filas de datos, la última fila es para sumas de columnas }
BEGIN
suma_h := 0;
FOR j := 1 TO 2 DO { Sumar los elementos de datos de la fila, la última columna es para suma de fila }
BEGIN
suma_h := suma_h + arr_num[i, j];
END;
{ En un programa real, arr_num[i,3] = suma_h; si la matriz fuera VAR }
WRITELN('La suma de la fila ', i, ' es: ', suma_h:3);
total_matriz := total_matriz + suma_h;
END;
WRITELN('');
WRITELN('--- Suma de Columnas ---');
FOR j := 1 TO 2 DO { Sumar las columnas de datos, la última columna es para suma de filas }
BEGIN
suma_v := 0;
FOR i := 1 TO 4 DO { Sumar los elementos de datos de la columna, la última fila es para suma de columna }
BEGIN
suma_v := suma_v + arr_num[i, j];
END;
{ En un programa real, arr_num[5,j] = suma_v; si la matriz fuera VAR }
WRITELN('La suma de la columna ', j, ' es: ', suma_v:3);
END;
WRITELN('');
WRITELN('La suma total de todos los elementos es: ', total_matriz); { Corregido: total_matriz ya contiene la suma de todos los elementos }
END.
Ejercicio 98: División de Elementos de una Matriz por un Valor Específico
Escribir un programa en Pascal que divida todos los elementos de una matriz M (3,4) por el elemento situado en la posición 2,2.
PROGRAM EJER98;
USES CRT;
CONST
arr_num: ARRAY[1..3, 1..4] OF INTEGER = (
(23, 45, -68, 99),
(45, 65, -76, 34),
(56, -75, 34, 98)
);
VAR
i, j: INTEGER;
divi: REAL;
divisor_val: INTEGER;
BEGIN
ClrScr;
divisor_val := arr_num[2, 2];
IF divisor_val = 0 THEN
BEGIN
WRITELN('Error: El divisor (elemento en [2,2]) es cero. No se puede dividir.');
END
ELSE
BEGIN
FOR i := 1 TO 3 DO
BEGIN
FOR j := 1 TO 4 DO
BEGIN
divi := arr_num[i, j] / divisor_val;
WRITE('Dividido ', arr_num[i, j]:3, ' por el número ');
WRITELN(divisor_val:3, ': ', divi:5:2);
END;
END;
END;
END.
Ejercicio 99: Generar Números Primos en Pascal
Escribir un programa en Pascal que almacene en un array los números primos comprendidos entre 1 y 100.
PROGRAM EJER99;
USES CRT;
VAR
arr_primos: ARRAY [1..100] OF INTEGER; { Array para almacenar primos }
num_primos_encontrados: INTEGER;
num: INTEGER;
i: INTEGER;
es_primo: BOOLEAN;
BEGIN
ClrScr;
num_primos_encontrados := 0;
FOR num := 2 TO 100 DO { Los números primos comienzan desde 2 }
BEGIN
es_primo := TRUE;
IF num <= 1 THEN
es_primo := FALSE
ELSE IF num = 2 THEN
es_primo := TRUE
ELSE IF (num MOD 2) = 0 THEN
es_primo := FALSE
ELSE
BEGIN
FOR i := 3 TO TRUNC(SQRT(num)) STEP 2 DO { Optimización: solo impares hasta la raíz cuadrada }
BEGIN
IF (num MOD i) = 0 THEN
BEGIN
es_primo := FALSE;
BREAK; { Salir del bucle interno si no es primo }
END;
END;
END;
IF es_primo THEN
BEGIN
INC(num_primos_encontrados); { Incrementar contador de primos }
IF num_primos_encontrados <= 100 THEN { Asegurarse de no exceder el tamaño del array }
BEGIN
arr_primos[num_primos_encontrados] := num;
WRITELN(num:3, ' es un número primo.');
END;
END;
END;
WRITELN('');
WRITELN('Números primos almacenados en el array:');
FOR i := 1 TO num_primos_encontrados DO
WRITE(arr_primos[i]:4);
WRITELN;
END.
Ejercicio 100: Generar la Matriz Transpuesta
Escribir un programa en Pascal que genere la matriz transpuesta de una matriz de 3 filas y 4 columnas. La matriz transpuesta de una matriz M(m,n) se obtiene intercambiando filas por columnas y viceversa; el resultado se tiene que almacenar en una nueva matriz M_TRANS(n,m).
PROGRAM EJER100;
USES CRT;
CONST
matriz: ARRAY [1..3, 1..4] OF INTEGER = (
(12, 67, -23, -45),
(45, -34, 23, -12),
(-34, 22, 88, -10)
);
VAR
m_trans: ARRAY [1..4, 1..3] OF INTEGER; { Matriz transpuesta (4 filas, 3 columnas) }
f, c: INTEGER;
BEGIN
ClrScr;
WRITELN('Matriz Original:');
FOR f := 1 TO 3 DO
BEGIN
FOR c := 1 TO 4 DO
WRITE(matriz[f, c]:5);
WRITELN;
END;
WRITELN('');
WRITELN('Matriz Transpuesta:');
FOR c := 1 TO 4 DO { Las columnas de la original se convierten en filas de la transpuesta }
BEGIN
FOR f := 1 TO 3 DO { Las filas de la original se convierten en columnas de la transpuesta }
BEGIN
m_trans[c, f] := matriz[f, c];
WRITE(m_trans[c, f]:5);
END;
WRITELN;
END;
END.
Ejercicio 101: Invertir una Cadena de Caracteres
Escribir un programa en Pascal que genere la inversa de una cadena de caracteres. La cadena original y la invertida deben almacenarse en arrays independientes.
PROGRAM EJER101;
USES CRT;
VAR
cadena_original: STRING; { Usar STRING para la cadena original }
arr_original: ARRAY [1..255] OF CHAR; { Array para caracteres de la cadena original }
arr_invertida: ARRAY [1..255] OF CHAR; { Array para caracteres de la cadena invertida }
i, len: INTEGER;
BEGIN
ClrScr;
cadena_original := 'hola';
len := LENGTH(cadena_original);
WRITELN('Cadena Original:');
FOR i := 1 TO len DO
BEGIN
arr_original[i] := cadena_original[i];
WRITE(arr_original[i]);
END;
WRITELN;
WRITELN('Cadena Invertida:');
FOR i := 1 TO len DO
BEGIN
arr_invertida[i] := cadena_original[len - i + 1]; { Llenar el array invertido }
WRITE(arr_invertida[i]);
END;
WRITELN;
END.