Mostrando entradas con la etiqueta Pascal. Mostrar todas las entradas
Mostrando entradas con la etiqueta Pascal. Mostrar todas las entradas

martes, 24 de septiembre de 2024

■ Estructura Selectiva Case

■ Estructura selectiva Case (switch) en Pascal

Explicación de esta estructura aquí: Estructuras Selectivas.


■ Sintaxis

case (<variable>) of
    valor_1:
        {Instruccioens para valor 1}
    valor_2:
        {Instrucciones para valor 2}
    valor_n:
        {Instrucciones para valor n}
    else
        {Instrucciones para ninguna de las anteriores}
end;


■ Ejemplo

Program EstructuraCase;
Uses
    crt;
Var
    dia : integer;
Begin
    WriteLn('Ingresa un número');
    ReadLn(dia);
    
    case (dia) of
        1:
            WriteLn('Lunes');
        2:
            WriteLn('Martes');
        3:
            WriteLn('Miércoles');
        4:
            WriteLn('Jueves');
        5:
            WriteLn('Viernes');
        6:
            WriteLn('Sábado');
        7:
            WriteLn('Domingo');
        else
            WriteLn('Día inválido');
    end;
End.


■ Ejemplo con letras:

Program EstructuraCase;
Uses
    crt;
Var
    letra : char;
Begin
    WriteLn('Ingresa un número');
    ReadLn(letra);
    
    case (letra) of
        'a':
            WriteLn('Opción a');
        'b':
            WriteLn('Opción b');
        'c':
            WriteLn('Opción c');
        else
            WriteLn('Ninguna de las anteriores');
    end;
End.


La opción "else" entra cuando el valor de la variable recibida en el "case" no coincide con ninguna de las opciones.

lunes, 23 de septiembre de 2024

■ Pascal_025 ► Pedir un número y mostrarlo con letra

Ejercicio 025: Perdir un número entre 1 y 100 y mostrarlo con letra.

Entrada: Un número entero entre 1 y 100.

Salida: El número con letra.


Program Pascal_025;
uses
    crt;
var
    numeros : array[1..28] of string;
    decenas : array[1..8] of string;
    num : integer;
Begin
    numeros[1]  := 'uno';
    numeros[2]  := 'dos';
    numeros[3]  := 'tres';
    numeros[4]  := 'cuatro';
    numeros[5]  := 'cinco';
    numeros[6]  := 'seis';
    numeros[7]  := 'siete';
    numeros[8]  := 'ocho';
    numeros[9]  := 'nueve';
    numeros[10] := 'diez';
    numeros[11] := 'once';
    numeros[12] := 'doce';
    numeros[13] := 'trece';
    numeros[14] := 'catorce';
    numeros[15] := 'quince';
    numeros[16] := 'dieciséis';
    numeros[17] := 'diecisiete';
    numeros[18] := 'dieciocho';
    numeros[19] := 'diecinueve';
    numeros[20] := 'veintiuno';
    numeros[21] := 'veintidós';
    numeros[22] := 'veintitrés';
    numeros[23] := 'veinticuatro';
    numeros[24] := 'veinticinco';
    numeros[25] := 'veintiséis';
    numeros[26] := 'veintisiete';
    numeros[27] := 'veintiocho';
    numeros[28] := 'veintinueve';
    
    decenas[1] := 'veinte';
    decenas[2] := 'treinta';
    decenas[3] := 'cuarenta';
    decenas[4] := 'cincuenta';
    decenas[5] := 'sesenta';
    decenas[6] := 'setenta';
    decenas[7] := 'ochenta';
    decenas[8] := 'noventa';
    
    WriteLn('Ingresa un número');
    ReadLn(num);
    
    WriteLn('El número con letra es:');
    if (num < 30) then begin
        if (num < 20) then begin
            WriteLn(numeros[num]);
        end
        else begin
            if (num > 20) then begin
                WriteLn(numeros[num - 1]);
            end
            else begin
                WriteLn(decenas[1]);
            end;
        end;
    end
    else begin
        if (num < 100) then begin
            Write(decenas[num div 10 - 1]);
            if (num mod 10 > 0) then begin
                WriteLn(' y ', numeros[num mod 10]);
            end;
        end
        else begin
            if (num > 100) then begin
                WriteLn('Número fuera de rango');
            end
            else begin
                WriteLn('Cien');
            end;
        end;
    end;
