• Sábado 20 de Abril de 2024, 09:56

Autor Tema:  Duda En Pascal  (Leído 1791 veces)

jlcboado

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Duda En Pascal
« en: Miércoles 16 de Enero de 2008, 00:09 »
0
Ola, tengo una duda, como puedo hacer para Sumar 2 numeros que estan en un array, en cada casilla del array un numero. Ademas esa suma se realizará con numeros de bases comprensidas entre 2 y 10 (ambos numeros con la misma base)
Yo lo que he hecho a sido esto,
Código: Text
  1.  
  2. Procedure Suma(Num1, Num2: T_Numero);
  3.  
  4. Var
  5.         i,j,z :integer;
  6.         sum, acarreo :integer;
  7.         Sol: T_Sol;
  8.         max : integer;
  9.  
  10. Begin
  11.         sum := 0;
  12.         acarreo := 0;
  13.         z := 0;
  14.         If Num1.Longitud >= Num2.Longitud then
  15.                 max := Num1.Longitud
  16.         Else max := Num2.Longitud;
  17.  
  18.         for i := max + 1 downto 1 do begin //for
  19.  
  20.                         if (i=max+1) AND (acarreo = 1) then begin
  21.                                 Num1.Numero[i] := 0;
  22.                                 Num2.Numero[i] := 0;
  23.                         end;
  24.  
  25.                         sum := Num1.Numero[i]+Num2.Numero[i]+acarreo;
  26.                         writeln('i ',i,  ' sum:  ',sum,' acarreo' ,acarreo);
  27.                         acarreo := 0;
  28.                         z := z+1;
  29.  
  30.  
  31.                         if sum >= Num1.Base then begin //if
  32.                                 Sol[z] := (sum - Num1.Base);
  33.                                 sum := 0;
  34.                                 acarreo := 1;
  35.                         end //if
  36.                         else Sol[z] := sum;
  37.                         writeln(' VECTOR ES :    ',Sol[i]); //Pongo esto para que me muestre
  38.                                                                        // los datos temporales del array
  39.  
  40.  
  41.         end; //for
  42.  
  43.         for i:=1 to max+1 do
  44.                 write(Sol[i],' ');
  45.  
  46. End;
  47.  
  48.  

Ademas tengo que hacer la multiplicacion de 1 numero cuya base esta comprendida entre 2 y 10  POR un numero de 1 cifra.
No pido a la solucion de este ejercicio, sino como hacerlo.

Si alguien me puede ayudar, se lo agradezco.
Que sea rápido

Gracias

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Duda En Pascal
« Respuesta #1 en: Miércoles 16 de Enero de 2008, 21:05 »
0
Citar
como puedo hacer para Sumar 2 numeros que estan en un array, en cada casilla del array un numero.
No logro entender bien esa parte que es vital.  :(
Te ayudo con gusto pero explicame por favor un poco más esa parte. (puede ser que hoy estoy un poco lento :P)

jlcboado

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Duda En Pascal
« Respuesta #2 en: Miércoles 16 de Enero de 2008, 23:39 »
0
La practica consiste en Sumar 2 numeros de igual base, y esta (la base) varia entre 2 y 10.
Ejemplo, base 2: 1110101010101
             base 8: 237651237765
             base 3: 1022211101

Para eso lo que hago es en un procedimiento anterior leer los datos en un String.
Mira, esta es la declaracion de tipos:
Código: Text
  1.  
  2. Const
  3.         Nmax = 200;
  4.         Base_ini = 2;
  5.         Base_fin = 10;
  6.  
  7.  
  8. Type
  9.         T_Numero = Record
  10.                 Numero: array[1..Nmax] of byte;
  11.                 Base: integer;
  12.                 Longitud: 1..Nmax;
  13.         End;
  14.         T_Sol = array[1..Nmax] of byte;
  15.  
  16.  

Despues voy pasando cada caracter del string a un array (ahora que pienso este paso lo escusaba, lo podia ir metiendo directamente en el array xD)
Y ahora tengo que hacer la suma, tal y cmo ves en el codigo, pero no va!!!

No se si lo estoy haciendo bien o mal. Si sabes otra solucion más eficiente.


Y la 2ª parte es multiplicar un numero de base tambioen comprendida entre 2 y 10   por un numero de una cifra
Ejemplo:
  1101010101010101 (en base 2      por        5
 
Este no tengo ni la remota idea de como se hace.

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Duda En Pascal
« Respuesta #3 en: Jueves 17 de Enero de 2008, 12:53 »
0
Por que no haces más facil la conversion de base....
...digo, un numero de base N lo pasas a base 10, los sumas y luego lo conviertes a la base N.
Así tendrías que hacer 1 procedimiento para que te devuelva el numero cambiado de base. Como las base no supera 10, me imagino que se puede hacer eso con un soloprocedimiento generico para cualquier base N entre 2 y 10.

respecto de eficiencia, soy bastante malo en eso de problemas matemáticos, no te puedo aconsejar mucho.

jlcboado

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Duda En Pascal
« Respuesta #4 en: Jueves 17 de Enero de 2008, 13:21 »
0
No puedo, porque deben ser con números largos (de
hasta 200 cifras) y con un integer o un longint no permiten 200 cifras.
la unica manera de hacerlo es con string o con arrays

Gracias