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.

MySQL ::: Dicas & Truques ::: Joins (Junções)

Como usar joins no MySQL

Quantidade de visualizações: 11591 vezes
As junções (joins) são ferramentas presentes na maioria dos bancos de dados que suportam SQL e são usadas quando precisamos recuperar dados de uma ou mais tabelas com base em suas relações lógicas. Desta forma, é possível combinar os registros de tais tabelas de forma a construir um "super-registro", que nos permitirá exibir relatórios mais elaborados.

Para o bom entendimento de junções, vamos considerar duas tabelas: filmes e generos. Aqui nós temos uma cardinalidade de 1 x N. Um filme possui um gênero, enquanto um gênero pode abranger vários filmes. Vamos começar criando estas duas tabelas (comece com a tabela generos, já que esta não depende da tabela de filmes):

Comando DLL CREATE TABLE para a tabela generos:

CREATE TABLE generos(
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  nome VARCHAR(45) NOT NULL,
  PRIMARY KEY(id)
)
ENGINE = InnoDB;

Veja agora o comando SQL para a criação da tabela de filmes:

Comando DLL CREATE TABLE para a tabela filmes:

CREATE TABLE filmes(
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  titulo VARCHAR(45) NOT NULL,
  genero INTEGER UNSIGNED NOT NULL,
  PRIMARY KEY(id),
  CONSTRAINT fk_filmes_generos FOREIGN KEY fk_filmes_generos(id)
    REFERENCES generos(id) ON DELETE RESTRICT ON UPDATE RESTRICT
)
ENGINE = InnoDB;

Veja que a tabela filmes contém uma chave estrangeira referenciando a chave primária da tabela generos. Isso nos permite "atrelar" um filme ao seu gênero. Vá em frente e insira alguns dados em ambas as tabelas. Primeiro cadastre alguns gêneros e em seguida alguns filmes.

Vejamos agora a importância dos joins. Observe o resultado de um comando DML SELECT na tabela filmes:

SELECT * FROM filmes;

id  titulo	        genero
1   EFEITO BORBOLETA	6
2   O PENTELHO	        1
3   VIAGEM MALDITA	3

Nesta query o gênero é retornado como um valor inteiro, ou seja, o valor do campo id da tabela generos. Em muitos casos este não é o comportamento que queremos. Em vez do id do gênero nós gostaríamos de exibir seu nome. Isso pode ser conseguido da seguinte forma:

SELECT filmes.id, filmes.titulo, generos.nome FROM filmes,
generos WHERE filmes.genero = generos.id;

id  titulo	        genero
1   EFEITO BORBOLETA	FICÇÃO
2   O PENTELHO	        COMÉDIA
3   VIAGEM MALDITA	TERROR

Nesta query eu usei o nome completo da tabela antes do nome dos campos a serem retornados. Na prática, é comum darmos apelidos às tabelas. Veja:

SELECT f.id, f.titulo, g.nome FROM filmes f,
generos g WHERE f.genero = g.id;

Neste exemplo, não usamos as palavras-chaves INNER JOIN, LEFT JOIN, RIGHT JOIN, etc. A junção está "escondida" na cláusula SELECT. Esta técnica é conhecida como "junção implícita" ou "implicit join". Veja como o mesmo resultado pode ser obtido usando a junção INNER JOIN:

SELECT f.id, f.titulo, g.nome FROM filmes f INNER JOIN
generos g ON f.genero = g.id;

Veja minhas outras dicas sobre junções para aprender mais sobre INNER JOIN, LEFT JOIN, RIGHT JOIN, OUTER JOIN, FULL JOIN, etc.


Delphi ::: Dicas & Truques ::: MIDI Musical Instrument Digital Interface, Mapeamento e sequenciamento MIDI, Entrada e saída MIDI

Como retornar uma lista dos dispositivos de entrada MIDI no sistema usando Delphi

Quantidade de visualizações: 11605 vezes
Em algumas ocasiões nós precisamos obter uma lista dos dispositivos de entrada MIDI no sistema, talvez com o propósito de selecionar um determinado dispositivo em uma ListBox ou ComboBox. O trecho de código abaixo mostra como isso pode ser feito.

O primeiro passo é declarar uma variável do tipo TMidiInCaps. Este registro está declarado na unit MMSystem.pas e é uma tradução da estrutura MIDIINCAPS da API do Windows. Entre outros tipos de dados, esta estrutura possui um membro szPname que retorna o nome do dispositivo. Na unit MMSystem.pas este membro está declarado como array[0..MAXPNAMELEN-1] of AnsiChar, ou seja, uma matriz de AnsiChar que será preenchida pela API do Windows e terá seu final marcado com o caractere null (NULL terminated string). Note a conversão deste valor para o tipo String no momento de inserí-lo no ComboBox. Em versões anteriores do Delphi (estou escrevendo este código no Delphi 2009) podíamos usar a função StrPas() para esta finalidade.

