Documentos de Académico
Documentos de Profesional
Documentos de Cultura
REPORTE DE PRÁCTICA #2
Semestre: 04.2022
Índice
1. INTRODUCCIÓN ..................................................................................................................... 2
2. ANÁLISIS ................................................................................................................................ 2
Función main(): ................................................................................................................. 3
Función menu(): ................................................................................................................ 4
Función llenar_inv():.......................................................................................................... 4
Función ord_np(): .............................................................................................................. 5
Función ord_p(): ................................................................................................................ 6
Función ord_ctd(): ............................................................................................................. 6
Función buscar(): ............................................................................................................... 7
Función mostrar_prod(): ................................................................................................... 8
Función mostrar_todo(): ................................................................................................... 8
3. CÓDIGO EM C++ .................................................................................................................... 8
4. CONCLUSIÓN ....................................................................................................................... 15
Tabla de Ilustraciones
Ilustración 1. Menu ....................................................................................................................... 3
Ilustración 2. Opción Inválida ........................................................................................................ 3
Ilustración 3. Llenar el inventario .................................................................................................. 4
Ilustración 4. Transformación a mayúsculas ................................................................................. 5
Ilustración 5. Llenar inventario ..................................................................................................... 5
Ilustración 6. Orden alfabético ...................................................................................................... 6
Ilustración 7. Orden de precio de mayor a menor ........................................................................ 6
Ilustración 8.Orden por cantidades de menor a mayor ................................................................ 7
Ilustración 9. Producto no encontrado! ........................................................................................ 7
Ilustración 10. Funcion buscar() .................................................................................................... 8
1. INTRODUCCIÓN
Para la estructura de datos se requerirá usar como variables internas una cadena
de caracteres (con 30 caracteres, máximo), un valor real y positivo para el precio
y un valor entero y positivo para la cantidad de producto.
2. ANÁLISIS
Para el análisis del código, se tomará función por función para una mejor
organización y comprensión.
2
Función main():
Antes de trabajar con las funciones, es definido un arreglo del tipo Producto
y que tiene tamaño igual a 5. Este arreglo contendrá las tres variables
definidas en Producto.
Ilustración 1. Menu
Para control del menú se utilizó una variable de control, b1. Esta variable es
bandera que permite que el programa siga funcionando correctamente. Por
ejemplo, si el inventario no es llenado, no se puede ordenar, ni por nombre
de producto, ni por precio, ni por cantidad. De igual manera, no se puede
buscar el producto. Por esto, la variable b1 recibió un valor falso (el cero).
Caso el inventario no sea llenado, esas funciones (de ordenamiento y busca)
3
permanecerán con el valor b1 falso y regresarán el mensaje: “Llenar el
inventario!”.
Función menu():
Función llenar_inv():
Es una función vacía (void) y que genera un arreglo de una dimensión que
contiene cinco “renglones”. Cada “renglón” está formado por un paquete de
datos: nombre del producto, su valor y cantidad.
Enseguida, la función usa dos ciclos do…while: una para los precios y otra
para las cantidades. Ambos ciclos tienen la misma función: la de permitir
ingresar datos mayores o iguales a cero. Caso el número ingresado sea
menor que cero, el programa vuelve a pedir el precio o la cantidad, según sea
el caso.
Función ord_np():
Para la función ord_n() se utilizó el tipo void que recibe un arreglo y genera
otro arreglo, ambos tipo Programa. Lo que hace la función es ordenar por
orden alfabético, de la A hasta la Z, analizando caracter por caracter. La
función es compuesta por dos ciclos for y un if que funcionan como un efecto
burbuja, donde el elemento más “liviano” sube a la primera posición de la
lista. Como es un ordenamiento por nombre, se consideran los caracteres.
Para esto se usa la función strcmp(a,b), que compara una cadena de la lista
con la siguiente. Si la cadena a tiene un valor mayor que b, estas cambian de
posición entre sí. El valor de comparación regresa un número entero. Si
5
strcmp(a,b)>0, quiere decir que la cadena a es mayor alfabéticamente que b.
Si strcmp(a,b)<0, quiere decir que la cadena b es mayor alfabéticamente que
a. Si strcmp(a,b)=0, quiere decir que ambas tiene el mismo valor alfabético.
Función ord_p():
Función ord_ctd():
6
Ilustración 8.Orden por cantidades de menor a mayor
Función buscar():
La función buscar() es del tipo void y recibe el arreglo del tipo Producto. Lo
que hace la función es pedir que el usuario introduzca el nombre del producto
a buscar. La función recibe la cadena digitada, transformándola a mayúsculas
para después hacer una comparación utilizando la función strcmp(). Para
hacer la comparación, se usó un ciclo do…while. Mientras el valor de la
comparación no sea igual a cero y el número de iteraciones sea menor que
la cantidad de productos (cinco), el ciclo no se rompe. Caso el valor de la
función strcmp() sea cero o el número de iteraciones sobrepasar la cantidad
de productos, el ciclo se termina. Si strcmp() continua diferente de cero y las
iteraciones sean superiores a cinco, la función buscar() regresa el mensaje
“Producto no encontrado!”. Caso strcmp() sea igual a cero, quiere decir que
las cadenas son iguales y se muestra el producto, con su precio y cantidad.
Como manipulación del número de iteraciones, se tiene que restar una
iteración para que el valor de la posición en la lista sea el correcto.
7
Ilustración 10. Funcion buscar()
Función mostrar_prod():
La función mostrar_prod() es del tipo void y recibe dos valores: el arreglo tipo
Producto y un valor tipo int. El valor entero es referente a la posición del
producto en el arreglo. La función nada más muestra en pantalla el producto
con su valor y cantidad. Para mostrar el precio con dos decimales se optó por
usar la función printf() con los términos %.2f señalando a la función que se
debe tomar apenas dos dígitos del número introducido.
Función mostrar_todo():
3. CÓDIGO EM C++
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
#define CCP 30
8
#define CP 5
typedef struct
{
char np[CCP];
float p;
int ctd;
}Producto;
int menu(void);
void llenar_inv(Producto []);
void ord_np(Producto []);
void ord_p(Producto []);
void ord_ctd(Producto []);
void buscar(Producto[]);
void mostrar_prod(Producto [], int);
void mostrar_todo(Producto []);
void main(void)
{
int op, b1=0;
Producto l[CP];
do
{
op=menu();
switch (op)
{
case 1:
llenar_inv(l);
mostrar_todo(l);
b1=1;
break;
case 2:
if (b1)
{
9
ord_np(l);
mostrar_todo(l);
}
else
{
cout<<"Llenar el inventario!";
}
break;
case 3:
if (b1)
{
ord_p(l);
mostrar_todo(l);
}
else
{
cout<<"Llenar el inventario!";
}
break;
case 4:
if (b1)
{
ord_ctd(l);
mostrar_todo(l);
}
else
{
cout<<"Llenar el inventario!";
}
break;
case 5:
if (b1)
{
10
buscar(l);
}
else
{
cout<<"Llenar el inventario!";
}
break;
case 6:
break;
default:
cout<<"Opcion invalida!";
break;
}
getch();
clrscr();
}while(op!=6);
}
int menu(void)
{
int op;
cout<<"MENU\n1. Llenar el inventario;\n2. Ordenar el inventario
por nombre de producto;\n3. Ordenar el inventario por precio;\n4. Ordenar
el inventario por cantidad de productos;\n5. Buscar un nombre de
producto;\n6. Salir;\nOpcion: ";
cin>>op;
return op;
}
11
fflush(stdin);
cout<<"\nNombre: ";
cin.get(a[i].np,CCP-1,'\n');
int len=strlen(a[i].np);
for (int j=0;j<len;j++)
{
a[i].np[j]=toupper(a[i].np[j]);
}
do
{
cout<<"Precio: $ ";
cin>>a[i].p;
}while(a[i].p<0);
do
{
cout<<"Cantidad: ";
cin>>a[i].ctd;
}while(a[i].ctd<0);
clrscr();
}
}
12
}
}
13
void buscar(Producto a[])
{
char b[CCP];
int resp, i=0;
fflush(stdin);
cout<<"BUSCAR PRODUCTO\nNOMBRE: ";
cin.get(b,CCP-1,'\n');
int len=strlen(b);
for (int j=0;j<len;j++)
{
b[j]=toupper(b[j]);
}
do
{
resp=strcmp(a[i].np, b);
i++;
}while(resp!=0 && i<CP);
if (i>=CP && resp!=0)
{
cout<<"Producto no encontrado!";
}
else
{
i--;
mostrar_prod(a,i);
}
14
cout<<endl;
cout<<"CANTIDAD: "<<a[b].ctd<<endl;
}
void mostrar_todo(Producto a[])
{
for (int i=0;i<CP;i++)
{
cout<<"NOMBRE: "<<a[i].np<<endl;
printf("PRECIO: $ %.2f",a[i].p);
cout<<endl;
cout<<"CANTIDAD: "<<a[i].ctd<<endl;
cout<<endl;
}
}
4. CONCLUSIÓN
15