Contar Numeros Pares, Impares, Primos, e (ver qual menor e maior valor) no grid
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
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
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;
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 )
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.
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 :) .
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;
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;
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.
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;
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;
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
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
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;
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?
14/07/2021
Emerson Nascimento
try NUMERODASORTE := StrToIntDef(EditNumeroDaSorte.Text,0); // NUMERO DA SORTE INDICADO except NUMERODASORTE := 0; end;
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?
Clique aqui para fazer login e interagir na Comunidade :)