Pascal/Turbo Pascal - No logro hacer que el boolean salga del procedure cuando es TRUE

 
Vista:

No logro hacer que el boolean salga del procedure cuando es TRUE

Publicado por Lauti (4 intervenciones) el 08/03/2021 18:00:02
bueno el fin del porgrama es darle un numero, este te dice si hay un numero mayor al menos significativo.
Por ejemplo: 1579. El menos significativo es el 9.
Si yo ingreso ese numero me dirá que no hay numeros mayores que el menos significativo.

Pero si por ejemplo ingreso 1397, el menos significativo va a ser el 7 y el resultado del programa dira que no hay numeros mayores, cuando en realidad si lo hay, es el 9.

El problema ya lo es, y es que no pasa al bloque principal el TRUE del procedure, asi que si alguien me puede ayudar estaria agradecido :)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var n,ultimo,aux:integer; mayor:boolean;
 
/////////////////////////////////////////////////////
 
procedure proc(n,ultimo:integer; mayor:boolean);
var aux1 : integer;
 begin
  aux1 := n mod 10;
   if (n=0)
    then begin
     end
else if aux1 > ultimo
 then begin mayor := true;
  end
 else if aux1 < ultimo
  then begin proc(n div 10,ultimo,mayor)
   end
end;
 
/////////////////////////////////////////////////////
 
begin
  write('ingrese un numero: ');
   read(n);
    aux := n;
     ultimo := n mod 10;
      n := n div 10;
       proc(n,ultimo,mayor);
      if mayor
       then write ('Existen dígitos del número ',aux,' que no son menores al dígito menos significativo.')
     else write ('No existen dígitos del número ',aux,' que sean mayores al dígito menos significativo.');
            readln;
         readln;
     end.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

No logro hacer que el boolean salga del procedure cuando es TRUE

Publicado por David (224 intervenciones) el 10/03/2021 17:26:45
No he probado el código, pero intuyo que es porque no tienes declarado el parámetro "mayor" como de ·E/S. Otra cosa que te recomiendo es que no utilices variables locales a un procedimiento o funcion, o parámetros, con el mismo nombre que una variable global. La cabecera del procedimiento, debería quedar así.

procedure proc(n,ultimo:integer; var mayor:boolean);

Aparte de eso, como te digo, yo la declararía con otro nombre ya que tienes una variable global que se llama igual y eso podría provocar un mal funcionamiento del programa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No logro hacer que el boolean salga del procedure cuando es TRUE

Publicado por Lauti (4 intervenciones) el 11/03/2021 00:45:41
Gracias!! al final siguiendo tus consejos y con unos arreglos mas que agregue, termino funcionando!
adjunto el código por si te interesa

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
var n,ultimo,aux,aux1:integer; mayor:boolean;
 
/////////////////////////////////////////////////////
 
procedure proc(n,ultimo,aux1:integer; var mayor1:boolean);
 begin
     aux1 := n mod 10;
   if (n=0)
    then begin
     end
else if aux1 > ultimo
 then begin mayor1 := true;
      mayor := mayor1;
  end
 else if aux1 < ultimo
  then begin proc(n div 10,ultimo,aux1,mayor1);
      mayor := mayor1;
   end
end;
 
/////////////////////////////////////////////////////
 
begin
  write('ingrese un numero: ');
  read(n);
  aux  := n;
  aux1 := n;
     ultimo := n mod 10;
      n := n div 10;
       proc(n,ultimo,aux1,mayor);
       if mayor
       then write ('Existen dígitos del número ',aux,' que no son menores al dígito menos significativo.')
     else write ('No existen dígitos del número ',aux,' que sean mayores al dígito menos significativo.');
           readln;
       readln;
     end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No logro hacer que el boolean salga del procedure cuando es TRUE

Publicado por David (224 intervenciones) el 11/03/2021 13:51:19
Echando un nuevo vistazo a tu código veo otra cosa que yo te recomendaría que no hicieras porque te puede dar problemas.

read(n);

Yo no utilizaría nunca read para leer variables. Personalmente read lo utilizo sólo para leer ficheros con tipo. Para variables (y ficheros de texto) prefiero usar Readln, ya que eso vacia el buffer del teclado y te evita posibles errores.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar