• Nenhum resultado encontrado

PNA LISTA05 RESPOSTAS

N/A
N/A
Protected

Academic year: 2021

Share "PNA LISTA05 RESPOSTAS"

Copied!
8
0
0

Texto

(1)

RESPOSTAS – LISTA 5

Considerando que a classe lista_05, apresentada abaixo, tenha sua definição e sua

implementação salvas em um arquivo separado chamado lista_05.cpp. Desse modo, a inclusão de

#include "lista_05.cpp" irá incluir o código salvo em lista_05.cpp no arquivo do programa ao qual a

inclusão foi realizada. Para que isto funcione, lista_05.cpp deve estar no mesmo diretório do

programa no qual a inclusão foi realizada. (isto irá poupar espaço para os exercícios que virão).

class lista_05 { private: int num01; protected: int num02; int num03; public: string nome;

lista_05(void) { num01 = num02 = num03 = 0; }

lista_05 (int a, int b, int c) { num01 = a; num02 = b; num03 = c; } void set01(int a) { num01 = a; }

void set02(int a) { num02 = a; } void set03(int a) { num03 = a; } void imprime(void)

{

cout << "Nome: "<< nome; cout << " N01: " << num01; cout << " N02: " << num02;

cout << " N03: " << num03 << endl; }

friend lista_05 operator+(lista_05 var01, lista_05 var02) {

lista_05 temp; temp.nome = "SOMA";

temp.num01 = var01.num01 + var02.num01; temp.num02 = var01.num02 + var02.num02; temp.num03 = var01.num03 + var02.num03; return temp;

}

friend lista_05 operator+(int var01, lista_05 var02) {

lista_05 temp;

temp.nome = "SOMA int obj"; temp.num01 = var01 + var02.num01; temp.num02 = var01 + var02.num02; temp.num03 = var01 + var02.num03; return temp;

}

friend lista_05 operator+(lista_05 var01, int var02) {

lista_05 temp;

temp.nome = "SOMA obj int"; temp.num01 = var01.num01 + var02; temp.num02 = var01.num02 + var02;

(2)

[1]

Quais programas apresentarão algum erro ao serem compilados e porque? Se os

programas não possuírem erros, qual a saída apresentada na tela?

(a)

#include <iostream>

using namespace std; #include "lista_05.cpp" int main(void) { lista_05 z; z.nome = "TESTE"; z.imprime(); system("PAUSE"); return 0; }

(b)

#include <iostream> using namespace std; #include "lista_05.cpp" int main(void) {

lista_05 obj1(3, 4, 5), obj2(-1, 4, -3), obj3; obj3 = obj1+obj2; obj3.imprime(); system("PAUSE"); return 0; }

(c)

#include <iostream> using namespace std; #include "lista_05.cpp" int main(void) {

lista_05 obj1(3, 4, 5), obj2(-1, 4, -3), obj3; obj3 = 10+obj2; obj1 = 10+obj3; obj1.imprime(); system("PAUSE"); return 0; }

(3)

(d)

#include <iostream>

using namespace std;

#include "lista_05.cpp"

int main(void) {

lista_05 obj1(3, 4, 5), obj2(-1, 4, -3), obj3; obj3 = obj2+7.5; //atenção...

obj3.imprime(); system("PAUSE"); return 0;

}

(e)

#include <iostream>

using namespace std;

#include "lista_05.cpp"

class teste : public lista_05

{ public: int num04; string nome2; void imprimeTeste(void) {

cout << "Nome: "<< nome; cout << " N01: " << num01; cout << " N02: " << num02; cout << " N03: " << num03; cout << "Num04: " << num04;

cout << " Mais um nome: " << nome2 << endl; }

};

