Pesquisar neste blog

31/03/2020

LCD com PIC 16F877A CCS C

Objetivo: Exibir em um LCD o incremento e decremento de 2 variáveis, o contador deverá ser reiniciado por um imput.


Código feito em CCS C Compiler

#include <LCD2.h>
#include <lcd.c>

int x = 0, y = 0;
void main(){

   lcd_init();

   while(TRUE){
      printf(lcd_putc, "\fX= [%d] Y= [%d]",x, y);
      delay_ms(500);
      
      x++;
      y--;
      if(input(pin_C0) == true){
         x = y = 0;
      }
   }

}

30/03/2020

Comandos no software MySQL

TRUNCATE

truncate table cursos; // limpa toda tabela de cursos

SELECT

select ano, count(*) from cursos where ano >2015  group by carga having carga > (select avg(carga) from cursos);/*
seleciona a  carga e o total de horas dos cursos onde o onde o ano seja acima de 2015 agrupa por carga, mas não exibe quem tem
carga baixa */

select ano, count(*) from cursos where totalaulas >30 group by ano > 2015 order by count(*) desc;
select carga, count(nome) from cursos group by carga having count(nome) > 1;/*exibe carga e agrupa onde somente tem contador maior que 1*/

select carga, count(nome) from cursos where totalaulas >= 1000 group by totalaulas order by totalaulas;

select carga, totalaulas from cursos where totalaulas >=1000 group by carga;

select carga, totalaulas from cursos where totalaulas >=1000 group by carga;/*exibe carga e totalaulas agrupados por carga*/

select totalaulas, count(*) from cursos group by totalaulas order by totalaulas;/*agrupa e ordena e faz a contagem dos registros cursos*/

select totalaulas from cursos group by totalaulas order by totalaulas;/*agrupa e ordena por totalaulas*/

select avg(totalaulas) from cursos where ano = '2020';/*faz a media onde o ano = 2020*/
select sum(totalaulas) from cursos where ano = '2020';/*faz a soma onde o ano = 2020*/
select min(totalaulas) from cursos;/*seleciona o minimo de totalaulas na tab cursos*/
select max(totalaulas) from cursos where ano = '2020';
select *from cursos where ano = '2019';
select max(carga) from cursos order by carga;/*seleciona onde tem a maior carga*/

select count(*) from cursos where carga > 250;/*conta quantas linhas tem de cursos onde seja >250*/

select count(*) from cursos;/*conta quantas linhas tem de cursos*/

select carga from cursos order by carga;/*seleciona tudo de carga na tabela cursos e ordena*/

select distinct ano from cursos;/*pegar todos os que são diferentes*/
select carga from cursos;/*seleciona somente as cargas de cursos*/
select *from cursos where nome like 'Ph__%';/*seleciona todos os campos
da tabela cursos onde o nome tenha PH ou nada e tenha qualquer coisa no final*/

select *from cursos where nome like 'PH%p%';/*seleciona todos os campos
da tabela cursos onde o nome tenha PH ou nada e termine com p*/

select *from cursos where nome not like '%A%';/*seleciona todos os campos
da tabela cursos onde o nome não tenha A em qualquer lugar*/

select *from cursos where nome like '%A%';/*seleciona todos os campos
da tabela cursos onde o nome tenha A em qualquer lugar*/

select *from cursos where nome like '%a';/*seleciona todos os campos
da tabela cursos onde o nome se pareça e termina com P seguida de qualquer*/

select *from cursos where nome like 'p%';/*seleciona todos os campos
da tabela cursos onde o nome se pareça e começa com P seguida de qualquer*/

