Você está aqui: Delphi ::: Dicas & Truques ::: Arquivos e Diretórios

Obtendo o tamanho de um arquivo em bytes, KB, MB ou GB

Quantidade de visualizações: 23369 vezes
Em algumas situações precisamos obter o tamanho de um arquivo em bytes e, se necessário, converter este valor em bytes para KB, MB ou GB. Esta dica mostra como isso pode ser feito. Aqui nós temos duas funções. A função TamanhoArquivoBytes() recebe o caminho e nome de um arquivo e retorna seu tamanho em bytes. Já a função TamanhoArquivoFormatado() recebe um valor em bytes e devolve uma string formatada.

Veja o exemplo completo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

// permite formatar o tamanho de um arquivo em bytes em
// Kb, Mb ou Gb
function TamanhoArquivoFormatado(const bytes: Longint): string;
const
  b = 1; // byte
  kb = 1024 * b; // kilobyte
  mb = 1024 * kb; // megabyte
  gb = 1024 * mb; // gigabyte
begin
  if bytes > gb then
    Result := FormatFloat('#.## GB', bytes / gb)
  else if bytes > mb then
    Result := FormatFloat('#.## MB', bytes / mb)
  else if bytes > kb then
    Result := FormatFloat('#.## KB', bytes / kb)
  else
    Result := FormatFloat('#.## bytes', bytes);
end;

// função que permite obter o tamanho de um arquivo em bytes
function TamanhoArquivoBytes(arquivo: string): Int64;
var
  search_rec: TSearchRec;
begin
  if FindFirst(arquivo, faAnyFile, search_rec) = 0 then
    Result := Int64(search_rec.FindData.nFileSizeHigh) shl Int64(32)
      + Int64(search_rec.FindData.nFileSizeLow)
  else
    Result := -1;

  FindClose(search_rec);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  arquivo: string;
begin
  // nome do arquivo que queremos obter o tamanho
  arquivo := 'C:\estudos_delphi\programa_vcl\arquivo.txt';

  // exibe o resultado
  ShowMessage('O tamanho do arquivo é: ' +
    TamanhoArquivoFormatado(TamanhoArquivoBytes(arquivo)));
end;

Note que aqui nós usamos o campo FindData da estrutura TSearchRec. Este campo contém informações adicionais sobre um arquivo, tais como a data e hora de criação do arquivo, data e hora do último acesso, etc. Porém, este campo é específico à plataforma Windows, o que pode resultar em um warning do tipo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

[DCC Warning] Unit1.pas(54): W1002 Symbol 'FindData' is specific 
to a platform

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

Link para compartilhar na Internet ou com seus amigos:

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

Como calcular desvio padrão em Delphi - Delphi para Matemática e Estatística

Quantidade de visualizações: 2048 vezes
Em Matemática e Estatística, o Desvio padrão (em inglês: Standard Deviation) é uma medida de dispersão, ou seja, é uma medida que indica o quanto um conjunto de dados é uniforme. Quando o desvio padrão é baixo, isso quer dizer que os dados do conjunto estão mais próximos da média.

Como calcular o desvio padrão de um conjunto de dados? Vamos começar analisando a fórmula mais difundida na matemática e na estatística:

\[\sigma = \sqrt{ \frac{\sum_{i=1}^N (x_i -\mu)^2}{N}}\]

Onde:

a) __$\sigma__$ é o desvio;
b) __$x_i__$ é um valor qualquer no conjunto de dados na posição i;
c) __$\mu__$ é a média aritmética dos valores do conjunto de dados;
d) N é a quantidade de valores no conjunto.

O somatório dentro da raiz quadrada nos diz que devemos somar todos os elementos do conjunto, desde a posição 1 até a posição n, subtrair cada valor pela média do conjunto e elevar ao quadrado. Obtida a soma, nós a dividimos pelo tamanho do conjunto.

Veja o código Delphi completo que obtém o desvio padrão a partir de um conjunto de dados contendo quatro valores:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

// Algoritmo Delphi para calcular desvio padrão

program estudos_delphi;

{$APPTYPE CONSOLE}

uses
  SysUtils, Math;

var
  // conjunto de dados
  conjunto: array[1..4] of double = (10, 30, 90, 30);
  soma: double; // Soma dos elementos
  desvio_padrao: double; // Desvio padrão
  tam: integer; // Tamanho dos dados
  media: double; // média
  i: integer;

begin
  soma := 0.0;
  desvio_padrao := 0.0;
  tam := 4;

  // vamos somar todos os elementos
  for i := 1 to tam do
    begin
      soma := soma + conjunto[i];
    end;

  // agora obtemos a média do conjunto de dados
  media := soma / tam;

  // e finalmente obtemos o desvio padrão
  for i := 1 to tam do
    begin
      // não esqueça de adicionar a unit Math
      desvio_padrao := desvio_padrao + Power(conjunto[i] - media, 2);
    end;

  // mostramos o resultado
  WriteLn('Desvio Padrão Populacional: ' + FloatToStr(Sqrt(desvio_padrao / tam)));
  WriteLn('Desvio Padrão Amostral: ' + FloatToStr(Sqrt(desvio_padrao / (tam - 1))));

  WriteLn;
  Write('Pressione Enter para sair...');
  ReadLn;

end.

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

Desvio Padrão Populacional: 30.0
Desvio Padrão Amostral: 34.64101615137755

Veja que, para calcular o Desvio Padrão Populacional, nós dividimos o somatório pela quantidade de elementos no conjunto, enquanto, para calcular o Desvio Padrão Amostral, nós dividimos o somatório pela quantidade de elementos - 1 (cuidado com a divisão por zero no caso de um conjunto com apenas um elemento).


Delphi ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes)

Delphi para iniciantes - Como escrever uma função que retorna uma matriz de Integer

Quantidade de visualizações: 13529 vezes
Em algumas situações precisamos retornar uma matriz a partir de uma função. Nesta dica eu mostro como isso pode ser feito. O primeiro passo é declarar um novo tipo. Veja:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

type // vamos declarar um novo tipo
  TMatrizInteiros = array of Integer;

Aqui o tipo TMatrizInteiros representa uma matriz de inteiros. Veja a unit completa para o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type // vamos declarar um novo tipo
  TMatrizInteiros = array of Integer;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// função usada para construir e retornar uma
// matriz de Integer
function obterValores: TMatrizInteiros;
var
  tempArray: TMatrizInteiros;
  i: integer;
begin
  // vamos definir o tamanho da matriz
  SetLength(tempArray, 10);

  // vamos inicializar a matriz com os números pares de 0 até 18
  // note que em matrizes abertas o índice inicial é sempre 0
  for i := Low(tempArray) to High(tempArray) do
    begin
      tempArray[i] := i * 2;
    end;

  Result := tempArray; // vamos retornar a matriz
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  valores: TMatrizInteiros; // uma matriz do tipo TMatrizInteiros
  i: Integer;
begin
  valores := obterValores();

  // que já temos a matriz, vamos exibir os valores de
  // seus elementos
  for i := 0 to High(valores) do
    begin
      Memo1.Lines.Add(IntToStr(valores[i]));
    end;
end;

end.

Note que a função retornará uma matriz aberta (open array). Desta forma, seu índice inicial será sempre 0.


Delphi ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas

Como calcular o cosseno de um ângulo em Delphi usando a função Cos() - Calculadora de cosseno em Delphi

Quantidade de visualizações: 1162 vezes
Em geral, quando falamos de cosseno, estamos falando do triângulo retângulo de Pitágoras (Teorema de Pitágoras). A verdade é que podemos usar a função cosseno disponível nas linguagens de programação para calcular o cosseno de qualquer número, mesmo nossas aplicações não tendo nenhuma relação com trigonometria.

No entanto, é sempre importante entender o que é a função cosseno. Veja a seguinte imagem:



Veja que temos um triângulo retângulo com as medidas já calculadas para a hipotenusa e os dois catetos, assim como os ângulos entre eles.

Assim, o cosseno é a razão entre o cateto adjascente e a hipotenusa, ou seja, o cateto adjascente dividido pela hipotenusa. Veja a fórmula:

\[\text{Cosseno} = \frac{\text{Cateto adjascente}}{\text{Hipotenusa}} \]

Então, se dividirmos 30 por 36.056 (na figura eu arredondei) nós teremos 0.8320, que é a razão entre o cateto adjascente e a hipotenusa (em radianos).

Agora, experimente calcular o arco-cosseno de 0.8320. O resultado será 0.5881 (em radianos). Convertendo 0.5881 radianos para graus, nós obtemos 33.69º, que é exatamente o ângulo em graus entre o cateto adjascente e a hipotenusa na figura acima.

Pronto! Agora que já sabemos o que é cosseno na trigonometria, vamos entender mais sobre a função cos() da linguagem Delphi. Esta função, incorporada por padrão à linguagem, recebe um valor numérico (Extended) e retorna um valor Extended, ou seja, também numérico) entre -1 até 1 (ambos inclusos). Veja:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.Add('Cosseno de 0 = ' + FloatToStr(Cos(0)));
  Memo1.Lines.Add('Cosseno de 1 = ' + FloatToStr(Cos(1)));
  Memo1.Lines.Add('Cosseno de 2 = ' + FloatToStr(Cos(2)));
end;

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

Cosseno de 0 = 1
Cosseno de 1 = 0,54030230586814
Cosseno de 2 = -0,416146836547142

Note que calculamos os cossenos dos valores 0, 1 e 2. Observe como os resultados conferem com a curva da função cosseno mostrada abaixo:




Desafios, Exercícios e Algoritmos Resolvidos de Delphi

Veja mais Dicas e truques de Delphi

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
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á 28 usuários muito felizes estudando em nosso site.