Programación General > Pascal

 Duda En Pascal

(1/1)

jlcboado:
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 --- Procedure Suma(Num1, Num2: T_Numero); Var        i,j,z :integer;        sum, acarreo :integer;        Sol: T_Sol;        max : integer; Begin        sum := 0;        acarreo := 0;        z := 0;        If Num1.Longitud >= Num2.Longitud then                max := Num1.Longitud        Else max := Num2.Longitud;         for i := max + 1 downto 1 do begin //for                         if (i=max+1) AND (acarreo = 1) then begin                                Num1.Numero[i] := 0;                                Num2.Numero[i] := 0;                        end;                         sum := Num1.Numero[i]+Num2.Numero[i]+acarreo;                        writeln('i ',i,  ' sum:  ',sum,' acarreo' ,acarreo);                        acarreo := 0;                        z := z+1;                          if sum >= Num1.Base then begin //if                                Sol[z] := (sum - Num1.Base);                                sum := 0;                                acarreo := 1;                        end //if                        else Sol[z] := sum;                        writeln(' VECTOR ES :    ',Sol[i]); //Pongo esto para que me muestre                                                                       // los datos temporales del array          end; //for         for i:=1 to max+1 do                write(Sol[i],' '); End;  
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:

--- Citar ---como puedo hacer para Sumar 2 numeros que estan en un array, en cada casilla del array un numero.

--- Fin de la cita ---
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:
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 --- Const        Nmax = 200;        Base_ini = 2;        Base_fin = 10;  Type        T_Numero = Record                Numero: array[1..Nmax] of byte;                Base: integer;                Longitud: 1..Nmax;        End;        T_Sol = array[1..Nmax] of byte;  
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:
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:
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

Navegación

[0] Índice de Mensajes

Ir a la versión completa