Contar Numeros Pares, Impares, Primos, e (ver qual menor e maior valor) no grid

01/07/2021

0

bom dia mestres da programação.
Para entenderem melhor o que estou querendo fazer estou enviando um link de uma imagem ( https://prnt.sc/17u7ham ).
Nessa imagem (que é de um DBGrid) tem umas colunas que eu criei (New Field) chamadas de SomaDezenas (SOMA) , Pares (PAR) , Impares (IMP) , Primor (PRIMOS) , MenorDez (MENOR) e MaiorDez (MAIOR)

No campo SomarDezenas eu consegui fazer com que somasse ussando o codigo abaixo:

procedure Tdados.fdq_LF_ResultadosCalcFields(DataSet: TDataSet);
begin
  fdq_LF_ResultadosSomaDezenas.AsInteger := fdq_LF_ResultadosDEZ01.AsInteger +
    fdq_LF_ResultadosDEZ02.AsInteger + fdq_LF_ResultadosDEZ03.AsInteger +
    fdq_LF_ResultadosDEZ04.AsInteger + fdq_LF_ResultadosDEZ05.AsInteger +
    fdq_LF_ResultadosDEZ06.AsInteger + fdq_LF_ResultadosDEZ07.AsInteger +
    fdq_LF_ResultadosDEZ08.AsInteger + fdq_LF_ResultadosDEZ09.AsInteger +
    fdq_LF_ResultadosDEZ10.AsInteger + fdq_LF_ResultadosDEZ11.AsInteger +
    fdq_LF_ResultadosDEZ12.AsInteger + fdq_LF_ResultadosDEZ13.AsInteger +
    fdq_LF_ResultadosDEZ14.AsInteger + fdq_LF_ResultadosDEZ15.AsInteger;
end;


OBS.: Os campos do grid que quero obter as informacoes é da coluna 2 a coluna 16 - (as colunas 0 e 1 são codigo e data).

Agora gostaria de saber como fazer pra pegar quantidade de numeros pares nesse intervalo de colunas 2 a 16, os números dentro de cada colunas podem variar de 1 a 25 (modalidade da LotoFacil)
exemplo: a coluna (2) pode conter o 4 ou 5, a coluna (3) o 7 ou 10 - não sao numeros fixos. E colocar a quantidade dentro da coluna Pares (que é a coluna 20 no grid)

O mesmo gostaria de fazer para pegar a quantidade de numeros Impares (que é a coluna 21 no grid)

e se nao for pedir muito para os numeros PRIMOS que é a coluna 23 no grid

e pegar o menor numero e o maior que são para as colunas 25 e 26 do grid


https://prnt.sc/17u4tnt
Rubens Pena

Rubens Pena

Responder

Post mais votado

02/07/2021

procedure Tdados.fdq_LF_ResultadosCalcFields(DataSet: TDataSet);
var
  dezena, valor: integer;
  soma, pares, impares, primos, menordezena, maiordezena: integer;
 
function EhPrimo(numero: integer): boolean;
  var
    calcular: integer;
  begin
    result := (numero > 1);
    for calcular := 2 to (numero-1) do
      if (numero mod calcular) = 0 then
      begin
        result := false;
        exit;
      end;
  end;
 
begin
  soma := 0;
  pares := 0;
  impares := 0;
  primos := 0;
  menordezena := 500; // inicia com um valor maior que o maior valor esperado pelo programa
  maiordezena := 0; // inicia com um valor menor que o menor valor esperado pelo programa (também pode ser -1)
 
  for dezena := 1 to 15 do
  begin
    valor := fdq_LF_Resultados.FieldByName('DEZ'+FormatFloat('00',dezena)).AsInteger; // obtém o valor da dezena
 
    Inc(soma, valor); // soma as dezenas
 
    if Odd(valor) then
      Inc(impares) // conta os impares
    else
      Inc(pares); // conta os pares
 
    if valor < menordezena then
      menorDezena := valor; // menor dezena

    if valor > maiordezena then
      maiorDezena := valor; // maior dezena
 
    if EhPrimo(valor) then
      Inc(primos); // conta números primos
  end;
 
  fdq_LF_ResultadosSomaDezenas.AsInteger := soma;
  fdq_LF_ResultadosContarPares.AsInteger := pares;
  fdq_LF_ResultadosContarImpares.AsInteger := impares;
  fdq_LF_ResultadosMenorDezena.AsInteger := menorDezena;
  fdq_LF_ResultadosMaiorDezena.AsInteger := maiorDezena;
  fdq_LF_ResultadosContarPrimos.AsInteger := primos;
end;

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

01/07/2021

Emerson Nascimento

procedure Tdados.fdq_LF_ResultadosCalcFields(DataSet: TDataSet);
var
  dezena, valor: integer;
  soma, pares, impares, primos, menor10, maior10: integer;

  function EhPrimo(numero: integer): boolean;
  var
    calcular: integer
  begin
    result := true;
    for calcular := 2 to (numero-1)
      if (calcular mod 2) = 0 then
      begin
        result := false;
        exit;
      end;
  end;
begin
  soma := 0;
  pares := 0;
  impares := 0;
  primos := 0;
  menor10 := 0;
  maior10 := 0;

  for dezena := 1 to 15 do
  begin
    valor := fdq_LF_Resultados.FieldByName('DEZ'+FormarFloat('00',dezena)).AsInteger; // obtém o valor da dezena

    Inc(soma, valor); // soma as dezenas

    if Odd(valor) then
      Inc(impares) // conta os impares
    else
      Inc(pares); // conta os pares

    if valor < 10 then
      Inc(menor10) // conta os menores que 10
    else
    if valor > 10 then
      Inc(maior10); // conta os maiores que 10

    if EhPrimo(valor) then
      Inc(primos);
  end;

  fdq_LF_ResultadosSomaDezenas.AsInteger := soma;
  fdq_LF_ResultadosContaPares.AsInteger := pares;
  fdq_LF_ResultadosContaImpares.AsInteger := impares;
  fdq_LF_ResultadosContaMenor10.AsInteger := menor10;
  fdq_LF_ResultadosContaMaior10.AsInteger := maior10;
  fdq_LF_ResultadosContaPrimos.AsInteger := primos;
end;

Responder

01/07/2021

Rubens Pena

procedure Tdados.fdq_LF_ResultadosCalcFields(DataSet: TDataSet);
var
  dezena, valor: integer;
  soma, pares, impares, primos, menor10, maior10: integer;

  function EhPrimo(numero: integer): boolean;
  var
    calcular: integer
  begin
    result := true;
    for calcular := 2 to (numero-1)
      if (calcular mod 2) = 0 then
      begin
        result := false;
        exit;
      end;
  end;
begin
  soma := 0;
  pares := 0;
  impares := 0;
  primos := 0;
  menor10 := 0;
  maior10 := 0;

  for dezena := 1 to 15 do
  begin
    valor := fdq_LF_Resultados.FieldByName('DEZ'+FormarFloat('00',dezena)).AsInteger; // obtém o valor da dezena

    Inc(soma, valor); // soma as dezenas

    if Odd(valor) then
      Inc(impares) // conta os impares
    else
      Inc(pares); // conta os pares

    if valor < 10 then
      Inc(menor10) // conta os menores que 10
    else
    if valor > 10 then
      Inc(maior10); // conta os maiores que 10

    if EhPrimo(valor) then
      Inc(primos);
  end;

  fdq_LF_ResultadosSomaDezenas.AsInteger := soma;
  fdq_LF_ResultadosContaPares.AsInteger := pares;
  fdq_LF_ResultadosContaImpares.AsInteger := impares;
  fdq_LF_ResultadosContaMenor10.AsInteger := menor10;
  fdq_LF_ResultadosContaMaior10.AsInteger := maior10;
  fdq_LF_ResultadosContaPrimos.AsInteger := primos;
end;



Olá mestre. Tem algumas informações que não deu certo, segue uma imagem detalhando o que deu certo e o que deu
errado: ( http://prntscr.com/17ybavm )
Responder

01/07/2021

Rubens Pena

Segue o código com com alguns comentários para melhor interpretação:

procedure Tdados.fdq_LF_ResultadosCalcFields(DataSet: TDataSet);
var
  dezena, valor: integer;
  soma, pares, impares, primos, menorDezena, maiorDezena: integer;

function EhPrimo(numero: integer): boolean;
  var
    calcular: integer;
  begin
    result := true;
    for calcular := 2 to (numero-1) do
      if (calcular mod 2) = 0 then
      begin
        result := false;
        exit;
      end;
  end;

begin
  soma := 0;  // OK
  pares := 0;   //OK
  impares := 0;   //OK
  primos := 0;     // contar num primos que sao eles: 02,03,05,07,11,13,17,19,23
  menorDezena := 0;  //aqui é pra dizer qual a menor dezena que saiu
  maiorDezena := 0;  //aqui é pra dizer qual a maior dezena que saiu

  for dezena := 1 to 15 do
  begin
    valor := fdq_LF_Resultados.FieldByName('DEZ'+FormatFloat('00',dezena)).AsInteger; // obtém o valor da dezena  // OK

    Inc(soma, valor); // soma as dezenas

    if Odd(valor) then
      Inc(impares) // conta os impares   OK
    else
      Inc(pares); // conta os pares      OK

    if valor < 10 then
      Inc(menorDezena) // conta os menores que 10 >> //Aqui é pra informar qual a Menor dezena
    else
    if valor > 10 then
      Inc(maiorDezena); // conta os maiores que 10 >> //Aqui é pra informar qual a Maior dezena

    if EhPrimo(valor) then  // contar num primos que sao eles: 02,03,05,07,11,13,17,19,23
      Inc(primos);
  end;

  //DEZENAS DE 1 A 25

  fdq_LF_ResultadosSomaDezenas.AsInteger := soma;  //OK
  fdq_LF_ResultadosContarPares.AsInteger := pares;     // OK
  fdq_LF_ResultadosContarImpares.AsInteger := impares;      // OK
  fdq_LF_ResultadosMenorDezena.AsInteger := menorDezena;   // aqui é pra retornar a menor dezena
  fdq_LF_ResultadosMaiorDezena.AsInteger := maiorDezena;  //aqui é pra terornar a maior dezena
  fdq_LF_ResultadosContarPrimos.AsInteger := primos; // não está contando. Os num primos de 1 a 25 são : 02,03,05,07,11,13,17,19,23
end;


imagem 1: http://prntscr.com/17ybavm
imagem 2: http://prntscr.com/17yduec

Grato pela paciência em tá me fazendo esses códigos.
Responder

02/07/2021

Rubens Pena

procedure Tdados.fdq_LF_ResultadosCalcFields(DataSet: TDataSet);
var
  dezena, valor: integer;
  soma, pares, impares, primos, menordezena, maiordezena: integer;
 
function EhPrimo(numero: integer): boolean;
  var
    calcular: integer;
  begin
    result := (numero > 1);
    for calcular := 2 to (numero-1) do
      if (numero mod calcular) = 0 then
      begin
        result := false;
        exit;
      end;
  end;
 
begin
  soma := 0;
  pares := 0;
  impares := 0;
  primos := 0;
  menordezena := 500; // inicia com um valor maior que o maior valor esperado pelo programa
  maiordezena := 0; // inicia com um valor menor que o menor valor esperado pelo programa (também pode ser -1)
 
  for dezena := 1 to 15 do
  begin
    valor := fdq_LF_Resultados.FieldByName('DEZ'+FormatFloat('00',dezena)).AsInteger; // obtém o valor da dezena
 
    Inc(soma, valor); // soma as dezenas
 
    if Odd(valor) then
      Inc(impares) // conta os impares
    else
      Inc(pares); // conta os pares
 
    if valor < menordezena then
      menorDezena := valor; // menor dezena

    if valor > maiordezena then
      maiorDezena := valor; // maior dezena
 
    if EhPrimo(valor) then
      Inc(primos); // conta números primos
  end;
 
  fdq_LF_ResultadosSomaDezenas.AsInteger := soma;  //OK  
  fdq_LF_ResultadosContarPares.AsInteger := pares;  //OK 
  fdq_LF_ResultadosContarImpares.AsInteger := impares;  //OK 
  fdq_LF_ResultadosMenorDezena.AsInteger := menorDezena;  // OK
  fdq_LF_ResultadosMaiorDezena.AsInteger := maiorDezena;   //OK 
  fdq_LF_ResultadosContarPrimos.AsInteger := primos;  //OK 
end;


Mestre ficou show, muito legal agora, show de bolas, obrigadão pela força. Nossa ficou legal mesmo :) .
Responder

03/07/2021

Rubens Pena

procedure Tdados.fdq_LF_ResultadosCalcFields(DataSet: TDataSet);
var
  dezena, valor: integer;
  soma, pares, impares, primos, menordezena, maiordezena: integer;
 
function EhPrimo(numero: integer): boolean;
  var
    calcular: integer;
  begin
    result := (numero > 1);
    for calcular := 2 to (numero-1) do
      if (numero mod calcular) = 0 then
      begin
        result := false;
        exit;
      end;
  end;
 
begin
  soma := 0;
  pares := 0;
  impares := 0;
  primos := 0;
  menordezena := 500; // inicia com um valor maior que o maior valor esperado pelo programa
  maiordezena := 0; // inicia com um valor menor que o menor valor esperado pelo programa (também pode ser -1)
 
  for dezena := 1 to 15 do
  begin
    valor := fdq_LF_Resultados.FieldByName('DEZ'+FormatFloat('00',dezena)).AsInteger; // obtém o valor da dezena
 
    Inc(soma, valor); // soma as dezenas
 
    if Odd(valor) then
      Inc(impares) // conta os impares
    else
      Inc(pares); // conta os pares
 
    if valor < menordezena then
      menorDezena := valor; // menor dezena

    if valor > maiordezena then
      maiorDezena := valor; // maior dezena
 
    if EhPrimo(valor) then
      Inc(primos); // conta números primos
  end;
 
  fdq_LF_ResultadosSomaDezenas.AsInteger := soma;  //OK  
  fdq_LF_ResultadosContarPares.AsInteger := pares;  //OK 
  fdq_LF_ResultadosContarImpares.AsInteger := impares;  //OK 
  fdq_LF_ResultadosMenorDezena.AsInteger := menorDezena;  // OK
  fdq_LF_ResultadosMaiorDezena.AsInteger := maiorDezena;   //OK 
  fdq_LF_ResultadosContarPrimos.AsInteger := primos;  //OK 
end;


Mestre ficou show, muito legal agora, show de bolas, obrigadão pela força. Nossa ficou legal mesmo :) .


