Bienvenido(a), Visitante. Favor de ingresar o registrarse.

Ingresar con nombre de usuario, contraseña y duración de la sesión

Foros del Club

Páginas: [1]   Ir Abajo
  Enviar tema  |  Imprimir  
Autor Tema: Desafio 01 "Triangulo de Pascal"  (Leído 6974 veces)
0 Usuarios y 1 Visitante están viendo este tema.
JoRgE-1987
Programador
Legend
**********

Prestigio: 7
Desconectado Desconectado

Sexo: Masculino
Título universitario: No.
Profesión: Programador
Mensajes: 633

Geek


WWW
Lenguajes:
Object Pascal
Pascal
HTML
Aprendiendo C++
« en: 14/02/2006, 23:17:37 »

Desarrollar un programa en pascal, que genere automaticamente el triangulo de pascal, donde los lados del triangulo son unos, y las lines son la suma de sus dos superiores: ejemplo:

 ______1______
 _____1_1_____
 ____1_2_1____
 ___1_3_3_1___
 __1_4_6_4_1__
_1_5_10_10_5_1_
1_6_15_20_15_6_1


Cualquier duda Consulten.

Saludos Cheesy:D
En línea


exe
Visitante
« Respuesta #1 en: 15/02/2006, 00:03:03 »

Lindo problema. Está bueno verle la interpretación mediante números combinatorios (no sé si alguien le gusta la matemática), puede llegar a salir más simple, cada uno de esos números son números combinatorios. Pueden darse una vuelta por Wikipedia, ahí explica un poco esto.
Ha det bra,
exe
En línea
CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« Respuesta #2 en: 15/02/2006, 01:14:46 »

Primero creo el array asignandole éstos valores.

1  0  0  0  0  0  0
1  1  0  0  0  0  0
1  2  1  0  0  0  0
1  3  3  1  0  0  0
1  4  6  4  1  0  0
1  5  10 10 5  1  0
1  6  15 20 15 6  1


Y despues creo un string con un formato para mostrarlo en pantalla y quede como el triangulo que propusiste.

Codigo en Delphi.

Código
procedure TForm1.Button1Click(Sender: TObject);
var
 A : array [1..7, 1..7] of integer;
 i, j, z : integer;
 s : string;
begin
 //llenamos el array con los valores necesarios
 for i := 1 to 7 do
   for j := 1 to 7 do
   begin
     if j > i then
       a[i,j] := 0
     else
       if(i > 1) or (j > 1) then
         a[i,j] := a[i-1,j-1] + a[i-1,j]
       else
         a[i,j] := 1;
   end;
 
 //Lo mostramos formateado
 for i := 1 to 7 do
 begin
   if 7 - i >= 1 then
     for z := 1 to 7 - i do
       s := s + '__ | ';
   for j := 1 to i do
   begin
     s := s + FormatFloat('00',A[i,j]) + ' | __ | ';
   end;
   if 7 - i >= 1 then
     for z := 1 to 7 - i do
       s := s + '__ | ';
   s := s + chr(13);
 end;
 Memo1.Lines.SetText(PAnsiChar(s));
end;
 

Finalmente, la salida es ésta:

__ | __ | __ | __ | __ | __ | 01 | __ | __ | __ | __ | __ | __ | __ |
__ | __ | __ | __ | __ | 01 | __ | 01 | __ | __ | __ | __ | __ | __ |
__ | __ | __ | __ | 01 | __ | 02 | __ | 01 | __ | __ | __ | __ | __ |
__ | __ | __ | 01 | __ | 03 | __ | 03 | __ | 01 | __ | __ | __ | __ |
__ | __ | 01 | __ | 04 | __ | 06 | __ | 04 | __ | 01 | __ | __ | __ |
__ | 01 | __ | 05 | __ | 10 | __ | 10 | __ | 05 | __ | 01 | __ | __ |
01 | __ | 06 | __ | 15 | __ | 20 | __ | 15 | __ | 06 | __ | 01 | __ |


A ver si alguno logra realizar los dos pasos simultaneamente.
Saludos!
En línea

JoRgE-1987
Programador
Legend
**********

Prestigio: 7
Desconectado Desconectado

Sexo: Masculino
Título universitario: No.
Profesión: Programador
Mensajes: 633

Geek


WWW
Lenguajes:
Object Pascal
Pascal
HTML
Aprendiendo C++
« Respuesta #3 en: 15/02/2006, 02:32:11 »

Muy bien, lo resolviste bastante rapido, yo tarde por lo menos un dia entero.

Saludos Cheesy:D

PD. No se lee bien el codigo que pusiste, aparece cortado.
Citar
//Lo mostramos formateado

  for i := 1 to 7 do

  begin
Hasta aca, nada mas se ve.
En línea


CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« Respuesta #4 en: 15/02/2006, 02:38:04 »

Yo lo veo bien, tratá cambiando el tema que usas en el foro:
En Perfil, luego Configuración de Apariencia y Diseño y por último Tema actual: algo (cambiar) <----- click
Yo uso xtSMF Theme! con Firefox y se ve muy lindo.

Saludos!
En línea

JoRgE-1987
Programador
Legend
**********

Prestigio: 7
Desconectado Desconectado

Sexo: Masculino
Título universitario: No.
Profesión: Programador
Mensajes: 633

Geek


WWW
Lenguajes:
Object Pascal
Pascal
HTML
Aprendiendo C++
« Respuesta #5 en: 15/02/2006, 02:51:07 »

Si, ya se como se cambia un tema.
De todas maneras, no lo voy a cambiar, porque me gusta el tema que uso.

Saludos Cheesy:D

PD: No podes usar Firefox, es malisimo.

PD: Al final me convenciste, ya que este tema, tambien esta lindo, no puedo creer, que hice algo que no queria. Lengua
Ta bueno este tema ehh.
« Última modificación: 15/02/2006, 02:59:59 por JoRgE-1987 » En línea


exe
Visitante
« Respuesta #6 en: 15/02/2006, 14:35:16 »

Acá hice algo usando combinatoria, y para imprimir el cuadro basandome en la rutina de CID.
No sé Pascal, asi que probablemente haya mejores maneras de hacer lo que hice, críticas constructivas y destructivas serán bienvenidas y aceptadas.

Código:
program PascalTriangle;
// Para usar Format()
uses sysutils;

// Función recursiva para calcular el factorial.
FUNCTION Fact ( i : INTEGER ) : INTEGER;
BEGIN
    IF (i = 1) OR (i = 0) THEN
        Fact := 1
    ELSE
        Fact := i * Fact (i-1);
END;

// Función para calcular un número combinatorio.
FUNCTION Comb ( i,j : INTEGER ) : INTEGER;
BEGIN
    Comb := Fact (i) DIV ( Fact (i-j) * Fact (j) );
END;

// Main()
VAR
    j,h : INTEGER;
    s : STRING;
CONST
    i = 7;
BEGIN
    FOR j := 0 TO i DO
    BEGIN
        s := '';
        IF i - j >= 0 THEN
            FOR h := 0 TO i - j DO
                s := s + '__| ';
        FOR h := 0 TO j DO
            s := s + Format ( '%2d', [Comb ( j, h )]) + '| __| ';
        IF i - j >= 0 THEN
            FOR h := 0 TO i - j DO
                s := s + '__| ';
        WriteLn (s);
    END;
END.

Ha det bra,
exe
En línea
Foros del Club
   

 En línea
Páginas: [1]   Ir Arriba
  Enviar tema  |  Imprimir  
 
Ir a: