• Nenhum resultado encontrado

PNA LISTA03 RESPOSTAS

N/A
N/A
Protected

Academic year: 2021

Share "PNA LISTA03 RESPOSTAS"

Copied!
8
0
0

Texto

(1)

Respostas dos Exercícios – LISTA 3

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

#include <string>

using

namespace std;

#include "capacitor.cpp"

int

main(void)

{

capacitor c1;

c1.printCap();

system(

"PAUSE"

);

return

0

;

}

Tipo: Nenhum Valor: 0

(b)

#include <iostream>

#include <string>

using

namespace std;

#include "capacitor.cpp"

int

main(void)

{

capacitor c1;

c1.valor =

10e-6

;

c1.printCap();

system(

"PAUSE"

);

return

0

;

}

Erro de compilação: Não é possível acessar ou modificar

uma variável privada diretamente...

(c)

#include <iostream>

#include <string>

using

namespace std;

#include "capacitor.cpp"

int

main(void)

{

capacitor c1;

c1.tipo =

"Silver Mica"

;

c1.printCap();

system(

"PAUSE"

);

return

0

;

}

(2)

(d) #include <iostream> #include <string> using namespace std; #include "capacitor.cpp" int main(void) { capacitor c[2]; c[0].tipo = "Eletrolitico"; c[1].tipo = "Tantalo"; c[0].setValor(2.2e-3); c[1].setValor(1e-6); c[0].setValor(c[1].getValor()); c[0].printCap(); system("PAUSE"); return 0; }

Tipo: Eletrolitico Valor: 1e-6

(e) #include <iostream> #include <string> using namespace std; #include "capacitor.cpp" int main(void) { capacitor c[2]; c[0].tipo = "Eletrolitico"; c[1].tipo = "Tantalo"; c[0].tipo.swap(c[1].tipo); c[0].setValor(-2.2e-3); c[1].setValor(1e-6); c[0].printCap(); system("PAUSE"); return 0; }

Tipo: Tantalo Valor: 0

(f) #include <iostream> #include <string> using namespace std; #include "capacitor.cpp" int main(void) { capacitor c[2]; c[0].tipo = "Eletrolitico"; c[0].tipo.erase(6); c[0].setValor(2.2e-3); c[1].setValor(1e-6); c[0].printCap(); system("PAUSE"); return 0; }

(3)

[2]

Modifique o construtor da classe capacitor de modo que seja possível inicializar o tipo e o

valor dos capacitores na criação do objeto (construtor parametrizado).

[3]

Crie dois métodos para a classe para calcular a associação de capacitores: Um método

deverá calcular a associação de dois capacitores em paralelo e o outro deverá calcular a

associação em série. Ambos os métodos deverão armazenar o resultado no atributo valor

de seu objeto. Além disso, o tipo da capacitância deverá ser nomeado de acordo com a

associação: Por exemplo, se a associação realizada tiver sido um associação série,

“associação série” deve ser atribuída ao atributo tipo.

class capacitor { public: string tipo; float getValor(void); void setValor(float v); void printCap(void);

void associaSerie(float aux1, float aux2); //exercício 03

void associaParalelo(float aux1, float aux2); //exercício 03

capacitor(string s, float f); //exercício 02

private: float valor; }; float capacitor::getValor(void) { return valor; } void capacitor::setValor(float v) { if(v >= 0) valor = v; } void capacitor::printCap(void) {

cout << "Tipo: " << tipo << " Valor: " << getValor() << endl; }

void capacitor::associaSerie(float aux1, float aux2) {

setValor( aux1*aux2/(aux1+aux2) ); tipo = "Associacao Serie";

}

void capacitor::associaParalelo(float aux1, float aux2) {

setValor( aux1+aux2 );

tipo = "Associacao Paralelo"; } capacitor::capacitor(string s, float f) { tipo = s; setValor(f); }

(4)

[4]

Escreva um programa que realiza a leitura de um arquivo de texto e troca todos os

caracteres pelo próximo caractere da tabela ASCII, e.g., se o texto lido for “abc de”, o

programa deverá escrever: “bcd!ef”. Logicamente, os caracteres de controle deverão ser

mantidos, bem como se deve haver um cuidado para que caracteres de controle não sejam

inseridos no arquivo de saída.

#include <iostream> #include <string> #include <fstream> using namespace std; int main(void) {

ifstream in01("teste.txt",ios::in); //arquivo de origem...

ofstream out01("teste_mod.txt",ios::out); //arquivo de destino... string aux;

int i;

if( in01.is_open() && in01.is_open() ) {

cout << "Realizando Conversao...\n"; while(1)

{

getline(in01,aux);

for(i = 0; i < aux.size(); i++) {

if( (aux[i] > 31)&&(aux[i] < 126) ) { aux[i] = aux[i] + 1; } } out01 << aux + "\n"; if(in01.eof()) break; } in01.close(); out01.close();

cout << "Conversao Realizada...\n"; }

else cout << "Problemas ao abrir os arquivos...\n"; system("PAUSE");

return 0; }

(5)

[5]

Crie uma classe que modela um circuito RLC série. A classe deverá conter como parâmetros

a resistência, a indutância e a capacitância do circuito. Faça métodos que retornem a

frequência de ressonância (ω

0

) e o fator de amortecimento (ζ) do sistema, sabendo que:

0

2

1

R

L

LC

ζ

ω

=

=

Faça um método que retorne uma string contendo o tipo da resposta. Sabe-se que:

Caso ζ > ω

0

, a resposta será SUPERAMORTECIDA, se ζ = ω

0

a resposta será CRITICAMENTE

AMORTECIDA. Finalmente, se ζ < ω

0

a resposta será SUB-AMORTECIDA.

