• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

256mxr

Ajuda Programa Classes!!!

13 mensagens neste tópico

Pretende-se escrever um programa em C++, denominado "CentroComercial", para gerir um

centro comercial. O programa deve conter uma classe denominada CCentroComercial com a

seguinte estrutura:

class CCentroComercial {
public:
typedef struct {
string nome;
string tipo;
int renda;
} LOJA;
private:
vector<LOJA> lojas;
public:
void ler_lojas(const char *nome);
void imprimir_lojas(ostream &output, string tipo);
void imprimir_lojas(ostream &output);
void ordenarLojas ();
};

a) Implemente o membro-função:

void CCentroComercial::ler_lojas(const char * filename)

que lê a informação de um conjunto de lojas de um ficheiro de texto para o vector lojas.

O ficheiro está organizado em blocos de 3 linhas, contendo o nome da loja, o tipo da loja e a

renda (euros/mês), por exemplo:

MacDonalds

Fast Food

1000

Zara

Roupa

5000

b) Implemente os membros-função

void imprimir_lojas(ostream &output, string tipo);

void imprimir_lojas(ostream &output);

//todas

que escreve no stream output os elementos do vector lojas, 1 por cada linha. Em cada linha os

campos de cada loja deverão ser separados por ponto-e-vírgula.

c) Implemente o membro-função

void ordenarLojas ();

que ordene o vector lojas por renda através do método ordenação por selecção

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Alinea a)

void CCEntroComercial::ler_lojas (const char *filename)
{
     ifstream fich(filename);
     if(!fich)
              cerr << "Erro ao abrir ficheiro\n";
     else
     {
         while(!fich.eof())
         {
                           getline(fich,nome);
                           lojas.push_back(nome);
                           getline(fich,tipo);
                           lojas.push_back(tipo);
                           getline(fich,renda);
                           lojas.push_back(renda);
         }
     }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Alinea ;)

void imprimir_lojas(ostream &output, string tipo)
{
     for(vector <LOJA>::iterator it=lojas.begin();it!=lojas.end();it++)
     {
                if(*it==tipo)
                
                      output << lojas.nome << ";"<< lojas.tipo << ";"<< lojas.renda<<endl;
     }
}

void imprimir_lojas(ostream &output)
{
      for(vector <LOJA>::iterator it=lojas.begin();it!=lojas.end();it++)
      {
                 output << lojas.nome << ";"<< lojas.tipo << ";"<< lojas.renda<<endl;
      }  
}                     

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Comecemos pela a)

1. A assinatura da função não é igual ao que está na classe

2. Usar fich.good() porque fich é sempre verdadeiro.

3. Não estás a usar o vector correctamente. Tens de puxar um objecto do tipo LOJA e não os capos deste.

4. Fecha o file quando acabares.

Coisas boas a assinalar:

É de facto muito bom saber quando usar const, vejo poucas pessoas a fazer isso, normalmente ignoram a sua existência.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

N percebi o ponto 3!!

O que keres dizer??

E o fich.good ponho onde?? no while??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

fich.good() no if.

Para os vectores não podes inserir os campos directamente mas sim fazendo tipo:

lojas[0].nome = X;

e para o teu caso em concreto

getline(fich,lojas.nome);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

void CCEntroComercial::ler_lojas (const char *nome)
{
     ifstream fich(filename);
     if(!fich.good())
              cerr << "Erro ao abrir ficheiro\n";
     else
     {
         while(!fich.eof())
         {
		int i=0;
                           getline(fich,lojas.nome);
                           lojas[i].nome=nome;
                           getline(fich,lojas.tipo);
                           lojas[i].tipo=tipo;
                           fich >> lojas.renda;
                           lojas[i].renda=renda;
		i++;
         }
fich.close();
     }

}

É isto???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a condição tem de ser invertida ! fich.good()

Tas sempre a definir int i=0; isso fica sempre na mesma. Tem de ser definido fora do while.

lojas.nome não existe. Podes usa logo getline(fich,lojas.nome);

Uma coisa importante antes que isso comece a estoirar quando testares.

Convem manter i < lojas.size(). Já que a classe não inicializa o tamanho do vector, terás de ter em conta o numero de lojas no ficheiro e fazer um lojas.resize(X); em que X é o número de lojas.

Para saber previamente o número de lojas, o ficheiro deveria trazer no cabeçalho esse número.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
void CCEntroComercial::ler_lojas (const char *nome)
{
     ifstream fich(filename);
     if(!fich.good())
              cerr << "Erro ao abrir ficheiro\n";
     else
     {
int i=0;
     lojas.resize(50);
         while(!fich.eof())
         {

                       while(i<lojas.size())
                {

                           getline(fich,lojas[i].nome);
                           getline(fich,lojas[i].tipo);
                           
                           fich >> lojas[i].renda;
                           
                           i++;
         }}
fich.close();
     }

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O eunciado afinal é este:

Pretende-se escrever um programa em C++, denominado "CentroComercial", para gerir um

centro comercial. O programa deve conter uma classe denominada CCentroComercial com a

seguinte estrutura:

Código

class LOJA {
public:
string nome;
string tipo;
int renda;
};
class CCentroComercial {

private:
vector<LOJA> lojas;
public:
void ler_lojas(const char *nome);
void imprimir_lojas(ostream &output, string tipo);
void imprimir_lojas(ostream &output);
void ordenarLojas ();
};

a) Implemente o membro-função:

Código

void CCentroComercial::ler_lojas(const char * filename)

que lê a informação de um conjunto de lojas de um ficheiro de texto para o vector lojas.

O ficheiro está organizado em blocos de 3 linhas, contendo o nome da loja, o tipo da loja e a

renda (euros/mês), por exemplo:

MacDonalds

Fast Food

1000

Zara

Roupa

5000

b) Implemente os membros-função

Código

void imprimir_lojas(ostream &output, string tipo);

Código

void imprimir_lojas(ostream &output);

//todas

que escreve no stream output os elementos do vector lojas, 1 por cada linha. Em cada linha os

campos de cada loja deverão ser separados por ponto-e-vírgula.

c) Implemente o membro-função

Código

void ordenarLojas ();

que ordene o vector lojas por renda através do método ordenação por selecção

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ja tentei de tudo

N ha maneira de isto funcionar...

#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include "CCentroComercial.h"
using namespace std;

void CCentroComercial::ler_lojas(const char *nome)
{
ifstream fich (nome);
      	if(!fich)
               cerr << "Erro ao abrir ficheiro\n";
      	else
      	{

      		lojas.resize(50);LOJA auxloja;string str,str2;int valor;
          	while(!fich.eof())
          	{

                            getline(fich,str);
			auxloja.nome=str;
                            getline(fich,str2);
			auxloja.tipo=str2;
		    fich >> valor;
			auxloja.renda=valor;
                            lojas.push_back(auxloja);

          	}
fich.close();


}
}

main()
{
CCentroComercial gaia;
gaia.ler_lojas("lojas.txt");





}

Help please!!! tenho mais 5 destes exercicios pa fazer este fim d semana...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Men... porque é que tudo aquilo que foi dito atras foi esquecido?

Estava quase a funcionar e derrepente alteraste tudo!!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora