Sobre leitejr

Professor do Curso de TI - CEFETBA/SANTO Amaro Solteiro - Torcedor do Bahia Cristão

Exercícios de vetores

Exercícios usando vetores

  1. Faça um Programa que leia um vetor de 10 números reais e mostre-os na ordem inversa.
  2. Faça um Programa que leia 4 notas, mostre as notas e a média na tela.
  3. Faça um Programa que leia um vetor de 10 caracteres, e diga quantas consoantes foram lidas. Imprima as consoantes.
  4. Faça um Programa que leia 20 números inteiros e armazene-os num vetor. Armazene os números pares no vetor PAR e os números IMPARES no vetor impar. Imprima os três vetores.
  5. Faça um Programa que leia um vetor de 5 números inteiros, mostre a soma, a multiplicação e os números.
  6. Faça um Programa que peça a idade e a altura de 5 pessoas, armazene cada informação no seu respectivo vetor. Imprima a idade e a altura na ordem inversa a ordem lida.
  7. Faça um Programa que leia um vetor A com 10 números inteiros, calcule e mostre a soma dos quadrados dos elementos do vetor.
  8. Faça um Programa que leia dois vetores com 10 elementos cada. Gere um terceiro vetor de 20 elementos, cujos valores deverão ser compostos pelos elementos intercalados dos dois outros vetores.
  9. Foram anotadas as idades e alturas de 30 alunos. Faça um Programa que determine quantos alunos com mais de 13 anos possuem altura inferior à média de altura desses alunos.

Atividade – Banco de Dados – Integrado

Prezados,

Segue anexada nossa atividade valendo pontos para ser entregue até o dia 28/6/2019. Não haverá prorrogação. Qualquer e-mail após essa data será desconsiderado. O trabalho é individual e é de responsabilidade do estudante enviar a lista completa até esta data.

Favor enviar no anexo do email as questões no padrão de arquivo sql assim:

“seunome-turma-a.sql” . Por exemplo: josesouza-turma-b.sql para João Souza que é da turma B.

Este banco (SAKILA) será o mesmo a ser utilizado na avaliação final.

atividadeBD-Final-com-modelo

Script ATUALIZADO SQL aqui:https://www.dropbox.com/s/qdlerxxni5scrkn/sakila2.sql?dl=0 [rode no HeidiSQL]

 

Atividade 2: SQL

Script do Banco Aqui

Para as tabelas acima, responda em SQL o seguinte:

1 – Insira um novo atendente
2 – Insira uma nova pizza
3 – Com a pizza inserida na questão anterior altere a quantidade crítica para 5 e o preco para 50,00
4 – Mostre as pizzas ordenadas pelo preço
5 – Mostre os pedidos ordenados por valor total do maior para o menor
6 – Apague a pizza inserida na questão 2
7 – Mostre o valor médio das pizzas
8 – Mostre o menor valor total de pedido
9 – Mostre o total de pedidos realizados
10 – Mostre as datas que tiveram pedidos sem repetição
11 – Mostre a quantidade de pizzas com preço acima de 50 reais
12 – Mostre as pizzas cuja quantidade crítica é 5 pizzas de diferença em relação a quantidade em estoque.

 

 

 

Atividade Guiada de Triggers

Neste artigo serão apresentados os principais conceitos sobre os TRIGGERS (gatilhos) e sua aplicabilidade. Após a conceituação, trabalharemos um estudo de caso de um estoque de produtos, com baixa nas quantidades através de triggers.

Após ler este artigo, você estará apto à:

  • Definir o que é um TRIGGER;
  • Definir dados de antes (OLD) e depois (NEW);
  • Criar um TRIGGER;
  • Excluir um TRIGGER;
  • Restrições em relação à TRIGGERS.

O que é um TRIGGER?

Um TRIGGER ou gatilho é um objeto de banco de dados, associado a uma tabela, definido para ser disparado, respondendo a um evento em particular. Tais eventos são os comandos da DML (Data Manipulation Language): INSERT, REPLACE, DELETE ou UPDATE. Podemos definir inúmeros TRIGGERS em uma base de dados baseados diretamente em qual dos comandos acima irá dispará-lo, sendo que, para cada um, podemos definir apenas um TRIGGER. Os TRIGGERS poderão ser disparados para trabalharem antes ou depois do evento. Veremos como definir o momento de atuação do TRIGGER mais à frente.

