Python ::: Python para Engenharia ::: Engenharia Civil - Concreto, Concreto Armado e Concretos Especiais

Cálculo de estribos em vigas de concreto armado usando Python - Verificação da compressão diagonal do concreto

Quantidade de visualizações: 236 vezes
No dimensionamento de vigas de concreto armado à força cortante, ou seja, aos esforços de cisalhamento, nós adotamos, de acordo com recomendações da ABNT NBR 6118 (Projeto de estruturas de concreto armado), o modelo de treliça clássica de Ritter-Mörsh, na qual é suposto que uma carga aplicada num ponto qualquer de uma viga de concreto armado, chegue até os apoios percorrendo o caminho de uma treliça. Recordemos ainda que na treliça clássica de Ritter-Mörsh o ângulo de inclinação das bielas comprimidas é igual à 45°.

Neste modelo de treliça, a compressão do banzo superior é resistida pelo concreto, enquanto a tração do banzo inferior é resistida pelo aço. As diagonais comprimidas também são resistidas pelo concreto, cabendo ao aço (estribos) o papel de reforçar as diagonais tracionadas. Notem que usei "reforçar", pois o concreto oferece também uma parcela de resistência à tração nestas diagonais.

Sendo assim, um dos primeiros passos no cálculo e detalhamento das armaduras transversais, ou seja, a armadura de cisalhamento de uma viga de concreto armado, é a verificação da compressão diagonal do concreto. Neste passo nós verificamos se as bielas comprimidas resistem ao esforço cortante solicitante de projeto VSd.

A verificação da compressão diagonal do concreto no Modelo I (no qual o ângulo α, que é o ângulo entre os estribos e o eixo longitudinal da viga, pode ser considerado entre 45º e 90º) pode ser realizada por meio da seguinte fórmula:

\[V_\text{Rd2} = 0,27 \cdot \alpha_\text{v2} \cdot f_\text{cd} \cdot b_w \cdot d \]
Onde:

fcd é a resistência de cálculo do concreto, em kN/cm2;

bw é a largura da viga, em centímetros;

d é a altura útil da viga em centímetros;

Já o αv2 pode ser calculado pela seguinte fórmula:

\[\alpha_\text{v2} = 1 - \frac{f_\text{ck}}{250}\]
Onde:

fck é a resistência característica do concreto, em Mpa.

Veja agora o código Python :

# método principal
def main():
  # vamos pedir para o usuário informar a altura da viga
  altura = float(input("Informe a altura h da viga em cm: "))
   
  # vamos pedir para o usuário informar a largura da viga
  largura = float(input("Informe a largura bw da viga em cm: "))

  # vamos calcular a altura útil da viga
  # aqui eu usei 0.9 mas alguns engenheiros usam 0.95
  altura_util = 0.9 * altura
  
  # vamos pedir para o usuário informar o FCK do concreto
  fck = float(input("Informe o FCK do concreto em Mpa: "))

  # vamos ler o coeficiente de minoração do concreto
  yc = float(input("Informe o coeficiente de minoração yc: "))   

  # vamos solicitar o esforço cortante solicitante VSk
  VSk = float(input("Informe o esforço cortante solicitante em kN: ")) 

  # vamos ler o coeficiente de majoração das cargas
  yf = float(input("Informe o coeficiente de majoração yf: "))

  # vamos calcular o esforço cortante solicitante de cálculo VSd
  VSd = yf * VSk

  # agora vamos calcular o fcd do concreto
  fcd = fck / yc

  # vamos calcular o alfa v2
  av2 = 1 - (fck / 250)

  # finalmente vamos calcular o VRd2 no Modelo de Cálculo I
  VRd2 = 0.27 * av2 * (fcd / 10) * largura * altura_util 

  # vamos mostrar os resultados
  print("\n------ RESULTADOS -----------------------------")
  print("O fcd do concreto é: {0} Mpa".format(round(fcd, 4)))
  print("O valor de av2 é: {0}".format(round(av2, 4)))
  print("O valor de VRd2 é: {0} kN".format(round(VRd2, 4)))
  print("O valor de VSd é: {0} kN".format(round(VSd, 4)))

  # vamos testar se as bielas de compressão não serão esmagadas
  if (VSd <= VRd2):
    print("VSd <= VRd2: As bielas de compressão RESISTEM")
  else:
    print("VSd > VRd2: As bielas de compressão NÃO RESISTEM")

if __name__ == "__main__":
  main()

Ao executar este código Python nós teremos o seguinte resultado:

Informe a altura h da viga em cm: 40
Informe a largura bw da viga em cm: 20
Informe o FCK do concreto em Mpa: 25
Informe o coeficiente de minoração yc: 1.4
Informe o esforço cortante solicitante em kN: 75
Informe o coeficiente de majoração yf: 1.4

------ RESULTADOS -----------------------------
O fcd do concreto é: 17.8571 Mpa
O valor de av2 é: 0.9
O valor de VRd2 é: 312.4286 kN
O valor de VSd é: 105.0 kN
VSd <= VRd2: As bielas de compressão RESISTEM


Java ::: Reflection (introspecção) e RTI (Runtime Type Information) ::: Passos Iniciais

Saiba o que é Reflexão (Reflection) em Java - Como usar Reflexão (Reflection) na linguagem Java - Revisado

Quantidade de visualizações: 18444 vezes
Reflection (ou Reflexão), também conhecida como RTI (Runtime Type Information) em algumas linguagens, é um mecanismo para descobrir dados a respeito de um programa em tempo de execução. Reflection em Java nos permite descobrir informações sobre atributos ou membros (campos), métodos e construtores de classes. Podemos também operar nos campos e métodos que descobrimos.

A Reflection permite o que é normalmente chamada de programação dinâmica em Java.

A Reflection em Java é conseguida usando a Java Reflection API. Esta API consiste de classes nos pacotes java.lang e java.lang.reflect.

Antes de prosseguirmos, veja um exemplo de como podemos listar todos os métodos públicos da classe Object:

package arquivodecodigos;

import java.lang.reflect.*;
 
public class Estudos{
  public static void main(String args[]){
    // vamos carregar a classe Object
    try{
      Class c = Class.forName("java.lang.Object");
 
      // obtém os nomes dos métodos
      Method[] metodos = c.getMethods(); 
 
      // exibe o nome de cada método
      for(int i = 0; i < metodos.length; i++){
        System.out.println(metodos[i].getName()); 
      }
    }
    catch(ClassNotFoundException e){
      System.out.println(e.getMessage()); 
    }
 
    System.exit(0);
  }
} 

Ao executarmos este código nós teremos o seguinte resultado:

wait
wait
wait
equals
toString
hashCode
getClass
notify
notifyAll

Eis uma lista das coisas que podemos fazer com a Java Reflection API:

1) Determinar a classe de um objeto;
2) Obter informações sobre os modificadores, campos (atributos), métodos, construtores e superclasses de uma classe;
3) Descobrir quais constantes e declarações de métodos pertencem a uma interface;
4) Criar uma instância de uma classe cujo nome não sabemos até o tempo de execução;
5) Obter e definir o valor do campo de um objeto;
6) Invocar um método em um objeto;
7) Criar um novo array, cujo tamanho e tipo de dados só saberemos em tempo de execução.

A Java Reflection API é geralmente usada para criar ferramentas de desenvolvimento tais como debuggers, class browsers e construtores de GUI. Geralmente, neste tipo de ferramentas, precisamos interagir como classes, objetos, métodos e campos, e não sabemos quais em tempo de compilação. Assim, a aplicação deve, dinamicamente, encontrar e acessar estes itens.

Esta dica foi revisada e testada no Java 8.


C# ::: Coleções (Collections) ::: ArrayList

Como percorrer os elementos de uma ArrayList do C# usando um objeto da interface IEnumerator

Quantidade de visualizações: 8586 vezes
Um objeto da interface IEnumerator (no namespace System.Collections) pode ser usado para percorrer os elementos de uma coleção não-genérica, como é o caso da classe ArrayList. Podemos usar um enumerador para acessar os itens da lista individualmente, mas estes não poderão sofrer modificações por meio do enumerador.

Um enumerador para uma ArrayList é obtido por meio do método GetEnumerator(). Veja:

// vamos obter um enumerador para a lista
IEnumerator enumerador = lista.GetEnumerator();

Observe agora um trecho de código no qual temos uma lista contendo 5 inteiros. Note o uso de um IEnumerator para percorrer os elementos e exibir o valor contido no elemento atual:

static void Main(string[] args){
  // não se esqueça
  // using System.Collections;

  // Cria o ArrayList
  ArrayList lista = new ArrayList();

  // Adiciona 5 inteiros
  lista.Add(65);
  lista.Add(2);
  lista.Add(13);
  lista.Add(97);
  lista.Add(4);

  // vamos obter um enumerador para a lista
  IEnumerator enumerador = lista.GetEnumerator();

  // vamos percorrer a lista usando o enumerador
  while(enumerador.MoveNext()){
    Console.WriteLine(enumerador.Current); 
  }

  Console.Write("\n\nPressione uma tecla para sair...");
  Console.ReadKey();
}

Para saber mais sobre os enumeradores, consulte minhas dicas sobre a interface IEnumerator.


Python ::: Fundamentos da Linguagem ::: Métodos, Procedimentos e Funções

Aprenda a programar em Python - Como criar suas próprias funções em Python

Quantidade de visualizações: 17841 vezes
Funções em Python são definidas usando a palavra-chave def. Tal palavra é seguida pelo nome da função, seguida de um par de parênteses que podem conter os parâmetros da função. Finalmente os dois-pontos (:) finalizam a definição da função. Veja um exemplo:

def minhaFuncao():
  print "Fui chamada"

# chama a função
minhaFuncao()

Veja agora um exemplo de função com um parâmetro:

def escrever(texto):
  print texto

# chama a função
escrever("Gosto de programar em Python")

Em Python, funções podem retornar um resultado para o código chamador usando a palavra-chave return. Veja:

def maior(x, y):
  if x > y:
    return x
  else:
    return y

# chama a função
print maior(43, 6)



Python ::: Pandas Python Library (Biblioteca Python Pandas) ::: Passos Iniciais

Como usar a biblioteca Pandas do Python em seus projetos de Data Science e Machine Learning

Quantidade de visualizações: 3103 vezes
A biblioteca Pandas foi criada por Wes McKinney em 2008 e, desde então, tem sido adotada em projetos que envolvem Big Data, Data Science, Data Mining, Machine Learning e até mesmo aplicações gerais de Inteligência Artificial (IA).

Esta biblioteca nos oferece funções para o trabalho com datasets (conjunto de dados). Tais funções permitem analisar, limpar, explorar e manipular dados. Isso faz todo sentido, visto que o nome Pandas é uma referência à "Panel Data" e "Python Data Analysis".

Já tenho o Pandas disponível na minha instalação do Python?

Antes de iniciar qualquer projeto que envolva a bilioteca Pandas, é importante verificar se a mesma está disponível em sua instalação do Python. Isso pode ser de várias formas. Mostrarei como obter a lista de módulos usando a opção "list" do pip. Basta abrir uma janela de terminal e disparar o seguinte comando:

C:\Users\Osmar>pip list

Você terá um resultado parecido com:

Package           Version
----------------- -------
astroid           2.4.2
colorama          0.4.4
isort             5.6.4
lazy-object-proxy 1.4.3
mccabe            0.6.1
numpy             1.19.4
pandas            1.1.5
Pillow            8.0.1
pip               20.2.3
pylint            2.6.0
python-dateutil   2.8.1
pytz              2020.4
setuptools        49.2.1
six               1.15.0
toml              0.10.2
wrapt             1.12.1
wxPython          4.1.1

Uma outra forma é tentando importar o módulo pandas. Veja:

# importamos a bibliteca Pandas
import pandas as pd

def main():
  # vamos mostrar a versão da biblioteca Pandas
  versao = pd.__version__

  print("A versão do Pandas é:", versao)

if __name__== "__main__":
  main()

Se você tiver o Pandas instalado, o resultado desse código será algo como:

A versão do Pandas é: 1.1.5

Se você não tiver a biblioteca Pandas instalada, a seguinte mensagem de erro será exibida:

Exception has occurred: ModuleNotFoundError
No module named 'pandas'
  File "C:\estudos_python\estudos.py", line 2, in <module>
    import pandas as pd

Não tenho o Pandas ainda. O que faço?

Abra uma janela de terminal e dispare o comando abaixo:

C:\Users\Osmar>pip install pandas

Depois de alguns segundos você verá o seguinte resultado:

Collecting pandas
  Downloading pandas-1.1.5-cp39-cp39-win_amd64.whl (8.9 MB)
     |-| 8.9 MB 1.7 MB/s
Collecting numpy>=1.15.4
  Downloading numpy-1.19.4-cp39-cp39-win_amd64.whl (13.0 MB)
     |-| 13.0 MB 3.3 MB/s
Collecting pytz>=2017.2
  Downloading pytz-2020.4-py2.py3-none-any.whl (509 kB)
     |-| 509 kB 6.4 MB/s
Collecting python-dateutil>=2.7.3
  Downloading python_dateutil-2.8.1-py2.py3-none-any.whl (227 kB)
     |-| 227 kB 3.2 MB/s
Requirement already satisfied: six>=1.5 in 
c:\users\osmar\appdata\roaming\python\python39\site-packages
 (from python-dateutil>=2.7.3->pandas) (1.15.0)
Installing collected packages: numpy, pytz, 
python-dateutil, pandas
Successfully installed numpy-1.19.4 pandas-1.1.5 
python-dateutil-2.8.1 pytz-2020.4
WARNING: You are using pip version 20.2.3; however, 
version 20.3.1 is available.
You should consider upgrading via the 'c:\python_3_9_1\python.exe -m pip install 
--upgrade pip' command.

Obteve resultado parecido? Pronto! Você já pode começar a usar a biblioteca Pandas em seus aplicações Python.


Java ::: Dicas & Truques ::: Matemática e Estatística

Como converter de octal para decimal usando o método parseInt() da classe Integer da linguagem Java

Quantidade de visualizações: 10189 vezes
Nesta dica eu mostrarei como podemos tirar proveito do método parseInt() da classe Integer do Java para converter um valor octal para decimal. Para isso nós só precisamos fornecer o valor 8 como segundo argumento para esta função.

Veja o código completo:

package arquivodecodigos;

public class Estudos{
  public static void main(String args[]){
    String octal = "10";
     
    // efetua a conversão de octal para
    // decimal
    int decimal = Integer.parseInt(octal, 8);
 
    // exibe o resultado
    System.out.println("O octal " + octal + " em decimal é " +
      decimal);
 
    System.exit(0);
  }
}

Ao executarmos este código nós teremos o seguinte resultado:

O octal 10 em decimal é 8


C++ ::: Dicas & Truques ::: Matemática e Estatística

Como testar se um número é par ou ímpar em C++

Quantidade de visualizações: 842 vezes
Muitas vezes precisamos saber se um determinado número é par ou ímpar. Isso pode ser feito em C++ usando-se o operador de módulo "%", que retorna o resto de uma divisão por inteiros.

Veja o exemplo a seguir:

#include <string>
#include <iostream>

using namespace std;

int main(int argc, char *argv[]){
  // variáveis usadas para resolver o problema
  int num;
  
  // vamos ler um número inteiro
  cout << "Informe um valor inteiro: ";
  cin >> num;

  // vamos testar se o número é par
  if(num % 2 == 0){
    cout << "Você informou um número par" << endl;
  }
  // é ímpar
  else{
    cout << "Você informou um número ímpar" << endl;
  }
   
  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS; 
}

Ao executar este programa C++ nós teremos o seguinte resultado:

Informe um valor inteiro: 8
Você informou um numero par


Delphi ::: VCL - Visual Component Library ::: TComboBox

Como usar a propriedade Items da classe TComboBox do Delphi

Quantidade de visualizações: 13250 vezes
A propriedade Items da classe TComboBox representa um objeto da classe TStrings, a classe base para objetos que representam uma lista de strings. Isso quer dizer que podemos acessar a propriedade Items e usar todos os métodos e propriedades da classe TStrings, tais como Add(), Clear(), Delete(), Exchange(), etc.

Veja, por exemplo, como usar o método Add() para adicionar um novo item no ComboBox:

procedure TForm1.Button1Click(Sender: TObject);
begin
  // vamos adicionar um novo item ao ComboBox
  comboBox1.Items.Add('Arquivo de Códigos');
end;

É possível obter um referência à propriedade Items para manipular os itens do ComboBox indiretamente. Veja:

procedure TForm1.Button1Click(Sender: TObject);
var
  lista: TStrings;
begin
  // vamos obter a lista de itens do ComboBox
  lista := comboBox1.Items;

  // vamos adicionar um novo item à lista
  lista.Add('Arquivo de Códigos');
end;

Esta técnica é útil quando queremos inserir itens em um TComboBox a partir de uma função ou procedure. Veja:

// procedure personalizada para inserir itens em um TComboBox
procedure inserirItensComboBox(lista: TStrings);
begin
  lista.Add('Arquivo de Códigos');
  lista.Add('Osmar J. Silva');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // vamos chamar a procedure que adiciona os itens no ComboBox
  inserirItensComboBox(ComboBox1.Items);
end;

Para finalizar, veja como escrever uma função personalizada que constrói e retorna uma lista de strings. Note como usamos o objeto TStrings retornado para preencher o ComboBox:

// função personalizada que constrói e retorna uma lista
// de strings
function obterLista: TStrings;
var
  lista: TStringList;
begin
  lista := TStringList.Create;
  lista.Add('Arquivo de Códigos');
  lista.Add('Osmar J. Silva');

  Result := lista;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // vamos obter a lista de strings
  ComboBox1.Items := obterLista;
end;

Observe que, embora o retorno seja TStrings, no corpo da função nós construímos um objeto da classe TStringList. Isso acontece porque TStrings é uma classe abstrata e, portanto, não podemos chamar seu construtor. Como TStringList herda de TStrings e é uma classe concreta, esta é a escolha mais óbvia.

Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009.


C++ ::: Dicas & Truques ::: Ponteiros, Referências e Memória

Como usar ponteiros em C++ - Apostila de C++ para iniciantes

Quantidade de visualizações: 8098 vezes
Antes de pensarmos em ponteiros, é importante nos lembrarmos de alguns aspectos referentes à variáveis. Dependendo do seu conhecimento de programação, você deve saber que variáveis possuem nomes que as identificam durante a execução do programa. Você deve saber também que uma variável armazena um valor (que pode ser fixo, no caso de uma constante, ou pode mudar durante a execução de seus códigos).

O que poucos programadores se lembram é que uma variável possui um endereço, e que o nome da variável não é nada mais que um apelido para a localização deste endereço. Desta forma, um ponteiro não é nada mais que um tipo especial de variável que armazena o endereço de outra. Veja um exemplo:

#include <iostream>

using namespace std;

int main(int argc, char *argv[]){
  // variável do tipo int
  int valor = 10;

  // ponteiro para uma variável do tipo int
  int *p = &valor;

  // exibe o valor da variável "valor", apontada
  // pelo ponteiro p
  cout << *p << endl;

  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}

Neste código nós temos a declaração e definição de duas variáveis:

int valor = 10;
int *p = &valor;

A primeira variável é uma variável do tipo int e a segunda é um ponteiro para uma variável do tipo int. Veja que devemos sempre usar "*" antes do nome de um ponteiro em sua declaração. O símbolo "&" serve para indicar que estamos acessando o endereço de uma variável e não o seu conteúdo. O resultado destas duas linhas é que agora temos um ponteiro que nos permite acessar e manipular a variável valor.

Observe a linha:

 
cout << *p << endl;

Aqui nós estamos acessando o valor da variável apontada por p. Veja o uso do símbolo "*" para acessar o valor da variável. Isso é chamado de desreferenciamento de ponteiros. Pareceu complicado? Veja uma linha de código que altera indiretamente o valor da variável valor para 30:

 
*p = 30;

Ponteiros são ferramentas muito importantes na programação em C++. No entanto, é preciso ter muito cuidado ao lidar com eles. A primeira coisa a ter em mente é que um ponteiro não está apontando para nenhum lugar até que atribuimos a ele o endereço de uma outra variável. E é aí que mora o perigo. Um programa entra em colapso absoluto se tentarmos acessar um ponteiro que aponta para um local de memória que já foi liberado novamente ao sistema. No caso menos grave, estaremos tentando acessar locais de memória inválidos ou reservados a outros programas ou tarefas do sistema operacional. Isso me lembra os velhos tempos da tela azul de morte.


Ruby ::: Dicas & Truques ::: Strings e Caracteres

Como concatenar strings em Ruby usando o operador <<

Quantidade de visualizações: 8438 vezes
Esta dica mostra como podemos usar o operador << para concatenar strings em Ruby. Veja:

frase1 = "Gosto muito de Ruby"
frase2 = " e de Python"

# vamos concatenar as duas strings
res = frase1 << frase2

# exibe o resultado
puts res

Ao executar este código Ruby nós teremos o seguinte resultado:

Gosto muito de Ruby e de Python

Carregar Publicações Anteriores


Nossas 20 dicas & truques de programação mais populares

Você também poderá gostar das dicas e truques de programação abaixo

Nossas 20 dicas & truques de programação mais recentes

Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site

Últimos Exercícios Resolvidos

E-Books em PDF

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 35 usuários muito felizes estudando em nosso site.