select *from cursos where carga > 35 and totalaulas  < 2000;
select nome, descricao, ano from cursos where ano <> 2020 order by ano, nome;/*seleciona tudo que seja diferente de 2020 e ordena por ano e nome*/
select nome, descricao, ano from cursos where ano in (2013, 2020) order by ano;/*seleciona tudo onde o ano seja de 2013 e 2020*/
select nome, ano from cursos where ano between 2013 and 2020 order by ano desc, nome asc;/*seleciona tudo onde o ano seja entre 2013 e 2020*/
select nome, ano from cursos where ano between 2013 and 2020;/*seleciona tudo onde o ano seja entre 2013 e 2020*/
select ano, nome, carga from cursos order by descricao;/*seleciona tudo de ano, nome, carga e ordena por descricao*/
select nome, descricao, ano from cursos where ano <= 2015 order by ano;/*seleciona tudo da tabela cursos
onde o ano seja menor que 2015 em ordem crescente*/

select *from cursos;

insert into cursos(nome, descricao, carga, totalaulas, ano)values
('HTML','Linguagem HTML5','2250','1040','2021'),
('Pyton','Linguagem Pyton','1440','1070','2013');

insert into cursos(nome, descricao, carga, totalaulas, ano)values
('JAVA','Linguagem em Java','250','100','2021'),
('Portugol','Linguagem português','1120','450','2013'),
('JavaSript','Linguagem JavaSript','1440','900','2021'),
('JAVADoc','Linguagem Java','2570','1040','2021'),
('C/C++','Linguagem em C','2250','1070','2020'),
('SQL','Linguagem em SQL','5000','2500','2019');

insert into cursos(nome, descricao, carga, totalaulas, ano)values
('PHP','Linguagem PHP','160','40','2020');

select nome, carga, ano from cursos order by ano;/*seleciona somente nome, carga, ano e ordena por ano*/
select *from cursos;
alter table cursos add primary key (idcurso);/*adiciona chave primaria em idcurso*/

alter table cursos add column idcurso int first; /*adiciona idcurso na primeria coluna*/
alter table pessoas modify column nome varchar(30) not null default '';/*modifica a coluna nome para 30 caracter*/
alter table gafanhotos rename to pessoas;/*renomeia o nome da tabela*/

create table if not exists cursos (/*constroi uma nova tabela se nao existir o nome cursos*/
nome varchar(30) not null unique,  /*não pode ser nulo e valor único*/
descricao text,/*textos longos*/
carga int unsigned,/*sem sinal, nao negativo*/
totalaulas int,
ano year default '2020'/*se nao definir será 2020*/
) DEFAULT CHARSET = utf8;/*padrão Brasil*/

desc gafanhotos;

alter table pessoas rename to gafanhotos;/*renomeia o nome da tabela*/
alter table pessoas change column profissao prof varchar(20);/*renomeia para prof*/
alter table pessoas add codigo int first;/*adc na primeira posição*/
alter table pessoas add column profissao varchar(10) after nome;/*apos o nome adiciona profissao*/
alter table pessoas drop column profissao; /*exclui coluna profissão*/
alter table pessoas add column profissao varchar(20); /*adiciona coluna profissão do tipo varchar na ultima coluna*/
select *from pessoas; /*seleciona tudo de pessoas*/

describe pessoas;

/*alimentando a tabela*/
insert into pessoas
(id, nome, nascimento, sexo, peso, altura, nacionalidade)values
(default,'CARLOS','1900-01-02','M','78.00','1.83','Brasil'),
(default,'JULIA','1910-01-12','F','78.00','1.83','EUA');

create table pessoas (
id int not null auto_increment,
nome varchar(30),
nascimento date,
sexo enum('M','F'),
peso decimal(5,2),
altura decimal(5,2),
nacionalidade varchar(20) default 'Brasil',
PRIMARY KEY (id)
)default charset = utf8; /*padrão Brasil caso não seja especificado */

drop table pessoas; /*exclui tabela pessoas*/

use cadastro;
drop database meubanco;

CREATE

create database meubanco;
create database cadastro
default character set utf8
default collate utf8_general_ci;/*padrão Brasil*/

drop database cadastro; /*exclui banco de dados cadastro*/

describe pessoas; /*descreve tabela pessoas*/

create table pessoas (
nome varchar(20),/*String 20 caracter*/
idade tinyint(3), /*inteiro*/
sexo char(1), /*caracter*/
peso float,
altura float,
nacionalidade varchar(20)
);

use cadastro;
create database cadastro;

Software para modelo entidade relacional: brModelo

28/03/2020

Eletricidade aplicada EA08

Elementos armazenadores de energia - circuitos de primeira ordem

1.Um capacitor de 0,2uF tem uma carga de 10uC. Calcule a tensão e a energia. Reposta 50V,  250uJ
Resolução:

q = C.V
V = q / C = 10 / 0,2 = 50V

P = dw /dt
V .i = dw /dt
V .C . dV /dt = dw /dt
W = (C . V2 ) / 2 = W = ( 0,2 x 10-6 . 502 ) / 2
W = 250 uJ

2. Se a energia armazenada em um capacitor de 0,5F e 25J, calcule a tensão e a carga. Resposta 10V, 5C












Resolução:
C = 0,5F             W = 25J
V = ?                    q = ?

W = (C . V2 ) / 2              25 = (0,25 . V2 ) / 2             V = 10V
q = c . V = 0,5 . 10 = 5C


3. Dado o circuito ao lado, com C=1/4F, R1=R2=8Ω e V=40V. Se a corrente em R2 em t= 0- é 2A no sentido para baixo, calcule em t= 0- e em t= 0+:
(a) a carga no capacitor,
(b) a corrente em R1 que flui para a direita, (c) a corrente no capacitor que flui para baixo e (d) dvc / dt em [V/s]. Resposta:  (a) 4C, 4C  (b) 3A, 0A (c) 1A, -2A, (d) 4V/s, -8V/s

Resolução:

a)
Vc(t0)= Vc(t0) ____ Capacitor não permite uma variação brusca de tensão

Vc = VR2 = 8.2 = 16V
q= C.Vc = 0,25.16 = 4C

q(t0) = (t0) = 4C

b)


LKT:  - 40 + 8i + 8.2 = 0
i = 3A
t(t0) _______ i1 = 3A

t0+
Simulador usando www.systemvision.com

t0+____ i1 = 0A

t (0+)  i = 0 A





c)
i1 = ic + iR2

ic = 3 - 2 = 1A

t (0+)



ic = -2A  a corrente entra no polo negativo

t (0+)  => ic = - 2A







4.Calcule os valores máximo e mínimo da capacitância que pode ser obtida de 10 capacitores de 1uF.  Resposta: 10uF, 0,1uF

Resolução:

Cmax = C1 + C2 + ... + C10 = 10 uF
10 capacitores de 1 uF  associadas em paralelo

1/Cmin = 1/C1 + 1/C2 + ... + 1/C10

Cmin = 0,1 uF # 10 capacitores de 1 uF associados em série


5.Calcule a capacitância equivalente do circuito abaixo. Resposta: 10uF









Resolução:


C1= [(110.11) / (110+11)] = 10uF






C2= 14 + 10 = 24 uF






C3= (8 . 24) / 8+24 = 6uF




C4= 6 + 6= 12 uF






Ceq = [(60 . 12) / 60+12] = 10 uF












6. Deduza uma equação para a divisão da corrente entre dois capacitores em paralelo, calculando os valores de i1 e i2.









Resolução:


C1 // C2   q1 = C1 . V      i = C1. dv/dt

dv/dt = i / Cp   ( 1 )

LKC     i = i1 + i2  ( 2 )

i1 = C1/ dv/dt  ( 3 )
q2 = C2 . V

i2 = C2 . dv/dt  ( 4 )

(1) em ( 3)   i1 = C1 . i / Cp

i1 = C1 . i / (C1 + C2)

(1) em (4)
i2 = C2 . i / Cp              i2 = C2 . i / (C1 + C2)


7. Deduza uma equação para a divisão da tensão entre dois capacitores em serie, calculando os valores de v1 e v2.











Resolução:
Cs = C1 . C2 / (C1+C2)

V = V1 + V2   ( 1 )

q1 = C1 . V1       i = C1 . dV1 / dt

dV1 = 1 . i.dt / C1

V1 = 1/C1   t0t  i . dt    ( 1 )



de forma análoga para v2 e v1 temos :













8. Um indutor de 40[mH] tem uma corrente i(t) = 100 cos 10πt(t) [mA]. Calcule o enlace de fluxo e a energia em t=1/30s. Resposta: 2mWb, 50uJ.

Resolução:

L = 40 x 10-3 [ H ]
t = 1/30 [s]
i(H) = 100 . cos(10π.t) 10-3 [A]
λ = L . i = 40 x 10-3 . 100 . cos(10π.t) 10-3
λ = 40 x 10-3 . cos( 10π . 1/30) --> radiano
λ = 2 mWb

P= dw / dt
V . i = dw / dt => L . di / dt . i = dw / dt  => W= L   i . di

W= L . i . i / 2  = > V= L . di / dt    => W= L . i . i / 2

W= 40 . 10-3[ 100. cos(10π . 1/ 30 ) 10-3] 2
W = 20 . 10-3 . 0,12 . 0,25
W = 50 uW


9. Um indutor de 2[mH] tem uma tensão v(t) = 2 cos 1000t(t) [V] com i(0) = 1,5A. Calcule a energia armazenada no indutor em t = π/6 ms. Resposta: 4mJ.

Resolução:

L = 2 x 10-3 H
V(t) = 2.cos(1000t)          i(0) = 1,5A         W = ?           t = π /6

V = L. di/ dt   =>         di = V.dt / L     =>     i(t) - i(to) = 1/L . (to, t) V .dt

i(t) = 1,5 + 1/ 10-3  (0, π /6) 2.cos(1000.t) dt   => radiano












i(t) = 2A
P = dw/dt  => V.i = dw/dt      => L .di . i /dt  = dw/dt

W = L. i /2
W = 2.10-3 . 22 / 2
W = 4 mS


10. Dado o circuito ao lado, com I=10A, R1=12Ω, R2=8 Ω, L=1H e i1 em t =0- = 4A. Se a chave está aberta em t=0- , calcule:
(a) IL em t=0- e em t=0+,
(b) i1 em t=0+ e (c) diL / dt em [A/s].
Resposta: (a) 6A, 6A, (b) 0A, (c) -48A/s.











Resolução:

a) t(0)
Simulador EveryCircuit











LKC em X: 4 + iL = 10
iL = 6A

Para (t0+) . O indutor não permite variação brusca de corrente
iL(0+) = iL(0+) = 6A

b)
Em  t0+, a corrente que passava por R1 agora passa pelo curto -circuito
iR1 = 0A


c)
i1 = 0     V2 = 6 . 8 = 48V
LKT em I     VL + V2 + V1 = 0
VL = - 48V

V = L . di/dt           di/dt = v/L = - 48/1
di/dt = - 48 A/s












11.Calcule os valores máximo e mínimo da indutância que pode ser obtida de 10 indutores de 10mH.  Resposta: 100mH, 1mH

Resolução:

Lmax = l1 + l2 + ...+l10          Lmax = 10 . 10 mw
Lmáx = 100 mH      10 indutores associados em série

1/Lmin = 1/L1 + 1/L2+ ... +1/L10      1/Lmin = 10 . 1/10
Lmin = 1mH     com 10 indutores associados em paralelo


12.Calcule a indutância equivalente do circuito abaixo (considerar os valores dos indutores em mH).
Resposta: 10mH










Resolução:


L1 = (3 . 6)/ (3+6 )= 2






L2 = (7+2).72 / (7+2+72)
L2 = 8








L3 = (4+8).24 / (4+8+24)
L3 = 8







Leq = 10mH








13.Deduza uma equação para a divisão da tensão entre dois indutores em serie, calculando os valores de v1 e v2. 











Resposta:








Resolução:







V= L .di/dt         V= Ls . di/dt               di/dt = V/Ls      (1)

V1 = L1 . di/dt   (2)
                                       São percorridos pelo mesmo valor da corrente
V2 = L2 . di/dt   (3)

(1) em (2)   V1 = L1 . V/Ls           V1= L1 . V / (L1+L2)
(1) em (3)   V2= L2 . V/Ls            V2= L2 . V / (L1+L2)


