Dúvidas, comentários e doaçoes: +55 62 9 8513 2505

Planilha de Dimensionamento de Tubulações Hidráulicas Água Fria e Água Quente Completa
Nossa planilha automática de dimensionamento de tubulações de água fria e quente é uma ferramenta desenvolvida para auxiliar engenheiros e projetistas no cálculo rápido e preciso das redes hidráulicas de edificaçoes. Por meio da inserçao de dados como vazao, diâmetro da tubulaçao, comprimento da rede, material do tubo e coeficientes hidráulicos, a planilha realiza automaticamente os cálculos necessários para verificar velocidade da água, perda de carga e dimensionamento adequado das tubulaçoes.

Você está aqui: Cards de Engenharia Civil - Estruturas de Aço e Madeira
Card 0 de 0
O filtro aplicado não retornou nenhum resultado. Clique o botão Remover Filtro ou experimente um filtro diferente.

Filtrar Cards
Use esta opção para filtrar os cards pelos tópicos que mais lhe interessam.
Termos:
Aviso Importante: Nos esforçamos muito para que o conteúdo dos cards e dos testes e conhecimento seja o mais correto possível. No entanto, entendemos que erros podem ocorrer. Caso isso aconteça, pedimos desculpas e estamos à disposição para as devidas correções. Além disso, o conteúdo aqui apresentado é fruto de conhecimento nosso e de pesquisas na internet e livros. Caso você encontre algum conteúdo que não deveria estar aqui, por favor, nos comunique pelos e-mails exibidos nas opções de contato.
Link para compartilhar na Internet ou com seus amigos:

Delphi ::: Dicas & Truques ::: Rotinas de Conversão

Como converter uma string em um valor numérico inteiro em Delphi usando as funções StrToInt(), TryStrToInt() e StrToIntDef()

Quantidade de visualizações: 34301 vezes
Em algumas situações precisamos converter strings em valores numéricos do tipo inteiro. Isso acontece quando recebemos valores de caixas de texto e precisamos usuá-los em cálculos.

Vamos começar com a função StrToInt() da unit SysUtils. Esta função recebe uma string representando um valor inteiro válido e retorna um valor inteiro. Veja o exemplo:

procedure TForm1.Button1Click(Sender: TObject);
var
  valor1, valor2, soma: Integer;
begin
  // vamos receber as strings dos TEdits e converter
  // seus valores para inteiros
  valor1 := StrToInt(Edit1.Text);
  valor2 := StrToInt(Edit2.Text);

  // vamos obter a soma dos dois valores
  soma := valor1 + valor2;

  // vamos exibir o resultado. Note o uso de IntToStr() para
  // converter o valor inteiro em string
  ShowMessage('A soma é: ' + IntToStr(soma));
end;

Note que, se a string sendo convertida possuir um valor inteiro inválido, uma exceção do tipo EConvertError será lançada. Podemos evitar isso usando a função TryStrToInt(). Esta função recebe dois argumentos: a string a ser convertida e a variável do tipo Integer que receberá o valor. O resultado será true se a conversão for feita com sucesso e false em caso contrário. Veja:

procedure TForm1.Button1Click(Sender: TObject);
var
  valor: Integer;
begin
  // vamos tentar converter o valor da caixa de texto
  // em um inteiro
  if TryStrToInt(Edit1.Text, valor) then
    ShowMessage('Conversão efetuada com sucesso.')
  else
    ShowMessage('Erro na conversão');
end;

Há ainda uma terceira possibilidade: usar a função StrToIntDef(). Esta função funciona exatamente da mesma forma que StrToInt(), exceto que agora, se houver um erro de conversão, um valor inteiro padrão será retornado. Veja:

procedure TForm1.Button1Click(Sender: TObject);
var
  valor: Integer;
begin
  // vamos converter o valor da caixa de texto
  // em um inteiro. Se a conversão não puder ser feita
  // o valor 10 será atribuído à varial valor
  valor := StrToIntDef(Edit1.Text, 10);

  // vamos exibir o resultado
  ShowMessage(IntToStr(valor));
end;

Caso você precise trabalhar com inteiros de 64 bits, poderá usar as funções StrToInt64(), StrToInt64Def() e TryStrToInt64().

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


wxWidgets ::: Dicas de Estudo e Anotações ::: Passos Iniciais

Como baixar, compilar a biblioteca e criar um projeto C++ wxWidgets usando o Visual Studio 2017

