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.

Entradas relacionadas:

Etiquetas:
Escribir un programa en Java que multiplique los 20 primeros número naturales (1*2*3*4*5…). programa en c que calcule la suma de los numeros pares del 1 al 200 Escribir un programa en Lenguaje C 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 t java algoritmo es mayor al 50000 pesetas se debe aplicar un descuento del programa pascal con un arreglo con los 20 primeros pares y calcule su suma escribir un programa que sume, independientemente, los elementos positivos y negativos de una matriz en c++ pascal que sume los numeros comprendidos entre 1 y 10 programa en pascal que rellene un array con los diez primeros números impares Obtener la primera posición en la que comienza la subcadena fragi en la cadena supercalifragilisticoexpialidoso en c suma de los números pares e impares de los números comprendidos del 1 al 200. calcula in C++ calcule, la suma y la media de los números pares e impares comprendidos entre 1 y 100 usando array. ... Rellenar un arreglo con los numeros enteros comprendidos entre 4 y 14 programo en pascal que introdusca n desde el teclado y sume solo aquellos que sean negativos ☺escribir un programa en pascal que multiplique por dos los elementos de la siguiente matriz numeros primos programa de java de millas marinas a metros escribir un programa que genera 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 NUMEROS IMPARES COMPRENDIDOS ENTRE 4 Y 14 programa que sume, independientemente, los elementos positivos y negativos dela siguiente matriz suma de numeros pares entre el 1 y el 200 java programa que escriba todos los numeros pares comprendidos suma de impares 1 al 200 programas Hacer un programa que calcule independientemente la suma de los pares y los impares de los numeros entre 1 y 1000 en c++ PROGRAMA QUE SUME NUMERO Y COLUMNAS Escribir un programa que almacene en la segunda fila de la matriz los cuadrados de los datos de PROGRAMA EN JAVA QUE OBTENGA NUMEROS COMPRENDIDOS DE 1 Y 1000 15. escribir un programa que muestre los números comprendidos entre 1 y 1000. el programa escribir en la pantalla los números en grupos de 20, y solicitando al usuario si quiere o no continuar visualizando el siguiente grupo de números. 92.- Escribir un programa en lenguaje C que almacene en la segunda fila de la siguiente 5 números enteros suma media java Calcular independientemente la suma de los números pares e impares comprendidos entre 1 y 200