14.Deduza uma equação para a divisão da corrente entre dois indutores em paralelo, calculando os valores de i1 e i2.

Resposta:











Resolução:
Lp= L1 . L2 / (L1+L2)

V1 // V2  =>   V1= V2= V

V= L1 . di1/dt   => i1= 1/L2  V.dt  (1)

V= L2. di2/dt   => i2= 1/L2  V.dt  (2)

V= L2. di/dt   => i= 1/Lp  V.dt         V.dt = i . Lp   (3)

(3) em (1)   i1= 1/L1 . i . Lp
i1 = i . L1 . L2 / [L1 . (L1+L2)]

i1 = L2 . i / L1+L2

(3) em (2)  i2= i . Lp / L2= i . (L1 . L2) / [L2 . (L1+L2)]

i2 = L1 . i / (L1 + L2)


15.O circuito abaixo esta em regime permanente em t = 0-. Calcule v, i1, i2, di1 / dt e di2 / dt em  t=0+. Resposta: 12V, 6A, 2A, -6A/s, 0A/s   











Resolução:












t(0)
Req = 3 . 6 / (3+ 6)= 2 [Ω].

ia = 24 / (2 + 4)= 6 [A]

Divisor de corrente:
i2 = 3 . 6 / (3 + 6) = 2 [A]

*O indutor não permite a variação brusca de corrente, logo;

iL(0)= iL(0+)

i1 = ia = 6 [A]
i2 = 2 [A]

Simulador: EveryCircuit















Para:   t(0+)

LKC :    6 = 2 + i   ,    i = 4 [A]

V = 3 . 4 = 12 [V]

LKT em i1
V1 + V = 0  ,       V1 = -12 [V]

V1 = L1 . di1/dt
di1/dt = -12 / 12 = - 6 [A/s]

LKT em 2

V2 + 6 . 2 - 12 = 0
V2 = 0 [V]

V2 = L2 . di2/dt = di2/dt = 0 [A/s]


16. O circuito abaixo esta em regime permanente em t = 0-. Calcule  v1 e v2 em t = 0-  e em t=0+.
Resposta: 5V, -20V; 25V, 20V















Resolução:






Req = ( 24 + 6).6 / ( 24 + 6 + 6) = 5

(24 + 6) // = 6



ia = 50 / (3 + 5 +2) = 5A

V2 = 5 . 5 = 25V

i2 = 25/6 A

LCD em x

ia = i1 + i2
i1 = 5 - 25/6 = 5/6A

V1 = 6 . 5/6 = 5V

Para t(0)
* O indutor não permite variação brusca de corrente. Logo, iL(0)= iL(0)

Req = 24(6+6) / (24 + 6 + 6) = 8

V = 8 . 5 = 40V

ia = 40/24 = 5/3A
LKC em x
ia + ib = 5
ib = 5 - 5/3 = 10/3 A

V2 = 6 .ib = 6 . 10/3 = 20V

V1 = 6 (-10/3) = - 20V  a corrente entra pelo lado negativo de V1


17.O circuito abaixo esta em regime permanente em t = 0-. Calcule dv1 / dt e dv2 / dt em t=0+.










Resolução:



Req = 8(12 + 6) / (8+12+6)
Req = 72/13 Ω





V = 72 . 8 /13 = 576/13 [V]





* O capacitor não permite uma variação brusca de tensão, logo:
Vc(0) = Vc(0+)

8Ω // V1     V1 = 576 / 13 [V]

LKT em ABCD    - V1 + 12ia + 6ia = 0

18ia = 576 / 13
ia = 32 / 13 [A]

6Ω // V2
V2 = 6 . ia = 6 . 32 / 13 = 192/13 [V]

t(0+)










LKT em ix
V2 + 6(- ix) + 6( -ix) = 0
12ix = 192/13
ix = 16/13 [A]

LKT em iy
V1 - V2 + 12iy = 0
IY = 1/12 (192/13 - 576/13) = - 32/13 [A]