Escreva um método que imprima na tela o valor das raízes da equação característica,

sabendo que:

TIPO DA RESPOSTA

Raízes

SUPERAMORTECIDO

2 2 1 0 2 2 2 0

s

s

ζ

ζ

ω

ζ

ζ

ω

= − +

= − −

CRITICAMENTE AMORTECIDA

s

1

=

s

2

= −

ζ

SUB-AMORTECIDA

2 2 1 0 2 2 2 0

s

j

s

j

ζ

ω

ζ

ζ

ω

ζ

= − +

= − −

#include <iostream> #include <string> #include <cmath> using namespace std; class RLC { public: float R; float C; float L; float calcFa(void); float calcWr(void); string tipoResposta(void); void printRaizes(void); }; float RLC::calcFa(void) { return (R/(2*L)); }

(6)

float RLC::calcWr(void) { return sqrt(1/(L*C)); } string RLC::tipoResposta(void) { float f,w; f = calcFa(); w = calcWr();

if(f > w) return "SUPERAMORTECIDA";

else if(f == w) return "CRITICAMENTE AMORTECIDA"; else return "SUBAMORTECIDA";

} void RLC::printRaizes(void) { float f,w; f = calcFa(); w = calcWr(); if(f > w) {

cout << "Raizes em: s1 = " << -f-sqrt(f*f-w*w); cout << " e s2 = " << -f+sqrt(f*f-w*w) << endl; } else { if(f == w) {

cout << "Raizes em: s1 = s2 =" << -f << endl; }

else {

cout << "Raizes em: s1 = " << -f << "-j" << sqrt(w*w-f*f) << endl; cout << "Raizes em: s2 = " << -f << "+j" << sqrt(w*w-f*f) << endl; } } } int main(void) { RLC ckt; ckt.R = 63.245550; ckt.L = 1e-3; ckt.C = 1e-6;

cout << ckt.tipoResposta() << endl; ckt.printRaizes();

system("PAUSE"); return 0;

(7)

[6]

Suponha que um software gere dados como mostrado abaixo:

Time I(R3) Vo

0.50000000E-05 0.744142E-02 0.342508E-01

0.10000000E-04 0.707656E-02 0.779501E-01

0.15000000E-04 0.671965E-02 0.119461E+00

(...)

0.39900000E-02 -0.505655E-02 0.117212E+03

0.39950000E-02 0.340384E-02 0.117207E+03

0.40000000E-02 0.992273E-02 0.117247E+03

Note que Time, I(R3) e Vo são variáveis, e os valores estão dispostos na matriz de números.

Você deseja, no entanto, gerar os gráficos no software MatLab. Assim sendo, é necessário que o

arquivo seja sensivelmente modificado, de modo a gerar um arquivo compatível com o MatLab. O

arquivo resultante deve ter o formato do arquivo abaixo:

nome_da_matriz = [...

0.50000000E-05 0.744142E-02 0.342508E-01;...

0.10000000E-04 0.707656E-02 0.779501E-01;...

0.15000000E-04 0.671965E-02 0.119461E+00;...

(...)

0.39900000E-02 -0.505655E-02 0.117212E+03;...

0.39950000E-02 0.340384E-02 0.117207E+03;...

0.40000000E-02 0.992273E-02 0.117247E+03;...

];

Salve o arquivo modificado com o mesmo nome do arquivo de origem, porém com a extensão

*.m.

Utilize o programa para converter o arquivo testando.txt (que está no site) para um arquivo

testando.m e plote no Matlab utilizando os comandos abaixo:

figure(1)

plot(nome_da_matriz(:,1), nome_da_matriz(:,3),'LineWidth',2) grid on

(8)

#include <iostream> #include <string> #include <fstream> using namespace std; int main(void) {

ifstream in01("testando.txt",ios::in); //arquivo de origem... ofstream out01("testando.m",ios::out | ios::trunc);

string aux; int i;

getline(in01,aux); //leio e descarto primeira linha...

out01 << "%%Este arquivo foi criado utilizando um programa...\n"; out01 << "matriz01 = [...\n";

if( in01.is_open() && in01.is_open() ) {

cout << "Iniciando Conversao de arquivos...\n"; while(1)

{

getline(in01,aux);

if(aux.size() > 1) out01 << aux + ";...\n";

//o if corrige um problema oriundo de um caractere de controle no final //do arquivo original... a linha será convertida se for uma das linhas //da matriz, (todas as linhas da matriz possuem mais de um caractere...) if(in01.eof()) break;

}

out01 << "];";

cout << "Conversao efetuada...\n"; in01.close();

out01.close(); }

else cout << "Problema ao abrir os arquivos...\n"; system("PAUSE");

return 0; }

Referências

Documentos relacionados

Desta maneira, vemos que Rousseau conclui do homem natural que este tende a viver sem se aglomerar em grupos, sociedades, e, mesmo quando começa a se agrupar, ou contar

Podem treinar tropas (fornecidas pelo cliente) ou levá-las para combate. Geralmente, organizam-se de forma ad-hoc, que respondem a solicitações de Estados; 2)

O caput do artigo 195 determina: “A seguridade social será financiada por toda a sociedade, de forma direta e indireta, nos termos da lei, mediante recursos provenientes

esta espécie foi encontrada em borda de mata ciliar, savana graminosa, savana parque e área de transição mata ciliar e savana.. Observações: Esta espécie ocorre

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

[r]

Caso haja empate entre as Equipes e não tenha ocorrido empate entre os combates dos Atletas, o sorteio para o combate extra será feito entre todas as categorias de peso disputadas.

responsabilidade devidamente assinado por ele e pelo atleta, no qual isenta a Federação Baiana de Judô de qualquer culpa por acidente ocorrido com seus atletas durante