Mestre da uma olhadinha nessa imagem: http://prntscr.com/1864jwy

Estava aqui estudando o código, inclui algumas linhas de código para ele somar a quantidade de números que saiu por linha, deu certo como mostrado ai na imagem. Mais ai me deparei com o seguinte como fazer a conta por coluna se o valores estão em uma linha dentro do grid, então empanquei de novo no código. O código agora ficou assim com a inclusão da soma por linhas, falta por Coluna, como tem na imagem. O que mudaria no código?

 procedure Tdados.fdq_LF_ResultadosCalcFields(DataSet: TDataSet);
var
  dezena, valor: Integer;
  soma, pares, impares, primos, menordezena, maiordezena: Integer;

  L1, L2, L3, L4, L5: Integer;
  C1, C2, C3, C4, C5: Integer;

  function EhPrimo(numero: Integer): boolean;
  var
    calcular: Integer;
  begin
    Result := (numero > 1);
    for calcular := 2 to (numero - 1) do
      if (numero mod calcular) = 0 then
      begin
        Result := false;
        Exit;
      end;
  end;

begin
  soma := 0;
  pares := 0;
  impares := 0;
  primos := 0;
  menordezena := 500;
  // inicia com um valor maior que o maior valor esperado pelo programa
  maiordezena := 0;
  // inicia com um valor menor que o menor valor esperado pelo programa (também pode ser -1)

  L1 := 0; //linha 1  1-2-3-4-5       OK
  L2 := 0; //linha 2  6-7-8-9-10      OK
  L3 := 0; //linha 3  11-12-13-14-15  OK
  L4 := 0; //linha 4  16-17-18-19-20  OK
  L5 := 0; //linha 5  21-22-23-24-25  OK

  C1 := 0; //coluna 1  1-6-11-16-21   ?
  C2 := 0; //coluna 2  2-7-12-17-22   ?
  C3 := 0; //coluna 3  3-8-13-18-23   ?
  C4 := 0; //coluna 4  4-9-14-19-24   ?
  C5 := 0; //coluna 5  5-10-15-20-25  ?

  for dezena := 1 to 15 do
  begin
    valor := fdq_LF_Resultados.FieldByName('DEZ' + FormatFloat('00', dezena))
      .AsInteger; // obtém o valor da dezena

    Inc(soma, valor); // soma as dezenas

    if Odd(valor) then
      Inc(impares) // conta os impares
    else
      Inc(pares); // conta os pares

    if valor < menordezena then
      menordezena := valor; // menor dezena

    if valor > maiordezena then
      maiordezena := valor; // maior dezena

    if EhPrimo(valor) then
      Inc(primos); // conta números primos

    if valor < 6 then
      Inc(L1); // conta os numeros da linha 1

    if (valor > 5) and (valor < 11) then
      Inc(L2); // conta os numeros da linha 2

    if (valor > 10) and (valor < 16) then
      Inc(L3); // conta os numeros da linha 3

    if (valor > 15) and (valor < 21) then
      Inc(L4); // conta os numeros da linha 4

    if (valor > 20) and (valor < 26) then
      Inc(L5); // conta os numeros da linha 5
  end;

  fdq_LF_ResultadosSomaDezenas.AsInteger := soma;
  fdq_LF_ResultadosContarPares.AsInteger := pares;
  fdq_LF_ResultadosContarImpares.AsInteger := impares;
  fdq_LF_ResultadosMenorDezena.AsInteger := menordezena;
  fdq_LF_ResultadosMaiorDezena.AsInteger := maiordezena;
  fdq_LF_ResultadosContarPrimos.AsInteger := primos;

  fdq_LF_ResultadosContaLinha1.AsInteger := L1;
  fdq_LF_ResultadosContaLinha2.AsInteger := L2;
  fdq_LF_ResultadosContaLinha3.AsInteger := L3;
  fdq_LF_ResultadosContaLinha4.AsInteger := L4;
  fdq_LF_ResultadosContaLinha5.AsInteger := L5;

  fdq_LF_ResultadosContaColuna1.AsInteger := C1;  // ?
  fdq_LF_ResultadosContaColuna2.AsInteger := C2;  // ?
  fdq_LF_ResultadosContaColuna3.AsInteger := C3;  // ?
  fdq_LF_ResultadosContaColuna4.AsInteger := C4;  // ?
  fdq_LF_ResultadosContaColuna5.AsInteger := C5;  // ?
