Algoritmos en Pascal

Hola alberto, saludos, necesito que me ayudes en la creación de un algoritmo en turbo pascal la idea es multiplicar dos variables ingresadas por teclado pero que no utilice el símbolo asterisco (*), el resultado debe mostrarse en pantalla, y si tienes algoritmos variados en torvo pascal me serian de gran utilidad. Gracias.
Respuesta
1
Hay básicamente tres algoritmos para conseguir la multiplicación rápida de dos números enteros a partir de las operaciones computacionalmente más simples de suma y resta:
- Algoritmo de suma desplazamiento (algoritmo clásico)
- Algoritmo de sumas y restas (multiplicación rusa)
- Algoritmo de Booth (multiplicación rusa extendida a enteros negativos también)
El algoritmo clásico se basa en el algoritmo que todos conocemos desde EGB. Sin embargo, no es el más rápido, incluso asintóticamente es deficiente. Por tanto es aconsejable utilizar la multiplicación rusa, que es la que utilizan la mayoría de los circuitos electrónicos discretos (digitales). Te lo escribo a continuación, en pseudocódigo:
Función mrusa (A, B)
vector X,Y
{ inicialización }
X[1] <-- A; Y[1] <-- B
i <-- 1
{ construir las dos columnas }
mientras X > 1 hacer
X[i + 1] <-- X div 2
Y[i + 1] <-- Y + Y
{ sumar los valores apropiados }
prod <-- 0
mientras i > 0 hacer
si impar(X) entonces prod <-- prod + Y
i <-- i - 1
Devolver prod
Fin mrusa
Los vectores POR e Y no son necesarios, se pueden generar sobre la marcha.
Si no entiendes el concepto del algoritmo dímelo.
Hola amigo albertod, tu algoritmo me sirvio mucho a continuación te envio una serie de algoritmos para ver si me ayudas a resolverlos; muchas gracias. progran variables;
var
i,j,k :integer;
r,s,t :real;
c,d,e ;char;
a,b,f :boolean;
begin
i:=5; j:=20; r:=10;
k:= i + r; (1)
s:= r + k; (2)
t:= i / k; (3)
j:= t * 5; (4)
k:= i / j; (6)
s:= i mod r (7)
i:= 2 * k + j / 2 (8)
c:= ' Ayer fue martes' ; d:= 'hoy' ;
k:= lengt (c); {9}
e:= copy (c,10,6) ; {10}
d:= d +'es' + e; {11}
delete(c,6,4) ; {12}
insert ('debio' ,c,2) ; {13}
a:= falsa; b:=true;
f:= a and b; {14)
a:= a xor a; {15}
b:= d > e {16}
a:= (k = 2) or (c < d) {17}
end
albertod en cada item debe aparecer el resultado obtenido en la operación, incluyendo la respectivas carrecciones. Muchas gracias por tu valioso tiempo.
De nuevo luis34,
Aquí tienes el programa corregido.
var
i,j,k :integer;
r,s,t :real;
c,d,e :string;
a,b,f :boolean;
begin
i:=5; j:=20; r:=10;
k:= i + round(r); writeln(k); {1}
s:= r + k; writeln(s); {2}
t:= i / k; writeln(t); {3}
j:= round(real(t) * 5); writeln(j); {4}
k:= i div j; writeln(k); {6}
s:= i mod round(r); writeln(s); {7}
i:= 2 * k + j div 2; writeln(i); {8}
c:= ' Ayer fue martes' ; d:= 'hoy' ;
k:= length (c); writeln(k); {9}
e:= copy (c,10,6) ; writeln(e); {10}
d:= d + 'es' + e; writeln(d); {11}
delete(c,6,4) ; writeln(c); {12}
insert ('debio' ,c,2) ; writeln(c); {13}
a:= false; b:=true;
f:= a and b; writeln(f); {14}
a:= a xor a; writeln(a); {15}
b:= d > e; writeln(b); {16}
a:= (k = 2) or (c < d); writeln(a); {17}
end.
La salida es:
15
2.5000000000E+01
3.3333333333E-01
2
2
5.0000000000E+00
5
16
Marte
Oyes marte
Ayer martes
DebioAyer martes
FALSE
FALSE
TRUE
TRUE

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas