Pascal/Turbo Pascal - devuelva el número leído cambiando el valor del dígito de la posición

 
Vista:
sin imagen de perfil
Val: 6
Ha aumentado su posición en 46 puestos en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

devuelva el número leído cambiando el valor del dígito de la posición

Publicado por Andres (15 intervenciones) el 31/05/2021 20:02:28
Elabore un programa en Pascal, que dado un número entero N leído desde el teclado y un valor V, que es un número entero comprendido entre 0 y 9, devuelva el número leído cambiando el valor del dígito de la posición P por V. Si la posición P no existe dentro del número leído, devolverá el número con TODOS sus dígitos cambiados por 9
Ejemplo : Si N= 123698 , P = 3 y V= 4 devolverá el número 123498
Si N = 236988, P =8 y V= 4 devolverá el número 999999
Probar para los siguientes casos :
N= 789369 P = 5 y V= 0
N = 28698 P =6 y V= 6
N= 6934 P = 1 y V= 6
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
sin imagen de perfil
Val: 112
Bronce
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

devuelva el número leído cambiando el valor del dígito de la posición

Publicado por juanba (40 intervenciones) el 07/06/2021 21:44:35
Una posible respuesta:

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
Program NumberNine;
{$mode objfpc}{$H+}
const MaxNum = 999999999;
var P, V, Numero: Longint;
 
//------------------------------------------------------------------------------
// IntroV
// Definicion de la variable V
//------------------------------------------------------------------------------
function IntroP(var MiP: Integer): Boolean;
begin
  IntroP := false;
  Write('Introduzca el valor de P [1..9] ');
  Readln(MiP);
  if (MiP < 1) or (MiP > 9) then
    writeln('Error en la definicion de P')
  else
    IntroP := true;
  end;
 
//------------------------------------------------------------------------------
// IntroV
// Definicion de la variable V
//------------------------------------------------------------------------------
function IntroV(var MiV: Integer): Boolean;
begin
  IntroV := false;
  Write('Introduzca el valor de V [0..9] ');
  Readln(MiV);
  if (MiV < 0) or (MiV > 9) then
    writeln('Error en la definicion de V')
  else
    IntroV := true;
end;
 
//------------------------------------------------------------------------------
// IntroNumero
// Definicion de Numero
//------------------------------------------------------------------------------
function IntroNumero(var MiNumero: Longint): Boolean;
begin
  IntroNumero := false;
  Write('Introduzca el valor de Numero [1..999999999] - [0 para terminar] ');
  Readln(MiNumero);
  if (MiNumero < 0) or (MiNumero > MaxNum) then
    writeln('Error en la definicion de Numero')
  else
    IntroNumero := true;
end;
 
//------------------------------------------------------------------------------
// NumeroDeNueves
// Devuelve un numero compuesto de tantos nueves como el valor de NumCifras
//------------------------------------------------------------------------------
function NumeroDeNueves(NumCifras: Integer): Longint;
var n: Integer;
begin
  NumeroDeNueves := 0;
  if (NumCifras >= 1) and (NumCifras <= 9) then
  begin
    NumeroDeNueves := 9;
    while (NumCifras > 1) do
    begin
      NumeroDeNueves := NumeroDeNueves * 10 + 9;
      NumCifras := NumCifras - 1;
    end;
  End;
end;
 
//------------------------------------------------------------------------------
// CambiarNumero
// Cambia la cifra que se encuentra en la posicion MiP (contando desde las
// unidades) por el valor MiV
//------------------------------------------------------------------------------
function CambiarNumero(var MiP: Integer; MiV: Integer; MiNumero: Longint): Longint;
var Numero2, Resultado: Longint;
    i, NumCifras: Integer;
begin
  NumCifras := 0;                      // Numero de cifras de MiNumero
  Resultado := 0;
  Numero2 := MiNumero;
  While Numero2 > 0 do
  begin
    Numero2 := Numero2 div 10;
    NumCifras := NumCifras + 1;
  end;
  Numero2 := 1;                        // Numero2 ira tomando valores 1, 10, 100...
  i := 1;
  if MiP > NumCifras then              // Posicion fuera del tiesto; salir
    Resultado := NumeroDeNueves(NumCifras)
  else
  Repeat
    if i = MiP then
      Resultado := Numero2 * MiV + Resultado
    else
      Resultado := Numero2 * ((MiNumero div Numero2) mod 10) + Resultado;
    Numero2 := Numero2 * 10;
    i := i + 1;
  Until i > NumCifras;
  CambiarNumero := Resultado;
end;
 
//------------------------------------------------------------------------------
// Programa principal
//------------------------------------------------------------------------------
Begin
  Repeat
    V := 0;
    P := 0;
    Numero := 0;
    if IntroNumero(Numero) and (Numero > 0) then
      if IntroP(P) then
        if IntroV(V) then
          Writeln('And the Oscar goes to... ', CambiarNumero(P, V, Numero));
  Until Numero = 0;
  Writeln('Hasta otra ocasion. Pulse RTN, haga el favor.');
  Readln;
End.
No lo he verificado muy a fondo pero creo que puede valer.
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