end;
Responder

05/07/2021

Rubens Pena

Bom dia mestre.
Consegui fazer com que pegasse a quantidade das colunas
segue código abaixo. Da só uma olhada se esta bom ou se dá pra reduzir a quantidade de linhas.

procedure Tdados.fdq_LF_Qtd_BolasAfterOpen(DataSet: TDataSet);
begin
  fdq_LF_Qtd_Bolas.Refresh;
end;

procedure Tdados.fdq_LF_ResultadosCalcFields(DataSet: TDataSet);
var
  dezena, valor: Integer;
  soma, pares, impares, primos, menordezena, maiordezena: Integer;

  // INICIO DAS INFORMACOES DE CADA LINHA
  L1, L2, L3, L4, L5: Integer;

  // INICIO DAS INFORMACOES DE CADA COLUNA
  C: Integer;
  ValorColuna, C1, C2, C3, C4, C5: Integer;
  ArrayC1: array [0 .. 4] of Integer;
  ArrayC2: array [0 .. 4] of Integer;
  ArrayC3: array [0 .. 4] of Integer;
  ArrayC4: array [0 .. 4] of Integer;
  ArrayC5: array [0 .. 4] of Integer;

  function EhPrimo(numero: Integer): boolean;
  var
    calcular: Integer;
  begin
    Result := (numero > 1);
    for calcular := 2 to (numero - 1) do
      if (numero mod calcular) = 0 then
      begin
        Result := false;
        Exit;
      end;
  end;

begin
  soma := 0;
  pares := 0;
  impares := 0;
  primos := 0;
  menordezena := 500;
  // inicia com um valor maior que o maior valor esperado pelo programa
  maiordezena := 0;
  // inicia com um valor menor que o menor valor esperado pelo programa (também pode ser -1)

  L1 := 0; // linha 1  1-2-3-4-5       OK
  L2 := 0; // linha 2  6-7-8-9-10      OK
  L3 := 0; // linha 3  11-12-13-14-15  OK
  L4 := 0; // linha 4  16-17-18-19-20  OK
  L5 := 0; // linha 5  21-22-23-24-25  OK

  C1 := 0; // coluna 1  1-6-11-16-21   OK
  C2 := 0; // coluna 2  2-7-12-17-22   OK
  C3 := 0; // coluna 3  3-8-13-18-23   OK
  C4 := 0; // coluna 4  4-9-14-19-24   OK
  C5 := 0; // coluna 5  5-10-15-20-25  OK

  for dezena := 1 to 15 do
  begin
    valor := fdq_LF_Resultados.FieldByName('DEZ' + FormatFloat('00', dezena))
      .AsInteger; // obtém o valor da dezena

    Inc(soma, valor); // soma as dezenas

    if Odd(valor) then
      Inc(impares) // conta os impares
    else
      Inc(pares); // conta os pares

    if valor < menordezena then
      menordezena := valor; // menor dezena

    if valor > maiordezena then
      maiordezena := valor; // maior dezena

    if EhPrimo(valor) then
      Inc(primos); // conta números primos

    if valor < 6 then
      Inc(L1); // conta os numeros da linha 1

    if (valor > 5) and (valor < 11) then
      Inc(L2); // conta os numeros da linha 2

    if (valor > 10) and (valor < 16) then
      Inc(L3); // conta os numeros da linha 3

    if (valor > 15) and (valor < 21) then
      Inc(L4); // conta os numeros da linha 4

    if (valor > 20) and (valor < 26) then
      Inc(L5); // conta os numeros da linha 5
  end;

  ArrayC1[0] := 1; // aqui pega os valores do array da primeira coluna
  ArrayC1[1] := 6;
  ArrayC1[2] := 11;
  ArrayC1[3] := 16;
  ArrayC1[4] := 21;

  ArrayC2[0] := 2; // aqui pega os valores do array da segunda coluna
  ArrayC2[1] := 7;
  ArrayC2[2] := 12;
  ArrayC2[3] := 17;
  ArrayC2[4] := 22;

  ArrayC3[0] := 3; // aqui pega os valores do array da terceira coluna
  ArrayC3[1] := 8;
  ArrayC3[2] := 13;
  ArrayC3[3] := 18;
  ArrayC3[4] := 23;

  ArrayC4[0] := 4; // aqui pega os valores do array da quarta coluna
  ArrayC4[1] := 9;
  ArrayC4[2] := 14;
  ArrayC4[3] := 19;
  ArrayC4[4] := 24;

  ArrayC5[0] := 5; // aqui pega os valores do array da quarta coluna
  ArrayC5[1] := 10;
  ArrayC5[2] := 15;
  ArrayC5[3] := 20;
  ArrayC5[4] := 25;

  for dezena := 1 to 15 do
  begin
    ValorColuna := fdq_LF_Resultados.FieldByName('DEZ' + FormatFloat('00',
      dezena)).AsInteger; // obtém o valor da dezena

    for C := 0 to 4 do // aqui faz o array da primeira coluna
    begin
      if (ArrayC1[C] = ValorColuna) then
        Inc(C1, 1);
    end;

    for C := 0 to 4 do // aqui faz o array da segunda coluna
    begin
      if (ArrayC2[C] = ValorColuna) then
        Inc(C2, 1);
    end;

    for C := 0 to 4 do // aqui faz o array da terceira coluna
    begin
      if (ArrayC3[C] = ValorColuna) then
        Inc(C3, 1);
    end;

    for C := 0 to 4 do // aqui faz o array da quarta coluna
    begin
      if (ArrayC4[C] = ValorColuna) then
        Inc(C4, 1);
    end;

    for C := 0 to 4 do // aqui faz o array da quinta coluna
    begin
      if (ArrayC5[C] = ValorColuna) then
        Inc(C5, 1);
    end;
  end;

  // RESULTADO DA SOMAS DAS DEZENAS SORTEADAS
  // RESULTADO DA QUANTIDADE DE NUMEROS PARES QUE SAIU NO SORTEIO
  // RESULTADO DA QUANTIDAE DE NUMEROS IMPARES QUE SAIU NO SORTEIO
  // RESULTADO DA MENOR DEZENA QUE SAIU NO SORTEIO
  // RESULTADO DA MAIOR DEZENA QUE SAIU NO SORTEIO
  // RESULTADO DA QUANTIDADE DE NUMEROS PRIMOS QUE SAIU NO SORTEIO DE 1 A 25
  fdq_LF_ResultadosSomaDezenas.AsInteger := soma;
  fdq_LF_ResultadosContarPares.AsInteger := pares;
  fdq_LF_ResultadosContarImpares.AsInteger := impares;
  fdq_LF_ResultadosMenorDezena.AsInteger := menordezena;
  fdq_LF_ResultadosMaiorDezena.AsInteger := maiordezena;
  fdq_LF_ResultadosContarPrimos.AsInteger := primos;

  // RESULTADO DA SOMA DA QUANTIDADE DE DEZENAS QUE SAIU POR LINHA
  fdq_LF_ResultadosContaLinha1.AsInteger := L1;
  fdq_LF_ResultadosContaLinha2.AsInteger := L2;
  fdq_LF_ResultadosContaLinha3.AsInteger := L3;
  fdq_LF_ResultadosContaLinha4.AsInteger := L4;
  fdq_LF_ResultadosContaLinha5.AsInteger := L5;

  // RESULTADO DA SOMA DA QUANTIDADE DE DEZENAS QUE SAIU POR COLUNA
  fdq_LF_ResultadosContaColuna1.AsInteger := C1;
  fdq_LF_ResultadosContaColuna2.AsInteger := C2;
  fdq_LF_ResultadosContaColuna3.AsInteger := C3;
  fdq_LF_ResultadosContaColuna4.AsInteger := C4;
  fdq_LF_ResultadosContaColuna5.AsInteger := C5;

end;
Responder

05/07/2021

Rubens Pena

procedure Tdados.fdq_LF_ResultadosCalcFields(DataSet: TDataSet);
var
  dezena, valor: integer;
  soma, pares, impares, primos, menor10, maior10: integer;

  function EhPrimo(numero: integer): boolean;
  var
    calcular: integer
  begin
    result := true;
    for calcular := 2 to (numero-1)
      if (calcular mod 2) = 0 then
      begin
        result := false;
        exit;
      end;
  end;