Quantidade de visualizações: 2849 vezes
O wxWidgets (conhecido anteriormente como wxWindows) é um toolkit para a criação de interfaces gráficas de usuário (UI) multiplataforma. É lançado sob uma licença livre, a wxWindows Library Licence.

Lançada em 1992 por Julian Smart, que continua como desenvolvedor, a biblioteca wxWidgets permite que um programa seja compilado e executado em diversas plataformas de computação, com poucas ou nenhuma modificação. Ela suporta sistemas como: Microsoft Windows, Apple Inc. Mac OS, Linux/Unix (para X11).

A biblioteca é implementada em C++, mas outras implementações estão disponíveis para várias das linguagens de programação mais comuns, entre elas: Python, Smalltalk, Perl e Java.

Fazendo o dowload do código fonte do wxWidgets

Agora que você já sabe o que é o wxWidgets, chegou a hora da notícia triste. Compilar e usar esta biblioteca em nossos programas C++ é um pesadelo, principalmente no Windows. Por isso, resolvi compartilhar com todos as minha experiência, já que o entendimento de todos os passos envolvidos me consumiu alguns finais de semana.

O primeiro passo é baixar o código fonte (source code) do wxWidgets. Para isso aponte o seu navegador para https://www.wxwidgets.org. Para esta dica eu usei a versão 3.1.3 no Visual Studio 2017. Acredito que outras versões, tanto do wxWidgets quanto do Visual Studio C++ tenham procedimentos parecidos.

Vá até a área de downloads e localize o instalador Windows Installer 1.3.1, com o tamanho de 53Mb. Lembre-se que estamos baixando o código fonte da biblioteca, e não os binários já prontos.

Finalizado o download, faça a instalação em um diretório sem espaços. Uma boa sugestão é "C:\wxWidgets-3.1.3"

Compilando o wxWidgets usando o Visual Studio 2017

Chegou a hora da compilação. Se você ainda não o fez, abra o VS 2017, vá no menu Abrir -> Pasta/Solução e navegue até o diretório C:\wxWidgets-3.1.3\build\msw. Neste diretório você encontrará projetos para as mais diferentes versões do Visual Studio. Como estamos usando o VS 2017, o projeto a ser aberto é wx_vc15.sln. Escolhe logo este arquivo e clique Abrir.

Para o processo de compilação nós temos quatro opções: Debug (static), DLL Debug, DLL Release e Release (static). O Debug deixa o executável maior, porque inclui verificações de faixas e outras informações importantes para o desenvolvimento. As versões com DLL são escolhas boas, pois deixa o executável menor e agiliza o processo de compilação. O alvo da CPU pode ser Win32 ou x64, dependendo do seu desejo. Para esta dica eu usei Win32.

Agora vamos compilar para estas quatro opções. Escolha a primeira (Debug), defina a CPU alvo e use a opção Compilar Solução. Pode ir buscar um cafezinho porque o processo é um pouco demorado. Faça isso com as outras três opções de compilação.

Correu tudo bem? Nada de erros? Vamos continuar então.

Criando o seu primeiro projeto wxWidgets para testar sua compilação

Em geral, quando terminamos de compilar o wxWidgets, a primeira coisa que fazemos é abrir uma das samples (amostras) que acompanham a biblioteca, tais como a "minimal", no diretório "C:\wxWidgets-3.1.3\samples\minimal". Se você fizer isso agora, verá que esta aplicação (minimal_vc15.sln) é compilada e executada com sucesso. O problema é quando queremos construir nossa aplicação a partir deste template. O simples fato de renomearmos o projeto ou movê-lo desse diretório já trará uma dor de cabeça danada.

Então vamos criar nosso próprio projeto. Feche e abra o VS 2017 novamente. Em seguida vá até o menu Arquivo -> Novo -> Projeto -> Projeto Vazio. Dê um nome e um local para este projeto, sempre sem espaços e caracteres especiais.

No Gerenciador de Soluções, clique com o botão auxiliar no nó Arquivos de Origem (Source Code) e escolha Adicionar -> Novo Item. Na janela que se abrirá, escolha Arquivo do C++ (.cpp), dê o nome "Main.cpp" e clique Adicionar.

Agora copie o código abaixo (retirado do manual do wxWidgets) e cole no arquivo Main.cpp:

// wxWidgets "Hello World" Program
// For compilers that support precompilation, 
// includes "wx/wx.h".
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
    #include <wx/wx.h>
#endif

