/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Algoritmo Eliminar posicion de un Vector [Duda]

 
      Índice del Foro elrincondelc.com -> Algoritmos
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Geekne



Registrado: 01 Abr 2011
Mensajes: 7

MensajePublicado: 01/04/2011 5:09 pm
Título: Algoritmo Eliminar posicion de un Vector [Duda]

Saludos Smile 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... Confused
_________________
Backtrackr4
Volver arriba
polly



Registrado: 19 Jul 2007
Mensajes: 602

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 03/04/2011 4:21 am
Título:

Gracias por sus respuestas Very Happy 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
      Índice del Foro elrincondelc.com -> Algoritmos
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com