End.



■ En otros lenguajes:
     • Pseudocódigo
     • C#_025
     • Java_025 ✓
     • Python_025

■ Pascal_024 ► Generar n números aleatorios

Ejercicio 024: Generar "n" números altearorios.

Entrada: Cantidad de números a generar y número más alto.

Salida: Los "n" números aleatorios.


Program Pascal_024;
uses
    crt;
var
    n, max, aleatorio, i : integer;
Begin
    clrscr;
    WriteLn('¿Cuántos números aleatorios serán?');
    ReadLn(n);
    WriteLn('¿Cuál será el número más alto?');
    ReadLn(max);
    
    for i:=1 to n do
    begin
        aleatorio := random(max);
        WriteLn(aleatorio);
    end;
End.

■ Pascal_023 ► Leer un número entero y mostrarlo al revés

Ejercicio: Solicitar un número entero al usuario y mostrarlo al revés.

Entrada: Un número entero.

Salida: El número al revés.


Program Pascal_023;
uses
    crt, Math;
var
    num, digitos, i : longint;
Begin
    clrscr;
    WriteLn('Ingresa un número');
    ReadLn(num);
    
    digitos := (trunc(ln(abs(num)) / ln(10))) + 1;
    Write(num mod 10);
    for i:=1 to digitos - 1 do
    begin
        num := num div 10;
        Write(num mod 10);
    end;
End.

■ Pascal_022 ► Decir si un número es capicúa

Ejercicio 022: Leer un número y decir si es capicúa.

Entrada: Un número entero.

Salida: Decir si es capicúa o no.

Un número es capicúa cuando se puede leer igual de izquierda a derecha que de derecha a izquierda, ejemplo: 123321 o 11511.


Program Pascal_022;
uses
    crt;
var
    numero : string;
    i : integer;
    esCapicua : boolean;
Begin
    clrscr;
    esCapicua := true;
    WriteLn('Ingresa el número');
    ReadLn(numero);
    
    for i:=1 to length(numero) div 2 do
    begin
        if (numero[i] <> numero[length(numero) - (i - 1)]) then
        begin
            esCapicua := false;
        end;
    end;
    
    if esCapicua then
        WriteLn('El número es capicúa')
    else
        WriteLn('El número no es capicúa');
End.

■ Pascal_021 ► Sumar los dígitos de un número entero

Ejercicio 021: Solicitar un número entero y sumar sus dígitos.

Entrada: Un número entero.

Salida: La suma de sus dígitos.


Program Pascal_021;
uses
    crt;
var
    numero, suma, i : integer;
begin
    WriteLn('Ingresa un número');
    ReadLn(numero);
    
    suma := numero mod 10;
    while numero > 9 do
    begin
        numero := numero div 10;
        suma := suma + numero mod 10;
    end;
    WriteLn(suma);
    ReadKey();
End.


Este ejercicio se resuelve mod y div, que devuelven el residuo y la parte entera del número respectivamente, por ejemplo:
n := 123
WriteLn(n mod 10);
WriteLn(n div 10);

Imprimirá:
3
12

■ Pascal_016 ► Multiplicación de dos matrices m*m

Ejercicio 016: Multiplicar dos matrices mxm.

Entrada: Dos matrices m*m, donde m = 3.

Salida: Las matrices multiplicadas.


Program Pascal_016;
uses
    crt;
var
    filas, columnas, i, j, k, res, m: integer;
    matrizA : array[1..3,1..3] of integer;
    matrizB : array[1..3,1..3] of integer;
    matrizAB : array[1..3,1..3] of integer;
