Ir ao conteúdo

Posts recomendados

Postado

Olá, sou iniciante na área da programação e gostaria de uma ajuda. A ideia é desenvolver um programa de encomendas, o problema é que não consigo fazer com que os caracteres "P", "M" e "G" apareçam no gráfico, só aparecem números aleatórios.

#include <iostream>
#include <clocale>
#include <cstdio>
#include <windows.h>

/*Pretende-se desenvolver, em C++, um programa que recolha os dados de uma possível encomenda.
A empresa fabrica o produto X na forma de 4 modelos (Pequeno, Médio, Grandee MuitoGrande).
Possível Layout:
Modelo Descrição Quantidade Preço Total
1       Pequeno       10      5     50
2        Médio         5      2     10
-------------------------------------------------------------------------------------------------------
                          Total     60
Notas:
→A encomenda, no detalhe,deve ter no mínimo 1 produto e no máximo 4.
→Não podem existir modelos repetidos.*/

using namespace std;

void menu();
void inserir();
void mostrar();
void pausa();

int validarmdl(int mdl);
char validardescr();
int validarqtd();

int mdl,qtd, total=0,pc;
char escolha;


int encomenda[4][4];

int numProdutos=0;

int main()
{
    setlocale(LC_ALL,"portuguese");
    menu();
    return 0;
}

void menu()
{

    int opcao;

    do
    {
        system("cls");

        cout<<"***Encomenda***"<<endl<<endl;
        cout<<"1- Inserir produtos no carrinho."<<endl;
        cout<<"2- Mostrar carrinho."<<endl;
        cout<<"3- Sair."<<endl;
        cin>>opcao;

        switch(opcao)
        {

        case 1:
            inserir();
            break;
        case 2:
            mostrar();
            break;
        case 3:
            exit(0);
        default:
            cout<<"Opção inválida. Insira um número entre 1 e 3."<<endl;

        }
    }
    while(opcao!=3);
}
void inserir()
{

    system("cls");

    cout<<"Carrinho:"<<endl;

    if(numProdutos >=4){
        cout<<"Carrinho cheio."<<endl;
        pausa();
        return;
    }

    numProdutos++;

    cout<< numProdutos<< "º produtos"<<endl;

    mdl=validarmdl(mdl);
    escolha= validardescr();
    qtd= validarqtd();

    if(mdl== 1){
        pc=10.0;
    }
    else if(mdl==2){
        pc=15.0;
    }
    else if(mdl==3){
        pc=20.0;
    }
    else
    {
        pc=25.0;
    }

    total= qtd * pc;

    encomenda[numProdutos - 1][0] = mdl;
    encomenda[numProdutos - 1][1] = escolha;
    encomenda[numProdutos - 1][2] = qtd;
    encomenda[numProdutos - 1][3] = pc;
    encomenda[numProdutos - 1][4] = total;

    pausa();


}
void mostrar()
{

    system("cls");

    cout<<endl<<"Mostrar carrinho"<<endl<<endl;
    cout<<"Modelo\tDescr\tQtd\tPrc\tTotal"<<endl;

    for(int i=0; i<numProdutos; i++)
    {
        cout<<encomenda[i][0]<<"\t"<<encomenda[i][1]<<"\t"<<encomenda[i][2]<<"\t"<<encomenda[i][3]<<"\t"<<encomenda[i][4]<<endl;


    }
    system("pause");

}

int validarmdl(int mdl)
{
    do
    {
        cout<<"Digite um modelo de 1 a 4:"<<endl;
        cin>>mdl;


    if(mdl<1 || mdl>4){
        cout<<"Modelo inválido."<<endl;
    }
    }while(mdl<1 || mdl>4);


return mdl;
}


char validardescr()
{
    do
    {
        cout << "Escolha o tamanho (P/M/G):" << endl;
        cin >> escolha;

        if (escolha != 'P' && escolha != 'M' && escolha != 'G')
        {
            cout << "Tamanho inválido." << endl;
        }

    } while (escolha != 'P' && escolha != 'M' && escolha != 'G');

    return escolha;
}

int validarqtd()
{
    int qtd;

    do
    {
        cout << "Insira a quantidade desejada:" << endl;
        cin >> qtd;

        if (qtd < 1)
        {
            cout << "Insira uma quantidade válida." << endl;
        }
        else if (qtd > 50)
        {
            cout << "Estoque esgotado." << endl;
        }

    } while (qtd < 1 || qtd > 50);

    return qtd;
}

void pausa()
{
    cout << "Aguarde 1 segundo." << endl;
    Sleep(1000);
}

 

  • Curtir 1
Postado

@louisecp     seu código está funcionando bem , mas é quase todo da linguagem 'C' e não C++, o que tem de C++ nesse seu código são o "cout <<" e o "cin >>" ,  e  P M G são caracteres do tipo "char" , com apenas uma única Letra , e para mais de uma Letra use "string" , e essa matriz é do tipo "int" ,  assim os valores guardados nela são também do tipo 'int' então use :

char matriz[4][4] ;
   
///    ou do modo que está use assim : (char) que é a letra e não o código da Letra
      
for(int i=0; i<numProdutos; i++)
{
  cout  <<        encomenda[i][0] << "\t" << (char)encomenda[i][1]
        << "\t"<< encomenda[i][2] << "\t" <<       encomenda[i][3]
        << "\t"<< encomenda[i][4] <<                         endl;


  }     

ou na linguagem C++ use o tipo "string" para armazenar palavras do modo que está no exemplo da descrição .

  • Curtir 1
Postado

Complementando o @devair1010 para estoque tem-se o modelo que foi omitido no programa. No enunciado se falou no modelo X mas também vai ter o Y, o Z e outros mais. Nos tamanhos são 4 e não 3 (P, M, G e GG). Para manter o char GG pode ser substituido por E de extra.

O C++ cria e modifica arquivos de banco de dados com muita facilidade. Num programa que fiz no passado o estoque era um único banco de dados com os campos modelo, cor, tamanho, quantidade, preço. Ao se inserir um novo modelo se este tivesse 5 cores e 3 tamanhos eram criadas automáticamente 15 linhas no banco de dados, 1 para cada item. Muito mais fácil e prático do que o uso de matrizes pois permite a inserção de quantidade ilimitada de modelos sem ter que alterar o programa, coisa que não ocorre na sua proposta. o programa nasce engessado. Outros recursos como indexação tornam o programa mais interessante ainda. Completinho vai mais de 400 linhas.mas mesmo para pequenos exercícios recomendo o estudo do banco de dados do C++.

Bons estudos.

  • Obrigado 1
Postado

Você pode conseguir concluir assim o programa. E pode até sempre programar assim, mas vai ter sempre um trabalho do inferno para concluir cada programa, e vai aprender pouco ou nada a cada um.

Muitos dos problemas no código são tão comuns que eu acho que a gente deve culpar uma legião de instrutores possivelmente medíocres e material de estudo ruim.

Vou listar alguns problemas e tentar mostrar uma maneira comum de fazer essas coisas.

 

Entenda que C++ não é C e C não é C++. São linguagens absolutamente distintas.

 

O problema original:

 

Possível Layout:

Modelo   Descrição  Quantidade Preço Total
  1       Pequeno       10       5     50 
  2       Médio          5       2     10  
  
Total: 60


Isso você já tem. Use. Faça igual. Nada diz sobre estoque, layout, nada. Faça o mínimo mas faça certo.

Use o proprio IDE ou editor para formatar os dados, ANTES de programar.

E escreva em torno dos dados. ANTES de programar.

 

Do seu enunciado:

  •   A empresa fabrica o produto X na forma de 4 modelos: Pequeno, Médio, Grande e MuitoGrande. Que tal P, M, G e GG?

