Você está aqui: Cards de Engenharia Civil - Fundações |
||
|
||
|
|
||
Python ::: Desafios e Lista de Exercícios Resolvidos ::: Pesquisa Operacional |
Exercício Resolvido de Python - Programação Linear em Python - Uma madeireira deseja obter 1000kg de lenha, 2000kg de madeira para móveis e 50 metrosQuantidade de visualizações: 921 vezes |
|
Pergunta/Tarefa: Este exercício de Python aborda o uso da biblioteca PuLP para resolver um problema de Pesquisa Operacional usando Programação Linear. Uma madeireira deseja obter 1000kg de lenha, 2000kg de madeira para móveis e 50 metros quadrados de casca de árvore, dispondo de carvalho e pinheiro, sendo que o carvalho gera 40kg de lenha, 150kg de madeira e 3 metros quadrados de casca aproveitável; o pinheiro 100kg de lenha, 60kg de madeira e 8 metros quadrados de casca aproveitável. Formule o problema, de modo a minimizar os custos, sabendo que cada carvalho custa R$ 1500,00 para a empresa e cada pinheiro R$ 1200,00. Em seguida use a API de Programação Linear do PuLP para resolver o problema e mostrar a melhor solução. Sua saída deverá ser parecida com: x: 11.111111 y: 5.5555556 Antes de passarmos para o código Python é importante entendermos e fazermos a modelagem do problema. Neste exercício busca-se encontrar o custo mínimo. Assim, a nossa função objetivo será dada pela combinação dos preços do carvalho e do pinheiro. Veja: Zmin = 1500x + 1200y Aqui nós definimos a variável x para o carvalho e a variável y para o pinheiro. Agora que já temos a função Z, o próximo passo é analizarmos as restrições. Note que a empresa precisa de 1000kg de lenha. O carvalho gera 40kg de lenha, enquanto o pinheiro gera 100kg. Então nossa primeira restrição é: R1 = 40x + 100y >= 1000 Para a segunda restrição nós temos que a empresa precisa de 2000kg de madeira. O carvalho gera 150kg de madeira, enquanto o pinheiro gera 60kg. Assim, nossa segunda restrição é: R2 = 150x + 60y >= 2000 Finalmente, para a terceira restrição, sabemos que a empresa necessita de 50 metros quadrados de casca de árvore. O carvalho gera 3 metros quadrados de casca aproveitável, enquanto o pinheiro gera 8 metros quadradros. Então a terceira restrição é: R3 = 3x + 8y >= 50 As restrições 4 e 5 dizem que tanto o x quanto o y devem ser maiores ou iguais a zero, e que ambos devem pertencer aos números reais. Veja agora como usamos os dados de formulação para resolver este exercício usando Python e a biblioteca PuLP:
# vamos importar as ferramentas necessárias
from pulp import LpMinimize, LpProblem, LpVariable
# método principal
def main():
# vamos criar o modelo
modelo = LpProblem(name="Pesquisa Operacional em Python", sense=LpMinimize)
# agora inicializamos as variáveis de decisão
x = LpVariable(name="x", lowBound=0)
y = LpVariable(name="y", lowBound=0)
# vamos adicionar as restrições de acordo com a formulação do problema
modelo += (40 * x + 100 * y >= 1000, "R1")
modelo += (150 * x + 60 * y >= 2000, "R2")
modelo += (3 * x + 8 * y >= 50, "R3")
# definimos a função objetivo e a adicionamos ao modelo
funcao_objetivo = 1500 * x + 1200 * y
modelo += funcao_objetivo
# e tentamos resolver o problema
modelo.solve()
# assumindo que o problema foi resolvido com sucesso, vamos
# mostrar os valores das variáveis x e y
for var in modelo.variables():
print(f"{var.name}: {var.value()}")
if __name__== "__main__":
main()
Note como o PuLP nos deu o custo mínimo de 23333.33 para atingir o objetivo desejado pela madeireira. |
VBA ::: Dicas & Truques ::: Laços de Repetição |
Como usar o laço de repetição For Next em nossas aplicações VBAQuantidade de visualizações: 607 vezes |
|
O laço For da linguagem VBA é uma estrutura de controle de repetição que nos permite, de forma eficiente, repetir uma instrução ou grupo de instruções um determinado número de vezes. Veja, por exemplo, como escrever um laço For Next que mostra os números de 0 até 10:
Sub ExemploLacoFor()
' exemplo de laço For Next que conta de 0 até 10
For i = 0 To 10
MsgBox "O valor de i é: " & i
Next
End Sub
Ao executar este código VBA nós teremos o seguinte resultado: O valor de i é: 0 O valor de i é: 1 O valor de i é: 2 O valor de i é: 3 O valor de i é: 4 O valor de i é: 5 O valor de i é: 6 O valor de i é: 7 O valor de i é: 8 O valor de i é: 9 O valor de i é: 10 É possível usar a palavra-chave Step para definirmos o incremento da variável de controle do laço. Veja:
Sub ExemploLacoFor()
' exemplo de laço For Next que mostra os números
' pares de 0 até 10
For i = 0 To 10 Step 2
MsgBox "O valor de i é: " & i
Next
End Sub
Ao executarmos o código novamente, o resultado será: O valor de i é: 0 O valor de i é: 2 O valor de i é: 4 O valor de i é: 6 O valor de i é: 8 O valor de i é: 10 Finalmente, se quisermos um laço For Next que conta de trás para a frente, ou seja, diminui a variável de controle, basta fornecermos um valor negativo para a palavra-chave Step. Veja:
Sub ExemploLacoFor()
' exemplo de laço For Next que mostra os números
' pares de 10 até 0
For i = 10 To 0 Step -2
MsgBox "O valor de i é: " & i
Next
End Sub
|
Ruby ::: Dicas & Truques ::: Rotinas de Conversão |
Como converter uma string em um valor inteiro válido em Ruby usando a função to_iQuantidade de visualizações: 9040 vezes |
|
Em algumas situações nós temos que efetuar cálculos matemáticos usando valores fornecidos como texto. Para isso nós precisamos converter esses valores que chegam como string em valores numéricos válidos. Em Ruby nós podemos converter uma string em um inteiro usando a função to_i. Veja um exemplo que mostra como ler a entrada do usuário em Ruby a partir do teclado e efetuar um cálculo matemático:
# Veja o uso do método to_i para converter um string
# em um valor inteiro válido
print "Informe o primeiro número: "
num1 = (gets.chomp).to_i
print "Informe o segundo número: "
num2 = (gets.chomp).to_i
# Exibe o resultado
puts "A soma dos valores é: #{num1 + num2}"
Ao executar este código Ruby nós teremos o seguinte resultado: Informe o primeiro número: 8 Informe o segundo número: 2 A soma dos valores é: 10 |
PHP ::: Dicas & Truques ::: Geometria, Trigonometria e Figuras Geométricas |
Como calcular o diâmetro, a circunferência e a área de um círculo dado o raio em PHP - PHP para GeometriaQuantidade de visualizações: 2184 vezes |
|
O círculo é uma figura geométrica plana e que possui quatro características: seu raio, seu diâmetro, sua circunferência e sua área. Aqui já podemos aproveitar e relembrar a diferença entre o círculo e a circunferência. O círculo é o conjunto de pontos resultantes da união entre uma circunferência e seus pontos internos, ou seja, o círculo é a área cuja delimitação é uma circunferência. É importante observar que alguns autores tratam o círculo como uma circunferência. Assim, para estes autores, calcular a circunferência de um círculo equivale a calcular o perímetro da circunferência. Veja a figura a seguir para relembrar o que é o raio de um círculo: ![]() Nesta dica mostrarei como podemos usar PHP para calcular o diâmetro, a circunferência e a área de um círculo tendo apenas o raio como informação. Antes, porém, vamos às formulas. Sabendo que r é o raio, temos: \[\text{Diâmetro d} = 2 \times r \] \[\text{Circunferência C} = 2 \times \pi \times r \] \[\text{Área A} = \pi \times r^2 \] Agora vamos ver o código PHP que solicita ao usuário que informe o raio do círculo e mostra o diâmetro, a circunferência e a área:
<?php
// para executar abra uma janela de comando
// cmd e dispare o comando abaixo:
// C:\xampp\php>php c:\estudos_php\estudos.php
// para ler a entrada do usuário
$entrada = fopen("php://stdin","r");
// vamos ler o raio do círculo
echo "Informe o raio do círculo: ";
$raio = trim(fgets($entrada));
// vamos achar o diâmetro do círculo
$diametro = 2 * $raio;
// agora calculamos a circunferência
$circunferencia = 2 * pi() * $raio;
// finalmente calculamos a área do círculo
$area = pi() * pow($raio, 2);
// vamos mostrar os resultados
echo "O diâmetro do círculo é: " . $diametro . "\n";
echo "A circunferência do círculo é: " . $circunferencia . "\n";
echo "A área do círculo é: " . $area;
?>
Ao executar este código PHP nós teremos o seguinte resultado: Informe o raio do círculo: 10 O diâmetro do círculo é: 20.0 A circunferência do círculo é: 62.83185307179586 A área do círculo é: 314.1592653589793 Lembre-se de que a área é em centímetros quadrados, metros quadrados, etc. |
Java ::: Classes e Componentes ::: JTextArea |
Java Swing - Como adicionar mais texto a um JTextArea usando o método append()Quantidade de visualizações: 2 vezes |
|
Nesta dica mostrarei como é possível usar o método append() da classe JTextArea para adicionar mais conteúdo a esse controle. Esta é uma técnica muito importante no desenvolvimento de aplicações Java Swing. Segue um exemplo completo (note que fiz toda a aplicação Java Swing na mão mesmo, ou seja, não usei o editor visual do NetBeans ou semelhantes):
package arquivodecodigos;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Estudos extends JFrame {
JTextArea textArea;
JTextField texto;
JButton btn;
public Estudos() {
super("Como adicionar texto a um JTextArea");
Container c = getContentPane();
FlowLayout layout = new FlowLayout(FlowLayout.LEFT);
c.setLayout(layout);
textArea = new JTextArea(10, 20);
texto = new JTextField(10);
btn = new JButton("Adicionar Texto");
btn.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
textArea.append(texto.getText());
}
}
);
c.add(textArea);
c.add(texto);
c.add(btn);
setSize(350, 250);
setVisible(true);
}
public static void main(String args[]) {
Estudos app = new Estudos();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Veja que neste exemplo, mais conteúdo é adicionado ao controle JTextArea sem provocar uma quebra de linha. Em outras dicas e truques dessa seção você aprenderá como isso pode ser feito. |
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |






