Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Duda con transferencia de parámetros de valor entre dos funciones.. (https://www.clubdelphi.com/foros/showthread.php?t=75409)

linuxtin 20-08-2011 21:05:54

Duda con transferencia de parámetros de valor entre dos funciones..
 
Holaa, como andan!! Tengo problemas para transferir parámetro de una función a otra como valor acá dejo parte del codigo..



Código:

calcular(s)


{
    int i,s;
   
    if (n>m)
      {
          s=n;
          for (i=1 ;i<=n; i++)
          {
            c[i]=(a[i]+b[i]); 
          }   
      }
   
    else
      { 
        s=n;           
        for (i=1 ;i<=m; i++)
          {
            c[i]=(a[i]+b[i]); 
          }   
      }
    printf("La suma ha sido calculada");
   
    return 0;   
}



imprimir(int s)


{
    int i;
    system("clear");
   
    printf("El Vector A es:\n");
    for (i=1 ;i<=n; i++)
      {
        printf(" %d ",a[i]); 
         
      }   
   
    printf("\nEl Vector B es:\n");
    for (i=1 ;i<=m; i++)
      {
        printf(" %d ",b[i]); 
         
      }   
   
   
    printf("\nLa suma es:\n");
    for (i=1 ;i<=s; i++)
      {
        printf(" %d ",c[i]); 
         
      }   
   
   
   
    getchar();   
    return 0;   
}


La primera función suma dos vectores y guarda en la variable s el tamaño del vector mas grande, para luego imprimirlo en la función de abajo.

Si alguien me puede dar una mano, gracias!!!!

ecfisa 20-08-2011 21:45:25

Hola linuxtin.

No entiendo bién cual es tu duda, pero para pasar los arreglos como argumento:
Código:

int calcular(int *a, int *b, int *c)
{
...

O también de este modo:
Código:

int imprimir(int a[], int b[], int c[])
{
...

Saludos.

linuxtin 20-08-2011 22:09:50

Hola ecfisa, antes que nada gracias por responder y por ayudarme!!!


Lo que quiero hacer es pasar una variable de una función a otra, un parámetro con valor, para resumirlo un poco, quiero que el valor que toma la variable s, llegue a la función imprimir.

ecfisa 20-08-2011 23:31:35

Hola.

Para pasar un argumento a otra función sólo tenes que declararlo en la cabecera de la función.

Generalmente los argumentos se pasan por valor donde la función recibe la copia del valor de la variable que se le pasa, por ej:
Código:

/* func no puede modificar el valor
  de la variable enviada en el argumento */
int func(int a)
{
  a = 11;
}

Si llamamos func(v), pasándole la variable v = 2, luego de la llamada, v seguirá teniendo el valor 2.

Pero se pueden pasar por referencia donde la función recibe la dirección de memoria de la variable por lo que en este caso tiene total control, por ej:
Código:

/* func puede modificar el valor
  de la variable enviada en el argumento */
int func(int *a)
{
  a = 11;
}

Si llamamos func(v), pasándole la variable v = 2, luego de la llamada v será igual a 11.

Un saludo.

linuxtin 21-08-2011 00:45:21

Hola ecfisa otra vez gracias!!

Acá arme un pedacito de código, la verdad que no lo puedo hacer andar.

Código Delphi [-]
#include 

main() 

{
   
    cargar();
    
    imprimir();
    
    return 0;
    
}


cargar(i)


{
     int i=5;    
     
     return 0;
}






imprimir(int i)

{
    
  printf("El numero es %d ",i);    
  return 0;    
    
}


Muchas gracias!!!!

ecfisa 21-08-2011 00:54:45

Hola linuxtin.

Código:

int cargar(int *v);
int imprimir(int v);

int main(int argc, char* argv[])
{
  int valor;
  cargar(&valor);
  imprimir(valor);
  getchar();
  return 0;
}

int cargar(int *v)
{
  *v = 5;
  return 0;
}

int imprimir(int v)
{
  printf("El numero es %d ",v);
  return 0;
}

Un saludo.

_cero_ 21-08-2011 00:59:18

En una función, los parámetros pueden pasar de dos formas.
1 por valor, en este caso los valores se copian a objetos de la función y se destruyen cuando se termina la función.
Ejem.
Código:


  Void MiFuncion(int s) {
  ...
  }

2 por referencia (la cual, me imagino que es la que buscas),en este otro caso las variables introducidas guardan cualquier modificación que se les haga dentro de la función.
Ejem.
Código:


  Void MiFuncion(int &s){
...

  }

quedaria asi mas o menos.
Código:

main()  {   
  int s;   
  cargar( s );         
  imprimir( s );         
  return 0;     

cargar(int& i) {     
  i=5; 

imprimir(int i) { 
  printf("El numero es %d ",i);     
  return 0;         
}

Pd. No te olvides delos valores de retorno.
pd2. La solución de ecfisa también es muy válida, solo que esta es con punteros, algo que creo se debe comprender a la perfección, antes de usarlos.

linuxtin 21-08-2011 17:31:17

Bueno muchas gracias a los dos!!


Ahora si me quedo claro, con un ejemplo de cada uno de ustedes!!

Gracias ecfisa, cero por tomarse su tiempo y ayudarme!

linuxtin 21-08-2011 19:13:09

Hola cero, quise probar tu ejemplo, pero no lo pude compilar me da error.

Saludos!

_cero_ 21-08-2011 23:41:56

Eso es porque está incompleto, solo te puse el ejemplo de como iría, pero uno compilable seria:
Código:


#pragma hdrstop

#include <tchar.h>
#include <stdio.h>
#include <conio.h>
//---------------------------------------------------------------------------

#pragma argsused
//---------------------------------------------------------------------------

void cargar( int& i )
{
    i = 5;
}
//---------------------------------------------------------------------------
void imprimir( int i )
{
    printf( "El numero es %d ", i );
}
//---------------------------------------------------------------------------
int main()
{
    int s;
    cargar( s );
    imprimir( s );
    getch();
    return 0;
}


_cero_ 21-08-2011 23:52:46

mmm santo error, estas programando en C o C++? Porque no recuerdo bien pero creo que en C todos los parámetros se pasan por valor, con lo cual solo el ejemplo de ecfisa, funcionaria y quedaría más o menos así:
Código:

#pragma hdrstop

#include <tchar.h>
#include <stdio.h>
#include <conio.h>
//---------------------------------------------------------------------------

#pragma argsused
//---------------------------------------------------------------------------
void cargar( int* i )
{
    *i = 5;
}
//---------------------------------------------------------------------------
void imprimir( int i )
{
    printf( "El numero es %d ", i );
}
//---------------------------------------------------------------------------
int main()
{
    int s;
    cargar( &s );
    imprimir( s );
    getch();
    return 0;
}
//---------------------------------------------------------------------------



La franja horaria es GMT +2. Ahora son las 18:06:47.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi