Pascal/Turbo Pascal - Error al corregir numero

 
Vista:

Error al corregir numero

Publicado por Lauti (4 intervenciones) el 16/02/2021 20:30:26
buenas mi problema es el siguiente, cuando ingreso un numero fuera del rango me pide que reingrese un numero, pero esta vez que este dentro del rango, hasta ahi todo bien, pero cuando pasa a la siguiente funcion, esta se ejecuta con el primer numero ingresado, es decir el que está fuera del rango. Desde ya si me pueden aydar estaria genia,muchas gracias :).

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
37
var n,a,b:integer;
 
////////////////////////////////////////////////////////////////////////////
function CambiaImpar(n:integer):integer;
begin
  if (n = 0) then
    CambiaImpar := 0
      else if (n < 10) and (n mod 2 <> 0) then
         CambiaImpar := CambiaImpar(n div 10) + ((n mod 10) - 1)
           else if (n mod 2 <> 0) then
            CambiaImpar := CambiaImpar(n div 10) * 10 + ((n mod 10) - 1)
          else CambiaImpar := CambiaImpar(n div 10)
end;
////////////////////////////////////////////////////////////////////////////
 
////////////////////////////////////////////////////////////////////////////
procedure rango(n:integer);
begin
     while (n < 20) or (n > 10000) do
       begin
       writeln('¡El número ingresado esta fuera del rango!');
        writeln ('Ingrese un numero entre 20 y 10.000: ');
         read(n);
      end;
     if (n >= 20) and (n <= 10000)
      then writeln (n,' es valido :)')
end;
////////////////////////////////////////////////////////////////////////////
begin
    write('ingrese un numero: ');
     repeat
      read(n);
            rango(n);
      writeln(n,' CambiaImpar es : ',CambiaImpar(n));
     until (eoln);
     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

Error al corregir numero

Publicado por David (224 intervenciones) el 17/02/2021 17:07:25
No he mirado que es exactamente lo que pretendes hacer con el programa, sólo conrregir lo que no funciona, así que no sé si es lo que pides, pero funcionar, funciona.

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Uses CRT;
 
 
var n,a,b:integer;
 
 
 
 
function CambiaImpar(n:integer):integer;
 
begin
 
  if (n = 0) then
 
    CambiaImpar := 0
 
      else if (n < 10) and (n mod 2 <> 0) then
 
         CambiaImpar := CambiaImpar(n div 10) + ((n mod 10) - 1)
 
           else if (n mod 2 <> 0) then
 
            CambiaImpar := CambiaImpar(n div 10) * 10 + ((n mod 10) - 1)
 
          else CambiaImpar := CambiaImpar(n div 10)
 
end;
 
 
procedure rango(var  n:integer);
 
begin
 
     while (n < 20) or (n > 10000) do
 
       begin
 
       writeln('¡El número ingresado esta fuera del rango!');
 
        writeln ('Ingrese un numero entre 20 y 10.000: ');
 
         readln(n);
 
      end;
 
     if (n >= 20) and (n <= 10000)
 
      then writeln (n,' es valido :)')
 
end;
 
begin
     clrscr;
    write('ingrese un numero: ');
 
     repeat
 
      readln(n);
 
            rango(n);
 
      writeln(n,' CambiaImpar es : ',CambiaImpar(n));
 
     until (eoln);
 
     readln;
 
end.
:
Te aclaro varias cosas :

1. Nunca utilices en un procedimiento o función variables internas com el mismo nombre que los parámetros que le pasas.
2. Cuando quieras sacar informacióin de un procedimietno para pasar a otro, los parámetros deben ser declarados como de Entrada/salida.
3. Para leer variables, no utilices nunca read, sino readln, ya que si usas read, no vacías el buffer del teclaro y te puede dar lugar a errores como el que comentabas..
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

Error al corregir numero

Publicado por Lauti (4 intervenciones) el 17/02/2021 18:32:15
Hola buenas, si si anda perfecto. Primero que nada muchas gracias por responder, no creí que me pudieran ayudar. El fin del programa era que el usuario ingrese un numero, este numero sea leído y que a los dígitos impares se re le reste una unidad para que se convierta en par. Vuelvo a repetir, muchas gracias por responder :) !!
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