int main(void) {

teste aux;

aux.nome2 = "Complicado"; aux.num04 = 10; aux.set01(20); aux.set02(15); aux.set03(5); aux.imprimeTeste();

system("PAUSE"); return 0;

(4)

(f)

#include <iostream>

using namespace std;

#include "lista_05.cpp"

class teste : public lista_05

{ public: int num04; string nome2; void imprimeTeste(void) { imprime();

cout << "Num04: " << num04;

cout << " Mais um nome: " << nome2 << endl; }

}; int main(void) {

teste aux;

aux.nome2 = "Complicado"; aux.num04 = 10; aux.set01(20); aux.set02(15); aux.set03(5); aux.imprimeTeste();

system("PAUSE"); return 0;

(5)

[2]

Escreva uma função

que realiza a leitura dos atributos da classe lista_05. Necessariamente

a função deverá receber um parâmetro de referência para um objeto da classe lista_05.

#include <iostream>

using namespace std; #include "lista_05.cpp"

void leMembros(lista_05 &aux); //a função recebe parâmetro de referência... int main(void) { lista_05 obj; leMembros(obj); obj.imprime(); system("PAUSE"); return 0; }

void leMembros(lista_05 &aux) {

int a;

cout << "Digite nome: ";

fflush(stdin); //limpa buffer da entrada padrão... getline(cin, aux.nome);

cout << "Digite numero 01: "; cin >> a;

aux.set01(a);

cout << "Digite numero 02: "; cin >> a;

aux.set02(a);

cout << "Digite numero 03: "; cin >> a;

aux.set03(a); }

(6)

[3]

Escreva uma função que salva um objeto da classe lista_05 em um arquivo de texto. Tanto

o nome do arquivo como o objeto a ser salvo devem ser passados para a função como

parâmetros

.

#include <iostream> using namespace std; #include "lista_05.cpp"

bool salva(string arq, lista_05 aux); int main(void)

{

lista_05 a(7, 5, 9);

if(salva("arquivo.txt", a)) cout << "FOI" << endl; else cout << "Nao FOI\n";

system("PAUSE"); return 0;

}

bool salva(string arq, lista_05 aux) {

ofstream fluxo(arq.data(), ios::out); if(fluxo.is_open())

{

fluxo << "Nome: "<< aux.nome;

fluxo << " N01: " << aux.get01();//é necessário inserir funções de acesso fluxo << " N02: " << aux.get02();

fluxo << " N03: " << aux.get03() << endl; fluxo.close();

return true; }

else return false; }

É possível definir a função como uma função amiga da classe (friend). Desse modo, a função teria

livre acesso aos membros privados da classe.

[4]

Sobrecarregue o operador > na classe. Porém, a operação deste operador para a classe

deve retornar a diferença da soma de todos os números dos operandos. Por exemplo, se o

objeto a possuir num01 = 10, num02 = 15 e num03 = -5 e outro objeto b possuir

num01 = 5, num02 = 5 e num03 = 2, a expressão a > b deve retornar a diferença

(10+15-5) – (5+5+2).

friend int operator>(lista_05 var01, lista_05 var02) { //implementada dentro da classe lista_05

int tmp;

tmp = var01.num01 + var01.num02 + var01.num03; tmp -= var02.num01 + var02.num02 + var02.num03; return tmp;

(7)

[5]

Escreva uma função que gere um número randômico inteiro positivo ou negativo (50% de

chance de ser positivo e 50% de chance de ser negativo) de 0 até o número passado como

parâmetro da função. Por exemplo, quando a função for chamada e o parâmetro passado

para a função for 10, a função deverá gerar um número randômico entre -10 e 10,

incluindo estes. (lembre-se de incluir a biblioteca

cstdlib

para utilizar a função

rand

).

[6]

Sobrecarregue a função do exercício anterior para que a mesma gere um número em

ponto flutuante. Ao invés de passar um inteiro, deve-se passar um número

float

para a

função. O funcionamento da função é idêntico à função desenvolvida no exercício anterior.

#include <iostream>

#include <cstdlib> using namespace std;

int gera_pn(int max); //versão int

float gera_pn(float max); //versão float int main(void) { int i, n = 10; float n2 = 10; cout.precision(4); for(i = 0; i < 100; i++) { cout.width(8);

cout << gera_pn(n2); //chama versão float (pois n2 é float) cout.width(8);

cout << gera_pn(n); //chama versão int (pois n é int) }

system("PAUSE"); return 0;

}

int gera_pn(int max) {

int num;

num = rand()%(max+1); if(rand()%2) return -num; return num;

}

float gera_pn(float max) {

//essa função gera um numero 100x maior e divide o número por 100... //desse modo o numero resultante terá uma parte fracionária

float num;

num = (rand()%(100*(int)max + 1))/100.0; if(rand()%2) return -num;

return num; }

(8)

[7]

Crie uma classe base que represente um conversor CC-CC genérico operando com

modulação PWM. A classe deverá possuir como atributos a frequência de chaveamento do

interruptor, a razão cíclica, a potência nominal do conversor, o seu rendimento esperado e

a tensão de entrada. Crie métodos para: Obter a potência de saída; Obter a corrente de

entrada do conversor. Escreva um método para imprimir os dados básicos do conversor na

tela.

[8]

Derive da classe base uma classe que modele o comportamento de um conversor

redutor-elevador no modo de condução contínuo. A classe deve possuir os componentes

do conversor como atributos: Indutância, Capacitância e Carga. A classe deverá possuir

uma função para calcular a tensão de saída (Vo = Vi*(D/(1-D))), bem como para calcular a

corrente de saída (utilizando a potência de saída).

#include <iostream> using namespace std; class cc_converter { public: float razao; float frequencia; float potencia; float rendimento; float tensao_entrada;

float potSaida(void) { return potencia*rendimento; } float corEntrada(void) { return potencia/tensao_entrada; } void print(void)

{

cout << "Potencia de Entrada: " << potencia << endl; cout << "Rendimento: " << rendimento << endl; cout << "Potencia de Saida: " << potSaida() << endl; cout << "Frequencia: " << frequencia << endl; cout << "Razao ciclica: " << razao << endl;

cout << "Tensao de entrada: " << tensao_entrada << endl; cout << "Corrente de entrada: " << corEntrada() << endl; }

};

class buck_boost : public cc_converter { public: float L; float C; float R; float calcTensaoSaida(void) {

return tensao_entrada*(razao/(1-razao)); } float corSaida(void) { return potSaida()/calcTensaoSaida(); } }; int main(void) { buck_boost conv; conv.frequencia = 20000; conv.tensao_entrada = 10; conv.razao = 0.8;

cout << "Tensao de saida: " << conv.calcTensaoSaida() << endl; system("PAUSE");

return 0; }

Referências

Documentos relacionados

Tais restrições, sendo convencionais, operam efeitos entre o loteador e os que vão construir no bairro, enquanto não colidentes com a legislação urbanística ordenadora da cidade e

No entanto, em uma linguagem mais formal, como a exigida em muitos textos escritos, estes pronomes são substituídos por outros, como os oblíquos.. Colocação dos pronomes

Detectadas as baixas condições socioeconômicas e sanitárias do Município de Cuité, bem como a carência de informação por parte da população de como prevenir

▪ Quanto a solução para os conflitos entre os pais e a escola, houve um grande número de pais que não responderam, o que pode nos revelar que os pais não fizeram

Você não deve tomar BISOLTUSSIN se tiver alergia à substância ativa ou a outros componentes da fórmula; em tratamento concomitante ou tratamento nas 2 semanas anteriores com

O termo extrusão do núcleo pulposo aguda e não compressiva (Enpanc) é usado aqui, pois descreve as principais características da doença e ajuda a

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

Feitiço do Segredo: deposita um segredo numa pessoa de confiança, essa pessoa fica deposita um segredo numa pessoa de confiança, essa pessoa fica sendo o &#34;Fiel do sendo o