Notas:
  - A encomenda, no detalhe, deve ter no mínimo 1 produto e nomáximo 4. Não podem existir modelos repetidos.


Genial o cara se preocupar em te avisar que uma encomenda não deve ter ZERO produtos! Ou -30 produtos, ou 0,32 produto! E repetir modelos num pedido de no máximo 4 itens seria meio bobinho afinal! Mas é o que temos de enunciado.

 

    #include <cstdio>
    #include <iostream>


Que significa? Ao menos respeitou a convenção de, ao usar um header de C, usar um 'c' na frente e tirar o .h, e usou cstdio ao invés de stdio.h.

 

Mas sabia que stdio.h e iostream tem o mesmo propósito? Tem. Nunca deve usar os dois. E provavelmente nunca deve usar header de C em C++ em um programa para iniciantes. Para que seria?

 

Seu dado é uma encomenda. Onde está a encomenda no programa?  

 

        int encomenda[4][4];

 

Imagino que seria isso. 4 vetores de 4 int. int é um número inteiro, com sinal, tipo -42 ou 17. Que vai fazer com 16 deles?

 

E isso:

      void menu();
      void inserir();
      void mostrar();
      void pausa();

 

Funções que não recebem nada (sem argumentos) e não retornam nada (void)????
Isso quer dizer que vai inserir o que onde, em inserir() por exemplo?

 

Nunca escreva isso. Vai implicar em dados globais e funções que de nada servem porque tratam um único valor.

 

E um menu() que não retorna nada?? Não seria razoável uma função menu() retornar a opção escolhida?

Eis o que acaba acontecendo

 

int main()
{
    setlocale(LC_ALL, "portuguese");
    menu();
    return 0;
}

 

O programa principal passou a ser menu(). Não escreva isso. menu() é um menu. Mostra umas opções e retorna a escolhida. O simples.

 

E

        void inserir();

 

afinal insere o que onde? Muito complicado programar assim. inserir() insere alguma coisa em algum lugar.

Quase todos os programas de exercício envolvem algum tipo de container. E inserir quer dizer o óbvio: inserir um item num carrinho de encomendas, no seu caso.

 

Quanto mais longe seu programa estiver disso, da realidade, mais trabalho você vai ter. E, com instrutores e patrões sérios, menos nota e menos estágio ou emprego.

 

Que seria uma encomenda em C?

 

    typedef struct
    {
        unsigned modelo;
        char     tamanho[4];
        unsigned quantidade;
        double   preco;
    } Encomenda;

 

Não parece melhor? E o carrinho?

 

          typedef struct
          {
              unsigned qtd;
              Encomenda enc[4];
          } Carrinho;

 

Não faz sentido? Antes de começar a programar. É mais fácil.

 

E em C++?

       struct Encomenda
        {
            unsigned modelo;
            string   tamanho;
            unsigned quantidade;
            double   preco;
            int      validar();
            int      mostrar();
        };

        struct Carrinho
        {
            unsigned qtd;
            Encomenda enc[4];

            int inserir(Encomenda* uma);
            int mostrar(Encomenda* uma);
        };

 

Em `C++` é parecido, mas você pode e deve declarar as funções DENTRO da struct, porque é muito mais fácil.


ANTES de começar a programar:

 

        #include <iostream>
        using namespace std;

        struct Encomenda
        {
            unsigned modelo;
            string   tamanho;
            unsigned quantidade;
            double   preco;
            int      validar();
            int      mostrar();
        };

        struct Carrinho
        {
            unsigned qtd;
            Encomenda enc[4];

            int inserir(Encomenda* uma);
            int mostrar(Encomenda* uma);
        };

        int main(void)
        {
            return 0;
        }

 

E isso até compila. E a gente nem programou nada ainda.

 

Considere.

  • Obrigado 1
  • Amei 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!