| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Geekne
Registrado: 01 Abr 2011 Mensajes: 7
| Publicado: 01/04/2011 5:09 pm | | | Título: Algoritmo Eliminar posicion de un Vector [Duda] |
| Saludos Hace ratito me puse a pasar un procedimiento de pseudo a C que me permite eliminar una poscicon de un vector... Me quedo asi:
| Código: | #include <stdio.h>
#define tf 10 typedef vector[tf]; void eliminacionvector(vector vec, int *tu, int pos);
main(){ int pos, tu; vector vec1={1,2,3,4,5,6,7,8,9,10};
tu=tmnvector(vec1);
printf("\nIngrese la posicion que desea eliminar: "); scanf("%d", &pos);
eliminacionvector(vec1, tu, pos);
}
void eliminacionvector(vector vec, int *tu, int pos) {
int i;
for(i=pos;i<*tu;i++){ vec[i]=vec[i]+1; }
*tu=*tu-1;
}
int tmnvector(vector vec) { int i, tu=0; for(i=0;i<=tf;i++){ tu=tu+1; } return(tu); }
|
A ver si me dicen que tal esta.. algun error? & aparte me salen estas advertencias:
| Cita: | *warning: passing argument 2 of ‘eliminacionvector’ makes pointer from integer without a cast *note: expected ‘int *’ but argument is of type ‘int’
|
Ni idea de porque sera...  _________________ Backtrackr4 |
| | Volver arriba | |  | polly
Registrado: 19 Jul 2007 Mensajes: 602
| Publicado: 02/04/2011 5:41 am | | | Título: |
| Porque en pasas como argumento un puntero a entero sin embargo en main pasas simplemente un entero. De todas formas no veo la utilidad de pasar un puntero para indicar la posicion a eliminar (con un entero valdria).
S2 |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 6586 Ubicación: Mexico
| Publicado: 02/04/2011 9:23 pm | | | Título: |
| El error mas importante ya lo indico polly: pasas a la funcion "eliminacionvector" el valor de la variable "tu" cuando deberias pasar la direccion de esta con "&tu".
Aparte de eso el programa se puede mejorar bastante.
En C no hay forma de conocer dentro de una funcion el tamaño de un array pasado como argumento ya que no se pasa como tal (se pasa como un puntero a su primer elemento). Debido a eso no es necesario (ni posible) una funcion para calcular el tamaño del array.
La funcion que tienes y calcula el tamaño del array lo unico que hace es iterar desde 0 hasta "N" terminandose el bucle con el valor "N + 1" ("N" para indicar el numero de elementos en el array). No es necesaria esa funcion ya que el valor de "tf" (tamaño del array) ya lo conoces. En su lugar utiliza una variable que inicie con el numero de elementos en el array.
En la funcion donde se "elimina" al elemento indicado copias un elemento de mas en la ultima iteracion del bucle. Tambien realizas mal la copia del elemento con "vec[i] = vec[i] + 1;" ya que deberia ser "vec[i] = vec[i + 1];"
El programa corregido es (C estandar):
| Código: | #include <stdio.h> #include <stdlib.h>
void elim_elem(int num[], int pos, int *num_elem);
int main(void) { int num[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int num_elem = sizeof num / sizeof num[0]; int i; printf("Ingrese la posicion que desea eliminar: "); fflush(stdout); if (scanf("%d", &i) != 1) return EXIT_FAILURE; elim_elem(num, i, &num_elem); for (i = 0; i < num_elem; i++) printf("num[%d] == %d\n", i, num[i]); return EXIT_SUCCESS; }
void elim_elem(int num[], int pos, int *num_elem) { int i; for(i = pos; i < *num_elem - 1; i++) num[i] = num[i + 1]; --*num_elem; } |
Un saludo _________________ Memory never recaptures reality. Memory reconstructs. All reconstructions change the original, becoming external frames of reference that inevitably fall short. -- Mentat Handbook |
| | Volver arriba | |  | | Geekne
Registrado: 01 Abr 2011 Mensajes: 7
| Publicado: 03/04/2011 4:21 am | | | Título: |
| Gracias por sus respuestas y bueno paso "tu" por referencia porque quise hacer el procedimiento de forma que pueda usarlo en cualquier otro algoritmo.. Ese vector que hice solo es de ejemplo (por eso le coloco valores y se en realidad cual es su tmaño en uso). Aunque la funcion de tmnvector que tengo es para calcular ese tamaño en cualquier otro vector. _________________ Backtrackr4 |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |