Ir ao conteúdo
  • Cadastre-se

C++ Relatório de móveis 1


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 post
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 post
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 post
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 post
Compartilhar em outros sites
  • Simon Viegas alterou o título para Relatório de móveis 1

Crie uma conta ou entre para comentar

Você precisar ser um membro 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...

livros-black-friday.jpg

SEMANA BLACK FRIDAY
Clube do Hardware

Todos os livros por apenas R$ 9,99 cada!

Eletrônica | Montagem de Micros | Redes