begin
  soma := 0;
  pares := 0;
  impares := 0;
  primos := 0;
  menor10 := 0;
  maior10 := 0;

  for dezena := 1 to 15 do
  begin
    valor := fdq_LF_Resultados.FieldByName('DEZ'+FormarFloat('00',dezena)).AsInteger; // obtém o valor da dezena

    Inc(soma, valor); // soma as dezenas

    if Odd(valor) then
      Inc(impares) // conta os impares
    else
      Inc(pares); // conta os pares

    if valor < 10 then
      Inc(menor10) // conta os menores que 10
    else
    if valor > 10 then
      Inc(maior10); // conta os maiores que 10

    if EhPrimo(valor) then
      Inc(primos);
  end;

  fdq_LF_ResultadosSomaDezenas.AsInteger := soma;
  fdq_LF_ResultadosContaPares.AsInteger := pares;
  fdq_LF_ResultadosContaImpares.AsInteger := impares;
  fdq_LF_ResultadosContaMenor10.AsInteger := menor10;
  fdq_LF_ResultadosContaMaior10.AsInteger := maior10;
  fdq_LF_ResultadosContaPrimos.AsInteger := primos;
end;



Da uma olhadinha no código que eu fiz ai a cima pra pegar as COLUNAS, se ta bom da forma que eu fiz ou se tem outra maneira de diminuir as linhas. A forma que eu fiz ta funcionando direitinho.
Responder

09/07/2021

Emerson Nascimento

tente assim:
procedure Tdados.fdq_LF_ResultadosCalcFields(DataSet: TDataSet);
const
  ArrayC1: array [0 .. 4] of Integer = (01, 06, 11, 16, 21);
  ArrayC2: array [0 .. 4] of Integer = (02, 07, 12, 17, 22);
  ArrayC3: array [0 .. 4] of Integer = (03, 08, 13, 18, 23);
  ArrayC4: array [0 .. 4] of Integer = (04, 09, 14, 19, 24);
  ArrayC5: array [0 .. 4] of Integer = (05, 10, 15, 20, 25);
var
  dezena, valor: Integer;
  soma, pares, impares, primos, menordezena, maiordezena: Integer;

  // INICIO DAS INFORMACOES DE CADA LINHA
  L1, L2, L3, L4, L5: Integer;

  // INICIO DAS INFORMACOES DE CADA COLUNA
  C, C1, C2, C3, C4, C5: Integer;

  function EhPrimo(numero: Integer): boolean;
  var
    calcular: Integer;
  begin
    Result := (numero > 1);
    for calcular := 2 to (numero - 1) do
      if (numero mod calcular) = 0 then
      begin
        Result := false;
        Exit;
      end;
  end;
begin
  soma := 0;
  pares := 0;
  impares := 0;
  primos := 0;
  // inicia com um valor maior que o maior valor esperado pelo programa
  menordezena := 500;
  // inicia com um valor menor que o menor valor esperado pelo programa (também pode ser -1)
  maiordezena := 0;

  L1 := 0; // linha 1  1-2-3-4-5       OK
  L2 := 0; // linha 2  6-7-8-9-10      OK
  L3 := 0; // linha 3  11-12-13-14-15  OK
  L4 := 0; // linha 4  16-17-18-19-20  OK
  L5 := 0; // linha 5  21-22-23-24-25  OK

  C1 := 0; // coluna 1  1-6-11-16-21   OK
  C2 := 0; // coluna 2  2-7-12-17-22   OK
  C3 := 0; // coluna 3  3-8-13-18-23   OK
  C4 := 0; // coluna 4  4-9-14-19-24   OK
  C5 := 0; // coluna 5  5-10-15-20-25  OK

  for dezena := 1 to 15 do
  begin
    // obtém o valor da dezena
    valor := fdq_LF_Resultados.FieldByName('DEZ' + FormatFloat('00', dezena)).AsInteger;

    Inc(soma, valor); // soma as dezenas

    if Odd(valor) then
      Inc(impares) // conta os impares
    else
      Inc(pares); // conta os pares

    if valor < menordezena then
      menordezena := valor; // obtém a menor dezena
 
    if valor > maiordezena then
      maiordezena := valor; // obtém a maior dezena

    if EhPrimo(valor) then
      Inc(primos); // conta números primos

    if valor < 6 then
      Inc(L1); // conta os numeros da linha 1

    if (valor > 5) and (valor < 11) then
      Inc(L2); // conta os numeros da linha 2

    if (valor > 10) and (valor < 16) then
      Inc(L3); // conta os numeros da linha 3

    if (valor > 15) and (valor < 21) then
      Inc(L4); // conta os numeros da linha 4

    if (valor > 20) and (valor < 26) then
      Inc(L5); // conta os numeros da linha 5

	// conta as dezenas por colunas
    for C := 0 to 4 do
	begin
      if (ArrayC1[C] = valor) then
        Inc(C1, 1);

      if (ArrayC2[C] = valor) then
        Inc(C2, 1);

      if (ArrayC3[C] = valor) then
        Inc(C3, 1);

      if (ArrayC4[C] = valor) then
        Inc(C4, 1);

      if (ArrayC5[C] = valor) then
        Inc(C5, 1);
    end;
  end;

 
  // RESULTADO DA SOMAS DAS DEZENAS SORTEADAS
  // RESULTADO DA QUANTIDADE DE NUMEROS PARES QUE SAIU NO SORTEIO
  // RESULTADO DA QUANTIDAE DE NUMEROS IMPARES QUE SAIU NO SORTEIO
  // RESULTADO DA MENOR DEZENA QUE SAIU NO SORTEIO
  // RESULTADO DA MAIOR DEZENA QUE SAIU NO SORTEIO
  // RESULTADO DA QUANTIDADE DE NUMEROS PRIMOS QUE SAIU NO SORTEIO DE 1 A 25
  fdq_LF_ResultadosSomaDezenas.AsInteger := soma;
  fdq_LF_ResultadosContarPares.AsInteger := pares;
  fdq_LF_ResultadosContarImpares.AsInteger := impares;
  fdq_LF_ResultadosMenorDezena.AsInteger := menordezena;
  fdq_LF_ResultadosMaiorDezena.AsInteger := maiordezena;
  fdq_LF_ResultadosContarPrimos.AsInteger := primos;
 
  // RESULTADO DA SOMA DA QUANTIDADE DE DEZENAS QUE SAIU POR LINHA
  fdq_LF_ResultadosContaLinha1.AsInteger := L1;
  fdq_LF_ResultadosContaLinha2.AsInteger := L2;
  fdq_LF_ResultadosContaLinha3.AsInteger := L3;
  fdq_LF_ResultadosContaLinha4.AsInteger := L4;
  fdq_LF_ResultadosContaLinha5.AsInteger := L5;
 
  // RESULTADO DA SOMA DA QUANTIDADE DE DEZENAS QUE SAIU POR COLUNA
  fdq_LF_ResultadosContaColuna1.AsInteger := C1;
  fdq_LF_ResultadosContaColuna2.AsInteger := C2;
  fdq_LF_ResultadosContaColuna3.AsInteger := C3;
  fdq_LF_ResultadosContaColuna4.AsInteger := C4;
  fdq_LF_ResultadosContaColuna5.AsInteger := C5;
 
end;
Responder

10/07/2021

Rubens Pena

tente assim:
procedure Tdados.fdq_LF_ResultadosCalcFields(DataSet: TDataSet);
const
  ArrayC1: array [0 .. 4] of Integer = (01, 06, 11, 16, 21);
  ArrayC2: array [0 .. 4] of Integer = (02, 07, 12, 17, 22);
  ArrayC3: array [0 .. 4] of Integer = (03, 08, 13, 18, 23);
  ArrayC4: array [0 .. 4] of Integer = (04, 09, 14, 19, 24);
  ArrayC5: array [0 .. 4] of Integer = (05, 10, 15, 20, 25);
var
  dezena, valor: Integer;
  soma, pares, impares, primos, menordezena, maiordezena: Integer;

  // INICIO DAS INFORMACOES DE CADA LINHA
  L1, L2, L3, L4, L5: Integer;

  // INICIO DAS INFORMACOES DE CADA COLUNA
  C, C1, C2, C3, C4, C5: Integer;

  function EhPrimo(numero: Integer): boolean;
  var
    calcular: Integer;
  begin
    Result := (numero > 1);
    for calcular := 2 to (numero - 1) do
      if (numero mod calcular) = 0 then
      begin
        Result := false;
        Exit;
      end;
  end;
