/
Inicio :: Foros

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

Problemas con Punteros: "Invalid Indirection" Ayud

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
TOTTOS2007



Registrado: 24 Mar 2007
Mensajes: 3

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

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

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

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

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

MensajePublicado: 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
      Índice del Foro elrincondelc.com -> Principiantes C/C++
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