O passo seguinte é obter a quantidade de dispositivos de entrada MIDI. Isso é feito com uma chamada à função midiInGetNumDevs da API do Windows. Uma vez obtida a quantidade de dispositivos nós usamos um laço for e, no corpo deste laço, usamos o valor da variável de controle i para efetuar uma chamada à função midiInGetDevCaps(), também da API do Windows:

midiInGetDevCaps(i, @MidiInCaps, sizeof(TMidiInCaps));

Esta função recebe o identificador do dispositivo (um valor inteiro começando em 0 e indo até a quantidade de dispositivos - 1), um ponteiro para um registro MidiInCaps e o tamanho em bytes do registro. Se a função for executada com sucesso, o registro MidiInCaps será preenchido com várias informações úteis, tais como o nome do dispositivo, o ID do fabricante, o ID do produto, versão do driver, etc.

Para finalizar, nós acessamos o campo szPname do registro MidiInCaps e o adicionamos no ComboBox. Veja o código completo a seguir:

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  MidiInCaps: TMidiInCaps; // este record está definido em MMSystem.pas
  erro: Word;
begin
  // uses MMSystem  

  ComboBox1.Clear;
  // midiInGetNumDevs retorna a quantidade de dispositivos de entrada
  // MIDI no sistema
  for i := 0 to midiInGetNumDevs - 1 do
  begin
    // vamos obter o dispositivo identificado pela variável i (uDeviceID)
    erro := midiInGetDevCaps(i, @MidiInCaps, sizeof(TMidiInCaps));
    if erro <> MMSYSERR_NOERROR then
       raise Exception.Create('Não foi possível obter a lista de dispositivos ' +
         'de entrada MIDI');

    // vamos adicionar o nome do dispositivo no ComboBox
    ComboBox1.Items.Add(String(MidiInCaps.szPname));
  end;
end;

Ao executar este código o ComboBox será preenchido no mínimo com o valor:

MPU-401

Este é o MPU 401-compatible MIDI input port, um dos dispositivos de entrada MIDI mais comuns nos PCs, embora já não esteja tão presente nos computadores mais atuais.

Para fins de compatibilidade esta dica ou anotação foi escrita usando Delphi 2009.


C# ::: Coleções (Collections) ::: List<T>

Como retornar a quantidade de elementos que podem ser armazenados na List do C# sem redimensioná-la

Quantidade de visualizações: 7752 vezes
O objeto List do C# possui uma propriedade Capacity que nos retorna a quantidade de elementos que podem ser inseridos na lista antes que ela tenha que redimensionar o seu array interno. Quando o tamanho da lista excede essa capacidade, automaticamente o array interno é redimensionado de forma a acomodar esses novos itens.

Nessa dica eu mostro como podemos retornar o valor dessa propriedade. Veja:

using System;
using System.Collections.Generic;

namespace Estudos {
  class Principal {
    static void Main(string[] args) {
      List<int> valores = new List<int>();

      // insere valores na lista
      valores.Add(4);
      valores.Add(2);
      valores.Add(87);
      valores.Add(23);
      valores.Add(100);

      // obtém a capacidade da lista
      // NOTA: Capacity é o número de elementos que a lista
      // pode armazenar antes de ser preciso redimensioná-la.
      int capac = valores.Capacity;
      Console.WriteLine("A capacidade da lista é de "
         + capac + " elementos.");

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

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

A capacidade da lista é de 8 elementos.


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

Delphi para matemática - Como arredondar valores de ponto-flutuante para cima usando a função Ceil()

Quantidade de visualizações: 17457 vezes
A função Ceil(), presente na unit Math, é útil quando queremos arrendondar valores de ponto-flutuante (valores com casas decimais) para cima, ou seja, para o menor inteiro maior ou igual ao valor fornecido. Veja um exemplo:

procedure TForm2.Button1Click(Sender: TObject);
var
  valor: Real;
  resultado: Integer;
begin
  // uses Math

  valor := 8.3;

  // vamos arredondar o valor para cima
  // o resultado será 9
  resultado := Ceil(valor);

  // exibe o resultado
  ShowMessage('O valor arredondado para cima é: ' +
    IntToStr(resultado));
end;

Note que os valores 8.0001, 8.3, 8.1, 8.99, etc, serão todos arredondados para 9. No entanto, 8.0 é arredondado para 8.

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


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


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