LKT em iz
8iz + V1 = 0
iz = (- 576 /13 ) . 1/8 = - 72 /13 [A]

27/03/2020

Contador crescente e decrescente CCS C

Objetivo: Fazer um contador crescente usando função, PIC e um decodificador 4511


































Código feito em CCS C Compiler

#include <7seg for.h>

void Contador(){
   int vetor[] = {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9};//escrito em decimal
 
   while(TRUE){
      for(int i = 0; i < sizeof(vetor)/sizeof(int); i++){//tamanho do vetor
         output_b(vetor[i]);
         delay_ms(800);
      }
   
      delay_ms(1000);//espera 1 segundo para iniciar outra contagem
   
      for(i = (sizeof(vetor)/sizeof(int)); i >= 1; i--){
         output_b(vetor[i-1]);
         delay_ms(800);
      }
   }
}
void main(){
   Contador();
}

26/03/2020

Contador com PIC e decodificador 4511 CCS C Compiler


Objetivo: Fazer um contador de 0 até 9 usando uma função e um decodificador 4511 com PIC






















































Código feito em CCS C Compiler
Método 1

#include <16F877A.h>
#use delay(crystal = 20MHz)

//Função para o contador
void Contador(){
   int vetor[] = {0b0000, 0b0001, 0b0010, 0b0011, 0b0100, 0b0101, 0b0110, 0b0111, 0b1000, 0b1001};// Código de entrada em binário
 
   while(TRUE){
      for(int i = 0; i < sizeof(vetor)/sizeof(int); i++){//tamanho do vetor
         output_b(vetor[i]);
         delay_ms(500);
      }
   }
}

void main(){
   Contador();//chamando a função
}

Método 2

#include <16F877A.h>
#use delay(crystal = 20MHz)

void Contador(){
   int vetor[] = {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9};//forma em decimal
 
   while(TRUE){
      for(int i = 0; i < sizeof(vetor)/sizeof(int); i++){//tamanho do vetor
         output_b(vetor[i]);
         delay_ms(500);
      }
   }
}
void main(){
   Contador(); //chamando a função
}

24/03/2020

Algoritmo de todas as tabuada desejada em C

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

int tabuada (int num){
    printf("\nTabuada de %d\n",num);
   
    for(int i = 0; i <= 10; i++){
        printf("%d x %d = %d\n",num, i, (num * i));
    }
    return num;
}

int valor, cont = 0;

int main(){
       
    printf("Digite o valor: ");
    scanf("%d",&valor);
   
    if(valor <= 0){
        while(valor <= 0){
            printf("Número inválido ! Digite um número maior que 0");
            printf("\nDigite novamente: ");
            scanf("%d",&valor);
        }
    }
   
    while(cont != valor +1){
        tabuada(cont);
        cont++;
    }
    return 0;
}

Saída gerada

20/03/2020

Prova LP 2 - 2019/2

Prova aplicada em 24/10/2019

1) Dado uma hierarquia de classes mapeadas em uma modelagem de um software, com vistas ao reuso de código, o que deve ser levado em consideração para a decisão do uso de herança de implementação (extends) ou de agregação/composição para promover o reuso ? ( 0,5 )

RESP:

Deve ser levado em consideração o uso em tempo de compilação e o uso em tempo de execução.
Para o uso em tempo de compilação a herança (extends) resolve o problema, para a agregação/composição que é herança de tipo ou uso em tempo de execução resolve o problema.



2) Tipos genéricos podem ser definidos por meio de classes abstratas ou interfaces. Estabeleça as diferenças entre o uso de classes abstratas ou interfaces na implementação de tipos genéricos ? ( 1,0 )

RESP:

Classes abstratas:
+ As classes abstratas força a hierarquia para as subclasses.
+ Seu contrato faz com que as subclasses contemplem as mesmas hierarquias e/ou padrões.

- Classes abstratas não podem ser instanciadas
- Deve conter pelo menos um método abstrato
- Classes abstratas serve apenas para ser herdado

Interface
+ Uma classe pode implementar diversas interfaces
+ Interface não possui implementação, apenas assinatura

- Interface não pode ser instanciada e nem como criar um construtor


3) Como é possível um tipo ser implementado por mais de uma classe ? ( 1,0 )

RESP:

É possível através de interfaces, se uma classe A é do tipo I1, se a classe B é do tipo I2 e se a classe A fazer uma herança (extends) de classe B, logo; podemos dizer que a classe A é do tipo I1 e do tipo I2.

4) Por que é conveniente que um cliente de um objeto não conheça a(s) classe(s) que pode(m) produzir os objetos para ele ? Como isso é possível ? ( 0,7 )

RESP:

Porque é necessário que as classes sejam implementadas por interfaces para adicionar todos os métodos da classe, ou que essa classe se transforme em uma herança.
  • É possível através de interfaces que esconde os métodos da classe.


5) Qual a finalidade da API JDBC do java ? ( 0,7 )

RESP:

Porque é necessário que as classes sejam implementadas por interfaces para adicionar todos os métodos da classe ou que essa classe se transforme em uma herança 
  • É possível através de interfaces que esconde os métodos da classe


6) Como é possível uma aplicação Java acessar mais de um tipo de SGDB de forma flexível (com pouca alteração) por meio da API JDBC ? ( 1,0 )

RESP:

É possível usando um driver JDBC para se comunicar diretamente com uma fonte de dados específica, caso não tenha um driver JDBC é necessário que tenha pelo menos um driver ODBC.

7) Existem quatro tipo de driver JDBC, qual é o mais recomendado ? Porque ? ( 1,0 )

RESP:

Pure Java, tipo 4
  • Porque os drivers se comunicam diretamente com o Banco de Dados usando soquetes de rede
  • Porque não requer código adicional do Java

8 - Considere o trecho de código a seguir e responda as questões ? ( 0,7 )

package apps;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Conexao1{
    public static void main(String args[]){
        Connection conexao;
        String url = "jdbc:postgresql://localhost:5432/produto";
        String usr = "postgresql";
        String pass = "postgresql";
        
        try{
            Class.forName("org.postgresql.Driver");
            conexao = DriverManager.getConnection(url, usr, pass);
            System.out.println("Conexão estabelecida");
            conexao.close();
            System.out.println("Conexão encerrada");
        }catch (ClassNotFoundException cnf){
            System.out.println("Classe do driver não encontrado - "+cnf.getMessage());
            
        }catch (SQLException sqle){
            System.out.println("Conexao não estabelecida - "+sqle.getMessage());
        }
    }
}

a) Descreva quais são as informações presentes na URL de conexão JDBC ?

RESP:


b) Qual o papel da classe DriverManager ?

RESP:

Realizar a conexão com o banco de dados da fonte específica PostgreSQL usando a URL, USR(usuário) e o pass(senha)

c) Qual a finalidade da Interface / objeto Connection na manipulação de banco de dados por meio da JDBC ?

RESP:

Ser como uma forma de ponte para estabelecer a conexão com o Banco de Dados.

d) O que é realizado no trecho de código, caso ão ocorra exceções ?

RESP:

É feita uma conexão de curto tempo com a fonte específica PostgreSQL e em seguida é finalizado a conexão

9) Considere os trechos de código a seguir e responda as questões. ( 1,0 )

Código 01

Connection conexao = FabricaConexao.obterConexao();
PreparedStatement comando = null;
String nome = "Refrigerantes";
float promocao = 0;
float margem = 50;

try{
    comando = conexao.preparedStatement("INSERT INTO GRUPOPRODUTO (NOME, PROMOCAO, MARGEMLUCRO) VALUES (?, ?, ?)");
    comando.setString(1, nome);
    comando.setFloat(2, promocao);
    comando.setFloat(3, margem);
    comando.executeUpdate();
    System.out.println("Inclusão realizada com sucesso");
    
}catch (SQLException ex){
    System.out.println("Erro ao incluir grupo de produto"+ex.toString());
} finally {
    try{
        comando.close();
        conexao.close();
    }catch (SQLException ex){
        System.out.println("Erro ao desconectar"+ex.toString);
    }
}

