Fórum Contar Numeros Pares, Impares, Primos, e (ver qual menor e maior valor) no grid #616151
01/07/2021
0
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
Curtir tópico
+ 0Post 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
Gostei + 1
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;Gostei + 0
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 )
Gostei + 0
01/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 := 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.
Gostei + 0
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 :) .
Gostei + 0
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;Gostei + 0
05/07/2021
Rubens Pena
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;Gostei + 0
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.
Gostei + 0
09/07/2021
Emerson Nascimento
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;Gostei + 1
10/07/2021
Rubens Pena
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;Gostei + 0
14/07/2021
Rubens Pena
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
Gostei + 0
14/07/2021
Rubens Pena
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
Gostei + 0
14/07/2021
Emerson Nascimento
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;Gostei + 0
14/07/2021
Rubens Pena
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?
Gostei + 0
14/07/2021
Emerson Nascimento
try
NUMERODASORTE := StrToIntDef(EditNumeroDaSorte.Text,0); // NUMERO DA SORTE INDICADO
except
NUMERODASORTE := 0;
end;
Gostei + 0
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?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)