Pascal/Turbo Pascal - Programa en pascal recursividad.

   
Vista:

Programa en pascal recursividad.

Publicado por Asin (3 intervenciones) el 15/11/2015 08:04:00
Hola, me gustaría hacer en pascal un programa recursivo dado los siguientes datos:

POTENCIA RECURSIVA:
La potencia de un real elevado a un entero positivo se puede definir como:
CIFRA i-ESIMA RECURSIVA
Se define la cifra i-ésima de un número entero positivo n como:
 La última si i=0
 La cifra (i-1)-ésima de n DIV 10 si i>0
Por ejemplo, la cifra 0-ésima del número 1234, es el 4. La cifra 1-ésima del número
1234 es el 3,…
MAXIMO COMÚN DIVISOR RECURSIVO.
Se puede calcular el máximo común divisor mediante usando las siguientes propiedades
debidas a Nicómaco de Gersasa, también llamado método de las diferencias:
 si a>b, entonces m.c.d.(a, b) = m.c.d.(a-b, b)
 si a<b, entonces m.c.d.(a, b) = m.c.d.(a, b-a)
 si a=b, entonces m.c.d.(a, b) = m.c.d.(b, a) = a = b
NUMERO DEFECTUOSO.
Un número es defectuoso si es estrictamente menor que la suma de sus divisores (sin
incluir dicho número).
Por ejemplo, el 12 es defectuoso, ya que 12 < 6 + 4 + 3 + 2 + 1
Pero el 10 no es defectuoso, ya que 10 > 5 + 2 + 1
Práctica:
Desarrollar un programa que muestre un menú al usuario para que pueda elegir entre las
siguientes opciones:
a) Potencia. Esta opción solicitará al usuario un número real y un número entero
positivo y llamará a un subprograma recursivo que devuelva la potencia del
número real elevado al número entero usando el método recursivo descrito en la
teoría. El programa principal escribirá el valor devuelto.
b) Cifra i-ésima. Esta opción solicitará un número entero positivo (n) y la posición
de la cifra que quiere extraer. Esa posición ha de ser válida (es decir, debe ser un
número comprendido entre 0 y el número de cifras de n menos uno). Llamará a
un subprograma recursivo que reciba estos dos números enteros y devuelva la
cifra correspondiente usando recursión. El programa principal mostrará dicha
cifra.
c) Máximo común divisor. Esta opción solicitará dos números enteros positivos y
llamará a un subprograma recursivo que reciba ambos números y devuelve el
m.c.d. de ellos usando el método arriba descrito.. El programa mostrará el
resultado.
2
d) Número defectuoso. Esta opción solicitará un número entero positivo y llamará
a un subprograma que reciba ese número y devuelva true si el número es
defectuoso y false en caso contrario. El programa mostrará el resultado. Para
facilitar los cálculos puede usar un subprograma recursivo que reciba un número
y devuelva la suma de sus cifras.
e) Terminar. Cuando el usuario solicite esta opción el programa finalizará.
El programa debe pedir opciones y realizar las tareas asignadas hasta que el usuario
escoja la opción e), momento en el cual el programa terminará.
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

Programa en pascal recursividad.

Publicado por ramon (2072 intervenciones) el 11/12/2015 14:35:03
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
{Mira esto}
 
 program recursivo;
   uses
     crt;
 
   var
     tecla : char;
     salir : boolean;
     cuenta : integer;
 
 
     function potenciarecursiva(m : real; n : integer) : real;
     Begin
        if n = 0 then
        potenciarecursiva := 1.0
    else
       potenciarecursiva := m * potenciarecursiva(m, n - 1);
   End;
 
 
   procedure LAPOTENCIARECURSIVA;
   var
     rel : real;
     ent : integer;
   begin
       write('   Entre Numero Real   : ');
       readln(rel);
       write('   Entre Numero Entero : ');
       readln(ent);
       writeln('   La Potencia Es : ',potenciarecursiva(rel, ent):0:2);
       readln;
   end;
 
 
   function MAXIMOCOMUNDIVISORRECURSIVO(nn, kk : longint) : longint;
   var
    max, min : longint;
   begin
      If nn > kk Then
        Begin
          max := nn;
          min := kk;
        End
      Else
        Begin
          max := kk;
          min := nn;
        End;
         If nn = 0 Then
         MAXIMOCOMUNDIVISORRECURSIVO := kk
       Else
          If kk = 0 Then
          MAXIMOCOMUNDIVISORRECURSIVO := nn
      Else
  MAXIMOCOMUNDIVISORRECURSIVO := MAXIMOCOMUNDIVISORRECURSIVO(max mod min,min);
  end;
 
   function defectuoso(num, p : integer) : boolean;
   begin
      if p > 1  then
      begin
       if frac(num / p) = 0 then
       begin
       cuenta := cuenta + (num div p);
       write('  ',trunc(num / p));
       end;
       defectuoso := defectuoso(num, p - 1);
      end
    else
      begin
      cuenta := cuenta;
      if cuenta <> num then
      defectuoso := true
    else
      defectuoso := false;
      write('  ');
      exit;
      end;
   end;
 
 
   procedure NUMERODEFECTUOSO;
   var
      nu : integer;
   begin
      write('   Entre Numero Entero : ');
      readln(nu);
      cuenta := 0;
      writeln('   El Numero es = ',defectuoso(nu,nu));
      writeln('  Entrado = ',nu,'   Respuesta = ',cuenta);
      readkey;
   end;
 
 
 
   procedure menu;
   var
     s, g : longint;
   begin
      salir := false;
    repeat
       clrscr;
       writeln('   ***** Menu Jeneral *****');
       writeln;
       writeln('   1 = POTENCIA RECURSIVA');
       writeln('   2 = MAXIMO COMUN DIVISOR RECURSIVO');
       writeln('   3 = NUMERO DEFECTUOSO');
       writeln('   4 = TERMINAR');
       writeln;
       writeln('   >>> Elija Opcion <<<');
     repeat
         tecla := readkey;
     until tecla in['1','2','3','4'];
     clrscr;
    case tecla of
 '1' : LAPOTENCIARECURSIVA;
 '2' : begin
       write('  Entre Primer Numero  : ');
       readln(s);
       write('  Entre Segundo Numero : ');
       readln(g);
     writeln('  Maximo Comun Divisor Es : ',MAXIMOCOMUNDIVISORRECURSIVO(s,g));
     writeln;
     writeln('   Pulse Una Tecla');
     readkey;
       end;
 '3' : NUMERODEFECTUOSO;
 '4' : salir := true;
    end;
    until salir = true;
   end;
 
 
   begin
      menu;
   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