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

Ayuda urgente con un problemita de funciones

Estas en el tema de Ayuda urgente con un problemita de funciones en el foro de C/C++ en Foros del Web. hola tengo un problema ,no comprendo porque en mi programa ,en el procedimiento insertar no incrementa " num_elem" cuando vuelvo a mostrar el arreglo, se ...
  #1 (permalink)  
Antiguo 25/10/2009, 11:51
 
Fecha de Ingreso: mayo-2009
Mensajes: 15
Antigüedad: 15 años
Puntos: 0
Pregunta Ayuda urgente con un problemita de funciones

hola tengo un problema ,no comprendo porque en mi programa ,en el procedimiento insertar no incrementa " num_elem" cuando vuelvo a mostrar el arreglo, se supone que tiene que actualizarse y mostrame un elemento mas en el vector.
Si le añado en el procedimiento &num_elem si incrementa,porque sucede eso?
Expliquenme por favor, gracias.


Código:
#include<iostream>
#include<conio.h>
#define max 15
using namespace std;

void raya();
void ingresovector(int a[max],int n);
void mostrarvector(int a[max],int n);
void insertar(int a[max],int num_elem,int p,int dato);

int main()
{
    system("color 1a");
    int p,num_elem,n,dato,numeroDatos,pos;
    int a[max];
    raya();
    cout<<" \tIngreso de numero de elementos al vector: ";
    cin>>num_elem;
    ingresovector(a,num_elem);
    mostrarvector(a,num_elem);
    cout<<" \tIngrese el dato que desea ingresar al arrglo: ";
    cin>>dato;
    cout<<" \tIngrese la posicion que desea insertar: ";
    cin>>pos;
    insertar(a,num_elem,pos-1,dato);
    mostrarvector(a,num_elem);
    raya();
    system("pause");
    
    return 0;
    
}
void raya()
{
     cout<<"\n";
     cout<<"\t----------------------------------------";
     cout<<"\n";
}
void ingresovector(int a[max],int n)
{
     cout<<"\n";
     cout<<" \tIngrese datos:\n ";
     for(int i=0;i<n;i++)
     {  cout<<" \tDato["<<i+1<<"]: ";
             cin>>a[i];
     }
}
void mostrarvector(int a[max],int n)
{
     cout<<"\n";
     cout<<" \tEl arreglo ingresado es:\n ";
     for(int i=0;i<n;i++)
     {
         cout<<"\tDato["<<i+1<<"]: ";    
         cout<<a[i]<<"\n";
         
     }
     
}
void insertar(int a[max],int num_elem,int p,int dato)
{
     
     for(int i=num_elem-1;i>=p;i--)
     {
         a[i+1]=a[i];
     }
     a[p]=dato;
     num_elem=num_elem+1;
     
}
  #2 (permalink)  
Antiguo 25/10/2009, 12:37
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
De acuerdo Respuesta: Ayuda urgente con un problemita de funciones

Hay dos formas de pasar parámetros a funciones, una es por valor y otra por referencia, entonces la primera lo único que hace es podría decirse enviar el contenido de la variable, por ejemplo: en tu caso tienes:

Declaración:
void insertar(int a[max],int num_elem,int p,int dato);


Llamado:

insertar(a,num_elem,p,dato);

estás recibiento num_elem por por valor, es decir, cualquier cambio que le hagas a num_elem dentro del procedimiento solo permanecerá mientras este se ejecute, ya que es tratada como una variable, no importa si tiene el mismo nombre de la variable del main.

Y la segunda es que recibes la referencia de memoria de la variable que empleas y ahí si se modifica el contenido de esta, y se mantiene sin importar si ya terminó la ejecución del método o procedimiento, así:


Declaración:
void insertar(int a[max],int &num_elem,int p,int dato);


Llamado:

insertar(a,num_elem,p,dato);


Espero te haya aclarado la duda.
__________________
En programación hay mil y un formas de hacer lo mismo...
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 03:26.