Begin
    m := length(matrizA);
    WriteLn('Las matrices serán ', m, '*', m);
    filas := length(matrizA);
    columnas := length(matrizA);
  
    {Se llenan las matrices}
    WriteLn('Ingresa los números de las matrices');
  
    WriteLn('Matriz A');
    for i:= 1 to filas do
    begin
        for j:=1 to columnas do
        begin
            WriteLn('Ingresa el valor de ', i, '-', j);
            ReadLn(matrizA[i][j]);
        end;
    end;
  
    WriteLn('Matriz B');
    for i:= 1 to filas do
    begin
        for j:=1 to columnas do
        begin
            WriteLn('Ingresa el valor de ', i, '-', j);
            ReadLn(matrizB[i][j]);
        end;
    end;
  
    {Se multiplican las matrices}
    for i:= 1 to filas do
    begin
        for j:=1 to columnas do
        begin
            res := 0;
            for k:=1 to filas do
            begin
                res := res + matrizA[i][k] * matrizB[k][j];
            end;
            matrizAB[i][j] := res;
        end;
    end;
  
    {Se muestra la matriz multiplicada}
    WriteLn('Matriz A*B');
    for i:= 1 to filas do
    begin
        for j:=1 to columnas do
        begin
            Write(matrizAB[i][j], ' - ');
        end;
        WriteLn();
    end;
    ReadKey();
end.

viernes, 31 de julio de 2015

Pascal 017 ► Mostrar Serie de Fibonacci

Ejercicio 017: Mostrar n dígitos de la sucesión de Fibonacci

Program Pascal_017;
Uses crt;
Var
    i, n, ant, sig: integer;
Begin 
    Write('¿Cuantos números se mostraran? ');
    ReadLn(n);
    ant := 1;
    sig := 1;
    write('1, ');
    i := 1;   
    while i < n do
    begin
        ant := sig - ant;
        sig := ant +  sig;
        Write(sig,', ');
        i := i+1;
    end;
    ReadKey;
End.




La Sucesión de Fibonacci es una serie infinita de números que inicia en 1, 1, y los siguientes dígitos en la serie son la suma de los dos dígitos anteriores:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, ...

Pascal 018 ► Calcular Factorial de n

Ejercicio 018: Calcular el factorial de un número dado.

Program Pascal_018;
Uses crt;
Var
    n, fac : integer;
Begin
    fac := 1;
    Write('Ingresa número ');
    ReadLn(n);
    while n > 0 do
    begin
        fac := fac * n;
        n := n-1;
    end;
    WriteLn('El factorial es: ', fac);
    ReadKey;
End.



El factorial de un número es la multiplicación de todos los enteros positivos desde 1 hasta n.

Ejemplo:
Si n = 3, entonces:
n! = 1 x 2 x 3 = 6
6 es el factorial de 3

viernes, 24 de julio de 2015

Pascal 015 ► Ordenar arreglo de menor a mayor

Ejercicio 015: Ordenar un arreglo de enteros de menor a mayor y mostrarlo en pantalla.

Entrada: Un arreglo de enteros desordenado.

Salida: El mismo arreglo ordenado de menor a mayor.



Program Pascal_015;
uses crt;
var
    i, j, aux : integer;
    numeros : array[1..10] of integer;
Begin
    numeros[1] := 7;
    numeros[2] := 2;
    numeros[3] := 6;
    numeros[4] := 1;
    numeros[5] := 10;
    numeros[6] := 8;
    numeros[7] := 4;
    numeros[8] := 5;
    numeros[9] := 9;
    numeros[10] := 3;

    for i := 1 to 10 do
        Write(numeros[i], ', ');
    WriteLn;

    for i := 1 to 10 do begin
        for j := i+1 to 10 do begin
            if (numeros[j] < numeros[i]) then begin
                aux := numeros[i];
                numeros[i] := numeros[j];
                numeros[j] := aux;
            end;
        end;
    end;

    for i := 1 to 10 do
        Write(numeros[i], ', ');
    ReadKey;
End. 


El primer "for" muestra el arreglo desordenado
El segundo "for" ordena el arreglo
El tercer "for" muestra el arreglo ya ordenado

El método de ordenamiento utilizado es el de la "burbuja" ya que se comparan uno por uno los elementos del arreglo con los restantes, si se encuentra uno menor se intercambian para ello se utiliza una variable auxiliar o temporal.


■ En otros lenguajes:
     • Pseudocódigo ✓
     • C#_015 ✓
     • Java_015 ✓
     • Python_015 ✓

jueves, 23 de julio de 2015

Registros (record - struct)

Un registro es un tipo de dato estructurado que contiene un conjunto de campos cada uno de los cuales puede ser de igual o diferente tipo.

