Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: feedf en 29 Junio 2013, 18:29 pm



Título: consulta pasar una matriz a una funcion
Publicado por: feedf en 29 Junio 2013, 18:29 pm
buenos dias gente, tengo una consulta tengo una funcion que carga datos
y tengo q pasar de esa funcion tres matrices distintas a otras tres funcion que son las que van a mostrar/laburar con los datos

me podria decir como hacer para pasar esas tres matrices a las tres funciones?
espero no complicarlos muchos
gracias !


Título: Re: consulta pasar una matriz a una funcion
Publicado por: amchacon en 29 Junio 2013, 18:45 pm
Se pasan tal cual:

Código
  1. void Funcion(int matriz[3][3])
  2. {
  3.  // Blablablabla...
  4. }
  5.  
  6. //...
  7.  
  8. int main()
  9. {
  10.   int Matriz[3][3];
  11.  
  12.   Funcion(Matriz);
  13.  
  14.   return 0;
  15. }


Título: Re: consulta pasar una matriz a una funcion
Publicado por: feedf en 29 Junio 2013, 19:53 pm
Código:
muchas gracias por la respuesta 

tengo otra consulta te muestro mi codigo asi soy mas explicito
 #include <conio.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>


int menup(int);
void datos(float, float tot[20]);
void opc1(float tot[20]);

void opc1(float tot[20])
{
int i;
i=0;

for(i=1;i<=3;i++)
{
printf("%f",tot[i]);
}
}







void datos(float tot[20])
{
int i,nc,ng,n;
float cl,ce,vdist[20],imp,subtot;

char vnom[20][30];
i=0;
n=0;

printf("LOTE NUMERO UNO DE DATOS A CARGAR\n\n");
for(i=1;i<=3;i++)
{
do
{
printf("ingrese el numero de centro");
scanf("%d",&nc);
}while((nc<=0)||(nc>=21));

printf("ingrese el nombre");
scanf("%s",&vnom[nc]);

printf("ingrese la distancia");
scanf("%d",&vdist[nc]);
}

system("cls");
printf("LOTE NUMERO DOS DE DATOS A CARGAR\n\n");

do
{
printf("ingrese el numero de centro");
scanf("%d",&nc);
}while((nc<=0)||(nc>=21));


while(nc!=0)
{
do
{
printf("ingrese el numero de gaseosa");
scanf("%d",&ng);
}while((ng<=0)||(ng>=6));

do
{
printf("ingrese la cantidad embotellada");
scanf("%d",&ce);
}while(ce<=0);

do
{
printf("ingrese el costo del liquido");
scanf("%d",&cl);
}while(cl<=0);

do
{
printf("ingrese el numero de centro");
scanf("%d",&nc);
}while(nc>=21);



imp=(ce*0.15)+(ce*0.10); /* D */
subtot=ce*cl+imp;
tot[nc]=subtot;






}




}

int menup(int)
{
     int opc;
    
    
     printf("\nopcion 0\n");
     printf("opcion 1 \n");
     printf("opcion 2\n");
     printf("opcion 3\n");
     printf("opcion 4\n");
    
     printf("ingrese la opcion");
     scanf("%d",&opc);
     return opc;
     }
        


int main()
{
char user[11],pass[11];
int a,b,opc,pr,n,z,j,validadoropc0;
float g,h,tot[20];
validadoropc0=0;


n=0;

while(opc!=10)
{
    
    opc=menup(a);
    switch(opc)
    {
    case 0:
    validadoropc0=validadoropc0+1;

    if(validadoropc0>=2)
     {
     printf("usted no puede volver a cargar los datos");
     break;
     }
    else
    {
    datos(tot);
    }
    break;
    case 1:
    if(validadoropc0==0)
    {
     printf("primero carge datos");
     break;
     }
     else
     {
        opc1(tot);
     }
    
    break;
    
case 2:
    if(validadoropc0==0)
    {
     printf("primero carge datos");
     break;
     }
     else
     {
         printf("funcion opcion 2");
     }
break;
    
case 3:
    if(validadoropc0==0)
    {
     printf("primero carge datos");
     break;
     }
     else
     {
         printf("funcion opcion 3");
     }
break;
    
case 4:
    if(validadoropc0==0)
    {
     printf("primero carge datos");
     break;
     }
     else
     {
         printf("funcion opcion 4");
     }
break;
    }







}

printf("la opcion elejida es %d ",opc);


printf("\n programa\n");
system("pause");



}






lo que tengo que hacer es que la funcion datos que se activa cuando pongo 0 me devuelva el vector tot[20] para poder cargarlo en otra funcion que se llame opc1(esta funcion muestra el vector), y poner esta funcion en el case 1 del switch del main

la verdad que se me hizo un lio terrible si me podrias guiar un poco te lo voy a super agradecer

edit lo arregle masomenos como entendi que se hace pero al cargar todos los datos y poner opcion 1 me muestra los 3 primeros lugares del vector en 0
por que no se carga :( ?
D:


Título: Re: consulta pasar una matriz a una funcion
Publicado por: amchacon en 29 Junio 2013, 21:20 pm
Los autores del lenguaje consideraron que esa práctica era un desperdicio de memoria y no era nada práctica. Por lo que no se pueden devolver vectores de forma directa.

¿Conoces el paso por referencia? Los vectores siempre se pasan por referencia. Prueba este ejemplo:

Código
  1. #include <iostream>
  2.  
  3. void RellenarVector(int Devolver[10])
  4. {
  5.    for (int i = 0; i < 10; i++)
  6.    {
  7.        cout<<"Introduce el valor para la posicion "<<i<<": ";
  8.        cin>>Devolver[i];
  9.    }
  10.  
  11. }
  12.  
  13. int main()
  14. {
  15.    int Vector[10];
  16.    RellenarVector(Vector);
  17.  
  18.    // Mostrar vector
  19.  
  20.    for (int i = 0; i < 10; i++)
  21.        cout<<Vector[i]<<endl;
  22.  
  23.    return 0;
  24. }
  25.  

Por cierto, menudo cacao tienes con el C y el C++ (printf y scanf son de C, en C++ se usa cout y cin).


Título: Re: consulta pasar una matriz a una funcion
Publicado por: feedf en 29 Junio 2013, 21:45 pm
muchas gracias!!! ya casi lo estoy sacando, jaj
me enseñaron con printf y scanf y ya me acostumbre :S xd


te hago una consulta muy tonta pero ya no me da el bocho XD

tengo que cargar un vector dependiendo de NC aca esta el codigo

Código:
printf("ingrese el numero de centro");
scanf("%d",&nc);

while(nc!=0)
{
do
{
printf("ingrese el numero de gaseosa");
scanf("%d",&ng);
}while((ng<=0)||(ng>=6));


blabla

tot[nc]=ng (por ejemplo)


el tema es que el primer NC no me lo toma por que  esta afuera del while
y no me acuerdo como hacer para que por ejemplo el primer dato q ingreses sea 1 y en tot[1] me guarde el ng

mil gracias


Título: Re: consulta pasar una matriz a una funcion
Publicado por: amchacon en 29 Junio 2013, 22:20 pm
muchas gracias!!! ya casi lo estoy sacando, jaj
me enseñaron con printf y scanf y ya me acostumbre :S xd


te hago una consulta muy tonta pero ya no me da el bocho XD

tengo que cargar un vector dependiendo de NC aca esta el codigo

Código:
printf("ingrese el numero de centro");
scanf("%d",&nc);

while(nc!=0)
{
do
{
printf("ingrese el numero de gaseosa");
scanf("%d",&ng);
}while((ng<=0)||(ng>=6));


blabla

tot[nc]=ng (por ejemplo)


el tema es que el primer NC no me lo toma por que  esta afuera del while
y no me acuerdo como hacer para que por ejemplo el primer dato q ingreses sea 1 y en tot[1] me guarde el ng

mil gracias

?

Eso no tiene ningún sentido, revisalo.


Título: Re: consulta pasar una matriz a una funcion
Publicado por: feedf en 29 Junio 2013, 22:51 pm
como?,

por ejemplo ingreso el centro 1

entra al while me pide ng pongo 3

ingreso otra vez NC 2
y luego ng 4
nc 0 para cerrar el while

y en el tot[nc]=ng

me toma tot[2]=3

cuando deberia quedar tot[1]=3

nose si me explico?

aca hice un codigo completo con lo que planteo


Código:
#include <stdio.h>

int main()

{
int ng,nc,tot[10]={0},i;

i=0;
printf("ingrese el numero de centro");
scanf("%d",&nc);

while(nc!=0)
{

printf("ingrese el numero de gaseosa");
scanf("%d",&ng);

printf("ingrese el numero de centro");
scanf("%d",&nc);

tot[nc]=ng;
}
for(i=1;i<=5;i++)
{

printf("%d \n",tot[i]);
}
}


Título: Re: consulta pasar una matriz a una funcion
Publicado por: amchacon en 29 Junio 2013, 23:32 pm
Si lo pides dos veces se queda con la última, eso es lógico.

¿Para que necesitas el scanf de antes del bucle?


Título: Re: consulta pasar una matriz a una funcion
Publicado por: feedf en 30 Junio 2013, 00:50 am
claro , entonces como seria el codigo ese bien planteado?,

el primer scanf lo puse para validar que no sea 0 y entonces entrar al bucle,
pero evidentemente hay algo que estoy haciendo mal :P


ah soy un buludo estaba poneidno al revez

asi funciona bien

Código:
#include <stdio.h>



int main()

{
int ng,nc,tot[10]={0},i;

i=0;
printf("ingrese el numero de centro");
scanf("%d",&nc);

while(nc!=0)
{

printf("ingrese el numero de gaseosa");
scanf("%d",&ng);



tot[nc]=ng;

printf("ingrese el numero de centro");
scanf("%d",&nc);

}
for(i=1;i<=5;i++)
{

printf("%d \n",tot[i]);
}
}