viernes, 15 de abril de 2022

29 - Funciones con retorno de un struct




Hemos visto que una función cuando no retorna dato definimos la palabra clave void previo al nombre de la función:

void cargar()

Cuando devuelve una función un tipo de dato simple puede ser un int, float o char:

int cargar()

En este concepto veremos que una función puede retornar un registro:

struct producto cargar()

Problema 1:

Se tiene la siguiente declaración de registro:

struct producto {
int codigo;
char descripcion[41];
float precio;
}; //obligatorio el punto y coma

Plantear dos funciones una que cargue un registro de tipo producto y otra que lo imprima.

En la función main definir dos variables de tipo producto llamar a las funciones anteriores.

Programa: programa135.c

Ver video

#include<stdio.h>
#include<conio.h>

struct producto {
int codigo;
char descripcion[41];
float precio;
};

struct producto cargar()
{
struct producto pro;
printf("Ingrese el codigo de producto:");
scanf("%i",&pro.codigo);
fflush(stdin);
printf("Ingrese la descripcion:");
gets(pro.descripcion);
printf("Ingrese el precio:");
scanf("%f",&pro.precio);
return pro;
};

void imprimir(struct producto pro)
{
printf("Datos del producto.\n");
printf("Codigo del producto:%i\n",pro.codigo);
printf("Descripcion:%s\n",pro.descripcion);
printf("precio:%0.2f\n",pro.precio);
}

int main()
{
struct producto pro1,pro2;
pro1=cargar();
pro2=cargar();
imprimir(pro1);
imprimir(pro2);
getch();
return 0;
}

En la función main definimos dos variables de tipo producto:

int main()
{
struct producto pro1,pro2;

Seguidamente llamamos a la función cargar y le asignamos a cada registro el dato que retorna la función:

    pro1=cargar();
pro2=cargar();

La función cargar define una variable local de tipo producto y se cargan los datos por teclado y luego mediante el comando return devuelve a la main el valor de la variable local:

struct producto cargar()
{
struct producto pro;
printf("Ingrese el codigo de producto:");
scanf("%i",&pro.codigo);
fflush(stdin);
printf("Ingrese la descripcion:");
gets(pro.descripcion);
printf("Ingrese el precio:");
scanf("%f",&pro.precio);
return pro;
};

Tener en cuenta que en la main se hace una copia de la variable local devuelta por la función por lo que no se pierden los datos cargados por teclado:

    pro1=cargar();

Problema propuesto

  • Se tiene la siguiente declaración de registro:
    struct punto {
    int x;
    int y;
    };
    Definir tres variables de tipo punto y cargarlas llamando a una función que retorne valores de tipo punto.
    Finalmente crear otra función que imprima en que cuadrante se encuentra cada punto (tener en cuenta que si x>0 e y>0 se encuentra en el primer cuadrante, si x<0 e y>0 se encuentra en el segundo cuadrante y así sucesivamente)

    Ver video

programa136.c

#include<stdio.h>
#include<conio.h>

struct punto {
int x;
int y;
};


struct punto cargar()
{
struct punto p;
printf("Ingrese la coordenada x del punto:");
scanf("%i",&p.x);
printf("Ingrese la coordenada y del punto:");
scanf("%i",&p.y);
return p;
};

void imprimirCuadrante(struct punto p)
{
if (p.x>0 && p.y>0)
{
printf("La coordenada(%i,%i) se encuentra en el primer cuadrante",p.x, p.y);
}
else
{
if (p.x<0 && p.y>0)
{
printf("La coordenada(%i,%i) se encuentra en el segundo cuadrante",p.x, p.y);
}
else
{
if (p.x<0 && p.y<0)
{
printf("La coordenada(%i,%i) se encuentra en el tercer cuadrante",p.x, p.y);
}
else
{
if (p.x>0 && p.y<0)
{
printf("La coordenada(%i,%i) se encuentra en el cuarto cuadrante",p.x, p.y);
}
}
}
}
printf("\n");
}


int main()
{
struct punto p1,p2,p3;
p1=cargar();
p2=cargar();
p3=cargar();
imprimirCuadrante(p1);
imprimirCuadrante(p2);
imprimirCuadrante(p3);
getch();
return 0;
}

No hay comentarios:

Publicar un comentario