[ Foro de Pascal ]

Mis clases de PASCAL ????????

15-Jan-2023 15:04
Invitado (Maria Nu?ez)
1 Respuestas

Tengo el siguiente código que me compila en el celular pero no en otros compiladores.


program UNEFATEL; 

uses
  crt;


type
  nino = record
    dia_semana: Integer;
    minutos: Integer;
    x, x1, x2, x3, total_a_pagar, impuesto, total_sin_impuesto: real;
    horario: Integer;
  end;


var
  i, j, num_factura: Integer;
  Ist: array of nino;
  nombre, apellido: String;
  cedula: real;


begin
  Clrscr;
  Writeln('=======================');
  Writeln('_______BIENVENIDO______');
  Writeln('=======================');
  writeln('---Datos del Cliente---');
  write('Nombre: ');
  Readln(nombre);
  write('Apellido: ');
  Readln(apellido);
  Write('Cedula: ');
  Readln(cedula);
  writeln('Número de Servicios a Registrar?:');
  ReadLn(num_factura);
  SetLength(Ist, num_factura);
  clrscr;
  for i := 0 to num_factura - 1 do 
    begin
      writeln;
      Writeln('==Servicio N° ', i + 1, '==');
      writeln('Seleccione el día de la semana');
      writeln('1. Lunes.');
      writeln('2. Martes.');
      writeln('3. Miércoles.');
      writeln('4. Jueves.');
      writeln('5. Viernes.');
      writeln('6. Sábado.');
      writeln('7. Domingo.');
      Readln(Ist[i].dia_semana);
      write('Minutos de duración de la llamada:  ');
      Readln(Ist[i].minutos);
      case Ist[i].minutos of 
        1..5: 
        begin
          Ist[i].total_sin_impuesto := Ist[i].minutos * 100;
        end;
        1..8: 
        begin
          Ist[i].x := (Ist[i].minutos - 5);
          Ist[i].x1 := (Ist[i].minutos - Ist[i].x) * 100;
          Ist[i].total_sin_impuesto := (Ist[i].x * 80) + Ist[i].x1;
        end;
        1..10: 
        begin
          Ist[i].x := 5 * 100;
          Ist[i].x1 := 3 * 80;
          Ist[i].x2 := (Ist[i].minutos - 8) * 70;
          Ist[i].total_sin_impuesto := Ist[i].x + Ist[i].x1 + Ist[i].x2;
        end
        else if (Ist[i].minutos > 10) then
          begin
            Ist[i].x := 5 * 100;
            Ist[i].x1 := 3 * 80;
            Ist[i].x2 := 2 * 70;
            Ist[i].x3 := (Ist[i].minutos - 10) * 50;
            Ist[i].total_sin_impuesto := Ist[i].x + Ist[i].x1 + Ist[i].x2 + Ist[i].x3;
          end ;
      end;
      if (Ist[i].dia_semana = 7) then
        begin
          Ist[i].impuesto := Ist[i].total_sin_impuesto * 0.03;
          Ist[i].total_a_pagar := Ist[i].total_sin_impuesto + Ist[i].impuesto;
        end 
      else 
        begin
          writeln('Horario de atención? seleccione! ');
          writeln('1.Matutino |7:00 am - 2:00 pm| ');
          writeln('2.Vespertino |2:00 pm - 8:00 pm| ');
          Readln(Ist[i].horario);
          if (Ist[i].horario = 1) then
            begin
              Ist[i].impuesto := Ist[i].total_sin_impuesto * 0.15;
              Ist[i].total_a_pagar := Ist[i].impuesto + Ist[i].total_sin_impuesto;
            end 
          else 
            begin
              Ist[i].impuesto := Ist[i].total_sin_impuesto * 0.10;
              Ist[i].total_a_pagar := Ist[i].total_sin_impuesto + Ist[i].impuesto;
            end;
        end;
    end;
  Clrscr;
  writeln('---Datos del Cliente---');
  writeln(' Nombre: ', nombre);
  writeln(' Apellido: ', apellido);
  writeln(' Cédula: ', cedula: 3: 0);
  writeln;
  for j := 0 to num_factura - 1 do 
    begin
      Writeln('==== Servicio N° ', j + 1, ' ====');
      writeln(' Duración de la llamada: ', Ist[j].minutos, ' minutos. ');
      writeln(' Total a pagar: ', Ist[j].total_a_pagar, ' Bs.');
      writeln;
    end;
  ReadLn;
end.


 


14-Mar-2023 23:15
Invitado (Alejandro Andrade)

El código que compartes presenta algunos errores que pueden ser la causa de que no se compile en otros compiladores. A continuación, te comento los errores más relevantes que encontré:

1. El tipo de dato 'real' no es una buena opción para almacenar valores monetarios, ya que pueden presentarse problemas de precisión. Es preferible usar el tipo 'currency' para este propósito.

2. La declaración de variables en el registro 'nino' no sigue un orden lógico. Es recomendable agrupar las variables del mismo tipo.

3. En las sentencias 'case', los rangos definidos no están bien establecidos. Por ejemplo, '1..5', '1..8' y '1..10' son rangos superpuestos, lo que puede generar errores en el cálculo del costo de la llamada.

4. La sentencia 'else if' no es válida en Pascal. Debes usar la sentencia 'else' seguida de una nueva sentencia 'if' para evaluar una condición adicional.

5. La salida del programa no está bien formateada. Por ejemplo, en la línea 'writeln(' Cédula: ', cedula: 3: 0);', el formato '3:0' no es necesario y puede generar errores.

Teniendo en cuenta estos errores, te sugiero que modifiques tu código de la siguiente manera:

program UNEFATEL;

uses
crt;

type
nino = record
dia_semana: Integer;
minutos: Integer;
total_sin_impuesto, impuesto, total_a_pagar: currency;
horario: Integer;
x, x1, x2, x3: Integer;
end;

var
i, j, num_factura: Integer;
Ist: array of nino;
nombre, apellido: String;
cedula: Integer;

begin
Clrscr;
Writeln('=======================');
Writeln('_BIENVENIDO');
Writeln('=======================');
writeln('---Datos del Cliente---');
write('Nombre: ');
Readln(nombre);
write('Apellido: ');
Readln(apellido);
Write('Cedula: ');
Readln(cedula);
writeln('Número de Servicios a Registrar?:');
ReadLn(num_factura);
SetLength(Ist, num_factura);
clrscr;
for i := 0 to num_factura - 1 do
begin
writeln;
Writeln('==Servicio N° ', i + 1, '==');
writeln('Seleccione el día de la semana');
writeln('1. Lunes.');
writeln('2. Martes.');
writeln('3. Miércoles.');
writeln('4. Jueves.');
writeln('5. Viernes.');
writeln('6. Sábado.');
writeln('7. Domingo.');
Readln(Ist[i].dia_semana);
write('Minutos de duración de la llamada: ');
Readln(Ist[i].minutos);
case Ist[i].minutos of
1..5:
begin
Ist[i].total_sin_impuesto := Ist[i].minutos * 100;
end;
6..8:
begin
Ist[i].x := Ist[i].minutos - 5;
Ist[i].x1 := Ist[i].x * 80;
Ist[i].x2 := Ist[i].minutos * 100 - Ist[i].x1;
Ist[i].total






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)