Utilizaremos as seguintes tabela  para nossos testes:

create table produtos (

idproduto int(4) unsigned not null auto_increment,

nomeproduto varchar(50),

preço float,

qtd int,

primary key(idproduto)
);

insert into produtos (nomeproduto, preço, qtd)

values('caneta', 1.00, 10), ('lápis', 0.50, 50), ('borracha', 0.20, 100);

Tabela produtos e inserção de alguns dados básicos

create table itens(

idcompra int(4) unsigned,

idproduto int(4) unsigned,

qtd int
);

Tabela itens (de compras)Baseado na tabela produtos, podemos definir os TRIGGERS para serem disparados, por exemplo, antes (BEFORE) ou depois (AFTER) de um INSERT. Agora sabemos então que para cada momento BEFORE ou AFTER, podemos ter um TRIGGER a ser disparado para defender alguma lógica.

A sintaxe geral de definição de um TRIGGER é a seguinte:

CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
  • DEFINER: Quando o TRIGGER for disparado, esta opção será checada para checar com quais privilégios este será disparado. Utilizará os privilégios do usuário informado em user (´wagner´@´localhost´) ou os privilégios do usuário atual (CURRENT_USER). Caso essa sentença seja omitida da criação do TRIGGER, o valor padrão desta opção é CURRENT_USER();
  • trigger_name (nome da trigger): define o nome do procedimento, por exemplo, trg_test;
  • trigger_time (momento): define se o TRIGGER será ativado antes (BEFORE) ou depois (AFTER) do comando que o disparou;
  • trigger_event (Evento): aqui se define qual será o evento, INSERT, REPLACE, DELETE ouUPDATE;
  • tbl_name (tabela que recebe o evento): nome da tabela onde o TRIGGER ficará “pendurado” aguardando o trigger_event;
  • trigger_stmt (Código a ser executado): as definições do que o o TRIGGER deverá fazer quando for disparado.

Definir dados de antes (OLD) e depois (NEW)

Em meio aos TRIGGERS temos dois operadores importantíssimos que nos possibilitam acessar as colunas da tabela alvo do comando DML, ou seja, podemos acessar os valores que serão enviados para a tabela tbl_cliente antes (BEFORE) ou depois (AFTER) de um UPDATE, por exemplo. Tais operadores nos permitirão então, ter dois momentos, o antes e o depois e também examinar os valores para que sejam ou não inseridos, atualizados ou excluídos da tabela.

Antes mesmo de analisarmos os operadores, temos que analisar vejamos as seguintes diretrizes:

  • INSERT: o operador NEW.nome_coluna, nos permite verificar o valor enviado para ser inserido em uma coluna de uma tabela. OLD.nome_coluna não está disponível.
  • DELETE: o operador OLD.nome_coluna nos permite verificar o valor excluído ou a ser excluído. NEW.nome_coluna não está disponível.
  • UPDATE: tanto OLD.nome_coluna quanto NEW.nome_coluna estão disponíveis, antes (BEFORE) ou depois (AFTER) da atualização de uma linha.

Percebemos então que, ao inserir uma nova linha em uma tabela, temos os valores das colunas disponível através do operador NEW.nome_coluna, quando excluímos uma linha, temos ainda os valores das colunas da linha excluída através do operador OLD.nome_coluna e temos os dois operadores disponíveis no UPDATE e no REPLACE pois as duas declarações consistem em um DELETE seguido por um INSERT.

Podemos criar uma restrição de integridade referencial com TRIGGERS. Por exemplo, usaremos tabelas MyISAM (que não dão suporte a criação de relacionamento com chaves estrangeiras) e, aproveitando nosso exemplo, como clientes compram produtos, podemos criar uma tabela de produtos e restringir que somente os produtos cadastrados podem ser comprados, inseridos na tabela de compra e que somente clientes cadastrados podem efetuar compras. Para simplificação vamos usar as tabelas produtos e itens (de compra) criadas anteriormente:

Exemplo 1. – Uma trigger para dar baixa em estoque
Vamos lá. Imagine que se queira comprar uma certa quantidade de itens (numa compra) de produtos. Quando é adicionado na tabela itens. Quando isso ocorrer se deve dar baixa na quantidade de produtos na tabela produtos. Vejamos a trigger que realiza isso.


delimiter //
create trigger tg_diminuir_estoque AFTER INSERT on itens
for each row
begin
 update produtos set qtd = qtd - NEW.qtd where idproduto = NEW.idproduto;
end;

//

Uma vez criada esta trigger, a mesma estará associada ao evento INSERT que ocorrer na tabela ITENS.

insert into itens (idcompra, idproduto, qtd) values(1,1,5);

A realização do comando acima (INSERT) vai disparar a trigger tg_diminuir_estoque, que automaticamente realizará a operação de update (dentro do corpo da trigger) que diminuirá 5 na quantidade de produtos para o produto cujo idproduto=5. Isso se fará automaticamente.

Uma observação importante é que só se pode ter uma trigger para cada evento de tabela.

Exemplo 2 – O comprador desistiu de comprar toda aquela quantidade do item.

Sendo assim vamos ter que excluir aqueles itens de compra. Logo teremos uma trigger associada ao evento DELETE da tabela ITENS.

delimiter //
create trigger tg_devolverTudo_estoque BEFORE DELETE on itens
 for each row
  begin
   update produtos set qtd = qtd + OLD.qtd where idproduto = OLD.idproduto;
 end;

//

Observe que ao excluir uma linha da tabela ITENS só teremos dados do tipo OLD. Assim sendo todos os dados vindos da tabela que dispara a trigger (ITENS) virão com o prefixo OLD. Isso garante que esses dados serão EXATAMENTE os recentemente excluídos.

delete from itens where idproduto = 1 and idcompra = 1;

Sendo assim, a operação UPDATE dentro da trigger vai devolver exatamente a quantidade (OLD.qtd) excluída na tabela ITENS para a tabela PRODUTOS! A pergunta é: Qual o valor de OLD.qtd? Exatamente 5, pois foi esse valor inserido anteriormente. Qual o valor de OLD.idproduto? Exatamente 1 conforme o delete executado.

Exemplo 3 – O Comprador devolve parcialmente itens.

A idéia é a mescla dos dois exemplos. Mas não inserimos um novo item, nem apagamos. Apenas alteramos a quantidade. Logo é uma trigger para o evento UPDATE da tabela itens.

delimiter //

create trigger tg_devolverParcial_estoque AFTER UPDATE on itens
 for each row
  begin
   update produtos set qtd = qtd + ( OLD.qtd - NEW.qtd ) where idproduto = OLD.idproduto;
 end;

//

Observe que agora temos uma conta que “simula” ao mesmo tempo um delete + update, por isso temos OLD.qtd( que viria de um DELETE) e NEW.qtd (que viria de um INSERT). Lembrando que no UPDATE temos que passar a restrição (Where idproduto = OLD.idproduto) que vem de um UPDATE (que pode ter ambos os valores de NEW e OLD)

update itens set qtd = 2 where idcompra = 1 and idproduto = 1;

Ao executar o update, a trigger chamada tg_devolverParcial_estoque vai realizar aquela conta e vai atualizar a tabela produtos!

Restrições em relação à TRIGGERS

A implementação deste recurso atualmente no MySQL tem várias limitações, a conferir as principais:

  • Não se pode chamar diretamente um TRIGGER com CALL, como se faz com um Stored Procedures;
  • Não é permitido iniciar ou finalizar transações em meio à TRIGGERS;
  • Não se pode criar um TRIGGERS para uma tabela temporária – TEMPORARY TABLE;
  • TRIGGERS ainda não podem ser implementadas com a intenção de devolver para o usuário ou para uma aplicação mensagens de erros.

 

Modelagem de Dados: Exercícios

modelo_passagens

a) Crie o banco  de dados contendo todas tabelas
1) Adicione o atributo  telefone para a tabela cliente
2) Adicione o atributo ‘ANO DE FABRICACAO para avioes
3) Modifique o atributo anterior para o tipo YEAR
4) Mostre todas as tabelas
5) Descreva os atributos da tabela voos
6) renomeie o atributo ASSENTOS na tabela reserva para numeroassento
7) Modifique o atributo datareserva para o tipo DateTime
8) Remova o atributo telefone da tabela clientes (Criado na questão 1)
9) Insira 3 clientes
10) Insira 4 aviões
11) Apague o segundo avião adicionado
12) Altere o email e e data de nascimento do segundo cliente para seus dados
13) Insira 2 voos


14) Insira 2 reservas
15) insira um novo cliente com seus dados
16) Apague o último cliente
17) Altere os dados do primeiro cliente inserido para “João da BahiA” com CPF 1234 email “email@email.com” e a data de nascimento de hoje.

Exercícios de Algoritmos

1) Construa um programa que solicite uma senha para o usuário. Se a senha for igual a 123 informar que o acesso foi liberado caso contrário informar senha incorreta. O programa permitirá somente 5 tentativas, caso o usuário erre todas informar que o sistema foi bloqueado.

2) Dois ciclistas A e B estão andando em uma pista de ciclismo com 2 Km de comprimento com velocidades de 10 m/s e 15 m/s, respectivamente. Escreva um algoritmo que determine iterativamente o tempo que levará para que esses dois ciclistas A e B se encontrem em um mesmo ponto, sabendo que eles partiram de um mesmo ponto inicial, porém em sentido contrário. O algoritmo também deve calcular o deslocamento (a distância) que cada um percorreu.
3) Num campeonato europeu de voleibol, inscreveram-se 30 países. Sabendo-se que na lista oficial de cada país consta, além de outros dados, peso e idade de 12 jogadores, criar um algoritmo que apresente as seguintes informações:
 O peso médio e a idade média de cada um dos times;
 O peso médio e a idade média de todos os participantes;

 

4) Desenvolver um algoritmo que leia 10 valores e calcule e escreva a média aritmética dos valores lidos, a quantidade de valores positivos, a quantidade de valores negativos e o percentual de valores negativos e positivos.

5) Faça um programa que leia um vetor de 5 posições para números reais e, depois, um código inteiro. Se o código for zero, finalize o programa; se for 1, mostre o vetor na ordem direta; se for 2, mostre o vetor na ordem inversa. Caso, o código for diferente de 1 e 2 escreva uma mensagem informando que o código é invalido.

6) Faça um programa que leia dez conjuntos de dois valores, o primeiro representando o
número do aluno e o segundo representando a sua altura em metros. Encontre o aluno mais baixo e o mais alto. Mostre o número do aluno mais baixo e do mais alto, juntamente com suas alturas.

7) No dia da estreia do filme “Senhor dos Anéis”, uma grande emissora de TV realizou uma pesquisa logo após o encerramento do filme. Cada espectador respondeu a um questionário no qual constava sua idade e sua opinião em relação ao filme: excelente – 3; bom – 2; regular – 1. Criar um algoritmo que receba a idade e a opinião de 20 espectadores, calcule e imprima:
 A média das idades das pessoas que responderam excelente;
 A quantidade de pessoas que responderam regular;
 A percentagem de pessoas que responderam bom entre todos os expectadores
analisados.

8)  Escrever um algoritmo que leia 100 números e conte quantos deles estão nos seguintes intervalos, guardando-os em vetores diferentes, de acordo com tais intervalos: [0-25], [26-50], [51-75] e [76-100]. A entrada de dados deve terminar quando for lido um número negativo ou maior que 100.

9) Faça um algoritmo que leia um vetor N[20]. Troque a seguir, o 1°elemento com o último, o 2° elemento com o penúltimo, etc., até trocar o 10° com o 11°. Mostre o vetor modificado.

10) Faça um programa que leia e monte dois vetores de números inteiros com 20 números cada. Depois de montados gere um terceiro vetor formado pela diferença dos dois vetores lidos, um quarto vetor formado pela soma dos dois vetores lidos e por último um quinto vetor formado pela multiplicação dos dois vetores lidos