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 Ética e Legislação Profissional
Card 1 de 8
Noções de licitação pública

Modalidades da licitação:

Convite é a modalidade dirigida para interessados do ramo do objeto da licitação e é adequado para contratações de menor valor. Na Lei n.º 14.133/2021, essa modalidade foi extinta.

Leilão é a modalidade para a venda de bens móveis que não servem mais para a administração pública, a venda de produtos legalmente apreendidos ou penhorados e para a alienação de imóveis da administração pública.

Concurso é a modalidade indicada para a escolha de um trabalho técnico, artístico ou científico.

Pregão é a modalidade de licitação para aquisição de bens e serviços comuns. No artigo 1º, parágrafo único, da Lei n.º 10.520/2002, consta que bens e serviços comuns são "aqueles cujos padrões de desempenho e qualidade possam ser objetivamente definidos pelo edital, por meio de especificações usuais no mercado". Isso significa que são bens e serviços que não têm características técnicas especiais, sendo facilmente encontrados no mercado. O pregão também foi previsto na nova lei de licitações, no artigo 28, i.

Concorrência é a modalidade indicada para contratações de grandes valores, em que o interessado precisa comprovar a qualificação exigida no edital.

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 ::: Win32 API (Windows API) ::: Formulários e Janelas

Como usar a função GetWindow() da API do Windows para pesquisar e retornar um handle para uma janela baseado em seu título completo ou parcial usando Delphi

Quantidade de visualizações: 15606 vezes
Em algumas situações nós precisamos pesquisar e retornar um handle para uma janela baseado em seu título completo ou parcial, ou seja, gostaríamos de encontrar uma janela que contenha a palavra "sexo".

Isso pode ser feito com o auxílio da função GetWindow() da API do Windows. Veja:

// função personalizada que permite encontrar uma janela
// baseado em seu título
function FindWindowByTitle(WindowTitle: string): Hwnd;
var
  NextHandle: Hwnd;
  NextTitle: array[0..255] of char;
begin
  // vamos obter a primeira janela
  NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);

  while NextHandle > 0 do
    begin
      // vamos obter o título da janela
      GetWindowText(NextHandle, NextTitle, 256);

      // a janela contém o título que procuramos?
      if Pos(Uppercase(WindowTitle), UpperCase(String(NextTitle))) <> 0 then
         begin
           Result := NextHandle;
           Exit;
         end
      else
        // vamos tentar a próxima janela
        NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
    end;

    // não encontramos nada? vamos retornar um handle nulo
    Result := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  handle: hwnd;
begin
  // vamos localizar e fechar a Calculadora do Windows
  // ou qualquer janela que contenha o texto "Calculadora"
  handle := FindWindowByTitle('Calculadora');
  if handle <> 0 then // encontramos a janela? vamos fechá-la
    SendMessage(handle, WM_SYSCOMMAND, SC_CLOSE, 0)
  else
    ShowMessage('A janela pesquisada não foi encontrada');
end;

Neste exemplo nós pesquisamos uma janela que contenha a palavra "Calculadora" em seu título. Se encontrada, nós a fechamos com o auxílio da função SendMessage() e a mensagem WM_SYSCOMMAND com o valor SC_CLOSE para o parâmetro wParam.

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


Java ::: Desafios e Lista de Exercícios Resolvidos ::: Java Básico

Exercícios Resolvidos de Java - Um programa que lê dois números inteiros e mostra o menor

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

Escreva um programa Java que solicita dois números inteiros ao usuário e mostra o menor deles. Mostre uma mensagem informando se os dois números são iguais. Sua saída deverá ser parecida com:

Informe o primeiro número: 34
Informe o segundo número: 30
O menor número é: 30

Informe o primeiro número: 12
Informe o segundo número: 43
O menor número é: 12

Informe o primeiro número: 7
Informe o segundo número: 7
Os dois números são iguais.
Resposta/Solução:

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

package estudos;

import java.util.Scanner;

public class Estudos {
  public static void main(String[] args) {
    Scanner entrada = new Scanner(System.in);  
    
    // vamos solicitar os dois números inteiros
    System.out.print("Informe o primeiro número: ");
    int num1 = Integer.parseInt(entrada.nextLine());
    System.out.print("Informe o segundo número: ");
    int num2 = Integer.parseInt(entrada.nextLine());
    
    // o primeiro número é menor que o segundo?
    if(num1 < num2){
      System.out.println("O menor número é: " + num1);  
    }
    else if(num2 < num1){ // o segundo número é menor que o primeiro?
      System.out.println("O menor número é: " + num2);  
    }
    else{
      System.out.println("Os dois números são iguais.");  
    }
    
    System.out.println("\n");
  }
}



Java ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Dados - Árvores Binárias e Árvores Binárias de Busca

Exercícios Resolvidos de Java - Travessia de uma árvore binária de busca usando o percurso em-ordem (in-order, In-ordem ou ordem simétrica)

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

O percurso em ordem (em-ordem, in-order, In-ordem ou ordem simétrica) é usado quando queremos exibir os valores dos nós da árvore binária de busca em ordem ascendente.

Neste tipo de percurso nós visitamos primeiramente a sub-árvore da esquerda, então o nó atual e finalmente a sub-árvore à direita do nó atual. É importante notar que esta travessia é feita por meio de uma função recursiva.

Escreva um programa Java que contenha uma árvore binária de busca cujos nós guardarão, além das referências para o filho esquerdo e o filho direito, apenas um valor inteiro. Forneça uma função inserir() que permitirá inserir os valores na árvore. Em seguida forneça uma função recursiva que permitirá fazer a travessia in-order da árvore.

Sua saída deverá ser parecida com:

Informe um valor inteiro: 7
Informe um valor inteiro: 3
Informe um valor inteiro: 18
Informe um valor inteiro: 4
Informe um valor inteiro: 9

Percurso em ordem:
3 4 7 9 18
Resposta/Solução:

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

Código para NoArvore.java:

package estudos;

public class NoArvore {
  int valor; // valor armazenado no nó
  NoArvore esquerdo; // filho esquerdo
  NoArvore direito; // filho direito

  // construtor do nó
  public NoArvore(int valor){
    this.valor = valor;
  }
}

Código para ArvoreBinariaBusca.java:

package estudos;

public class ArvoreBinariaBusca {
  private NoArvore raiz; // referência para a raiz da árvore
  
  // método usado para inserir um novo nó na árvore
  // retorna true se o nó for inserido com sucesso e false
  // se o elemento não puder ser inserido (no caso de já
  // existir um elemento igual)
  public boolean inserir(int valor){
    // a árvore ainda está vazia?
    if(raiz == null){
      // vamos criar o primeiro nó e definí-lo como a raiz da árvore
      raiz = new NoArvore(valor); // cria um novo nó
    }
    else{
      // localiza o nó pai
      NoArvore pai = null;
      NoArvore noAtual = raiz; // começa a busca pela raiz
 
      // enquanto o nó atual for diferente de null
      while(noAtual != null){
        if(valor < noAtual.valor) {
          pai = noAtual;
          noAtual = noAtual.esquerdo;
        }
        else if(valor > noAtual.valor){
          pai = noAtual;
          noAtual = noAtual.direito;
        }
        else{
          return false; // um nó com este valor foi encontrado
        }
      }
       
      // cria o novo nó e o adiciona ao nó pai
      if(valor < pai.valor){
         pai.esquerdo = new NoArvore(valor);
      }
      else{
        pai.direito = new NoArvore(valor);
      }
    }

    return true; // retorna true para indicar que o novo nó 
    // foi inserido
  }
  
  // método que permite disparar a travessia em-ordem
  public void emOrdem(){
    emOrdem(raiz);
  }

  // sobrecarga do método emOrdem com uma parâmetro (esta é a
  // versão recursiva do método)
  private void emOrdem(NoArvore raiz){
    if(raiz == null){ // condição de parada
      return;
    }
    
    // visita a sub-árvore da esquerda
    emOrdem(raiz.esquerdo);
    // visita o nó atual
    System.out.print(raiz.valor + " ");
    // visita a sub-árvore da direita
    emOrdem(raiz.direito);
  }
}

E aqui está o código para a classe que permite testar a árvore:

package estudos;

import java.util.Scanner;

public class Estudos {
  public static void main(String[] args) {
    Scanner entrada = new Scanner(System.in);  
      
    // vamos criar um novo objeto da classe ArvoreBinariaBusca
    ArvoreBinariaBusca arvore = new ArvoreBinariaBusca();
   
    // vamos inserir 5 valores na árvore
    for(int i = 0; i < 5; i++){
      System.out.print("Informe um valor inteiro: ");
      int valor = Integer.parseInt(entrada.nextLine());
      
      // vamos inserir o nó e verificar o sucesso da operação
      if(!arvore.inserir(valor)){
        System.out.println("Erro. Um elemento já contém este valor.");  
      }
    }
    
    // vamos exibir os nós da árvore usando o percurso em ordem
    System.out.println("\nPercurso em ordem:");
    arvore.emOrdem();
    
    System.out.println("\n");
  }
}



QGIS ::: PyQGIS API ::: Aplicações com código fonte completo

Como listar os 5 municípios goianos com maior área em uma camada do QGIS usando PyQGIS - Código Python completo

Quantidade de visualizações: 850 vezes
Este código completo mostra uma aplicação QGIS na qual usei PyQGIS para resolver um desafio muito interessante, e complexo. Acredito que servirá de base para muitos códigos interessantes envolvendo QGIS, Python e PyQGIS.

Comecei fazendo o download do shapefile do Estado de Goiás, contendo seus 246 municípios no site do IBGE. Em seguida carreguei o shapefile no QGIS usando um objeto QgsVectorLayer.

Note que criei uma classe Municipio para guardar cada um dos municípios encontrados no shapefile. E, para agrupar os objetos da classe Municipio eu criei uma lista chamada municipios.

Para acessar cada um dos municipios, ou seja, cada uma das 246 feições da camada, eu usei a função getFeatures() da classe QgsVectorLayer. Então, ao percorrer cada uma dessas feições, eu obtive seus atributos, por meio da função attributes(), e os usei para criar os objetos da classe Municipio.

Uma vez obtida a lista de municípios, o passo seguinte foi classificar a lista por ordem crescente de área (a área dos municípios). Um laço for me permitiu listar apenas os 5 municípios com maiores áreas e, além de registrar o somatório de seus áreas, obter os seus códigos para selecioná-los na camada, usando a função selectByExpression().

O desafio final foi mostrar as labels, ou seja, os rótulos de cada um dos municípios no mapa do QGIS, porém, eu queria mostrar os rótulos apenas dos 5 municípios com as maiores áreas. Para resolver o desafio, lancei mão da função setFilterExpression().

Veja o código completo para o exemplo:

# uma classe para guardar cada um dos municípios
# do Estado de Goiás
class Municipio:
  # método construtor
  def __init__(self, codigo, nome, estado, area):
    self.codigo = codigo
    self.nome = nome
    self.estado = estado
    self.area = area
  
# para guardar os municípios
municipios = []
  
# vamos criar um novo objeto QgsVectorLayer com o local
# do nosso shapefile
camada = QgsVectorLayer("C:\\GOIAS\\GO_Municipios_2022.shp",
  "Municípios do Estado de Goiás", "ogr")
 
# vamos testar se a camada é válida  
if not camada.isValid():
  print("Não foi possível carregar a camada %s" % camada.name())
else:
  # vamos percorrer todas as feições da camada
  # e obter os seus atributos
  feicoes = camada.getFeatures()  
  for f in feicoes:
    # vamos obter os atributos desta feição
    atributos = f.attributes()  
    # e criamos um novo objeto da classe Municipio
    municipio = Municipio(atributos[0], atributos[1],
      atributos[2], atributos[3])
    # adicionamos este município na lista
    municipios.append(municipio)
    
  # agora vamos ordenar a lista por área da maior para
  # a menor  
  municipios = sorted(municipios, 
    key=lambda municipio:municipio.area, reverse=True)
  
  # vamos adicionar a camada à relação de camadas  
  QgsProject.instance().addMapLayer(camada)
  
  # vamos calcular a área ocupada pelos 5 maiores municípios
  # do Estado de Goiás
  area_5_maiores = 0
  for i in range(5):
    area_5_maiores = area_5_maiores + municipios[i].area
  
  # agora vamos selecionar os 5 maiores municípios na
  # camada do QGIS  
  codigos = ""
  
  for i in range(5):
    codigos = codigos + municipios[i].codigo + ", "
  
  codigos = codigos[0:len(codigos) - 2]
  camada.selectByExpression('"CD_MUN" IN (' + codigos + ')')
  
  # e mostramos os resultados
  print("Os 5 maiores municípios do Estado de Goiás são:\n")
  for i in range(5):
    print("{0}) {1} - Área: {2} km2".format(i + 1, municipios[i].nome,
      municipios[i].area))
  print("\nÁrea ocupada pelos 5 maiores municípios: {0} km2".format(
    area_5_maiores))
    
  # finalmente vamos exibir os nomes dos municípios. Essa foi
  # a parte mais desafiadora do código, pois eu queria mostrar
  # somente os rótulos dos cinco maiores municípios
  settings = QgsPalLayerSettings()
  settings.isExpression = True
  settings.placement = QgsPalLayerSettings.Line
  settings.placement = QgsPalLayerSettings.Horizontal
  # mostra o nome do município
  settings.fieldName = "NM_MUN"

  format = QgsTextFormat()
  format.setColor(QColor('Black'))
  
  settings.setFormat(format)
  settings.enabled = True

  # cria e adiciona uma nova regra
  root = QgsRuleBasedLabeling.Rule(QgsPalLayerSettings())
  rule = QgsRuleBasedLabeling.Rule(settings)
  rule.setDescription("5 Maiores Municípios do Estado de Goiás")
  
  # define o campo que será usado no filtro. Note que somente
  # serão listados os rótulos dos municípios com área maior ou
  # igual ao quinto elemento da lista municípios
  campo_area = "AREA_KM2"
  rule.setFilterExpression(f"\"{campo_area}\" >= {municipios[4].area}")
  root.appendChild(rule)

  # define as configurações do rótulo
  camada.setLabelsEnabled(True)
  rules = QgsRuleBasedLabeling(root)
  camada.setLabeling(rules)
  # redesenha a camada no canvas do QGIS
  camada.triggerRepaint() 

Ao executar este código QGIS, Python e PyQGIS nós teremos o seguinte resultado:

Os 5 maiores municípios do Estado de Goiás são:

1) Niquelândia - Área: 9846.293 km2
2) Mineiros - Área: 9042.844 km2
3) Caiapônia - Área: 8627.961 km2
4) Rio Verde - Área: 8374.255 km2
5) Nova Crixás - Área: 7308.681 km2

Área ocupada pelos 5 maiores municípios: 43200.03399999999 km2

Para fins de compatibilidade este código foi escrito e testado no QGIS 3.34.5-Prizren.


C ::: Dicas & Truques ::: Strings e Caracteres

Como escrever uma função strtolower() para transformar uma palavra inteira em letras minúsculas usando a linguagem C

Quantidade de visualizações: 10522 vezes
O C padrão não possui uma função para transformar todas as letras de uma palavra em minúsculas, embora alguns compiladores a forneça.

O que temos é a função:

    
int tolower(int c);


que permite transformar um caractere em seu correspondente minúsculo. Podemos tirar vantagem disso e escrever uma função strtolower() personalizada. Veja a listagem logo abaixo:

 
#include <stdio.h>
#include <stdlib.h>
 
void strtolower(char *string){
  while(*string){
    *string = tolower(*string);
    string++;
  }
}
 
int main(int argc, char *argv[])
{
  char frase[] = "PROGRAMANDO EM C";
  strtolower(frase);
   
  printf("%s\n\n", frase);
   
  system("PAUSE");  
  return 0;
}

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

programando em c
Pressione qualquer tecla para continuar...


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á 9 usuários muito felizes estudando em nosso site.