Ir ao conteúdo
  • Cadastre-se

C++ Relatório de móveis 1


Netinha

Posts recomendados

Boa tarde, alguém poderia mim ajudar? Desde já agradeço!!!

 

Considere a estrutura a seguir:

struct Movel {
    char descricao[50];
    float peso;
    char tipo;
};

 

A partir desta estrutura, escreva um programa no qual o usuário cadastra n móveis, imprimindo ao final do cadastro um relatório informando:

Quantos móveis são do tipo 'f';

Quantos móveis tem a descrição começando com "Cadeira";

Qual a descrição do móvel mais pesado.

Link para o comentário
Compartilhar em outros sites

Você já tem a estrutura, agora falta criar o vetor e as funções de inserção. Eu recomendo no lugar do vetor, usar uma lista dinâmica, assim você não se preocupa com a quantidade de items que sua coleção terá.

 

Comece criando as funções necessárias: adicionar, contarPorTipo, contarPorNome selecionarMaisPesado (nomes sugeridos). Todos os métodos recebem o vetor (ou a lista), a função adicionar recebe também o novo elemento que deverá ser inserido.

 

Desenvolva o esqueleto do projeto e poste aqui para darmos continuidade. Não podemos entregar o código pronto, pois é contra as regras do fórum.

Link para o comentário
Compartilhar em outros sites

#include <iostream>
#define MAX N 100
using namespace std;
struct Movel{
    char descricao[50];

    float peso;

    char tipo;

};
int main(){
    int n;
    Movel v[MAX_N];
    cin>>n;
    for(int i=0;i<n;i++){
        cin.ignore();
        cout<<"informe a descrição";
        cin.getline(v[i].descricao[50]);
        cout<<"informe o tipo";
        cin>>v[i].tipo;
    }
    
    cout<<"Tipo 'f':"<<endl;
cout<<"Começa com Cadeira:"<<endl;
    cout<<"Mais pesado:"<<endl;
    
    return 0;
}

 

Tenho muita dificuldade em programação já assisti vários vídeos e não consigo desenrolar essa questão caso alguém tenho indicação de algum vídeo que possa ajudar agradeço. 

Link para o comentário
Compartilhar em outros sites

45 minutos atrás, Netinha disse:

Tenho muita dificuldade em programação já assisti vários vídeos e não consigo desenrolar essa questão caso alguém tenho indicação de algum vídeo que possa ajudar agradeço

 

Não sei de algum vídeo que eu possa recomendar.  Recomendo sim ter algum livro e escrever programas. E perguntar algo objetivo em lugares como esse forum, quando aparecem dúvidas. Um vídeo não vai te levar a nada objetivo. Um curso online vai te custar dezenas de horas.


Recomendo pensar no que está escrevendo. E escrever em torno dos dados.

 

Citação

Vou te mostrar um roteiro e um exemplo...

 

Seu dado: uma coleção de Movel, e 3 perguntas

 

Antes de tudo aprenda a usar funções, que são blocos de código com um nome. E aceitam argumentos e retornam algo. Vão tornar sua vida mais fácil ao programar. Vão tornar sua vida possível na verdade, porque não irá nem na esquina sem isso. E classes, em C++, que vão simplificar sua vida em muito mais.

 

Está programando em C++, talvez a linguagem mais expressiva de todas. 
 

5 horas atrás, Netinha disse:

Quantos móveis são do tipo 'f';

 

Imagine uma função assim:

 

    int total_por_tipo(char);

 

E que ela conheça seu acervo de móveis. E retorne um int com o total de móveis do tipo pedido... Então
 

	int N = total_por_tipo('f');
	int moveis_tipo_c = total_por_tipo('c');

 

retornaria em N o total de móveis tipo 'f' e em moveis_tipo_c você imagina o que, não? ;) Parece bem conveniente...


E essa?
 

    int total_por_descricao(char[]);

 

Que poderia usar assim:
 

	mesas = total_por_descricao("mesa");

 

E essa outra?
 

	    int movel_mais_pesado();

 

Essa não precisaria de nenhum argumento porque a coleção de móveis já é conhecida e então basta ver lá qual o mais pesado e retornar a posição dele no vetor.

 

E são as 3 perguntas que deve responder...

 

Veja essa declaração:
 

typedef struct 
{
    char  descricao[50];
    float peso;
    char  tipo;

}   Movel;  // para poder declar Movel abaixo

class Ex1
{
public:
    Movel   cad[MAX_N];  // Movel
    int     limite; // max moveis
    int     total; // contagem atual

public:
    int     total_por_tipo(char);
    int     total_por_descricao(char[]);
    int     movel_mais_pesado();

    // outras funcoes, ordem alfa
    int     mostra_movel(Movel*);

};  // Ex1

 

Essa é uma simplificação do que se faria normalmente, e não é a maneira mais simples. Apenas não quero mencionar a noção de construir uma classe e como alocar memória.

 

Mas entenda que Ex1 é uma classe. Então qualquer Ex1 tem um cad, que é uma coleção de Movel. Num dado momento vai ter 'total' deles. E o 'limite' será o seu MAX_N. E qualquer Ex1 tem as 3 funções que fazem os cálculos de que precisa. Isso é abstração, modelagem de dados, depende do livro que estiver lendo. Mas é isso: uma representação de seu problema e C++ é muito boa para isso.

 

Como usar um 🚄 desses?

 

Basta declarar
 

    Ex1     teste;
    Ex1     outroTeste;
    Ex1     vinte_lojas[20];

 

E cada variável dessas vai ter DENTRO dela um cadastro de móveis e as 3 funções de que precisa. Sem fazer mais nada. Vem de graça. Cada coisa declarada Ex1 se chama instância de Ex1. Usando a primeira, 'teste':

 

    teste.limite = MAX_N;
    teste.total = 0;  

 

E como criar um móvel?
 

    // um movel de exemplo
    Movel modelo{ "Cadeira", 35.5,'f' }; 

 

Pode ser simples assim, 'modelo' é um móvel e você pode usar para encher o cadastro e testar seu programa em minutos ao invés de ficar parada em frente ao terminal inventando 3 campos por móvel para testar seu programa... 

 

Como colocar um móvel no cadastro de uma classe Ex1 dessas?

 

Em 'teste' por exemplo:
 

Cada Ex1 tem um vetor cad onde tem um certo número de móveis. E a gente já pensou nisso e marcou o limite em MAX_N e o total em zero aqui acima... Sendo assim basta copiar o móvel e aumentar o contador...

 

    teste.cad[ teste.total ] = modelo;
    teste.total += 1;

 

Claro que seria bom mostrar um móvel na tela pra ver se a coisa está rolando. Aí você pode mostrar o móvel 'modelo' que a gente declarou e depois mostrar o primeiro móvel que esta no cadastro de teste e ver se são o mesmo... E devem ser já que acabamos de colocar o móvel lá dentro na posição 0.

 

Uma função? Sim!
 

    int     mostra_movel(Movel*);

 

Passa o endereço do móvel, ele aparece na tela. Simples assim:
 

int     Ex1::mostra_movel(Movel* m)
{
    std::cout << "Movel: " <<
        m->descricao << " " <<
        m->peso << "Kg Tipo '" <<
        m->tipo << "'\n"; 
    return 0;
};

 

O prefixo Ex1:: indica que a função faz parte da classe.

 

Como testar isso em main()?
 

    cout << "Mostrando movel de teste\n";
    teste.mostra_movel(&modelo);

    cout << "Mostrando movel no cadastro\n";
    teste.mostra_movel(&teste.cad[0]);

 

E assim mostra o móvel modelo e a cópia dele, que deve estar no cadastro...

E não é que mostra mesmo?

 

image.png.29d49eaac83a3f4411eb9570ce4e0383.png

 

Eis o programa inteiro

 

Spoiler

#define     MAX_N 100
#include <iostream>
using namespace std;

typedef struct 
{
    char  descricao[50];
    float peso;
    char  tipo;

}   Movel;  // para poder declar Movel abaixo

class Ex1
{
public:
    Movel   cad[MAX_N];  // Movel
    int     limite; // max moveis
    int     total; // contagem atual

public:
    int     total_por_tipo(char);
    int     total_por_descricao(char[]);
    int     movel_mais_pesado();

    // outras funcoes, ordem alfa
    int     mostra_movel(Movel*);

};  // Ex1

int main()
{
    Ex1     teste;
    teste.limite = MAX_N;
    teste.total = 0;

    // um movel de exemplo
    Movel modelo{ "Cadeira", 35.5,'f' }; 
    
    teste.cad[ teste.total ] = modelo;
    teste.total += 1;

    cout << "Mostrando movel de teste\n";
    teste.mostra_movel(&modelo);

    cout << "Mostrando movel no cadastro\n";
    teste.mostra_movel(&teste.cad[0]);

    return 0;
};  // main()

int     Ex1::total_por_tipo(char tipo)
{ 
    return 0;
};

int     Ex1::total_por_descricao(char desc[])
{ 
    return 0;
};

int     Ex1::movel_mais_pesado()
{ 
    return -1;
};

// outras funcoes, ordem alfa

int     Ex1::mostra_movel(Movel* m)
{
    cout << "Movel: " <<
        m->descricao << " " <<
        m->peso << "Kg Tipo '" <<
        m->tipo << "'\n"; 
    return 0;
};

 

 

Rode em usa máquina e entenda o princípio dessas coisas. É muito flexível.

 

E já tem até os protótipos das 3 funções ;) 

 

Note que C++ tem um tipo string que é mais simples de usar de char[]

 

Seu enunciado não fala nada sobre como vai ler os móveis... Resista sempre a essa ideia de ler do teclado: é super ingênuo: demora pra caramba e é um porre para reproduzir um teste. Leia de um arquivo. é muito mais fácil e seguro. E você digita os dados direto no IDE...

 

 

 

 

Link para o comentário
Compartilhar em outros sites

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...