Viernes 8 de Noviembre de 2024, 20:48
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
»
C/C++
(Moderador:
Eternal Idol
) »
Funcion que devuelve un vector...
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Funcion que devuelve un vector... (Leído 1569 veces)
ermiguel1979
Miembro activo
Mensajes: 45
Funcion que devuelve un vector...
«
en:
Viernes 15 de Enero de 2010, 00:34 »
0
Buenas noches, estoy liadillo con un programa que debe leer una matriz cuadrada de tamaño y mostrar una submatriz indicada en forma de vector.
La cosa es que hay que mandar la submatriz a una función, que la devuelve como un vector. Pero no me sale... no se si es problema de que la funcion no devuelve array o yo que se, la cosa es que no me anda. Os mando el codigo a ver que me podeis comentar. Garacias.
Código: C
#include <stdio.h>
#include <stdlib.h>
#define TAMA 10
/*-----Funcion-submatriz-en-array------------------------------------------*/
int
subalgoritmo
(
int
array
[
TAMA
]
[
TAMA
]
,
int
fpe
,
int
cpe
,
int
fue
,
int
cue
,
int
vector
[
90
]
)
{
int
i
,
j
,
a
=
0
;
for
(
i
=
fpe
-
1
;
i
<
fue
;
i
++
)
{
/*2*/
for
(
j
=
cpe
-
1
;
j
<
cue
;
j
++
)
{
vector
[
a
]
=
array
[
i
]
[
j
]
;
a
++;
/*no modifica ni muestra el vector*/
}
}
}
/*------------------------------------------------------------------------*/
int
main
(
void
)
{
int
dimension
;
int
i
,
j
;
int
matriz
[
TAMA
]
[
TAMA
]
;
int
fpe
,
cpe
;
//fpe == fila primer elemento /*1*/
int
fue
,
cue
;
//cue == columna ultimo elemento
int
vector
[
90
]
;
printf
(
"Indique la dimension de la matriz cuadrada: "
)
;
scanf
(
"%i"
,
&
dimension
)
;
if
(
dimension
<
3
||
dimension
>
10
)
{
printf
(
"El numero no es correcto. Debe estar entre 3 y 10. Repita: "
)
;
scanf
(
"%i"
,
&
dimension
)
;
}
printf
(
"Complete la matriz: n"
)
;
for
(
i
=
0
;
i
<
dimension
;
i
++
)
{
for
(
j
=
0
;
j
<
dimension
;
j
++
)
{
printf
(
"elemento[%i][%i]: "
,
i
,
j
)
;
scanf
(
"%i"
,
&
matriz
[
i
]
[
j
]
)
;
}
}
printf
(
"nSu matriz:n"
)
;
for
(
i
=
0
;
i
<
dimension
;
i
++
)
{
for
(
j
=
0
;
j
<
dimension
;
j
++
)
{
printf
(
"%i "
,
matriz
[
i
]
[
j
]
)
;
}
printf
(
"n"
)
;
}
printf
(
"nIndique la posicion de la submatriz.n"
)
;
printf
(
"Coordenadas primer elemento (primero 'fila' y luego 'columna'): "
)
;
scanf
(
"%i %i"
,
&
fpe
,
&
cpe
)
;
printf
(
"Coordenadas ultimo elemento (primero 'fila' y luego 'columna'): "
)
;
scanf
(
"%i %i"
,
&
fue
,
&
cue
)
;
printf
(
"nSubmatriz: (%i,%i) , (%i,%i)n"
,
fpe
,
cpe
,
fue
,
cue
)
;
vector
[
90
]
=
subalgoritmo
(
matriz
,
fpe
,
cpe
,
fue
,
cue
,
vector
)
;
printf
(
"%i"
,
vector
[
90
]
)
;
printf
(
"nSubmatriz: (%i,%i) , (%i,%i) en forma vectorial: %in"
,
fpe
,
cpe
,
fue
,
cue
,
vector
[
90
]
)
;
return
1
;
}
/*1-> "pef, pec, uef, uec": delimitan la submatriz. Seran usados en la funcion
como contadores de inicio y fin de bucle. Donde empieza y donde termina la
submatriz (posicion (fila,columna) del primer y ultimo elemento)*/
/*2-> Copia los valores de la submatriz en el vector*/
Un saludo!!
Tweet
punteroNULO
Miembro activo
Mensajes: 73
Re: Funcion que devuelve un vector...
«
Respuesta #1 en:
Viernes 15 de Enero de 2010, 20:11 »
0
Código: C
vector
[
90
]
=
subalgoritmo
(
matriz
,
fpe
,
cpe
,
fue
,
cue
,
vector
)
;
La asignación a la variable sobra puesto que la función no devuelve ningún valor y el vector ya está como uno de los parámetros. Lo correcto entonces:
Código: C
subalgoritmo
(
matriz
,
fpe
,
cpe
,
fue
,
cue
,
vector
)
;
Código: C
printf
(
"%i"
,
vector
[
90
]
)
;
printf
(
"nSubmatriz: (%i,%i) , (%i,%i) en forma vectorial: %in"
,
fpe
,
cpe
,
fue
,
cue
,
vector
[
90
]
)
;
Solo muestra el valor que se encuentra en la posición 90 del vector, que encima está fuera del rango (un vector de 90 elementos va desde 0 hasta 89), con lo cual el valor que se muestra es de la variable que se encuentra en la siguiente posición de memoria.
Para mostrar todos los elementos se realiza un recorrido desde la primera posición hasta el número de elementos que se extrayerón de la matriz:
Código: C
printf
(
"nSubmatriz: (%i,%i) , (%i,%i) en forma vectorial: "
,
fpe
,
cpe
,
fue
,
cue
)
;
for
(
i
=
0
;
i
<
(
(
(
fue
-
fpe
)
+
1
)
*
(
(
cue
-
cpe
)
+
1
)
)
;
i
++
)
printf
(
"%i "
,
vector
[
i
]
)
;
ermiguel1979
Miembro activo
Mensajes: 45
Re: Funcion que devuelve un vector...
«
Respuesta #2 en:
Sábado 16 de Enero de 2010, 21:01 »
0
Buenas noches punteronulo, tu aporte me ha sido de grán ayuda, y aunque no lo he conseguido resolver igual, me ha dado la idea para encontrar una solución.
Al final mi código se ha quedado así:
Código: C
/*Ejercicio 17; práctica 5*/
#include <stdio.h>
#include <stdlib.h>
#define TAMA 10
/*-----Funcion-submatriz-en-array------------------------------------------*/
int
subalgoritmo
(
int
array
[
TAMA
]
[
TAMA
]
,
int
fpe
,
int
cpe
,
int
fue
,
int
cue
,
int
vector
[
90
]
)
{
int
i
,
j
,
a
=
0
;
for
(
i
=
fpe
-
1
;
i
<
fue
;
i
++
)
{
for
(
j
=
cpe
-
1
;
j
<
cue
;
j
++
)
{
vector
[
a
]
=
array
[
i
]
[
j
]
;
printf
(
"%i "
,
vector
[
a
]
)
;
a
++;
}
/*muestra el vector[90] en main()*/
}
printf
(
"n"
)
;
}
/*------------------------------------------------------------------------*/
/*Algoritmo-> SUMATRIZ a VECTOR*/
int
main
(
void
)
{
int
dimension
;
int
i
,
j
;
int
matriz
[
TAMA
]
[
TAMA
]
;
int
fpe
,
cpe
;
//fpe == fila primer elemento
int
fue
,
cue
;
//cue == columna ultimo elemento
int
vector
[
90
]
;
printf
(
"Indique la dimension de la matriz cuadrada: "
)
;
scanf
(
"%i"
,
&
dimension
)
;
if
(
dimension
<
3
||
dimension
>
10
)
{
printf
(
"El numero no es correcto. Debe estar entre 3 y 10. Repita: "
)
;
scanf
(
"%i"
,
&
dimension
)
;
}
printf
(
"Complete la matriz: n"
)
;
for
(
i
=
0
;
i
<
dimension
;
i
++
)
{
for
(
j
=
0
;
j
<
dimension
;
j
++
)
{
printf
(
"elemento[%i][%i]: "
,
i
,
j
)
;
scanf
(
"%i"
,
&
matriz
[
i
]
[
j
]
)
;
}
}
printf
(
"nSu matriz:n"
)
;
for
(
i
=
0
;
i
<
dimension
;
i
++
)
{
for
(
j
=
0
;
j
<
dimension
;
j
++
)
{
printf
(
"%3i "
,
matriz
[
i
]
[
j
]
)
;
}
printf
(
"n"
)
;
}
printf
(
"nIndique la posicion de la submatriz.n"
)
;
printf
(
"Coordenadas primer elemento (primero 'fila' y luego 'columna'): "
)
;
scanf
(
"%i %i"
,
&
fpe
,
&
cpe
)
;
printf
(
"Coordenadas ultimo elemento (primero 'fila' y luego 'columna'): "
)
;
scanf
(
"%i %i"
,
&
fue
,
&
cue
)
;
printf
(
"nSubmatriz: (%i,%i) , (%i,%i)n"
,
fpe
,
cpe
,
fue
,
cue
)
;
for
(
i
=
fpe
-
1
;
i
<
fue
;
i
++
)
{
for
(
j
=
cpe
-
1
;
j
<
cue
;
j
++
)
{
printf
(
"%3i "
,
matriz
[
i
]
[
j
]
)
;
}
printf
(
"n"
)
;
}
printf
(
"nSubmatriz: (%i,%i) , (%i,%i) en forma "
"vectorial: "
,
fpe
,
cpe
,
fue
,
cue
)
;
subalgoritmo
(
matriz
,
fpe
,
cpe
,
fue
,
cue
,
vector
)
;
return
1
;
}
Gracias y un saludo!
punteroNULO
Miembro activo
Mensajes: 73
Re: Funcion que devuelve un vector...
«
Respuesta #3 en:
Martes 19 de Enero de 2010, 19:09 »
0
En la función
subalgoritmo
en vez de:
Código: C
vector
[
a
]
=
array
[
i
]
[
j
]
;
printf
(
"%i "
,
vector
[
a
]
)
;
no es más lógico y rápido:
Código: C
printf
(
"%i "
,
array
[
i
]
[
j
]
)
;
La variable vector no tiene ninguna utilidad para este caso. Ocupar espacio en memoria para nada.
ermiguel1979
Miembro activo
Mensajes: 45
Re: Funcion que devuelve un vector...
«
Respuesta #4 en:
Miércoles 20 de Enero de 2010, 15:22 »
0
Buen detalle, lo copio... se me nota cada cantada....
Gracias por la atención!!
Un saludo.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Funcion que devuelve un vector...