• Nenhum resultado encontrado

RESPOSTAS DOS EXERCÍCIOS – LISTA 1

N/A
N/A
Protected

Academic year: 2019

Share "RESPOSTAS DOS EXERCÍCIOS – LISTA 1"

Copied!
10
0
0

Texto

(1)

RESPOSTAS DOS EXERCÍCIOS – LISTA 1

[1]

Nos programas abaixo, qual será a saída mostrada na tela ao se executar o programa? Não é necessário incluir a parte onde o system(“PAUSE”) solicita que se pressione qualquer tecla para continuar...

(a) #include <stdio.h>

#include <stdlib.h> #include <math.h>

int main(void) {

int i = 10; float aux = 1; do

{

aux = pow(aux,i)*sqrt(i); i--;

}while(i != 3); printf("%d\n",i); system("PAUSE"); return 0;

}

(b) #include <stdio.h>

#include <stdlib.h>

int main(void) {

int i,j,aux=0;

for(i=0,j=10;i < 10;i++,j--) {

aux += i*j; }

printf("%d\n",aux); system("PAUSE"); return 0;

}

(c) #include <stdio.h>

#include <stdlib.h>

int main(void) {

int i,j,aux=0;

for(i=0,j=10;i < 10;i++,j--) {

aux += i*j; if(j == 6) break; }

printf("%d\n",aux); system("PAUSE"); return 0;

(2)

(d) #include <stdio.h> #include <stdlib.h>

int main(void) {

int i,j,aux=0;

for(i=0,j=10;i < 10;i++,j--) {

if(j == 6) continue; aux += i*j;

}

printf("%d\n",aux); system("PAUSE"); return 0;

}

(e) #include <stdio.h>

#include <stdlib.h>

int main(void) {

int i,aux=0;

for(i=0;i < 10;i++) {

((i%3)!=0)?(aux = aux + i):(aux = aux - i); }

printf("%d\n",aux); system("PAUSE"); return 0;

}

[2]

Considerando apenas operações com inteiros, realize as operações que seguem:

a) 5 / 3 = 1

b) (9 > 6) = 1

c) (3 > 8) = 0

d) 3 / 2 = 1

e) (2 > 8)||(9 != 1) = 1

f) (543 && 1) = 1

g) 34 % 2 = 0

h) 43 % 2 = 1

i) (56 / 34) = 1

j) ~(2 < 6) = 0

k) 99 % 50 = 49

l) 342 % 100 = 42

[3]

Considere um grupo de variáveis declaradas e com os valores atribuídos como segue:

float y,f; int a,b,c; a = 2; b = 30; c = 5; f = 0.33;

Qual será o valor final atribuído a y nas seguintes expressões:

a)

y = (

float

)a/c+c*f;

y = 2.05

b)

y = f*(c/a);

y = 0.66

(3)

[4]

Faça uma função que calcula e retorna o valor da reatância de um indutor (X

L

). A função

deverá receber a indutância L (em Henrry) e a frequência f (em Hz) e retornar a reatância

em Ohms.

2

L

X

=

ω

L

=

π

f L

float calcReat(float L, float f) {

return 2*M_PI*f*L; //M_PI está definido em math.h

}

[5]

Escreva um programa que calcula a reatância de um indutor para várias frequências. O

programa deverá variar a frequência de 1

μHz at

é 1MHz de forma a formar as chamadas

décadas de frequência (10

-6

, 10

-5

, 10

-4

, 10

-3

, 10

-2

, 10

-1

, 10

-0

, 10

1

, 10

2

, 10

3

, 10

4

, 10

5

, 10

6

). O

programa deverá ler do teclado a indutância e imprimir a frequência e a respectiva

reatância para todos os casos.

#include <stdio.h> #include <stdlib.h> #include <math.h>

float calcReat(float L, float f) {

return 2*M_PI*f*L; }

int main(void) {

int i;

float Xl, freq, ind;

printf("Digite Indutancia: ");

scanf("%f",&ind); //efetua leitura da indutância

for (i = -6;i < 7;i++) {

freq = pow(10,i); //frequência é 10 na i...

Xl = calcReat(ind,freq); //Calculo a reatância...

printf("f = %.1e Xl = %.5e\n",freq,Xl); }

system("PAUSE"); return 0;

(4)

[6]

Faça uma função que substitui todos os valores ímpares de uma matriz por zeros. A função

deverá retornar o número de valores ímpares encontrados. Use, obrigatoriamente

#include <stdio.h>

,

ponteiros para percorrer a matriz. A função deverá receber as dimensões da matriz como

parâmetros da função para poder percorrê-la evitando ultrapassar seus limites.

#include <stdlib.h> #include <math.h>

#define NC 2 #define NL 3

//esta função considera que a matriz tem exatamente o tamanho //da matriz declarada... para um programa que considera matrizes //com tamanho diferente da matriz declarada ver arquivo:

//PNA_DUVIDA_MATRIZ

int substitui(int *p, int l, int c) {

int i,cont = 0;

for(i = 0;i < l*c;i++) //O for percorre n*l elementos da matriz

{

if(*p % 2) {

*p = 0; //zera o valor apontado

cont++; //incrementa contador

} p++; }

return cont; //retorna contador

}

//Programa para teste da função

int main(void) {

int mat[NL][NC],i,j,trocas; for(i = 0;i < NL; i++) {

for (j = 0;j < NC; j++) {

printf("Digite o termo (%d,%d) da matriz: ",i,j); scanf("%d",&mat[i][j]); }

}

trocas = substitui(&mat[0][0],NL,NC);

for(i = 0;i < NL; i++) {

for (j = 0;j < NC; j++) {

printf("%5d",mat[i][j]); }

putchar('\n'); }

printf("Foram realizadas %d trocas\n",trocas); system("PAUSE");

(5)

[7]

Faça uma função que retorne uma string contendo a extensão de um arquivo. A função

deverá receber uma string com o nome inteiro do arquivo (incluindo extensão). O

programa deverá localizar o último caractere ponto da string e retornar apenas a string

com a extensão do arquivo. Por exemplo. Se o nome do arquivo for: super.mega.tabela.xls

a função deverá retornar apenas o endereço para a string xls.

#include <stdio.h> #include <stdlib.h>

#define MAX 30

char *getExt(char *p) //esta função retorna um ponteiro (endereço)

{

char *c = NULL; //guardará o endereço da letra após o ponto.

while(*p != '\0') //enquanto não chegar ao final da string...

{

if(*p == '.') c = p + 1; //se achar um ponto, põe em c o end.

p++; //do próximo caractere em c...

}

return c; //se não achar um ponto retorna NULL (ver declaração...)

}

int main(void) {

char str[30],*s; while(1)

{

printf("Digite nome de arquivo de no maximo %d caracteres:\n",MAX); gets(str);

s = getExt(&str[0]); //chama função e poe endereço retornado em s

if(s == NULL) printf("Arquivo sem extensao...\n"); else

{

printf("A extensao e': ");

puts(s); //como str era string, a função imprime a string apenas

} //a partir do endereço retornado pela função

}

system("PAUSE"); return 0;

(6)

/* Este programa faz a mesma coisa, porém possui algumas verificações adicionais como opção para fechar o programa e testes de tamanho da string para evitar problemas... */

#include <stdio.h> #include <stdlib.h> #include <string.h>

#define MAX 30

char *getExt(char *p) {

char *c = NULL; //guardará o endereço da letra após o ponto.

while(*p != '\0') //enquanto não chegar ao final da string...

{

if(*p == '.') c = p + 1; //se achar um ponto, coloca em c o end.

p++; //do próximo caractere em c...

}

return c; //se não achar um ponto retorna NULL (ver declaração...)

}

int main(void) {

char str[30],*s; while(1)

{ do {

printf("Digite nome de arquivo de no maximo %d caracteres. ",MAX); printf("(Digite exit para encerrar o programa)\n",MAX);

gets(str);

if(!strcmp(str,"exit")) return 0;

if(strlen(str) == 0) printf("Ao menos digite algo...\n"); else if(strlen(str) > MAX) printf("String muito grande... \n");

else break; //sai do loop infinito se o tamanho da string estiver certo

}while(1); //senão volta a solicitar que a string seja digitada

s = getExt(&str[0]); //chama função e poe endereço retornado em s

if(s == NULL) printf("Arquivo sem extensao...\n"); else

{

printf("A extensao e': ");

puts(s); //como str era string, a função imprime a string apenas

} //a partir do endereço retornado pela função

}

system("PAUSE"); return 0;

(7)

[8]

Amplificadores de som Classe A são os que possuem a melhor qualidade por operarem

sempre na região linear. Quando implementados com amplificadores operacionais,

normalmente consegue-se uma excursão total que equivale a aproximadamente a tensão

de alimentação menos 3 volts. Assim sendo, faça uma função que retorne a potência de

um amplificador classe A, sabendo que:

3V

2

g pk

V

V

=

Onde V

pk

é a tensão de pico da onda na máxima excursão e V

g

é a tensão total de

alimentação.

A potência eficaz pode ser obtida pela relação abaixo:

2

2

2

2

pk

pk RMS

V

V

P

R

R

=

=

Onde R é a resistência do alto-falante.

A função deverá receber como parâmetros a tensão de alimentação do amplificador

Classe A e a resistência do alto-falante utilizado. Faça um programa que teste a função.

#include <stdio.h> #include <stdlib.h> #include <math.h>

float Prms(float Vg, float R) {

float Vpk;

Vpk = (Vg - 3)/2; //calculo Vpk

return pow(Vpk,2)/(2*R); //retorno Prms

}

//simples programa de teste...

int main(void) {

printf("Potencia RMS e' %f Watts\n",Prms(50, 4)); //lembre-se de que é possível

system("PAUSE"); //utilizar diretamente a func.

return 0; //no comando printf...

(8)

[9]

O conversor CC-CC Buck-Boost é amplamente utilizado em fontes chaveadas.

Esse conversor possui uma função de transferência estática que depende do modo de operação do conversor

(Modo de Condução Contínuo - MCC ou Modo de Condução Descontínuo - MCD). Abaixo são apresentadas as

possíveis funções de transferência estática para o conversor Buck-Boost:

1

Para o MCC 1

Para o MCD o i o i V D G V D V D G V D  = =     = =  Onde: 1

2L f D

R

⋅ ⋅ =

G é o ganho estático, D é a razão cíclica, Vo a tensão de saída, Vi é a tensão de entrada do conversor. L é o

valor da indutância deste conversor. R é a resistência de carga e f é a frequência de comutação. O modo de

condução pode facilmente ser obtido com o cálculo de D1. Se o valor de D1 somado com D for maior que 1, a

condução é contínua, e a primeira relação do ganho estático é válida. Se a soma D + D1 for menor do que 1, a

condução é descontínua, e vale a segunda relação de ganho.

Faça uma função que calcula e retorna o ganho estático G do conversor CC-CC Buck-Boost. A função deverá

receber como parâmetros a razão cíclica D, a indutância L, a resistência de carga R e a frequência de

comutação f.

Faça um programa para testar a função. O programa deverá ler do teclado Vi, f, L e R. Varie a razão cíclica de

0 até 1 com o número de passos que desejar. Imprima o valor da tensão de entrada, o valor da razão cíclica, o

valor do ganho estático e o valor da tensão de saída para cada passo dado pela razão cíclica.

#include <stdio.h> #include <stdlib.h> #include <math.h>

#define PASSOS 20

float calcG(float D, float L, float R, float f) {

float D1;

D1 = sqrt((2*L*f)/R); //calculo D1

if((D1+D) > 1) return (D/(1-D)); return D/D1;

}

int main(void) {

float vi,ind,freq,res,razao_cic,G;

printf("Digite a tensao de entrada (Vi): ");

scanf("%f",&vi); //vi pode ser praticamente qualquer valor

printf("Digite a indutancia (L): ");

scanf("%f",&ind); //geralmente entre 1e-9 a 1e-1

printf("Digite a frequencia de comutacao (f): "); scanf("%f",&freq); //geralmente entre 1e4 a 5e4

printf("Digite a resistencia de carga (R): ");

scanf("%f",&res); //em princípio pode ser qualquer valor...

for(razao_cic = 0; razao_cic <= 1; razao_cic += 1.0/PASSOS)

{ //No 1.0/PASSOS o .0 é para indicar que quero um resultado em ponto //flutuante para a razão cíclica

G = calcG(razao_cic,ind,res,freq);

printf("Vi = %.3f D = %.3f G = %.3f Vo = G*Vi = %.3f\n", vi, razao_cic, G, G*vi); }

system("PAUSE"); return 0;

(9)

[10]

Crie uma estrutura de dados que represente um resistor (deverá possuir valor, tolerância e potência). Crie uma função que indique a máxima tensão (nominal) que pode ser aplicada ao resistor. Crie uma função que

indique a máxima corrente (nominal) que pode ser aplicada ao resistor. Crie uma função que retorna o valor

máximo possível para a resistência do resistor. Crie uma função que retorna o valor mínimo possível de

resistência. As funções deverão receber, logicamente, uma variável do tipo igual ao da estrutura criada.

#include <stdio.h> #include <stdlib.h> #include <math.h>

struct resistor //crio a estrutura de dados

{

float val,tol,pot; };

typedef struct resistor res; //utilizo typedef para facilitar minha vida

float calcMaxCor(res aux); float calcMaxTen(res aux); float calcMaxRes(res aux); float calcMinRes(res aux);

int main(void) {

res r; //aqui crio uma variável para testar as funções.

float var; r.val = 10000; r.tol = 0.05; r.pot = 1.0/4;

printf("Dados: R = %.3f +- %.2f%%, %.3fW\n",r.val,r.tol*100,r.pot); //aqui eu imprimo a tolerancia em %. para mostrat % utiliza-se %%.

var = calcMaxCor(r);

printf("Corrente Maxima: %.4fA\n",var); var = calcMaxTen(r);

printf("Tensao Maxima: %.4fV\n",var); var = calcMaxRes(r);

printf("Resistencia Maxima: %.4f Ohms\n",var); var = calcMinRes(r);

printf("Resistencia Minima: %.4f Ohms\n",var); system("PAUSE"); return 0;

}

float calcMaxCor(res aux) {

return sqrt(aux.pot/aux.val); }

float calcMaxTen(res aux) {

return sqrt(aux.pot*aux.val); }

float calcMaxRes(res aux) {

return aux.val*(1+aux.tol); }

float calcMinRes(res aux) {

(10)

Referências

Documentos relacionados

Áreas com indícios de degradação ambiental solo exposto no Assentamento Fazenda Cajueiro A e no Assentamento Nossa Senhora do Carmo B, localizados, respectivamente, no Município de

A curva em azul é referente ao ajuste fornecido pelo modelo de von Bertalany, a curva em vermelho refere-se ao ajuste fornecido pelos valores calculados Lt, dados pela equação

Os estudos sobre diferenciais de salários são explicados por alguns fatores que revelam a existência da relação entre as características pessoais produtivas educação,

Nessa situação temos claramente a relação de tecnovívio apresentado por Dubatti (2012) operando, visto que nessa experiência ambos os atores tra- çam um diálogo que não se dá

Portanto, mesmo percebendo a presença da música em diferentes situações no ambiente de educação infantil, percebe-se que as atividades relacionadas ao fazer musical ainda são

Esta pesquisa discorre de uma situação pontual recorrente de um processo produtivo, onde se verifica as técnicas padronizadas e estudo dos indicadores em uma observação sistêmica

la aplicación de políticas proteccionistas (salvaguardias), recuperación de la empresa pública, capacitación de mano de obra, mayor inversión en investigación en ciencias

Os níveis atingidos por cada sujeito na compreensão do oral, na leitura, na expressão oral, na expressão escrita e no conhecimento explícito determinam o seu nível de mestria