class MyApp : public wxApp
{
  public:
    virtual bool OnInit();
};

class MyFrame : public wxFrame
{
  public:
    MyFrame();

  private:
    void OnHello(wxCommandEvent& event);
    void OnExit(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);
};

enum
{
  ID_Hello = 1
};

wxIMPLEMENT_APP(MyApp);

bool MyApp::OnInit()
{
  MyFrame *frame = new MyFrame();
  frame->Show(true);
  return true;
}

MyFrame::MyFrame()
  : wxFrame(NULL, wxID_ANY, "Hello World")
{
  wxMenu *menuFile = new wxMenu;
  menuFile->Append(ID_Hello, "&Hello...\tCtrl-H",
    "Help string shown in status bar for this menu item");
  menuFile->AppendSeparator();
  menuFile->Append(wxID_EXIT);
  wxMenu *menuHelp = new wxMenu;
  menuHelp->Append(wxID_ABOUT);
  wxMenuBar *menuBar = new wxMenuBar;
  menuBar->Append(menuFile, "&File");
  menuBar->Append(menuHelp, "&Help");
  SetMenuBar(menuBar);
  CreateStatusBar();
  SetStatusText("Welcome to wxWidgets!");
  Bind(wxEVT_MENU, &MyFrame::OnHello, this, ID_Hello);
  Bind(wxEVT_MENU, &MyFrame::OnAbout, this, wxID_ABOUT);
  Bind(wxEVT_MENU, &MyFrame::OnExit, this, wxID_EXIT);
}

void MyFrame::OnExit(wxCommandEvent& event)
{
  Close(true);
}

void MyFrame::OnAbout(wxCommandEvent& event)
{
  wxMessageBox("This is a wxWidgets Hello World example",
    "About Hello World", wxOK | wxICON_INFORMATION);
}

void MyFrame::OnHello(wxCommandEvent& event)
{
  wxLogMessage("Hello world from wxWidgets!");
}


Assim que você colar esse código, você já verá um monte de erros, várias partes do código sublinhadas de vermelho. Não se desespere que nós vamos corrigir isso agora.

Clique com o botão direito no nó do seu projeto e escolha a opção Propriedades. Nessa janela, localize a opção Configuração e selecione Todas as configurações. Plataforma fica à sua escolha, Win32 (x86) ou x64. Na dúvida deixe Win32.

Agora vá em C/C++, na aba Geral e localize Diretórios de Inclusão Adicionais. Clique e escolha a opção Editar. Adicione uma nova entrada para o diretório "C:\wxWidgets-3.1.3\include" (sem as aspas). Clique a opção Aplicar. Agora, ainda na opção C/C++, escolha Pré-processador, clique Editar e vamos acrescentar o valor WXUSINGDLL. Clique Aplicar novamente e vamos agora até o Veiculador (Linker). Localize Diretórios de Bibliotecas Adicionais e adicione a entrada "C:\wxWidgets-3.1.3\lib\vc_dll". Clique Aplicar.

Agora mude a configuração para Release. Em seguida vá na seção C/C++, localize a opção Diretórios de Inclusão Adicionais e acrescente a entrada "C:\wxWidgets-3.1.3\lib\vc_dll\mswu" (sem aspas). Vá agora no Veiculador (Linker), opção Entrada e informe o valores wxbase31u.lib e wxmsw31u_core.lib para Dependências Adicionais, cada um em uma linha.

Vamos repetir a mesma coisa para a configuração Debug. Dessa vez os valores para Dependências Adicionais na opção Entrada do Veiculador serão wxbase31ud.lib e wxmsw31ud_core.lib (cada um em uma linha). Para finalizar, vá em C/C++ e adicione "C:\wxWidgets-3.1.3\lib\vc_dll\mswud" como uma nova entrada para Diretórios de Inclusão Adicionais.

Chegou o grande momento

Se você seguiu todos os passos atentamente, já está pronto para compilar seu projeto. Dispare a opção Compilar e cruze os dedos. É bem provável que você já veja de cara o erro abaixo:

Erro LNK2019 símbolo externo indefinido _main referenciado na função "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) estudos C:\estudos_wxwidgets\estudos\estudos\estudos\MSVCRTD.lib(exe_main.obj) 1

Se isso acontecer, vá de novo até as propriedades do projeto, selecione Todas as Configurações, localize a opção Veiculador (Linker) e depois Sistema. Em SubSystem, troque o valor Console (/SUBSYSTEM:CONSOLE) por Windows (/SUBSYSTEM:WINDOWS). Tente compilar novamente.

É provável que você encontre mais um erro, e esperamos que será o último.

O programa não pode ser iniciado porque está faltando wxmsw313u_core_vc_custom.dll no seu computador. Tente reinstalá-lo para resolver esse problema.

O programa não pode ser iniciado porque está faltando wxbase313u_vc_custom.dll no seu computador. Tente reinstalá-lo para resolver esse problema.

Isso aconteceu porque você deve estar compilando em Debug DLL ou Release DLL (o que não é uma má idéia). Para resolver, vá até "C:\wxWidgets-3.1.3\lib\vc_dll" e copie essas duas DLLs para o diretório do seu executável (que deve estar dentro da pasta Debug ou Release) ou para o diretório Windows. A opção de colocar junto ao seu executável é melhor, pois evita o risco de erros caso você tiver versões diferentes do wxWidgets no seu sistema.

Abraços e vida longa ao C/C++.


Java ::: Tratamento de Erros ::: Erros de Tempo de Execução

Java para iniciantes - Como tratar o erro OutOfMemoryError no Java

Quantidade de visualizações: 12557 vezes
O erro OutOfMemoryError é apresentado quando a Java Virtual Machine (JVM) não consegue alocar um objeto por falta de memória e o Garbagge Collector não liberou mais memória ainda. Este é um erro que não deve ser apanhado em um bloco try...catch, ou seja, se não há memória para alocar novos objetos, é fácil entender que não haverá memória para tal procedimento. O melhor a fazer é deixar o programa terminar e verificar a causa do problema.

Veja a posição da classe OutOfMemoryError na hierarquia de classes da plataforma Java:

java.lang.Object
  java.lang.Throwable
    java.lang.Error
      java.lang.VirtualMachineError
        java.lang.OutOfMemoryError


Esta classe implementa a interface Serializable.

Uma das causas mais comuns para o erro OutOfMemoryError é a instanciação exagerada de objetos, principalmente em laços (loops). Uma forma de aumentar a memória RAM a ser usada é definindo opções na linha de comando para o java.exe. Algumas destas opções são -Xss64k -Xoss300k -Xms4m e -Xmx10m.


VisuAlg ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Controle

Exercícios Resolvidos de VisuAlg - Ler os lados de um triângulo e informar se ele é isósceles, escaleno ou equilátero

Quantidade de visualizações: 1169 vezes
Pergunta/Tarefa:

Um triângulo é uma forma geométrica (polígono) composta de três lados, sendo que cada lado é menor que a soma dos outros dois lados. Assim, para que um triângulo seja válido, é preciso que seus lados A, B e C obedeçam à seguinte regra:

A < (B + C), B < (A + C) e C < (A + B).

Escreva um programa VisuAlg que leia os três lados de um triângulo e verifique se tais valores realmente formam um triângulo. Se o teste for satisfatório, informe se o triângulo é isósceles (dois lados iguais e um diferente), escaleno (todos os lados diferentes) ou equilátero (todos os lados iguais).

Sua saída deverá ser parecida com:

Informe o primeiro lado do triângulo: 30
Informe o segundo lado do triângulo: 40
Informe o terceiro lado do triângulo: 60
O triângulo é escaleno
Resposta/Solução:

Veja a resolução comentada deste exercício usando VisuAlg:

algoritmo "Testar o tipo de um triângulo em VisuAlg"

var
  // variáveis usadas na resolução do problema
  lado_a, lado_b, lado_c: inteiro

inicio
  // vamos ler o primeiro lado do triângulo
  escreva("Informe o primeiro lado do triângulo: ")
  leia(lado_a)

  // vamos ler o segundo lado do triângulo
  escreva("Informe o segundo lado do triângulo: ")
  leia(lado_b)

  // vamos ler o terceiro lado do triângulo
  escreva("Informe o terceiro lado do triângulo: ")
  leia(lado_c)

  // os lados informados formam um triângulo?
  se ((lado_a < (lado_b + lado_c)) e (lado_b < (lado_a + lado_c)) e 
    (lado_c < (lado_a + lado_b))) entao
    // é um triângulo equilátero (todos os lados iguais)?
    se ((lado_a = lado_b) e (lado_b = lado_c)) entao
      escreval("O triângulo é equilátero")
    senao
      // é isósceles (dois lados iguais e um diferente)?
      se ((lado_a = lado_b) ou (lado_a = lado_c) ou (lado_c = lado_b)) entao
        escreval("O triângulo é isósceles")
      senao
        // é escaleno
        escreval("O triângulo é escaleno")
      fimse
    fimse
  senao
    escreval("Os lados informados não formam um triângulo.")
  fimse

