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 concretoQuantidade 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 - RevisadoQuantidade 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 IEnumeratorQuantidade 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 PythonQuantidade 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 LearningQuantidade 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 JavaQuantidade 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 DelphiQuantidade 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 iniciantesQuantidade 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 |
Nossas 20 dicas & truques de programação mais populares |
PHP - Programação Orientada a Objetos em PHP - Como passar um objeto de uma classe para uma função PHP MySQL - Como retornar a hora atual no MySQL usando as funções CURTIME(), CURRENT_TIME e CURRENT_TIME() GNU Octave - GNU Octave para Álgebra Linear - Como calcular o determinante de uma matriz usando a função det() do GNU Octave |
Você também poderá gostar das dicas e truques de programação abaixo |
MySQL - Como retornar a hora atual no MySQL usando as funções CURTIME(), CURRENT_TIME e CURRENT_TIME() |
Nossas 20 dicas & truques de programação mais recentes |
Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site |
Python - Como criar o jogo Pedra, Papel, Tesoura em Python - Jogo completo em Python com código comentado |
Últimos Exercícios Resolvidos |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |