Domingo 17 de Noviembre de 2024, 16:55
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Pascal
»
.
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: . (Leído 2320 veces)
masterl1nk
Visitante
.
«
en:
Sábado 12 de Febrero de 2011, 19:20 »
0
.
Tweet
«
última modificación: Lunes 20 de Abril de 2020, 17:57 por masterl1nk
»
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: Encontrar la secuencia más larga en un vector
«
Respuesta #1 en:
Domingo 13 de Febrero de 2011, 15:09 »
0
Habría muchas formas de hacerlo. ¿No se te ocurre absolutamente ninguna idea?
Fr33k K0mpu73r
LiLou
Nuevo Miembro
Mensajes: 1
Re: Encontrar la secuencia más larga en un vector
«
Respuesta #2 en:
Jueves 17 de Febrero de 2011, 11:27 »
0
Aprovecho para preguntar yo tambien, pero en C, perdon si no sirve tambien para Pascal.
La funcion main seria tal que así:
Código: C
int
main
(
)
{
int
t1
[
M
]
,
t2
[
M
]
;
//t1 = serie actual, t2 = serie mas larga
int
n1
=
0
,
n2
=
0
;
//longitud de las series
int
x
;
//lector
printf
(
"Intro. serie de enters acabada en 0:n"
)
;
scanf
(
"%d"
,
&
x
)
;
//inicializacion del primer entero
leer_e
(
t1
,
n1
,
x
)
;
//inicializacion de la 1a serie
while
(
!
u_s_o_d
(
n1
)
)
{
//ultima serie ordenada decrec.
tratar_t
(
t1
,
n1
,
t2
,
n2
)
;
leer_e
(
t1
,
n1
,
x
)
;
}
resultado
(
t2
,
n2
)
;
return
0
;
}
Lo importante es decubrir como ha de ser la accion tratar_t.
Yo lo he hehco de esta forma, pero debe de haber algun error, pues no me sale bien:
Código: C
void
tratar_t
(
int
t1
[
]
,
int
&
n1
,
int
t2
[
]
,
int
&
n2
)
{
if
(
n1
>
n2
)
copiar
(
t1
,
t2
,
n1
,
n2
)
;
//else no hacer nada, la serie mas larga es la ultima t2
}
void
copiar
(
int
t1
[
]
,
int
t2
[
]
,
int
&
n1
,
int
&
n2
)
{
int
i
,
j
=
0
;
for
(
i
=
0
;
i
<=
n1
;
i
++
)
{
t1
[
i
]
=
t2
[
j
]
;
j
++;
}
n2
=
j
;
}
El programa entero (ejecutadlo para ver qué resultados os da ):
Código: C
#include <stdio.h>
#define M 100
void
leer_e
(
int
t
[
]
,
int
&
n
,
int
&
e
)
;
bool u_s_o_d
(
int
&
n
)
;
void
tratar_t
(
int
t1
[
]
,
int
&
n1
,
int
t2
[
]
,
int
&
n2
)
;
void
resultado
(
int
t
[
]
,
int
&
n
)
;
void
copiar
(
int
t1
[
]
,
int
t2
[
]
,
int
&
n1
,
int
&
n2
)
;
int
main
(
)
{
int
t1
[
M
]
,
t2
[
M
]
;
//t1 = serie actual, t2 = serie mas larga
int
n1
=
0
,
n2
=
0
;
//longitud de las series
int
x
;
//lector
printf
(
"Intro. serie de enters acabada en 0:n"
)
;
scanf
(
"%d"
,
&
x
)
;
//inicializacion del primer entero
leer_e
(
t1
,
n1
,
x
)
;
//inicializacion de la 1a serie
while
(
!
u_s_o_d
(
n1
)
)
{
//ultima serie ordenada decrec.
tratar_t
(
t1
,
n1
,
t2
,
n2
)
;
leer_e
(
t1
,
n1
,
x
)
;
}
resultado
(
t2
,
n2
)
;
return
0
;
}
void
leer_e
(
int
t
[
]
,
int
&
n
,
int
&
e
)
{
int
i
=
0
;
while
(
t
[
i
]
<=
e
||
e
!=
0
)
{
t
[
i
]
=
e
;
scanf
(
"%d"
,
&
e
)
;
i
++;
}
n
=
i
;
//longitud de t1
printf
(
"%d"
,
n
)
;
//para comprobar que valor tiene n
}
bool u_s_o_d
(
int
&
n
)
{
return
(
n
==
0
)
;
}
void
tratar_t
(
int
t1
[
]
,
int
&
n1
,
int
t2
[
]
,
int
&
n2
)
{
if
(
n1
>
n2
)
copiar
(
t1
,
t2
,
n1
,
n2
)
;
//else no hacer nada, la serie mas larga es la ultima t2
}
void
resultado
(
int
t
[
]
,
int
&
n
)
{
int
i
;
printf
(
"nSerie mes larga: %dn"
,
n
)
;
for
(
i
=
0
;
i
<=
n
;
i
++
)
printf
(
"%d "
,
t
[
i
]
)
;
putchar
(
'n'
)
;
}
void
copiar
(
int
t1
[
]
,
int
t2
[
]
,
int
&
n1
,
int
&
n2
)
{
int
i
,
j
=
0
;
for
(
i
=
0
;
i
<=
n1
;
i
++
)
{
t1
[
i
]
=
t2
[
j
]
;
j
++;
}
n2
=
j
;
}
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Pascal
»
.