Páginas: [1] 2
|
 |
|
Autor
|
Tema: incializar un vector con una funciòn. (Leído 591 veces)
|
botella
Desconectado
Mensajes: 69
|
Quiero hacer una funciòn que al ingresarle el nombre de una matriz que en este caso serà un vector, inicialize todas sus pocisiones a 1
for (int i=0; i<dim; i++) vector=0;
esa serìa la lìnea para inicializar,
lo que quiero es que la funciòn me pida la longitud del vector y su nombre algo asì
inivector (matriz, dimension)
teniendo en cuenta que el tamaño de la matriz lo difinirà el usuario durante la ejecuciòn del programa
pude hacer la funciòn pero solo si la matriz està declarada globalmente y para una matriz ùnica, yo quiero que la funciòn sirva para cualquier matriz, y de cualquier tamaño.
graxias
|
|
|
|
|
En línea
|
|
|
|
Eternal Idol N&P
Desconectado
Mensajes: 1.276
Assembly (x86/x64), C/C++, Kernel Mode (WDM/WDF)
|
Usa un puntero como parametro del array (matriz).
|
|
|
|
|
En línea
|
be closely tied to (v.) = estar estrechamente ligado a Ex: He had been wrapped up in a new project that was closely tied to the company's new growth.
"La economia nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de este" Juan Domingo Peron
|
|
|
botella
Desconectado
Mensajes: 69
|
gracias, pero realmente no se como hacer lo que decìs, si me pusieras un ejemplo te estarìa eternamente agradecido.
|
|
|
|
|
En línea
|
|
|
|
|
Karman
|
mirá... si lo que quieres inicializala vos a mano podés hacer algo como esto: int matriz[10];
inivector (matriz, 10);
inivector (int *vec, int dim){ for (int i=0; i<dim;vec[i]=0,i++); }
de todas formas, si programas bajo windows ya existen funciones para eso: ZeroMemory(matriz,sizeof(int)*10); FillMemory(0,matriz,sizeof(int)*10); <-- habría que ver... no recuerdo el orden de los argumentos S2
|
|
|
|
|
En línea
|
|
|
|
GroK
Desconectado
Mensajes: 573
...I have become comfortably numb...
|
Que tal este? Esta todo en main pero para que veas: #include <stdio.h> int main (void) { int *vector, tam, i; printf ("Dimensiones de la matriz: "); scanf ("%d", &tam); vector = (int *) malloc (tam * sizeof (int)); for (i = 1; i <= tam; i++) { vector[i] = 1; printf ("%d ", vector[i]); } getchar (); return 0; } Saludos
|
|
|
|
|
En línea
|
"I put on my Hendrix album and my son said 'Dad, who's that?' and i said 'Well son, that's God' "- Robert Plant
|
|
|
|
Karman
|
1º el quería una función... 2º en esta línea:
for (i = 1; i <= tam; i++)
no estás definiendo bien el índice del arreglo: los arreglos empiezan en "0" y terminan en "tam-1" el código correcto sería:
for (i = 0; i < tam; i++)
S2
|
|
|
|
|
En línea
|
|
|
|
GroK
Desconectado
Mensajes: 573
...I have become comfortably numb...
|
los arreglos empiezan en "0" y terminan en "tam-1"
De acuerdo con eso, pero lo mismo da, porque en mi bucle la condicion se ejecuta desde 1 hasta que "i" sea menor o igual al tamaño, que es lo mismo que decir que empiece en 0 y que llegue hasta tamaño - 1. Ejecutalo y veras. En cuanto a lo de la funcion, ya le dije que lo puse todo en main, para acabar antes. No creo que sea tan dificil poner casi el mismo codigo en una funcion aparte, no? Saludos
|
|
|
|
|
En línea
|
"I put on my Hendrix album and my son said 'Dad, who's that?' and i said 'Well son, that's God' "- Robert Plant
|
|
|
Eternal Idol N&P
Desconectado
Mensajes: 1.276
Assembly (x86/x64), C/C++, Kernel Mode (WDM/WDF)
|
ZeroMemory es un macro (FillMemory tambien) a memset que es ANSI C:
ZeroMemory(matriz, sizeof(matriz)); = memset(matriz, 0, sizeof(matriz));
void FillMemory( PVOID Destination, SIZE_T Length, BYTE Fill );
Tiene razon Karman el primer elemento queda sin inicializar y accedes a un elemento no reservado ... con esto lo podes ver:
printf ("%d - %d\r\n", vector, i);
|
|
|
|
« Última modificación: 22 Febrero 2008, 19:32 por Eternal Idol »
|
En línea
|
be closely tied to (v.) = estar estrechamente ligado a Ex: He had been wrapped up in a new project that was closely tied to the company's new growth.
"La economia nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de este" Juan Domingo Peron
|
|
|
botella
Desconectado
Mensajes: 69
|
gracias, los pruebo y aviso
|
|
|
|
|
En línea
|
|
|
|
ҒrεακΠιи∂
Desconectado
Mensajes: 104
|
Buenas. Vamos por partes De acuerdo con eso, pero lo mismo da porque en mi bucle la condicion se ejecuta desde 1 hasta que "i" sea menor o igual al tamaño, que es lo mismo que decir que empiece en 0 y que llegue hasta tamaño - 1. Ejecutalo y veras.
No da lo mismo ( y deberias re-leer lo que pusiste). 1) Los vectores en C comienzan desde 0 (a diferencia de por ejemplo Pascal donde estos empiezan en el indice 1). Ya esto demuestra que con tu bucle, nunca inicializaras la primera posicion del vector 2) Tratas de escribir fuera del vector. La condicion de tu for (i <= tam) no se hace falsa sino hasta que i sea mayor a tam. Esto implica que 10 se incluye en la iteracion lo que hara que dentro del for exista la siguiente asignacion vector[10] = 1. Y como los vectores comienzan en 0, la ultima posicion valida del vector es tam - 1 (es decir, 9). Salu2, FreakMind
|
|
|
|
|
En línea
|
Connoisseurs of C semantics find C++ inferior to ++C 
|
|
|
GroK
Desconectado
Mensajes: 573
...I have become comfortably numb...
|
Esta bien, teneis razon y retiro lo dicho  Es la costumbre del pascal... Saludos
|
|
|
|
|
En línea
|
"I put on my Hendrix album and my son said 'Dad, who's that?' and i said 'Well son, that's God' "- Robert Plant
|
|
|
|
M3LiNdR1
|
Porq en el main, haceis un return 0?.
Ya se que es una funcion de tipo int, i que siempre tiene que devolver algun valor. Pero cuando yo programo, no le pongo este return 0 en el main.
Gracias.
|
|
|
|
|
En línea
|
Va baixar davant dels meus...ulls molt suaument...sense alterar la quietud de la nit,amb un somriure ple de confiança com sino se li escapes res...
|
|
|
ҒrεακΠιи∂
Desconectado
Mensajes: 104
|
Buenas Porq en el main, haceis un return 0?.
Ya se que es una funcion de tipo int, i que siempre tiene que devolver algun valor. Pero cuando yo programo, no le pongo este return 0 en el main.
Mal por ti. Una funcion que tiene un valor de retorno tiene que devolver un valor (para algo esta). Aparte de esto, el return de main se le pasa al SO para que vea como termino el proceso Saludos, FreakMind
|
|
|
|
|
En línea
|
Connoisseurs of C semantics find C++ inferior to ++C 
|
|
|
botella
Desconectado
Mensajes: 69
|
realmente soy muy torpe con esto, no se donde es el problema por que la verdad tendrìa que leer algo sobre vectores:
#include <iostream.h>
int matriz[10];
inivector (int *vec, int dim){ for (int i=0; i<dim;vec=0,i++); }
int main () { cout << "Vamos a probar la funciòn que inicializa los vectores" << endl ; int dim = 10; inivector ( *matriz , dim ); return 0; }
a continuaciòn los errores del dev
20 C:\Dev-Cpp\fichas\ficha 6 (funciones)\pruebaaas.cpp invalid conversion from `int' to `int*' 20 C:\Dev-Cpp\fichas\ficha 6 (funciones)\pruebaaas.cpp initializing argument 1 of `int inivector(int*, int)'
tengo que inicializar algo?
còmo hago?
aviso que no tengo idea de vectores, lo ùnico que quiero es hacer una funciòn que inicialice cualquier matriz de cualquier tamaño, esto tampoco tiene nada pràctico pero bue, estoy aprendiendo,
gracias.
|
|
|
|
« Última modificación: 25 Febrero 2008, 08:42 por botella »
|
En línea
|
|
|
|
|
Karman
|
es:
for (int i=0; i<dim;vec[ i ]=0,i++);
S2
|
|
|
|
|
En línea
|
|
|
|
|
Páginas: [1] 2
|
|
|
|