Projeto desenvolvido na aula de sexta-feira 22/02/2008.
Foi testado com o compilador GCC no ambiente Linux e com o Borland C Compiler v.5.5 em ambiente Windows XP.
Download do BCC32 free: http://www.codegear.com/downloads/free/cppbuilder
Notar alguns detalhes no código:
1) ao declarar a "visibilidade" do atributo/método, usar ":" como no exemplo:
private: int atributo;
public: float Metodo( int, int, int );
2) usando a notação '->' para referir-se a um atributo/método desse objeto, é requerido declará-lo com alocação dinâmica de memória, através de ponteiros, como no exemplo:
Veiculo *meriva; // declaração
Veiculo *civic; // declaração
meriva = new Veiculo( ); // instanciamento
civic = new Veiculo( ); // instanciamento
meriva->cor = 1; // fixar valor em atributo do objeto
civic->cor = 2; // fixar valor em atributo do objeto
delete meriva; // destruição do objeto
delete civic; // destruição do objeto
3) para usar a outra forma de referir-se a um atributo/método com a notação ".", é necessário declará-lo com alocação estática de memória:
Veiculo meriva = Veiculo( ); // declaração e instanciamento
Veiculo civic = Veiculo( ); // declaração e instanciamento
meriva.cor = 1; // fixar valor em atributo do objeto
civic.cor = 2; // fixar valor em atributo do objeto
/* Observar: não requer o comando "delete", já que a alocação é estática, e sendo assim, somente quando o escopo do código encerrar é que serão liberados os recursos de memória para objetos estáticos; */
A seguir, códigos em C++ para:
Aplicativo.cpp
Estatisticas.h
Estatisticas.cpp
//---------<Aplicativo.cpp>----------------------------------------------
// Aplicativo.cpp
/*
CEFET-SP :: TADS :: LG2
Prof. Josimar Nunes de Oliveira - 2008
0) Ambiente (GNU/Linux :: Fedora 7):
# c++ -v
Using built-in specs.
Target: x86_64-redhat-linux
Configured with: ../configure
--prefix=/usr
--mandir=/usr/share/man
--infodir=/usr/share/info
--enable-shared
--enable-threads=posix
--enable-checking=release
--with-system-zlib
--enable-__cxa_atexit
--disable-libunwind-exceptions
--enable-languages=c,c++,objc,obj-c++,java,fortran,ada
--enable-java-awt=gtk
--disable-dssi
--enable-plugin
--with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre
--enable-libgcj-multifile
--enable-java-maintainer-mode
--with-ecj-jar=/usr/share/java/eclipse-ecj.jar
--with-cpu=generic
--host=x86_64-redhat-linux
Thread model: posix
gcc version 4.1.2 20070925 (Red Hat 4.1.2-27)
1) Arquivos fontes:
Aplicativo.cpp
Estatisticas.h
Estatiscas.cpp
2) Compilação & Linkagem:
# c++ Aplicativo.cpp Estaticas.cpp -o Apl
3) Arquivo binário executável:
./Apl
4) Arquivo de dados:
Dados.txt
5) Execução do programa binário:
# ./Apl < Dados.txt
Observação: o programa utiliza os métodos 'std::cin' e 'std::cout' que acessam respectivamente a entrada e a saída padrão do sistema; logo, usando o redirecionador da entrada padrão '<', os dados serão lidos do arquivo, facilitando os testes.
6) Ambiente MS Windows XP/SP2:
Compilador: BORLAND C COMPILER 5.5
Comando: bcc32 Aplicativo.cpp Estatisticas.cpp
Executável: Aplicativo.exe
Teste: Aplicativo < Dados.txt
*/
#include "Estatisticas.h"
#include <iostream>
using std::cin;
using std::cout;
// declaração global de objetos:
Estatisticas *ba;
int main( )
{
// declaração local de variáveis:
int uf, valor;
bool fim_arq = false;
// declaração local de objetos:
Estatisticas *sp;
Estatisticas *rj;
Estatisticas *mg;
Estatisticas *es;
// instanciamento de objetos:
sp = new Estatisticas( );
rj = new Estatisticas( );
mg = new Estatisticas( );
es = new Estatisticas( );
while ( ! fim_arq )
{
// Ler dados da entrada padrão (teclado):
cin >> uf;
cin >> valor;
// Executar método 'Acumular( int )' para o respectivo objeto:
switch ( uf )
{
case 1:
sp->Acumular( valor ); // SP
break;
case 2:
rj->Acumular( valor ); // RJ
break;
case 3:
mg->Acumular( valor ); // MG
break;
case 4:
es->Acumular( valor ); // ES
break;
case 0:
fim_arq = true; // fim de arquivo
break;
}
}
// Executar método 'Medias()' de cada objeto:
sp->Medias( );
rj->Medias( );
mg->Medias( );
es->Medias( );
// Imprimir atributo 'media' de cada objeto:
cout << "\n\n";
cout << "\nSP: " << sp->media;
cout << "\nRJ: " << rj->media;
cout << "\nMG: " << mg->media;
cout << "\nES: " << es->media;
cout << "\n\n";
// Destruir objetos:
delete sp;
delete rj;
delete mg;
delete es;
// fim do aplicativo:
return 0;
}
//---------</Aplicativo.cpp>---------------------------------------------
//---------<Estatisticas.h>----------------------------------------------
// Estatisticas.h
class Estatisticas {
public: int cnt;
public: int somatoria;
public: int media;
Estatisticas( ); // Construtor
public: void Acumular( int );
public: void Medias( );
~Estatisticas( ); // Destrutor
};
//---------</Estatisticas.h>---------------------------------------------
//---------<Estatisticas.cpp>--------------------------------------------
// Estatisticas.cpp
#include "Estatisticas.h"
Estatisticas :: Estatisticas( ) // Construtor
{
cnt = 0;
somatoria = 0;
media = 0;
}
void Estatisticas :: Acumular( int a )
{
cnt ++;
somatoria += a;
return;
}
void Estatisticas :: Medias( )
{
media = somatoria / cnt;
return;
}
Estatisticas :: ~Estatisticas( ) // Destrutor
{
}
//---------</Estatisticas.cpp>-------------------------------------------
//---------<Dados.txt>---------------------------------------------------
1 2000
2 4000
3 3500
4 3600
5 1200
3 500
2 800
2 3800
4 1250
5 540
1 6500
3 420
1 8700
3 9500
2 1240
1 370
5 850
3 1230
2 3290
1 4320
0 0
//---------</Dados.txt>--------------------------------------------------
//---------<Resultado_Linux>---------------------------------------------
[root@localhost projetos_lg2]# ./Apl < Dados.txt
SP: 4378
RJ: 2626
MG: 3030
ES: 2425
[root@localhost projetos_lg2]#
//---------</Resultado_Linux>--------------------------------------------
//---------<Resultado_Windows_XP>----------------------------------------
C:\projetos_lg2>Aplicativo.exe < Dados.txt
SP: 4378
RJ: 2626
MG: 3030
ES: 2425
C:\projetos_lg2>
//---------</Resultado_Windows_XP>---------------------------------------
Nenhum comentário:
Postar um comentário