Código 02

Connection conexao = FabricaConexao.obterConexao();
PreparedStatement comando = null;
String sql = "Refrigerantes";
String nome = "Bebidas destiladas";
float promocao = 10;
float margem = 50;

sql += "('"+ nome +"', "+promocao+", "+margem+")";

try{
    comando = conexao.reateStatment();
    comando.executeUpdate(sql);
    System.out.println("Inclusão realizada com sucesso");
    
}catch (SQLException ex){
    System.out.println("Erro ao incluir grupo de produto"+ex.toString());
} finally {
    try{
        comando.close();
        conexao.close();
    }catch (SQLException ex){
        System.out.println("Erro ao desconectar"+ex.toString);
    }
}

a) Existe diferença funcional entre os dois trechos de código ? Justifique.

RESP:

Não existe diferença funcionais entre o código 1 e o código 2, porém o código 1 é mais recomendado.

b) Existe diferença de implementação entre os trechos de código ? Justifique.

RESP:

Existe diferença de implementação entre os 2 códigos, o código 01 utiliza o PreparedStatmente para realizar a inserção, já o código 02 utiliza uma String SQL que é menos recomentada.

10) Analise o trecho de código a seguir e responda as questões. Considere que a FábricaConexao é uma classe utilitária que devolve um objeto Connection instanciado.  (0,8 )

Connection conexao = FabricaConexao.obterConexao();
PreparedStatement comando = null;

try{
    comando = conexao.preparedStatement("SELECT *FROM grupoproduto ORDER BY nome");
    ResultSet resultado = comando.executeQuery();
    while (resultado.next()){
        System.out.println("Codigo: "+resultado.getInt("codigo"));
        System.out.println("Nome: "+resultado.getString("nome"));
        System.out.println("% Promocao: "+resultado.getFloat("promocao"));
        System.out.println("% Margem lucro: "+resultado.getFloat("margemlucro"));
        System.out.println("---------------------------------------------------");
    }
    resultado.close();
}catch (SQLException ex){
    System.out.println("Erro ao recuperar os grupos de produtos"+ex.toString());
} finally {
    try{
        comando.close();
        conexao.close();
    }catch (SQLException ex){
        System.out.println("Erro ao desconectar"+ex.toString);
    }
}

a) O que o código realiza (linhas gerais) ?

RESP:
  • Realiza a conexão com o banco de dados
  • Faz uma seleção de tudo do grupoproduto ordenado em forma crescente por nome
  • É processado e executado o resultado
  • Enquanto haver dados em ResultSet
  • Exibe o código
  • Exibe o nome
  • Exibe a promoção
  • Exibe a margem de lucro
  • É finalizada e fechada o resultado
  • Caso ocorra erro de comando, irá exibir ERRO e os dados do grupo
  • Finalizar a conexão com o Banco de Dados
  • Caso ocorra um erro de conexão com Banco de Dados, irá exibir a mensagem de erro SQL


b) O que é o objeto ResultSet ? Qual a sua finalidade ?

RESP:

Coletar informação de linhas de comandos SQL e processa -lá.
  • Sua finalidade é ser como um objeto de referência para realizar os comandos SQL

19/03/2020

Tela LCD + teclado com PIC 16F877A



























Código feito em CCS C Compiler

#include <LCD + teclado.h>

#include <KBD.C>//driver do teclado
#define LCD_DATA_PORT getenv("SFR:PORTB")//porta padrão
#include <lcd.c>

char c;

void main(){

   kbd_init();
   lcd_init();
       
   printf(lcd_putc,"\fDigite: ");
   delay_ms(50);
 
   while(TRUE){
   
      c = kbd_getc();//retorna qual tecla foi precionada
      delay_ms(2);//dando uma pausa de 2 ms para processar informação
   
      if(c != 0){// se a tecla foi precionada
         printf(lcd_putc,"%c",c);//imprindo a tecla digitada
         delay_ms(300);
      }
   
   }
}

Clique aqui para fazer o download dos arquivos