En Turbo Pascal / Delphi se conoce como "record" mientras que en C++ se denomina "struct".

Los registros o estructuras son útiles cuando se necesita manejar información de una entidad la cual contiene varios datos que bien pueden ser de diferentes tipos.

Por ejemplo pensemos en un alumno con datos como nombre, edad, peso, dirección, grado, etc.

Esto bien se puede manejar con variables individuales:

nombre : string;
edad : integer;
peso : real;
dirección : string;
grado : integer;


Los registros nos permiten manejar estos mismos datos de una manera más cómoda y clara, los datos anteriores usando un registro quedarían de la siguiente forma:

• Pascal

alumno = record
    nombre : string[40];
    edad : integer;
    peso : real;
    direccion : string[50];
    grado : integer;
end;

• C++

struct {
    char nombre[40];
    int edad;
    float edad;
    char direccion[50];
    int grado;
} alumno;


Aparentemente podría parecer lo mismo, pero la ventaja está al momento de usarlo, el llenado del registro con datos se haría de la siguiente forma (Pascal):

WriteLn('Ingreso de datos');
Write('Nombre: ');
ReadLn(alumno.nombre);
Write('Edad: ')
ReadLn(alumno.edad);
Write('Peso: ');
ReadLn(alumno.peso);
Write('Dirección: ');
ReadLn(alumno.direccion);
Write('Grado: ');
ReadLn(alumno.grado);

Como puede observarse a cada variable se antepone el nombre del registro al que pertenece, esto es muy útil cuando se manejan datos personales de diferentes tipos de personas, por ejemplo alumnos, maestros, administrativos, clientes, etc., ya que con el uso de registros el código de vuelve más claro y fácil de manejar, puesto que aunque se pidan los mismos datos para cada entidad, siempre estaremos especificando a que registro pertenece cada uno, ejemplo:

maestro.nombre;
alumno.nombre;
cliente.nombre;

Tenemos una variable llamada "nombre" pero que a su vez puede pertenecer a diferentes registros.

miércoles, 22 de julio de 2015

Pascal 020 ► Pedir n valores hasta que el usuario desee

Ejercicio 020: Ingresar n valores enteros hasta que el usuario desee y decir cuántos fueron ingresados.

Program Pascal_020;
uses crt;
var
    num, cont : integer;
    opc : char;
Begin
    opc := 's';
    while (opc = 's') do
    begin
        Write('Ingresa número');
        ReadLn(num);
        cont := cont + 1;
        WriteLn('¿Ingresar otro? s/n');
        ReadLn(opc);
    end;
    WriteLn('Se ingresaron: ',cont,' valores');
    ReadKey;
End. 

Pascal 019 ► Desplegar tabla de multiplicar de n número

Ejercicio 019: Desplegar la tabla de multiplicar de un número "n".

Program Pascal_019;
uses crt;
var
    num, res, i : integer;
Begin
    WriteLn('Ingresa número');
    ReadLn(num);
    for i:=1 to 10 do
    begin
        res := num * i;
        WriteLn(num,' x ', i,' = ',res);
    end;
    ReadKey;
End.

Pascal 014 ► Llenar un arreglo y obtener el promedio

Ejercicio 014: Llenar un arreglo de números enteros desde el teclado y mostrar el promedio de esos valores.

Program Pascal_014;
uses crt;
var
    i, cont : integer;
    suma, promedio : real;
    Numeros : array[1..10] of integer;
Begin
    cont := 0;
    suma := 0.0;
    promedio := 0.0;
    for i:=1 to 10 do
    begin
        WriteLn('Ingresa valor');
        ReadLn(Numeros[i]);
        suma := suma + Numeros[i];
        cont := cont + 1;
    end;
    promedio := suma / cont;
    WriteLn('Promedio: ',promedio:0:2);
    ReadKey;

End.


El promedio se obtiene sumando todos los valores y dividiendo el resultado entre el número de valores que son, en este caso sabemos que son 10, aún así utilicé un contador para contabilizarlos y obtener el promedio, por lo que sería el mismo resultado si se dividiera la suma entre 10.

Pascal 013 ► Mostrar los primeros 5 números primos

