Programa para trabajo de la universidad, urgenteee!!!

Iniciado por Emmet01921, 22 Noviembre 2021, 21:10 PM

0 Miembros y 1 Visitante están viendo este tema.

Emmet01921

Hola, soy nuevo en el foro y necesito ayuda con dos programas para mi clase de programación. Los problemas son los siguientes:

Problema 1:

Crea un programa que permita administrar cuánto gasta un cliente en diferentes
departamentos del supermercado. 

a. Los atributos del cliente son: nombre, teléfono y total gastado.
   
b. Los diferentes departamentos del supermercado son: (Frutas y verduras, Carnes y
congelados, Vinos y licores, Dulcería y Artículos de limpieza)

c. Cada departamento es una función que recibe un cliente, lo saluda "hola Pedrito,
bienvenido" y pregunta al cliente cuánto gastó. La cantidad que responda el
cliente deberá sumarse al atributo total gastado de cada cliente. 

d. Crea una función que imprima el total gastado por los clientes que visitaron hoy el
supermercado (la función recibe como parámetro el arreglo de clientes y suma el
total gastado por cada uno. Al final la función imprime "hola, soy Shedrawiwi y
hoy gane xxxxx pesos con n clientes"

e. Para probar tu programa deberás crear al menos 5 clientes. Todos inician con $0
gastados. Cada cliente deberá pasar por todos los departamentos (en el orden que
quieras). Una vez que cada cliente termine de pasar por cada departamento
deberás imprimir el total gastado por cada uno "hola, soy pedrito y gasté xxxxx en
el supermercado" (te recomiendo que hagas una función para esto). Crea un
arreglo de Clientes (máximo 10) para que allí guardes a tus 5 clientes. Manda
llamar la función que imprime cuánto ganó el supermercado el día de hoy (envía
como parámetro el arreglo de los 5 clientes).

Les comento que ya hice una parte del código, pero solo lo pude hacer para un solo cliente y no para los 5 que me pide el problema. Ahí es donde radica mi duda, que no se como hacer el programa para los 5 clientes y que al final haga lo que pide el ejercicio. A continuación esta el código que hice:

#include <stdio.h>
#include <iostream>
using namespace std;

void dulceria(int*acumulador)
{
    int total;
    cout<<"Cúanto gastaste en dulceria"<<endl;
    cin>>total;
    cout<<"Gracias por gastar "<<total<<" pesos en dulcería";
    (*acumulador)+=total;
}
void frutas_verduras(int*acumulador)
{
    int total;
    cout<<"\n \nCúanto gastaste en frutas y verduras"<<endl;
    cin>>total;
    cout<<"Gracias por gastar "<<total<<" pesos en frutas y verduras";
    (*acumulador)+=total;
}
void carnes_congelados(int*acumulador)
{
    int total;
    cout<<"\n \nCúanto gastaste en carnes y congelados"<<endl;
    cin>>total;
    cout<<"Gracias por gastar "<<total<<" pesos en carnes y congelados";
    (*acumulador)+=total;
}
void vinos_licores(int*acumulador)
{
    int total;
    cout<<"\n \nCúanto gastaste en vinos y licores"<<endl;
    cin>>total;
    cout<<"Gracias por gastar "<<total<<" pesos en vinos y licores";
    (*acumulador)+=total;
}
void articulos_limpieza(int*acumulador)
{
    int total;
    cout<<"\n \nCúanto gastaste en artículos de limpieza"<<endl;
    cin>>total;
    cout<<"Gracias por gastar "<<total<<" pesos en artículos de limpieza";
    (*acumulador)+=total;
}
int main()
{
    int acumulador= 0;
   
    dulceria(&acumulador);
    frutas_verduras(&acumulador);
    carnes_congelados(&acumulador);
    vinos_licores(&acumulador);
    articulos_limpieza(&acumulador);
    cout<<"\n \nEn total gastaste "<<acumulador<<" pesos";
}

Problema 2:

El otro problema es el siguiente:

Programa que indica si un valor X es un número circular primo. Los números circulares
primos son aquellos que son números primos y que todas las rotaciones de dicho número
también son primos. Ej. El número 197 es circular primo pq es primo y su primera rotación
971 también es primo y su segunda rotación 719 también es primo.

En este caso solo supe hacer el código para determinar si el número que ingresa el usuario al principio es primo, pero no sé como hacer para que el número de las vueltas que se necesitan para determinar si es un número primo circular o no.

#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
    int i, x=0, num, cont=0;
    int cifras[10];
    cout<<"Digita el número"<<endl;
    cin>>num;
   
    for (i=1;i<=num;i++){
        if(num%i==0){
            cont++;
        }
    }
    if (cont>2){
        printf("\nNo es un número primo");
    }
    else{
        printf("\nEs un número primo");
    }
     

}

Ayuda por favor en cualquiera de los dos ejercicios.
 

@XSStringManolo

#1
PROBLEMA1:

No has creado los clientes. Te recomiendo utilizar estructuras para tener los datos organizados y crear clientes de forma sencilla.

Código (cpp) [Seleccionar]
struct Cliente {
 std::string nombre = "";
 std::string telefono = "";
 unsigned int totalGastado = 0;
};


Una vez tienes la structura, puedes crear clientes de forma sencilla.
Código (cpp) [Seleccionar]
int main() {
 Cliente cliente1; // ejemplo de como crear un cliente
}


Ahora te faltaría rellenar los datos. Puedes hacerlo directamente en main usando el operador .
Código (cpp) [Seleccionar]
int main() {
 Cliente cliente1; // ejemplo de como crear un cliente
 cliente1.nombre = "Manolo";
 cliente1.telefono = "555-555-555";
}


Si lo hicieses así y por ejemplo tuvieses 20 clientes y dentro de cada uno 50 propiedades tendrías en el main 1000 lineas de código asignando propiedades, por eso aunque no sea este el caso, es buena práctica crear una funcion a la que le pases los datos y se los asigne a los clientes.

Código (cpp) [Seleccionar]
void crearCliente (Cliente * clienteActual, string nombre, string telefono, int gastado ) {
 clienteActual->nombre = nombre;
 clienteActual->telefono = telefono;
 clienteActual->totalGastado = gastado;
}

int main() {
 Cliente cliente1;
 crearCliente(&cliente1, "Manolo", "555-555-555", 0);

 cout << "Hola " << cliente1.nombre;
 return 0;
}


Ahora que tienes un ejemplo de como acceder dentro de una función a las propiedades de la estructura (cliente->propiedad) y un ejemplo de como acceder desde el main (cliente.propiedad) haz lo que te pide el ejercicio.

Tienes que pasar el cliente por parámetro a las funciones, imprimir su nombre, preguntarle cuanto quiere gasta y añadírselo a la propiedad totalGastado del cliente.

También te pide en el apartado d, que una función acepte un array de clientes. Puedes crear un array de structuras sin problemas:
Código (cpp) [Seleccionar]
int main() {
 Cliente clientes[5];
 // aquí el equivalente al antiguo cliente1 sería clientes[0], cliente2 sería clientes[1], etc.
 crearCliente(&clientes[0], "Manolo", "555-555-555", 0);

 cout << "Hola " << clientes[0].nombre;

 return 0;
}


Es sencillo, trata de familiarizarte con los ejemplos que te puse y rescribe el programa siguiendo lo aquí expuesto y lo que te piden EXACTAMENTE los apartados.



PROBLEMA2

Aquí te explican que es un primo circular:
https://pt.m.wikipedia.org/wiki/Primo_circular

Yo lo implementaría casteando de int a string y una vez tengo un string hago shift del primer caracter y hago push de ese caracter al final y lo casteo a int para poder comprobar si es primo. Repites este proceso una vez por cada dígito que tenga (los sacas con .length() o .size() sobre el tamaño del string)

Si te pongo código, ya te lo doy echo, no te puedo ayudar mas sin darte la solución.

Consejo: Haz una función que retorne false si en algún momento compruebas que no es primo circular. Si acabas el bucle sin haber retornado false, significa que el primo circular asique retornas true al final de la función.

Emmet01921