Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-06-2006
galmacland galmacland is offline
Miembro
 
Registrado: nov 2004
Posts: 48
Poder: 0
galmacland Va por buen camino
Cool Problema con matrices que no logro resolver

Hola,

recien me paso un amigo unos problemas en los que tenia dudas, y hay uno particularmente que no he logrado resolver. es algo sencillo pienso, lo que ya mi cabeza parece que no genera mas por el dia de hoy y no logro que salga...

dice asi:

Declare 2 matrices para:
1 - en la primera se almacenen los 10 primeros numeros naturales, empezando desde 0.

2 - en la segunda se almacene el valor del factorial del numero incluido en la misma posicion de la primera matriz.

ej:

si tenemos que en la posicion 3 de la primera matriz se guarda el valor 3, en la posicion 3 de la segunda matriz estara el factorial de 3 que es 6

factorial(5):= 1*2*3*4*5= 120

Obviamente pienso que hay que usar los valores de la primera matriz en la segunda, pero ocurre un error en los resultados por como estoy usando el bucle, pero no encuentro como hacerlo.. a lo mejor hay un error en el enunciado.. espero puedan ayudarme con esto... gracias por las sugerencias..
Responder Con Cita
  #2  
Antiguo 18-06-2006
bpesoj bpesoj is offline
Registrado
 
Registrado: dic 2004
Posts: 9
Poder: 0
bpesoj Va por buen camino
Hola, galmacland.

Creo que este código hace lo que indicas:

El uso del tipo double es por si el valor del factorial se hace mayor que
el mayor valor admitido a un entero.

Function Factorial(n:Integer): Double;
var
k:Integer;
f: Double;
begin
f:=1;
for k:=1 to n do
f:=f*k;
Result:=f;
end;

procedure Calcular;
var
m1:Array[0..9] of integer;
m2:Array[0..9] of Double;
k:Integer;
begin
for k:=0 to 9 do
begin
m1[k]:=k;
m2[k]:=Factorial(k);
end;
end;

Saludos.
Responder Con Cita
  #3  
Antiguo 18-06-2006
galmacland galmacland is offline
Miembro
 
Registrado: nov 2004
Posts: 48
Poder: 0
galmacland Va por buen camino
Graciaspor tu ayuda, se como hacerlo con funciones, el caso es que no me funciona usando las 2 matrices, sin usar las funciones, el caso es que es un manual con ejercicios y no ha llegado a la parte de las funciones....
Responder Con Cita
  #4  
Antiguo 18-06-2006
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Código Delphi [-]
program factorial; var
i,i:Integer; f : Double; m1 : Array[0..9] of integer; m2 : Array[0..9] of Double;
begin
for i:=0 to 9 do
begin
m1[i]:=i;
end;
for i:=0 to 9 do
begin
m2[j]:=1; for j:=0 to m1[i] do
m2[j]:=m2[j]*j;
end;
end;


supongo que algo asi te podria funcionar, no lo he provado pero me parece que si funciona. Aunque creo que por el hecho de iniciar de "0" es posible que todos los resultados sena "0"

saludos.
Responder Con Cita
  #5  
Antiguo 18-06-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
No lo probe pero deberia ser algo asi:
Código Delphi [-]
var
  i: integer;
  m1, m2: array[1..10] of Cardinal;
begin
  m1[1]:= 1;
  m2[1]:= 1;
  for i:= 2 to 10 do
  begin
     m1[i]:= i;
     m2[i]:= m2[i-1] * i;
  end;
end;

Última edición por seoane fecha: 18-06-2006 a las 02:21:37.
Responder Con Cita
  #6  
Antiguo 18-06-2006
Avatar de OSKR
OSKR OSKR is offline
Miembro
 
Registrado: nov 2004
Ubicación: San Cristóbal/Táchira/Venezuela
Posts: 389
Poder: 20
OSKR Va por buen camino
galmacland:
Cita:
en la primera se almacenen los 10 primeros numeros naturales, empezando desde 0
Veo q no se ha tomado en cuenta el "0" y q su factorial es 1
Modificando el código de seoane
Código Delphi [-]
var
  i: integer;
  m1, m2: array[0..10] of Cardinal;
begin
  for i:= 0 to 10 do
  begin
     m1[i]:= i;
     m2[i]:=1;
     if(i>1)then
       m2[i]:= m2[i-1] * i;
  end;
end;
//Nota: No lo he probado
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad."
Simón Bolívar
(Carta al Coronel Inglés Patricio Cambell 05/08/1829).

Última edición por OSKR fecha: 18-06-2006 a las 17:04:53.
Responder Con Cita
  #7  
Antiguo 18-06-2006
Innovacl Innovacl is offline
Registrado
 
Registrado: jun 2006
Posts: 6
Poder: 0
Innovacl Va por buen camino
Thumbs up

Una pequeña modificación al algoritmo de galmacland

var
i: integer;
m1, m2: array[0..10] of Cardinal;
begin
m1[0]:=0;
m2[0]:=1;
for i:= 1 to 10 do
begin
m1[i]:= i;
m2[i]:= m2[i-1] * i;
end
end;

... no requiere el if y ahorra un ciclo. Con recursividad es un poco más elegante.
Responder Con Cita
  #8  
Antiguo 18-06-2006
Avatar de OSKR
OSKR OSKR is offline
Miembro
 
Registrado: nov 2004
Ubicación: San Cristóbal/Táchira/Venezuela
Posts: 389
Poder: 20
OSKR Va por buen camino
Innovacl:
Cita:
no requiere el if y ahorra un ciclo
Pues si...aunqe reqiere 2 instrucciones mas y además el algoritmo es de seoane.
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad."
Simón Bolívar
(Carta al Coronel Inglés Patricio Cambell 05/08/1829).
Responder Con Cita
  #9  
Antiguo 18-06-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por OSKR
Pues si...aunqe reqiere 2 instrucciones mas y además el algoritmo es de seoane.
Si parece que me ignoran ... En cuanto a lo de que son dos instrucciones mas, no hay que ver quien escribe mas si no quien ejecuta menos instrucciones. Me explico, en mi algoritmo ejecuto 2 instrucciones fuera del bucle y 2 dentro. En el que pones tu con el "if" ejecutas 4 instrcciones dentro del bucle (3 si no consideras el if una instruccion) eso multiplicalo por las 10 veces que se repite el bucle y veras que es mas rapido de la forma que yo digo. Pero para la tonteria de problema que es creo que le estamos dando muchas vueltas.
Responder Con Cita
  #10  
Antiguo 20-06-2006
Avatar de OSKR
OSKR OSKR is offline
Miembro
 
Registrado: nov 2004
Ubicación: San Cristóbal/Táchira/Venezuela
Posts: 389
Poder: 20
OSKR Va por buen camino
seoane:
Cita:
En cuanto a lo de que son dos instrucciones mas, no hay que ver quien escribe mas si no quien ejecuta menos instrucciones.
Sip, lo sé, a simple vista se ve, solo hago imcapié en q el algoritmo la faltaba el factorial de 0 y q es tuyo no de gamacland.
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad."
Simón Bolívar
(Carta al Coronel Inglés Patricio Cambell 05/08/1829).
Responder Con Cita
  #11  
Antiguo 20-06-2006
raulmm26 raulmm26 is offline
Miembro
 
Registrado: feb 2005
Posts: 37
Poder: 0
raulmm26 Va por buen camino
lo que sucede con lo que haceis con el factorial es que lo haceis mal no se pone un for despues sino un while y multiplicar quitando a la posicion en que se encuentra hasta que sea uno,quedaria algo asi:
var
i,fact,n: integer;
m1, m2: array[1..10] of Cardinal;
begin
m1[1]:= 1;
m2[1]:=1;
fact:=1;
for i:= 2 to 10 do
begin
m1[i]:= i;
n:=i;
while n>=1 do
begin
fact:=fact*n;
n:=n-1;
end;
m2[i]:= fact;
fact:=1;
end;
end;
Responder Con Cita
  #12  
Antiguo 20-06-2006
Avatar de OSKR
OSKR OSKR is offline
Miembro
 
Registrado: nov 2004
Ubicación: San Cristóbal/Táchira/Venezuela
Posts: 389
Poder: 20
OSKR Va por buen camino
raulmm26:
Cita:
lo que sucede con lo que haceis con el factorial es que lo haceis mal no se pone un for despues sino un while y multiplicar quitando a la posicion en que se encuentra hasta que sea uno,quedaria algo asi
Pero ....a qién le dices esto?...
Estás usando 2 ciclos..los anteriores algoritmos funcionan al pelo (eso creo)
y además....:
Código:
m1[1]:= 1;
recuerda q empieza de 0.
Mejor hago caso a lo q dijo seoane:
Cita:
Pero para la tonteria de problema que es creo que le estamos dando muchas vueltas.
y tiene toda la razón.
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad."
Simón Bolívar
(Carta al Coronel Inglés Patricio Cambell 05/08/1829).
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como logro consultas desde clientdatset y SqlQuery Arturo Conexión con bases de datos 0 22-05-2006 16:41:09
que necesito resolver problema. evgoab SQL 5 12-03-2005 02:19:53
no logro ver datos reales de una bd de informix picapica Conexión con bases de datos 0 08-12-2004 22:27:52
Como logro la suma por grupo alcides SQL 2 19-07-2004 21:11:06
No logro que funcionen un FOREIGN KEY orfeo MySQL 2 16-07-2003 19:52:58


La franja horaria es GMT +2. Ahora son las 12:11:57.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi