| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
TOTTOS2007
Registrado: 24 Mar 2007 Mensajes: 3
| Publicado: 30/08/2007 1:08 pm | | | Título: Problemas con Punteros: "Invalid Indirection" Ayud |
| Hola Tengo Un error en mi programa asignado en la Universidad. Resulta que es llenar y ordenar un vector Atravez de Punteros, pero tengo un problema, que me sale un Mensaje de error en 6 Partes del programa en la funcion ordenar_vector(), no tengo ni idea que pueda ser, es la primera vez que trabajo Con Punteros. El Mensaje de error es : "Invalid Indirection". Aqui Pungo el codigo para ver si me pueden ayudar (UTILIZO EL COMPILADOR DE TURBO C++ 3.0)
| Código: |
#include<iostream.h> #include<conio.h>
void llenar_vector(int *); void ordenar_vector(int *); void imprimir_vector(int *);
int *punt,k,vector[10];
void main(){ clrscr(); punt=vector; llenar_vector(punt); ordenar_vector(punt); imprimir_vector(punt); getch(); }
void llenar_vector(int *punt){ clrscr(); cout<<"Entre los elementos del vector : "; for(int i=0;i<10;i++) { cout<<"\nElemento"<<i+1<<" : ";cin>>punt[i]; } getch(); }
void ordenar_vector(int *punt) { int pasada,limit; limit=10; for(pasada=1;pasada<=limit-1;pasada++) for(int i=0;i<=limit-2;i++)
if((*punt[i])>(*punt[i+1])) { k=*punt[i]; *punt[i]=*punt[i+1]; *punt[i+1]=k; } }
void imprimir_vector(int *punt){ clrscr(); cout<<"El vector Ordenado ascendentemente queda : "; for(int i=0;i<10;i++) { cout<<"\nElemento"<<i+1<<" : "<<punt[i]; } getch(); }
|
|
|
| Volver arriba | |
 |
v4r3t
Registrado: 06 Mar 2007 Mensajes: 38
| Publicado: 30/08/2007 3:46 pm | | | Título: |
| | Es que si va con * no puedes ponerle índices, si usas punteros se supone que es para no tener que usar índices. |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3657 Ubicación: Mexico
| Publicado: 30/08/2007 9:44 pm | | | Título: |
| Cuando utilizas un puntero para acceder a cada uno de los elementos de un array, como es tu caso:
| Código: | int *punt, k, vector[10];
/* ... */
punt = vector; |
Puedes utilizar cualquiera de estas dos notaciones:
| Código: | punt[i] = ALGUN_VALOR;
/* O tambien */
*(punt + i) = ALGUN_VALOR; |
El error en tu programa se encuentra en la funcion de ordenacion y consiste en tratar de utilizar ambos operadores. Solo tienes que cambiar "*punt[i]" por "punt[i]" o bien "*(punt + i)"
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
|
TOTTOS2007
Registrado: 24 Mar 2007 Mensajes: 3
| Publicado: 01/09/2007 2:00 pm | | | Título: |
| | Muchas gracias, ahora si me funciono con la segunda forma que me diste, muchas gracias, te debo la vida. |
|
| Volver arriba | |
 |
spesmod
Registrado: 23 Ago 2007 Mensajes: 33
| Publicado: 01/09/2007 2:08 pm | | | Título: |
| A mi parecer la proposicion:
*punt[i]
es un array de punteros (necesitas eso¿?¿?¿?) me parece que tus errores estan en rojo:
#include<iostream.h> #include<conio.h>
void llenar_vector(int *); void ordenar_vector(int *); void imprimir_vector(int *);
int *punt,k,vector[10];
void main(){ clrscr(); punt=vector; llenar_vector(punt); ordenar_vector(punt); imprimir_vector(punt); getch(); }
void llenar_vector(int *punt){ clrscr(); cout<<"Entre los elementos del vector : "; for(int i=0;i<10;i++) { cout<<"\nElemento"<<i+1<<" : ";cin>>punt[i]; //correccion--- cin>>punt++; } getch(); }
void ordenar_vector(int *punt) { int pasada,limit; limit=10; for(pasada=1;pasada<=limit-1;pasada++) for(int i=0;i<=limit-2;i++)
if((*punt[i])>(*punt[i+1])) //---->otravez el array de punteros¿?¿?¿? { k=*punt[i]; *punt[i]=*punt[i+1]; *punt[i+1]=k; } }
void imprimir_vector(int *punt){ clrscr(); cout<<"El vector Ordenado ascendentemente queda : "; for(int i=0;i<10;i++) { cout<<"\nElemento"<<i+1<<" : "<<punt[i]; //-->y otravez } getch(); }
no puedes usar punt[i] por que no has declarado a punt como arreglo sino como puntero, deberias cambiarlos por *punt. mira esto:
| Código: | punt -------> variable cualkiera(devuelve el valor de punt) *punt ------> puntero cualkiera( "*" devuelve el valor de la direccion a la que apunta "punt") punt[i] ----> array kualkiera (devuelve el valor del elemento "i")
punt++ --> aumenta 1 POSICION de direccion. es equivalente a:
array[i]; i++
*punt++ -----> aumenta 1 al VALOR al que apunta "punt" &array[0] ---> devuelve la direccion de la variable array[0]. |
podrias usar
punt=&vector[0];
asi el puntero "punt" apuntaria al primer elemento del array "vector" y luego en ves de aumentar asi:
vector[i+1];
aumentas asi:
punt++
y si necesitas el valor e ir aumentando las direcciones de 1 en 1 (osea hacer un recorrido del array pero con punteros) tendrias que hacer algo asi:
*(punt++)
y eso devuelve el valor de punt, y luego aumenta una posicion hacia adelante, lo mismo que
array[i]; i++; array[i]:
espero ayudar... xiao _________________ |--A--Q--U--A--|
|
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3657 Ubicación: Mexico
| Publicado: 01/09/2007 6:04 pm | | | Título: |
| | spesmod escribió: | A mi parecer la proposicion:
*punt[i]
es un array de punteros |
Tendriamos esa certeza si se tratara de una declaracion pero como es un uso bien podria ser un array de arrays, un puntero a puntero, o incluso una combinacion perversa.
| spesmod escribió: | | no puedes usar punt[i] por que no has declarado a punt como arreglo sino como puntero, deberias cambiarlos por *punt. |
Es valido, si punt es un puntero o el nombre del array este aceptaria cualquiera de las dos notaciones:
| Código: | *(punt + i) ... ;
/* O tambien */
punt[i] ... ; |
Esto porque ambas formas son equivalentes.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
|
|