begin
  soma := 0;
  pares := 0;
  impares := 0;
  primos := 0;
  // inicia com um valor maior que o maior valor esperado pelo programa
  menordezena := 500;
  // inicia com um valor menor que o menor valor esperado pelo programa (também pode ser -1)
  maiordezena := 0;

  L1 := 0; // linha 1  1-2-3-4-5       OK
  L2 := 0; // linha 2  6-7-8-9-10      OK
  L3 := 0; // linha 3  11-12-13-14-15  OK
  L4 := 0; // linha 4  16-17-18-19-20  OK
  L5 := 0; // linha 5  21-22-23-24-25  OK

  C1 := 0; // coluna 1  1-6-11-16-21   OK
  C2 := 0; // coluna 2  2-7-12-17-22   OK
  C3 := 0; // coluna 3  3-8-13-18-23   OK
  C4 := 0; // coluna 4  4-9-14-19-24   OK
  C5 := 0; // coluna 5  5-10-15-20-25  OK

  for dezena := 1 to 15 do
  begin
    // obtém o valor da dezena
    valor := fdq_LF_Resultados.FieldByName('DEZ' + FormatFloat('00', dezena)).AsInteger;

    Inc(soma, valor); // soma as dezenas

    if Odd(valor) then
      Inc(impares) // conta os impares
    else
      Inc(pares); // conta os pares

    if valor < menordezena then
      menordezena := valor; // obtém a menor dezena
 
    if valor > maiordezena then
      maiordezena := valor; // obtém a maior dezena

    if EhPrimo(valor) then
      Inc(primos); // conta números primos

    if valor < 6 then
      Inc(L1); // conta os numeros da linha 1

    if (valor > 5) and (valor < 11) then
      Inc(L2); // conta os numeros da linha 2

    if (valor > 10) and (valor < 16) then
      Inc(L3); // conta os numeros da linha 3

    if (valor > 15) and (valor < 21) then
      Inc(L4); // conta os numeros da linha 4

    if (valor > 20) and (valor < 26) then
      Inc(L5); // conta os numeros da linha 5

	// conta as dezenas por colunas
    for C := 0 to 4 do
	begin
      if (ArrayC1[C] = valor) then
        Inc(C1, 1);

      if (ArrayC2[C] = valor) then
        Inc(C2, 1);

      if (ArrayC3[C] = valor) then
        Inc(C3, 1);

      if (ArrayC4[C] = valor) then
        Inc(C4, 1);

      if (ArrayC5[C] = valor) then
        Inc(C5, 1);
    end;
  end;

 
  // RESULTADO DA SOMAS DAS DEZENAS SORTEADAS
  // RESULTADO DA QUANTIDADE DE NUMEROS PARES QUE SAIU NO SORTEIO
  // RESULTADO DA QUANTIDAE DE NUMEROS IMPARES QUE SAIU NO SORTEIO
  // RESULTADO DA MENOR DEZENA QUE SAIU NO SORTEIO
  // RESULTADO DA MAIOR DEZENA QUE SAIU NO SORTEIO
  // RESULTADO DA QUANTIDADE DE NUMEROS PRIMOS QUE SAIU NO SORTEIO DE 1 A 25
  fdq_LF_ResultadosSomaDezenas.AsInteger := soma;
  fdq_LF_ResultadosContarPares.AsInteger := pares;
  fdq_LF_ResultadosContarImpares.AsInteger := impares;
  fdq_LF_ResultadosMenorDezena.AsInteger := menordezena;
  fdq_LF_ResultadosMaiorDezena.AsInteger := maiordezena;
  fdq_LF_ResultadosContarPrimos.AsInteger := primos;
 
  // RESULTADO DA SOMA DA QUANTIDADE DE DEZENAS QUE SAIU POR LINHA
  fdq_LF_ResultadosContaLinha1.AsInteger := L1;
  fdq_LF_ResultadosContaLinha2.AsInteger := L2;
  fdq_LF_ResultadosContaLinha3.AsInteger := L3;
  fdq_LF_ResultadosContaLinha4.AsInteger := L4;
  fdq_LF_ResultadosContaLinha5.AsInteger := L5;
 
  // RESULTADO DA SOMA DA QUANTIDADE DE DEZENAS QUE SAIU POR COLUNA
  fdq_LF_ResultadosContaColuna1.AsInteger := C1;
  fdq_LF_ResultadosContaColuna2.AsInteger := C2;
  fdq_LF_ResultadosContaColuna3.AsInteger := C3;
  fdq_LF_ResultadosContaColuna4.AsInteger := C4;
  fdq_LF_ResultadosContaColuna5.AsInteger := C5;
 
end;
Show de bola. Reduziu meu código 125 linhas (incrementeis mais campos) utilizando esse método. Obrigado mestre.
Responder

14/07/2021

Rubens Pena

tente assim:
procedure Tdados.fdq_LF_ResultadosCalcFields(DataSet: TDataSet);
const
  ArrayC1: array [0 .. 4] of Integer = (01, 06, 11, 16, 21);
  ArrayC2: array [0 .. 4] of Integer = (02, 07, 12, 17, 22);
  ArrayC3: array [0 .. 4] of Integer = (03, 08, 13, 18, 23);
  ArrayC4: array [0 .. 4] of Integer = (04, 09, 14, 19, 24);
  ArrayC5: array [0 .. 4] of Integer = (05, 10, 15, 20, 25);
var
  dezena, valor: Integer;
  soma, pares, impares, primos, menordezena, maiordezena: Integer;

  // INICIO DAS INFORMACOES DE CADA LINHA
  L1, L2, L3, L4, L5: Integer;

  // INICIO DAS INFORMACOES DE CADA COLUNA
  C, C1, C2, C3, C4, C5: Integer;

  function EhPrimo(numero: Integer): boolean;
  var
    calcular: Integer;
  begin
    Result := (numero > 1);
    for calcular := 2 to (numero - 1) do
      if (numero mod calcular) = 0 then
      begin
        Result := false;
        Exit;
      end;
  end;
begin
  soma := 0;
  pares := 0;
  impares := 0;
  primos := 0;
  // inicia com um valor maior que o maior valor esperado pelo programa
  menordezena := 500;
  // inicia com um valor menor que o menor valor esperado pelo programa (também pode ser -1)
  maiordezena := 0;

  L1 := 0; // linha 1  1-2-3-4-5       OK
  L2 := 0; // linha 2  6-7-8-9-10      OK
  L3 := 0; // linha 3  11-12-13-14-15  OK
  L4 := 0; // linha 4  16-17-18-19-20  OK
  L5 := 0; // linha 5  21-22-23-24-25  OK

  C1 := 0; // coluna 1  1-6-11-16-21   OK
  C2 := 0; // coluna 2  2-7-12-17-22   OK
  C3 := 0; // coluna 3  3-8-13-18-23   OK
  C4 := 0; // coluna 4  4-9-14-19-24   OK
  C5 := 0; // coluna 5  5-10-15-20-25  OK

  for dezena := 1 to 15 do
  begin
    // obtém o valor da dezena
    valor := fdq_LF_Resultados.FieldByName('DEZ' + FormatFloat('00', dezena)).AsInteger;

    Inc(soma, valor); // soma as dezenas

    if Odd(valor) then
      Inc(impares) // conta os impares
    else
      Inc(pares); // conta os pares

    if valor < menordezena then
      menordezena := valor; // obtém a menor dezena
 
    if valor > maiordezena then
      maiordezena := valor; // obtém a maior dezena

    if EhPrimo(valor) then
      Inc(primos); // conta números primos

    if valor < 6 then
      Inc(L1); // conta os numeros da linha 1

    if (valor > 5) and (valor < 11) then
      Inc(L2); // conta os numeros da linha 2

    if (valor > 10) and (valor < 16) then
      Inc(L3); // conta os numeros da linha 3

    if (valor > 15) and (valor < 21) then
      Inc(L4); // conta os numeros da linha 4

    if (valor > 20) and (valor < 26) then
      Inc(L5); // conta os numeros da linha 5

	// conta as dezenas por colunas
    for C := 0 to 4 do
	begin
      if (ArrayC1[C] = valor) then
        Inc(C1, 1);

      if (ArrayC2[C] = valor) then
        Inc(C2, 1);

      if (ArrayC3[C] = valor) then
        Inc(C3, 1);

      if (ArrayC4[C] = valor) then
        Inc(C4, 1);

      if (ArrayC5[C] = valor) then
        Inc(C5, 1);
    end;
  end;
 
  // RESULTADO DA SOMAS DAS DEZENAS SORTEADAS
  // RESULTADO DA QUANTIDADE DE NUMEROS PARES QUE SAIU NO SORTEIO
  // RESULTADO DA QUANTIDAE DE NUMEROS IMPARES QUE SAIU NO SORTEIO
  // RESULTADO DA MENOR DEZENA QUE SAIU NO SORTEIO
  // RESULTADO DA MAIOR DEZENA QUE SAIU NO SORTEIO
  // RESULTADO DA QUANTIDADE DE NUMEROS PRIMOS QUE SAIU NO SORTEIO DE 1 A 25
  fdq_LF_ResultadosSomaDezenas.AsInteger := soma;
  fdq_LF_ResultadosContarPares.AsInteger := pares;
  fdq_LF_ResultadosContarImpares.AsInteger := impares;
  fdq_LF_ResultadosMenorDezena.AsInteger := menordezena;
  fdq_LF_ResultadosMaiorDezena.AsInteger := maiordezena;
  fdq_LF_ResultadosContarPrimos.AsInteger := primos;
 
  // RESULTADO DA SOMA DA QUANTIDADE DE DEZENAS QUE SAIU POR LINHA
  fdq_LF_ResultadosContaLinha1.AsInteger := L1;
  fdq_LF_ResultadosContaLinha2.AsInteger := L2;
  fdq_LF_ResultadosContaLinha3.AsInteger := L3;
  fdq_LF_ResultadosContaLinha4.AsInteger := L4;
  fdq_LF_ResultadosContaLinha5.AsInteger := L5;
 
  // RESULTADO DA SOMA DA QUANTIDADE DE DEZENAS QUE SAIU POR COLUNA
  fdq_LF_ResultadosContaColuna1.AsInteger := C1;
  fdq_LF_ResultadosContaColuna2.AsInteger := C2;
  fdq_LF_ResultadosContaColuna3.AsInteger := C3;
  fdq_LF_ResultadosContaColuna4.AsInteger := C4;
  fdq_LF_ResultadosContaColuna5.AsInteger := C5;
 
end;


Olá, Mestre tentei fazer utilizando apenas um numero, (no caso seria o numero da sorte) a pessoa digita esse numero dentro de um TEdit e ele faz o processo varrendo as colunas do grid. Segue abaixo o código como eu deixei. Tirei algumas linhas do código pra não ficar muito grande aqui no fórum, são linhas que vimos em outros diálogos nosso acima, mais creio que você entenderá

Vou colocar o código abaixo porque tem limite de linhas aqui no fórum
Responder

14/07/2021

Rubens Pena

Olá, Mestre tentei fazer utilizando apenas um numero, (no caso seria o numero da sorte) a pessoa digita esse numero dentro de um TEdit e ele faz o processo varrendo as colunas do grid. Segue abaixo o código como eu deixei. Tirei algumas linhas do código pra não ficar muito grande aqui no fórum, são linhas que vimos em outros diálogos nosso acima, mais creio que você entenderá

procedure Tdados.fdq_LF_ResultadosCalcFields(DataSet: TDataSet);
const // COLUNAS
  ArrayColuna1: array [0 .. 4] of Integer = (01, 06, 11, 16, 21);
  ArrayColuna2: array [0 .. 4] of Integer = (02, 07, 12, 17, 22);
  ArrayColuna3: array [0 .. 4] of Integer = (03, 08, 13, 18, 23);
  ArrayColuna4: array [0 .. 4] of Integer = (04, 09, 14, 19, 24);
  ArrayColuna5: array [0 .. 4] of Integer = (05, 10, 15, 20, 25);

// apaguei as outras linhas pra nao ficar grande o codigo aqui no forum

const // NUMERO DA SORTE
  ArrayNumeroDaSorte: array [1..1] of Integer = (13);// Aqui ele tem que pegar o valor la do TEdit nesse caso seria o numero 13 por exemplo

var
  dezena, valor: Integer;
  soma, pares, impares, primos, menordezena, maiordezena: Integer;


  // INICIO DAS INFORMACOES DE CADA COLUNA
  Colunas, Coluna1, Coluna2, Coluna3, Coluna4, Coluna5: Integer;

// apaguei as outras linhas pra nao ficar grande o codigo aqui no forum

  //INICIO DAS INFORMACOES NUMERO DA SORTE
   NUMERODASORTE, NUMERODASORTE1 : Integer;

  function EhPrimo(numero: Integer): boolean;
  var
    calcular: Integer;
  begin
    Result := (numero > 1);
    for calcular := 2 to (numero - 1) do
      if (numero mod calcular) = 0 then
      begin
        Result := False;
        Exit;
      end;
  end;

begin
  soma := 0;
  pares := 0;
  impares := 0;
  primos := 0;
  menordezena := 500;
  // inicia com um valor maior que o maior valor esperado pelo programa
  maiordezena := 0;
  // inicia com um valor menor que o menor valor esperado pelo programa (também pode ser -1)


  Coluna1 := 0; // 1-6-11-16-21   OK
  Coluna2 := 0; // 2-7-12-17-22   OK
  Coluna3 := 0; // 3-8-13-18-23   OK
  Coluna4 := 0; // 4-9-14-19-24   OK
  Coluna5 := 0; // 5-10-15-20-25  OK

// apaguei as outras linhas pra nao ficar grande o codigo aqui no forum

  NUMERODASORTE1 := 0;

  for dezena := 1 to 15 do // aqui faz o array das dezenas do grid
  begin
    valor := fdq_LF_Resultados.FieldByName('DEZ' + FormatFloat('00', dezena))
      .AsInteger; // obtém o valor da dezena

    Inc(soma, valor); // soma as dezenas

    if Odd(valor) then
      Inc(impares) // conta os impares
    else
      Inc(pares); // conta os pares
    if valor < menordezena then
      menordezena := valor; // menor dezena
    if valor > maiordezena then
      maiordezena := valor; // maior dezena
    if EhPrimo(valor) then
      Inc(primos); // conta números primos
    if valor < 6 then
      Inc(Linha1); // conta os numeros da linha 1
    if (valor > 5) and (valor < 11) then
      Inc(Linha2); // conta os numeros da linha 2
    if (valor > 10) and (valor < 16) then
      Inc(Linha3); // conta os numeros da linha 3
    if (valor > 15) and (valor < 21) then
      Inc(Linha4); // conta os numeros da linha 4
    if (valor > 20) and (valor < 26) then
      Inc(Linha5); // conta os numeros da linha 5
  end;

  for dezena := 1 to 15 do // aqui faz o array das dezenas do grid
  begin
    valor := fdq_LF_Resultados.FieldByName('DEZ' + FormatFloat('00', dezena))
      .AsInteger; // obtém o valor da dezena

    for Colunas := 0 to 4 do // aqui faz o array das colunas
    begin
      if (ArrayColuna1[Colunas] = valor) then
        Inc(Coluna1, 1);
      if (ArrayColuna2[Colunas] = valor) then
        Inc(Coluna2, 1);
      if (ArrayColuna3[Colunas] = valor) then
        Inc(Coluna3, 1);
      if (ArrayColuna4[Colunas] = valor) then
        Inc(Coluna4, 1);
      if (ArrayColuna5[Colunas] = valor) then
        Inc(Coluna5, 1);
    end;
  end;

// apaguei as outras linhas pra nao ficar grande o codigo aqui no forum



//aqui é como estou tentando implementar o código para verificar se o numero da sorte esta ou nao dentro do sorteio
  for dezena := 1 to 15 do // aqui faz o array das dezenas do grid
  begin
    valor := fdq_LF_Resultados.FieldByName('DEZ' + FormatFloat('00', dezena))
      .AsInteger; // obtém o valor da dezena

    for NUMERODASORTE := 0 to 1 do // aqui faz o array do numero da sorte
    begin
      if (ArrayNumeroDaSorte[NUMERODASORTE] = valor) then
        Inc(NUMERODASORTE1, 1);
    end;
  end;

 // apaguei as outras linhas pra nao ficar grande o codigo aqui no forum


  //aqui me retorna o valor la na coluna do grid
  fdq_LF_ResultadosContaNumeroDaSorte.AsInteger := NUMERODASORTE1;


Aqui imagem da tela, com anotações: https://prnt.sc/1b2l2o6

Numero da Sorte
Responder

14/07/2021

Emerson Nascimento

só repita o "for" se houver necessidade. no caso do número da sorte você pode fazer em algum dos "for" de quinzena que já existem.
procedure Tdados.fdq_LF_ResultadosCalcFields(DataSet: TDataSet);
const // COLUNAS
  ArrayColuna1: array [0 .. 4] of Integer = (01, 06, 11, 16, 21);
  ArrayColuna2: array [0 .. 4] of Integer = (02, 07, 12, 17, 22);
  ArrayColuna3: array [0 .. 4] of Integer = (03, 08, 13, 18, 23);
  ArrayColuna4: array [0 .. 4] of Integer = (04, 09, 14, 19, 24);
  ArrayColuna5: array [0 .. 4] of Integer = (05, 10, 15, 20, 25);
 
// apaguei as outras linhas pra nao ficar grande o codigo aqui no forum
 
var
  dezena, valor: Integer;
  soma, pares, impares, primos, menordezena, maiordezena: Integer;
 
  // INICIO DAS INFORMACOES DE CADA COLUNA
  Colunas, Coluna1, Coluna2, Coluna3, Coluna4, Coluna5: Integer;
 
  // apaguei as outras linhas pra nao ficar grande o codigo aqui no forum
 
  //INICIO DAS INFORMACOES NUMERO DA SORTE
  NUMERODASORTE, NUMERODASORTE1: Integer;
 
  function EhPrimo(numero: Integer): boolean;
  var
    calcular: Integer;
  begin
    Result := (numero > 1);
    for calcular := 2 to (numero - 1) do
      if (numero mod calcular) = 0 then
      begin
        Result := False;
        Exit;
      end;
  end;
 
begin
  soma := 0;
  pares := 0;
  impares := 0;
  primos := 0;
  menordezena := 500;
  // inicia com um valor maior que o maior valor esperado pelo programa
  maiordezena := 0;
  // inicia com um valor menor que o menor valor esperado pelo programa (também pode ser -1)
 
  Coluna1 := 0; // 1-6-11-16-21   OK
  Coluna2 := 0; // 2-7-12-17-22   OK
  Coluna3 := 0; // 3-8-13-18-23   OK
  Coluna4 := 0; // 4-9-14-19-24   OK
  Coluna5 := 0; // 5-10-15-20-25  OK
 
// apaguei as outras linhas pra nao ficar grande o codigo aqui no forum

  // INICIALIZA O CONTROLE DO SORTEIO DO NUMERO DA SORTE
  NUMERODASORTE := StrToIntDef(EditNumeroDaSorte.Text,0); // NUMERO DA SORTE INDICADO
  NUMERODASORTE1 := 0; // NUMERO DA SORTE SORTEADO?
 
  for dezena := 1 to 15 do // aqui faz o array das dezenas do grid
  begin
    valor := fdq_LF_Resultados.FieldByName('DEZ' + FormatFloat('00', dezena))
      .AsInteger; // obtém o valor da dezena
 
    Inc(soma, valor); // soma as dezenas
 
    if Odd(valor) then
      Inc(impares) // conta os impares
    else
      Inc(pares); // conta os pares
    if valor < menordezena then
      menordezena := valor; // menor dezena
    if valor > maiordezena then
      maiordezena := valor; // maior dezena
    if EhPrimo(valor) then
      Inc(primos); // conta números primos
    if valor < 6 then
      Inc(Linha1); // conta os numeros da linha 1
    if (valor > 5) and (valor < 11) then
      Inc(Linha2); // conta os numeros da linha 2
    if (valor > 10) and (valor < 16) then
      Inc(Linha3); // conta os numeros da linha 3
    if (valor > 15) and (valor < 21) then
      Inc(Linha4); // conta os numeros da linha 4
    if (valor > 20) and (valor < 26) then
      Inc(Linha5); // conta os numeros da linha 5

    // VERIFICA SE O NÚMERO DA SORTE ESTÁ NO JOGO/APOSTA
    if valor = NUMERODASORTE then
      NUMERODASORTE1 := 1;

  end;
 
  for dezena := 1 to 15 do // aqui faz o array das dezenas do grid
  begin
    valor := fdq_LF_Resultados.FieldByName('DEZ' + FormatFloat('00', dezena))
      .AsInteger; // obtém o valor da dezena
 
    for Colunas := 0 to 4 do // aqui faz o array das colunas
    begin
      if (ArrayColuna1[Colunas] = valor) then
        Inc(Coluna1, 1);
      if (ArrayColuna2[Colunas] = valor) then
        Inc(Coluna2, 1);
      if (ArrayColuna3[Colunas] = valor) then
        Inc(Coluna3, 1);
      if (ArrayColuna4[Colunas] = valor) then
        Inc(Coluna4, 1);
      if (ArrayColuna5[Colunas] = valor) then
        Inc(Coluna5, 1);
    end;
  end;
 
  // apaguei as outras linhas pra nao ficar grande o codigo aqui no forum
 
  //aqui retorna o valor do número da sorte na coluna do grid
  fdq_LF_ResultadosContaNumeroDaSorte.AsInteger := NUMERODASORTE1;


Responder

14/07/2021

Rubens Pena

só repita o "for" se houver necessidade. no caso do número da sorte você pode fazer em algum dos "for" de quinzena que já existem.
procedure Tdados.fdq_LF_ResultadosCalcFields(DataSet: TDataSet);
const // COLUNAS
  ArrayColuna1: array [0 .. 4] of Integer = (01, 06, 11, 16, 21);
  ArrayColuna2: array [0 .. 4] of Integer = (02, 07, 12, 17, 22);
  ArrayColuna3: array [0 .. 4] of Integer = (03, 08, 13, 18, 23);
  ArrayColuna4: array [0 .. 4] of Integer = (04, 09, 14, 19, 24);
  ArrayColuna5: array [0 .. 4] of Integer = (05, 10, 15, 20, 25);
 
// apaguei as outras linhas pra nao ficar grande o codigo aqui no forum
 
var
  dezena, valor: Integer;
  soma, pares, impares, primos, menordezena, maiordezena: Integer;
 
  // INICIO DAS INFORMACOES DE CADA COLUNA
  Colunas, Coluna1, Coluna2, Coluna3, Coluna4, Coluna5: Integer;
 
  // apaguei as outras linhas pra nao ficar grande o codigo aqui no forum
 
  //INICIO DAS INFORMACOES NUMERO DA SORTE
  NUMERODASORTE, NUMERODASORTE1: Integer;
 
  function EhPrimo(numero: Integer): boolean;
  var
    calcular: Integer;
  begin
    Result := (numero > 1);
    for calcular := 2 to (numero - 1) do
      if (numero mod calcular) = 0 then
      begin
        Result := False;
        Exit;
      end;
  end;
 
begin
  soma := 0;
  pares := 0;
  impares := 0;
  primos := 0;
  menordezena := 500;
  // inicia com um valor maior que o maior valor esperado pelo programa
  maiordezena := 0;
  // inicia com um valor menor que o menor valor esperado pelo programa (também pode ser -1)
 
  Coluna1 := 0; // 1-6-11-16-21   OK
  Coluna2 := 0; // 2-7-12-17-22   OK
  Coluna3 := 0; // 3-8-13-18-23   OK
  Coluna4 := 0; // 4-9-14-19-24   OK
  Coluna5 := 0; // 5-10-15-20-25  OK
 
// apaguei as outras linhas pra nao ficar grande o codigo aqui no forum

  // INICIALIZA O CONTROLE DO SORTEIO DO NUMERO DA SORTE
  NUMERODASORTE := StrToIntDef(EditNumeroDaSorte.Text,0); // NUMERO DA SORTE INDICADO
  NUMERODASORTE1 := 0; // NUMERO DA SORTE SORTEADO?
 
  for dezena := 1 to 15 do // aqui faz o array das dezenas do grid
  begin
    valor := fdq_LF_Resultados.FieldByName('DEZ' + FormatFloat('00', dezena))
      .AsInteger; // obtém o valor da dezena
 
    Inc(soma, valor); // soma as dezenas
 
    if Odd(valor) then
      Inc(impares) // conta os impares
    else
      Inc(pares); // conta os pares
    if valor < menordezena then
      menordezena := valor; // menor dezena
    if valor > maiordezena then
      maiordezena := valor; // maior dezena
    if EhPrimo(valor) then
      Inc(primos); // conta números primos
    if valor < 6 then
      Inc(Linha1); // conta os numeros da linha 1
    if (valor > 5) and (valor < 11) then
      Inc(Linha2); // conta os numeros da linha 2
    if (valor > 10) and (valor < 16) then
      Inc(Linha3); // conta os numeros da linha 3
    if (valor > 15) and (valor < 21) then
      Inc(Linha4); // conta os numeros da linha 4
    if (valor > 20) and (valor < 26) then
      Inc(Linha5); // conta os numeros da linha 5

    // VERIFICA SE O NÚMERO DA SORTE ESTÁ NO JOGO/APOSTA
    if valor = NUMERODASORTE then
      NUMERODASORTE1 := 1;

  end;
 
  for dezena := 1 to 15 do // aqui faz o array das dezenas do grid
  begin
    valor := fdq_LF_Resultados.FieldByName('DEZ' + FormatFloat('00', dezena))
      .AsInteger; // obtém o valor da dezena
 
    for Colunas := 0 to 4 do // aqui faz o array das colunas
    begin
      if (ArrayColuna1[Colunas] = valor) then
        Inc(Coluna1, 1);
      if (ArrayColuna2[Colunas] = valor) then
        Inc(Coluna2, 1);
      if (ArrayColuna3[Colunas] = valor) then
        Inc(Coluna3, 1);
      if (ArrayColuna4[Colunas] = valor) then
        Inc(Coluna4, 1);
      if (ArrayColuna5[Colunas] = valor) then
        Inc(Coluna5, 1);
    end;
  end;
 
  // apaguei as outras linhas pra nao ficar grande o codigo aqui no forum
 
  //aqui retorna o valor do número da sorte na coluna do grid
  fdq_LF_ResultadosContaNumeroDaSorte.AsInteger := NUMERODASORTE1;



Mestre esse código estou usando dentro da FDquery no enento OnCalcFields e Essa query esta dentro de um data module. Para as demais linhas de código deu certo. Não sei porque com esse não esta querendo dar certo. Nas linhas 55 do seu código acima eu mudei um pouquito, pois o TEdit esta em outro formulário então o código dessa linha ficou assim ( NUMERODASORTE := StrToIntDef(frm_Resultados_LF.edt_Numero_Da_Sorte.Text,0); ), quando chega nessa linha 55 debugando, trava e o sistema não continua o debug e da uma mensagem de erro, essa: >> https://prnt.sc/1b4okz4 <<, então dou o brack e quando coloco o ponteiro do mouse em cima de NUMERODASORTE esta com valor 0; O valor do Edit eu coloquei no caption dele pra fazer o teste, mais quando entra no form o TEdit inicia vazio. Será que essa parte do código teria que ser em outro local dentro do forme tipo quando eu digitar dentro do edit ele atualizar aquele coluna do grid. Eu tenho impressão que não está dando certo, porque o form que tem o edt_Numero_Da_Sorte ainda não esta instanciado (aberto), pois se não tá aberto como o código vai saber o que tem digitado no Edit né? Esse foi meu pensamento que me veio nesse exato momento. E outra o valor do edit não é salvo no Banco, e só pra digitar mesmo, entendeu? Se não for possível deixar como os demais, o que você sugeri?
Responder

