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
;
}
(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; }
[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]
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]
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 ζ = ω
0a resposta será CRITICAMENTE
AMORTECIDA. Finalmente, se ζ < ω
0a 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 0s
s
ζ
ζ
ω
ζ
ζ
ω
= − +
−
= − −
−
CRITICAMENTE AMORTECIDA
s
1=
s
2= −
ζ
SUB-AMORTECIDA
2 2 1 0 2 2 2 0s
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)); }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;
[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
#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; }