Ejercicio 013: Mostrar los primeros cinco números primos.

► Qué es un número primo y cómo calcularlo, aquí:
Determinar si un número es primo

Program Pascal_013;
uses crt;
var
    divisores, np, n, i : integer;
Begin
    divisores := 0;
    np := 0;
    n := 2;
    while np < 5 do
    begin
        for i:=1 to n do
            if (n mod i = 0) then
                inc(divisores);
        if (divisores = 2) then begin
            WriteLn(n);
            inc(np);
        end;
        inc(n);
        divisores := 0;
    end;
    ReadKey;
End. 


Pascal 012 ► Mostrar los pares entre 1 y 100

Ejercicio 012: Mostrar los pares entre 1 y 100.

Program Pascal_012;
uses crt;
var
    i : integer;
Begin
    for i:=2 to 100 do
        if (i mod 2 = 0) then
            WriteLn(i);
    ReadKey;
End. 

Pascal 011 ► Elevar un número al cuadrado

Ejercicio 011: Elevar un número entero al cuadrado.

• En pascal se puede hacer esto de dos formas, una es usar la función "sqr(x)", que recibe un número y devuelve el cuadrado de éste.

Program Pascal_011;
uses crt;
var
    num, res : integer;
Begin
    WriteLn('Ingresa número');
    ReadLn(num);
    res := sqr(num);
    WriteLn('Resultado: ',res);
    ReadKey;
End.



• La otra forma es empleando la función "power(x, y)", que recibe dos números, el primero es la base y el segundo es la potencia, en este caso la base sería el número que queremos elevar al cuadrado y la potencia sería 2.

Además el uso de esta función requiere agregar la librería "math" en el uses, así como declarar la variable en la que se almacenará el resultado como "real".

Program Pascal_011;
uses crt, math;
var
    num : integer;
    res : real;
Begin
    WriteLn('Ingresa número');
    ReadLn(num);
    res := power(num, 2);
    WriteLn('Resultado: ',res:0:2);
    ReadKey;
End. 


• Aunque claro, también está la opción de multiplicar el número por si mismo:
res := num * num;

Pascal 010 ► Convertir kilómetros a millas

Ejercicio 010: Convertir kilómetros a millas.

Program Pascal_010;
uses crt;
var
    km, millas, milla : real;
Begin
    milla := 0.6214;
    WriteLn('Ingresa kilómetros');
    ReadLn(km);
    millas := km * milla;
    WriteLn('Equivalen a: ',millas:0:2);
    ReadKey;
End. 

Pascal 008 ► Área y perímetro de un cuadrado

Ejericio 008: Área y perímetro de un cuadrado.

Program Pascal_008;
uses crt;
var
    area, perimetro, lado : real;
begin
    area := 0.0;
    perimetro := 0.0;
    WriteLn('Ingresa medida del lado');
    Readln(lado);
    area := lado * lado;
    perimetro := lado * 4;
    WriteLn('Perimetro: ', perimetro:0:2);
    WriteLn('Area: ', area:0:2);
    ReadKey;
end.  

Pascal 007 ► Determinar el número menor, intermedio y mayor

Ejercicio 007: Determinar el número menor, intermedio y mayor de tres números dados.

Program Pascal_007;
uses crt;
var
    n1, n2, n3, mayor, menor, inter : integer;
begin
    WriteLn('Ingresa primer número');
    Readln(n1);
    WriteLn('Ingresa segundo número');
    Readln(n2);
    WriteLn('Ingresa tercer número');
    Readln(n3);
    mayor := n1;
    menor := n1;
    inter := n1;
    if (n2 > mayor) then
        mayor := n2;
    if (n3 > mayor) then
        mayor := n3;
    if (n2 < menor) then
        menor := n2;
    if (n3 < menor) then
        menor := n3;
    if ((n1 > menor) and (n2 < mayor)) then
        inter := n1;
    if ((n2 > menor) and (n2 < mayor)) then
        inter := n2;
    if ((n3 > menor) and (n3 < mayor)) then
        inter := n3;
    WriteLn('Menor: ',menor);
    WriteLn('Intermedio: ',inter);
    WriteLn('Mayor: ',mayor);
    ReadKey;
end.