14/07/2021

Emerson Nascimento

  try
    NUMERODASORTE := StrToIntDef(EditNumeroDaSorte.Text,0); // NUMERO DA SORTE INDICADO
  except
    NUMERODASORTE := 0;
  end;
Responder

14/07/2021

Rubens Pena

  try
    NUMERODASORTE := StrToIntDef(EditNumeroDaSorte.Text,0); // NUMERO DA SORTE INDICADO
  except
    NUMERODASORTE := 0;
  end;

Mestre continua sem retornar o valor desejado que no caso seria 1 ou 0.
Abaixo segue o código direto de como esta no momento:
procedure Tdados.fdq_LF_ResultadosCalcFields(DataSet: TDataSet);
const // COLUNAS
  ArrayColuna1: array [0 .. 4] of Integer = (01, 06, 11, 16, 21);
  ArrayColuna2: array [0 .. 4] of Integer = (02, 07, 12, 17, 22);
  ArrayColuna3: array [0 .. 4] of Integer = (03, 08, 13, 18, 23);
  ArrayColuna4: array [0 .. 4] of Integer = (04, 09, 14, 19, 24);
  ArrayColuna5: array [0 .. 4] of Integer = (05, 10, 15, 20, 25);

var
  dezena, valor: Integer;
  soma, pares, impares, primos, menordezena, maiordezena: Integer;

  // INICIO DAS INFORMACOES DE CADA LINHA
  Linha1, Linha2, Linha3, Linha4, Linha5: Integer;

  // INICIO DAS INFORMACOES DE CADA COLUNA
  Colunas, Coluna1, Coluna2, Coluna3, Coluna4, Coluna5: Integer;



  //INICIO DAS INFORMACOES NUMERO DA SORTE   <<<<<<<<<<<<<<<<<<<<<<<<<<<
  NUMERODASORTE, NUMERODASORTE1 : Integer;



  function EhPrimo(numero: Integer): boolean;
  var
    calcular: Integer;
  begin
    Result := (numero > 1);
    for calcular := 2 to (numero - 1) do
      if (numero mod calcular) = 0 then
      begin
        Result := False;
        Exit;
      end;
  end;

begin
  soma := 0;
  pares := 0;
  impares := 0;
  primos := 0;
  menordezena := 500;
  // inicia com um valor maior que o maior valor esperado pelo programa
  maiordezena := 0;
  // inicia com um valor menor que o menor valor esperado pelo programa (também pode ser -1)

  Linha1 := 0; // 1-2-3-4-5       OK
  Linha2 := 0; // 6-7-8-9-10      OK
  Linha3 := 0; // 11-12-13-14-15  OK
  Linha4 := 0; // 16-17-18-19-20  OK
  Linha5 := 0; // 21-22-23-24-25  OK

  Coluna1 := 0; // 1-6-11-16-21   OK
  Coluna2 := 0; // 2-7-12-17-22   OK
  Coluna3 := 0; // 3-8-13-18-23   OK
  Coluna4 := 0; // 4-9-14-19-24   OK
  Coluna5 := 0; // 5-10-15-20-25  OK



  // INICIALIZA O CONTROLE DO SORTEIO DO NUMERO DA SORTE    <<<<<<<<<<<<<<<<<<<<<<<<<<<
 try
  NUMERODASORTE := StrToIntDef(frm_Resultados_LF.edt_Numero_Da_Sorte.Text,0); // NUMERO DA SORTE INDICADO
  except
  NUMERODASORTE1 := 0; // NUMERO DA SORTE SORTEADO
  end;


  for dezena := 1 to 15 do // aqui faz o array das dezenas do grid
  begin
    valor := fdq_LF_Resultados.FieldByName('DEZ' + FormatFloat('00', dezena))
      .AsInteger; // obtém o valor da dezena // OK

    Inc(soma, valor); // soma as dezenas // OK

    if Odd(valor) then
      Inc(impares) // conta os impares // OK
    else
      Inc(pares); // conta os pares // OK

    if valor < menordezena then
      menordezena := valor; // menor dezena

    if valor > maiordezena then
      maiordezena := valor; // maior dezena // OK

    if EhPrimo(valor) then
      Inc(primos); // conta números primos // OK

    if valor < 6 then
      Inc(Linha1); // conta os numeros da linha 1 // OK

    if (valor > 5) and (valor < 11) then
      Inc(Linha2); // conta os numeros da linha 2 // OK

    if (valor > 10) and (valor < 16) then
      Inc(Linha3); // conta os numeros da linha 3 // OK

    if (valor > 15) and (valor < 21) then
      Inc(Linha4); // conta os numeros da linha 4 // OK

    if (valor > 20) and (valor < 26) then
      Inc(Linha5); // conta os numeros da linha 5 // OK



      if valor = NUMERODASORTE then    //  <<<<<<<<<<<<<<<<<<<<<<<<<<<
      NUMERODASORTE1 := 1;


  end;

  for dezena := 1 to 15 do // aqui faz o array das dezenas do grid
  begin
    valor := fdq_LF_Resultados.FieldByName('DEZ' + FormatFloat('00', dezena))
      .AsInteger; // obtém o valor da dezena // OK

    for Colunas := 0 to 4 do // aqui faz o array das colunas // OK
    begin
      if (ArrayColuna1[Colunas] = valor) then
        Inc(Coluna1, 1); // OK

      if (ArrayColuna2[Colunas] = valor) then
        Inc(Coluna2, 1); // OK

      if (ArrayColuna3[Colunas] = valor) then
        Inc(Coluna3, 1); // OK

      if (ArrayColuna4[Colunas] = valor) then
        Inc(Coluna4, 1); // OK

      if (ArrayColuna5[Colunas] = valor) then
        Inc(Coluna5, 1); // OK
    end;
  end;

  fdq_LF_ResultadosSomaDezenas.AsInteger := soma; // OK
  fdq_LF_ResultadosContaPares.AsInteger := pares; // OK
  fdq_LF_ResultadosContaImpares.AsInteger := impares; // OK
  fdq_LF_ResultadosMenor_Dezena.AsInteger := menordezena; // OK
  fdq_LF_ResultadosMaior_Dezena.AsInteger := maiordezena; // OK
  fdq_LF_ResultadosContaPrimos.AsInteger := primos; // OK

  // RESULTADO DA SOMA DA QUANTIDADE DE DEZENAS QUE SAIU POR LINHA
  fdq_LF_ResultadosContaLinha1.AsInteger := Linha1; // OK
  fdq_LF_ResultadosContaLinha2.AsInteger := Linha2; // OK
  fdq_LF_ResultadosContaLinha3.AsInteger := Linha3; // OK
  fdq_LF_ResultadosContaLinha4.AsInteger := Linha4; // OK
  fdq_LF_ResultadosContaLinha5.AsInteger := Linha5; // OK

  // RESULTADO DA SOMA DA QUANTIDADE DE DEZENAS QUE SAIU POR COLUNA
  fdq_LF_ResultadosContaColuna1.AsInteger := Coluna1; // OK
  fdq_LF_ResultadosContaColuna2.AsInteger := Coluna2; // OK
  fdq_LF_ResultadosContaColuna3.AsInteger := Coluna3; // OK
  fdq_LF_ResultadosContaColuna4.AsInteger := Coluna4; // OK
  fdq_LF_ResultadosContaColuna5.AsInteger := Coluna5; // OK


  fdq_LF_ResultadosContaNumeroDaSorte.AsInteger := NUMERODASORTE1; // ????  <<<<<<<<<<<<<<<<<<<<<<<<<<<
end;


Fiz uns teste colocando no código o numero direto, utilizei vários números e e no debug passa batido, usei quase todos os números e na hora do debug o NUMERODASORTE recebe o valor correspondente, mais quando eu retiro o número 7 e coloco o código normal da ele não recebe o valor do edit, fica 0
 try
  NUMERODASORTE := 7;// StrToIntDef(frm_Resultados_LF.edt_Numero_Da_Sorte.Text,0); // NUMERO DA SORTE INDICADO
  except
  NUMERODASORTE1 := 0; // NUMERO DA SORTE SORTEADO
  end;


O FDQuery que utiliza esse código esta dentro do datamodulo chamado (dados) e o edit esta no formulário chamado (frm_Resultados_LF)
eu invoco o form frm_Resultados_LF com o código abaixo:
procedure Tfrm_Principal.Resultados2Click(Sender: TObject);
begin
  if (frm_Resultados_LF = nil) then
  begin
    frm_Resultados_LF := Tfrm_Resultados_LF.Create(Self);
  end;
  frm_Resultados_LF.Show;


e no evento OnShow eu inicio o codigo da seguinte forma:
procedure Tfrm_Resultados_LF.FormShow(Sender: TObject);
begin
  dados.fdq_LF_Resultados.Open;
  dados.fdq_LF_Resultados.Last;
...
end;[code=delphi]


Será que esse evento em especifico tem que ser chamado em outro local assim que o forme abre?
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar