Open vanderleipinto opened 7 months ago
Escreva um método que dado um inteiro x, um inteiro y e um inteiro w retorne todos os números divisíveis por w entre x e y.
def numeros_divisiveis(x, y, w)
# Inicializa um array vazio para armazenar os números divisíveis
divisiveis = []
# Itera de x até y
(x..y).each do |num|
# Verifica se o número é divisível por w
if num % w == 0
# Adiciona o número ao array de divisíveis
divisiveis << num
end
end
# Retorna o array de números divisíveis
return divisiveis
end
puts "Digite o primeiro número"
x = gets.to_i
puts "Digite o segundo número"
y = gets.to_i
puts "Digite o terceiro número"
w = gets.to_i
resultado = numeros_divisiveis(x,y,w)
puts "Números divisíveis por #{w} entre #{x} e #{y}: #{resultado}"
Para modelar um banco de dados que suporte essas regras. Criaremos três tabelas principais: uma para os usuários, outra para os eventos e uma terceira para os prêmios. Além disso, precisaremos de uma tabela de relacionamento para associar os usuários aos eventos em que participaram e aos prêmios que ganharam. Aqui está um exemplo de como esse modelo de banco de dados poderia ser estruturado em SQL:
-- Tabela de Usuários
CREATE TABLE Usuarios (
id INT PRIMARY KEY AUTO_INCREMENT,
nome VARCHAR(100),
email VARCHAR(100) UNIQUE
);
-- Tabela de Eventos
CREATE TABLE Eventos (
id INT PRIMARY KEY AUTO_INCREMENT,
nome VARCHAR(100),
data DATE
);
-- Tabela de Prêmios
CREATE TABLE Premios (
id INT PRIMARY KEY AUTO_INCREMENT,
nome VARCHAR(100)
);
-- Tabela de Participação e Premiação
CREATE TABLE ParticipacaoPremiacao (
id INT PRIMARY KEY AUTO_INCREMENT,
id_usuario INT,
id_evento INT,
id_premio INT,
FOREIGN KEY (id_usuario) REFERENCES Usuarios(id),
FOREIGN KEY (id_evento) REFERENCES Eventos(id),
FOREIGN KEY (id_premio) REFERENCES Premios(id)
);
Neste modelo:
Usuarios
armazena informações sobre os usuários, como nome e email.Eventos
registra os eventos, incluindo seu nome e data.Premios
lista os prêmios disponíveis.ParticipacaoPremiacao
é uma tabela de relacionamento que associa os usuários aos eventos em que participaram e aos prêmios que ganharam. Cada registro nesta tabela contém o ID do usuário, o ID do evento, o ID do prêmio e serve como uma espécie de "registro de presença" e "registro de premiação".Segue o diagrama do modelo.
Para resolver a questão, usaremos uma consulta SQL para selecionar os nomes dos usuários com idade maior ou igual a 18 anos e cuja profissão seja "programador" ou "desenvolvedor".
SELECT nome
FROM Usuarios
WHERE idade >= 18
AND (profissao = 'programador' OR profissao = 'desenvolvedor');
Nesta consulta:
SELECT nome
indica que queremos selecionar apenas o nome dos usuários.FROM Usuarios
especifica que estamos selecionando dados da tabela Usuarios
.WHERE idade >= 18
filtra os usuários com idade maior ou igual a 18 anos.AND (profissao = 'programador' OR profissao = 'desenvolvedor')
filtra os usuários cuja profissão seja "programador" ou "desenvolvedor".Com essa consulta, conseguimos obter os nomes dos usuários que atendem aos critérios estabelecidos.
1. Separação de Preocupações:
2. Flexibilidade e Escalabilidade:
3. Interface de Usuário Melhorada:
4. Melhor Colaboração e Entendimento:
1. Complexidade Adicional:
2. Possibilidade de Overengineering:
3. Dificuldade em Implementar Mudanças:
4. Limitações em Arquiteturas Complexas:
Em resumo:
A arquitetura MVC oferece diversos benefícios em termos de organização, reuso de código, flexibilidade e manutenabilidade. No entanto, é importante considerar a curva de aprendizado, a complexidade adicional e o potencial de overengineering antes de adotá-la em um projeto. A escolha da arquitetura ideal dependerá das características específicas do projeto e das necessidades da equipe de desenvolvimento.
Lembre-se:
Recursos Adicionais:
1. Rota GET usando o método resources
:
Rails.application.routes.draw do
resources :users do
get :find_user, on: :collection
end
end
Explicação:
resources
para gerar automaticamente rotas para o controller UsersController
.get :find_user
define uma rota GET para o método find_user
dentro do controller UsersController
.on: :collection
indica que a rota é uma rota de coleção, o que significa que ela será acessível através da URL /users/find_user
.Exemplo de uso:
# GET /users/find_user
def find_user
# ...
end
Outras opções:
get
para definir a rota manualmente:Rails.application.routes.draw do
get '/users/find_user', to: 'users#find_user'
end
match
para definir uma rota que responde a vários métodos HTTP:Rails.application.routes.draw do
match '/users/find_user', to: 'users#find_user', via: [:get, :post]
end
[x] Escreva um método que dado um inteiro x, um inteiro y e um inteiro w retorne todos os números divisíveis por w entre x e y.
[x] Em um sistema web, cada usuário pode se inscrever em diversos eventos, cada evento possui até 3 prêmios que são distribuídos entre os usuários presentes. O sistema precisa guardar a informação sobre quem participou de cada evento e quem ganhou os prêmios. Modele um banco de dados capaz de suportar essas regras.
[x] Considere um sistema onde cada Usuário possui os atributos nome (String), idade (Inteiro) e profissão (String). Faça uma query que retorne o nome de todos os usuários com idade maior ou igual à 18 anos e cuja profissão seja programador ou desenvolvedor
[x] Quais são as vantagens/desvantagens de se usar a arquitetura MVC (Model, View e Controller)?
[x] Usando Ruby on Rails, cite pelo menos uma forma de criar uma rota para um método chamado find_user dentro de um controller com o nome UsersController.
[x] Considerando a estrutura padrão de arquivos de um projeto feito com Ruby on Rails, em quais pastas devem se encontrar os models, os controllers e as views de um projeto? De que modo é possível saber qual controller é responsável por gerenciar uma determinada view?