Foros del Web » Programación para mayores de 30 ;) » C/C++ »

posicion de un codigo en el vector

Estas en el tema de posicion de un codigo en el vector en el foro de C/C++ en Foros del Web. hola muy buenas, estoy trabajando con grafos y tengo lo siguiente: cargo un vector con codigos, pido un origen y veo si esta en el ...
  #1 (permalink)  
Antiguo 19/05/2006, 12:03
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 11 meses
Puntos: 2
posicion de un codigo en el vector

hola muy buenas, estoy trabajando con grafos y tengo lo siguiente:
cargo un vector con codigos, pido un origen y veo si esta en el vector y luego doy la posicion de ese numero en el vector. Como se la posicion q tengo?. Podeis echarme un cable con grafos?
void rellenar_grafo(datos **matriz)
{
datos2 d;
int *vector;
int n;
int numero;

printf("introduce el origen: ");
scanf("%d", &d.origen);
if (d.origen=existe(vector, n, numero)!=-1)
{
//posicion en el vector*************************************
printf("Introduce el destino: ");
scanf("%d", &d.destino);
if(d.destino=existe(vector, n, numero)!=-1)
{

//if(d.destino=existe(vector, n, numero))//posicion en el vector***********************
matriz[d.origen][d.destino].camino=1;
getch;
printf("introduce los kilometros: ");
scanf("%f", &d.d.km);
printf("introduce el coste: ");
scanf("%f", &d.d.coste);
printf("introduce el camino: ");
scanf("%d", &d.d.camino);
(matriz)[d.origen][d.destino].km=d.d.km;
(matriz)[d.origen][d.destino].coste=d.d.coste;
}
else
{
printf("error, el destino no existe");
}
}
else
{
printf("Error, el origen no existe");
}

}
__________________
asp, php, .net, adaptandose a las necesidades
  #2 (permalink)  
Antiguo 19/05/2006, 17:30
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 8 meses
Puntos: 17
¿No decías que ibas a pagar por las clases, pillín? ;)
  #3 (permalink)  
Antiguo 20/05/2006, 19:25
arm
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Antigüedad: 18 años, 7 meses
Puntos: 0
quisiera ayudar pero no se a que te refieres con 'cargar un vector con codigos', talvez no entiendo (vivo en mexico), otal vez desconosco el tema, si puedes utilizar otros termino y los entiendo, con gusto te ayudare.
__________________
-> La duda adecuada es un buen comienzo <-
  #4 (permalink)  
Antiguo 21/05/2006, 06:15
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 11 meses
Puntos: 2
cargar vector

hola respondiendo a tu duda te dire que la explicacion arriba de lo que hace mi programa se ve. Tengo un vector de x posiciones, TEngo qeu introducir codigos en esas posiciones. Imagina q son 5 y tngo codigos: 1,6,8,9,2. pregunto al usuario q me introduzca un codigo, ej 6, tengo q ver si existe ese codigo y ver q posicion tiene en mi vector , q seria la 2. si prefieres ponte en contacto ocnmigo mas directamente: [email protected] o [email protected], asi podremos directamente hablar. Esta duda la tengo q entregar en el proyecto del jueves 25 mayo
__________________
asp, php, .net, adaptandose a las necesidades
  #5 (permalink)  
Antiguo 22/05/2006, 01:09
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
Podrias hacerlo con una funcion:
struct Info
{
bool encontrado;
int valor;
};

Info buscar(int ary[],int num, int val)
{
Info temp;
for(int i = 0; i < num;i++)
{
if(ary[i] == val)
{
temp.encontrado = true;
temp.valor = i;
return temp;//para no recorrer todo el array en caso de encontrarlo.
}
}
temp.encontrado = false;
temp.valor = 0;
return temp;
}

podrias pasar todos los datos como punteros pero me agrada mas asi.

Saludos.
  #6 (permalink)  
Antiguo 22/05/2006, 01:13
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
claro tambien esta la forma clasica de hacerlo retornando -1 en caso de no escontrarlo y en caso de encontrarlo retornar el indice, y listo. jeje

solo verificarias
int index = buscar(arry, num, val);

if(index >= 0)
{
//Se encontro
}
else
{
//no se encontro.
}
  #7 (permalink)  
Antiguo 22/05/2006, 07:03
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 8 meses
Puntos: 17
No entiendo demasiado bien el código que expones, hay variables sin inicializar y cosas así de extrañas, pero aquí tienes el algoritmo más sencillo de búsqueda. Supongo que es C, con C++ se haría bastante más limpio.

Código:
#define NotFound -1

typedef unsigned int Index;

Index Buscar(int [] Array, int Valor)
{
   Index i;
   for(i=0;i<sizeof(Array)/sizeof(int);++i) if(Array[i]==Valor) return Valor;
   return NotFound;
}
Y para usarlo:

Código:
int Vector[] = {1,6,2,4};
Index Posicion = Buscar(Vector,6);
if(Posicion!=NotFound) printf("Valor: %i",Vector[Posicion]);
else printf("Valor no encontrado");
Es lo que te ha dicho Nivel7, pero extendido.

Última edición por MaxExtreme; 22/05/2006 a las 16:43
  #8 (permalink)  
Antiguo 22/05/2006, 14:41
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
Je Je, bien MaxExtreme, solo una cosa, asegurate de que sizeof(Array) te da lo que quieres, o solo el tamaño de un puntero a int.

Y supongo que lo que retornarias seria i y no Valor.

depende de que tipo de funcion queieres.

si quieres ver en que lugar del array se encuentra, es decir le mandas un valor y quieres ver en que pocision esta, retornarias i.

si mandas el indice y quieres saber que valor tienen ese indice en el array, retorna array[valor];

pero retornar valor solo indicaria que se encuentra.

Saludos.

Última edición por Nivel7; 22/05/2006 a las 21:04
  #9 (permalink)  
Antiguo 22/05/2006, 16:38
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 8 meses
Puntos: 17
Cita:
Iniciado por Nivel7
Je Je, bien extrem, solo una cosa, asegurate de que sizeof(Array) te da lo que quieres, o solo el tamaño de un puntero a int.
sizeof(Array) devolverá SIEMPRE el tamaño total del array.

Date cuenta que Array es un int[] (array), no un int* (puntero).

En el uso común, es lo mismo un array que un puntero, pero hay ciertas diferencias. Una de ellas, esa. Que el array sabe que tamaño tiene, el puntero, no.

Por cierto, no se qué manía tiene cierta gente de acortar nicks, nombres y demás. Ni soy maxextrem, ni extrem, ni nada de eso :P o max, o extreme, o todo, o nada. :)

Última edición por MaxExtreme; 22/05/2006 a las 16:45
  #10 (permalink)  
Antiguo 22/05/2006, 16:43
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 8 meses
Puntos: 17
Cita:
Iniciado por Nivel7
(haz implementado un codigo que yo solo sugeri:
claro tambien esta la forma clasica de hacerlo retornando -1 en caso de no escontrarlo y en caso de encontrarlo retornar el indice, y listo. jeje).
Que no, no se puede hacer como dices de devolver el valor directamente, por las siguientes razones:

1. No sabes si estás sobrepasando el tamaño (en el caso de que uses un puntero).
2. No sabes cuándo no existe ese valor. ¿Cómo distingues?
  #11 (permalink)  
Antiguo 22/05/2006, 21:02
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
Bueno seria implementado muy similar a como lo haces tu.

int buscar(int *array, int len, int valor)
{
int i;
for(i = 0; i < len; i++)
if(array[i] == valor) return i;
return -1;
}

el bucle recorrera el array asta el final sin exederlo, si el valor se encuantra se retornara el lugar en que se encontro, si al terminar de recorrer no se encontro, se retornara -1, como sabras un array no tienen indice -1.

por tanto if(buscar(array, 10, 5) >= 0)
si el 5 se encuentra en el array de 10 indices se retornara su pocision.
sino se retornara -1.

NO es por contradecirte pero sugiero que compiles y ejecutes esto.

int arrylen(int arry[])
{
return (sizeof(arry) / sizeof(int));
}
int main()
{
int arry[] = {1,2,3,4,5,6,7,8,9,1};

int lengh = arrylen(arry);

cout << lengh << endl;
cin.get();
return 0;
}

si te da 10 que es la longitud del array me retiro de la programacion.

Saludos.

Ja Ja sabía que era raro....(lo del nick me disculpo y ahi lo dejo).
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:03.