fimalgoritmo



C++ ::: STL (Standard Template Library) ::: Vector C++

Como obter um iterador para o primeiro ou último elemento de um vector C++ usando as funções begin() e end()

Quantidade de visualizações: 8376 vezes
Há situações em nossos códigos que precisamos obter uma referência ao primeiro ou último elemento de um vector e usar tal referência para acessar os demais elementos. Isso pode ser feito com um iterador. Assim, para obter um iterador para o primeiro elemento nós podemos usar a função begin(), que retorna duas formas de iteradores:

iterator begin();
const_iterator begin() const;

A primeira versão retorna um iterador que pode ser usado, não somente para acessar os elementos do vector, como também para alterar seus valores. Veja no trecho de código abaixo como obtemos um iterador para o primeiro elemento e o incrementamos de forma a atingir o último elemento:

#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char *argv[]){
  // um vector vazio que conterá inteiros
  vector<int> valores;

  // vamos inserir três elementos
  valores.push_back(54);
  valores.push_back(13);
  valores.push_back(87);

  // vamos obter um iterador para o primeiro elemento
  vector<int>::iterator it = valores.begin();
  // vamos mostrar o valor atual do iterador
  cout << "Valor atual do iterador: " << *it << endl;

  // vamos adiantar o iterador duas vezes
  it += 2;

  // vamos mostrar o novo valor do iterador
  cout << "Novo valor do iterador: " << *it << endl;

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

É importante lembrar que podemos alterar os valores dos elementos de um vector por meio do iterador. Veja:

#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char *argv[]){
  // um vector vazio que conterá inteiros
  vector<int> valores;

  // vamos inserir três elementos
  valores.push_back(54);
  valores.push_back(13);
  valores.push_back(87);

  // vamos obter um iterador para o primeiro elemento
  vector<int>::iterator it = valores.begin();

  // vamos atribuir um novo valor ao primeiro elemento
  *it = 128;

  // vamos mostrar o novo valor do primeiro elemento
  cout << "Novo valor do primeiro elemento: " << valores.front() << endl;

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

Mas, e se quiséssemos evitar tal alteração? Bastaria usar um iterador constante:

// vamos obter um iterador constante para o primeiro elemento
vector<int>::const_iterator it = valores.begin();

Faça esta alteração no código anterior e verá que o programa não mais compila. A mensagem de erro de compilação indica:

assignment of read-only location

Vamos agora obter um iterador para o último elemento. Para isso podemos usar a função end(). Veja:

iterator end();
const_iterator end() const;

É importante notar que end() retorna um iterador para o elemento APÓS o último elemento do vector. Veja no trecho de código abaixo como obtemos um iterador para o último elemento:

#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char *argv[]){
  // um vector vazio que conterá inteiros
  vector<int> valores;

  // vamos inserir três elementos
  valores.push_back(54);
  valores.push_back(13);
  valores.push_back(87);

  // vamos obter um iterador para o último elemento
  vector<int>::iterator it = valores.end();

  // como end() retorna um iterador para um elemento
  // APÓS o último elemento do vector, temos que voltar
  // um elemento para acessarmos de fato o último elemento
  it--;

  // vamos mostrar o valor atual do iterador
  cout << "Valor do iterador: " << *it << endl;

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

Um dos usos mais comuns dos iteradores begin() e end() é quando queremos percorrer todos os elementos de um vector. Veja:

#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char *argv[]){
  // um vector vazio que conterá inteiros
  vector<int> valores;

  // vamos inserir três elementos
  valores.push_back(54);
  valores.push_back(13);
  valores.push_back(87);

  // vamos percorrer o vector e exibir os elementos
  vector<int>::iterator it;
  for(it = valores.begin(); it < valores.end(); it++){
    cout << *it << endl;
  }

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



Desafios, Exercícios e Algoritmos Resolvidos de C++

Veja mais Dicas e truques de C++

Dicas e truques de outras linguagens

E-Books em PDF

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
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

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


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 Apenas R$ 32,90

Planilha Web - Planilhas e Calculadoras online para estudantes e profissionais de Engenharia Civil, Engenharia Elétrica e Engenharia Mecânica.


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