Boa Noite
Amigos
Como mencionei no meu post de agradecimento, estou postando aqui agora um outro problema que tenho que resolver:
Tenho aeguinte tabela:
Tab200 conteudo:
20,20,23,24,24,25,26,27,27,28,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,56,
60,64,67,72,73,80,84,85,86,89,91,95,96,100,107,113,120
Tab400 conteudo:
23,24,24,24,25,26,27,28,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,52,55,56,60,62,64,
64,67,72,75,80,86,87,100
Então a rotina é a seguinte:
Eu entro com uma variaves que recebe o valor de 200 ou 400
Entro com outra variavel que recebe o valor de 264,10
Se eu optar por 200, tenho que acessar a tab200, escolher quatro(4) valores, aleatoriamente que executando o seguinte
calculo: vamos que eu o programa escolha: 20,20,23,24 e calcule da seguinte forma:
((((200/20)*20)/23)*24) este calculo tem que dar 264,10
E assim vai aleatoriamente com mais 4 grupos, calculando e mostrando o resultado.
Ao termino de todas as cominações, a que mais se aproximar de 264,10 será o resultado.
Para maior entendimento, esses valores correspondem a engrenagens de uma máquina, quero dizer que, por exemplo
na Tab200 eu tenho disponivel duas engrenagens de tamanho 20, uma 23, duas 24, uma 25, uma 26 duas 27 e assim por diante. Ou seja, se no calculo o programa me dizer que para chegar ao valor aproximado de 264,10 precisou utilizar, duas engrenagens de 20, uma de 24 e uma de 25, vou na maquina e ponho essas engrenagens, para a máquina funcionar
e fazer o seu trabalho.
Eu posso utilizar as duas tabelas, 200 ou 400, que significam que tenho duas maquinas, se de repente na de 200 eu não conseguir uma aproximação, eu posso tentar outro calculo usando a tab400.
Como posso pegar esses valores aleatoriamente, sabendo que num grupo de quatro, eu só posso utilizar duas vezes 20, porque só disponho de duas engrenagens de 20. Eu só posso utilizar o que eu tenho na tabela.
Então a rotina tem que sair calculando até encontrar o valor aproximado de 264,10.
Atenciosamente
Continuação Rotina Sen, cose tang
Moderador: Moderadores
- Ricardo Sales Ribeiro
- Usuário Nível 3

- Mensagens: 279
- Registrado em: 13 Jul 2004 18:06
- Localização: Fortaleza-Ceara
- Ricardo Sales Ribeiro
- Usuário Nível 3

- Mensagens: 279
- Registrado em: 13 Jul 2004 18:06
- Localização: Fortaleza-Ceara
Continuação Rotina Sen, cose tang
Bom Dia!
Alguem pode me ajudar a criar essa rotina, desde já agradeço.
Atenciosamente
Alguem pode me ajudar a criar essa rotina, desde já agradeço.
Atenciosamente
Continuação Rotina Sen, cose tang
Salve o código que se segue como prg e compile. Informe o valor e voilá.
Código: Selecionar todos
private amat200 := {20,20,23,24,24,25,26,27,27,28,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,56,60,64,67,72,73,80,84,85,86,89,91,95,96,100,107,113,120}
private xnum:=0;xa:=0;ya:=0;za:=0;qa:=0;xb:=0;yb:=0;zb:=0;qb:=0;xmin:=0; xmax:=0; xexato:=0
private xe:=0;ye:=0;ze:=0;qe:=0
cls
@ 02,10 say 'Entre número: ' get xnum pict '9999.999'
read
if lastkey()=27
quit
endif
xmax:=xnum*10
calcula(xnum)
if xmax <(xnum*10)
@ 03,10 say 'Acima.: '+transform(xmax,'9999.9999') +'-'+str(amat200[xa])+' '+str(amat200[ya])+' '+str(amat200[za])+' '+str(amat200[qa])
endif
if xexato == xnum
@ 04,10 say 'Exato.: '+transform(xexato,'9999.9999')+'-'+str(amat200[xe])+' '+str(amat200[ye])+' '+str(amat200[ze])+' '+str(amat200[qe])
endif
if xmin>0
@ 05,10 say 'Abaixo: '+transform(xmin,'9999.9999') +'-'+str(amat200[xb])+' '+str(amat200[yb])+' '+str(amat200[zb])+' '+str(amat200[qb])
endif
return
procedure calcula()
local i:=0; iret:=0
for x:= 1 to len(amat200)
for y:= 1 to len(amat200)
if x<> y
for z:= 1 to len(amat200)
if ((z <> x) .and. (z <> y))
for q:= 1 to len(amat200)
if ((q <> x) .and. (q <> y) .and. (q <> z))
i += 1
@ 10,10 say transform(i,'999999999')+' - '+transform(amat200[x],'999')
iret :=calculo(amat200[x],amat200[y],amat200[z],amat200[q])
@ 12,10 say transform(iret,'9999.9999')+' - '+str(amat200[x])+','+str(amat200[y])+','+str(amat200[z])+','+str(amat200[q])
if iret > xnum
if xmax > iret
xmax := iret
xa:=x;ya:=y;za:=z;qa:=q
endif
elseif iret < xnum
if xmin < iret
xb:=x;yb:=y;zb:=z;qb:=q
xmin := iret
endif
elseif iret == xnum
xe:=x;ye:=y;ze:=z;qe:=q
xexato := iret
endif
inkey()
if lastkey() == 27
return
endif
endif
next
endif
next
endif
next
next
function calculo(x,y,z,q)
xret:=((((200/x)*y)/z)*q)
return(xret)
Editado pela última vez por Toledo em 28 Nov 2013 17:01, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
- Ricardo Sales Ribeiro
- Usuário Nível 3

- Mensagens: 279
- Registrado em: 13 Jul 2004 18:06
- Localização: Fortaleza-Ceara
Continuação Rotina Sen, cose tang
Caro Amigo
Ronilson
Obrigado pela rotina, vou compilar e testar, informo assim que processar.
Atenciosamente
Ronilson
Obrigado pela rotina, vou compilar e testar, informo assim que processar.
Atenciosamente
- Ricardo Sales Ribeiro
- Usuário Nível 3

- Mensagens: 279
- Registrado em: 13 Jul 2004 18:06
- Localização: Fortaleza-Ceara
Continuação Rotina Sen, cose tang
Amigo Ronilson
Bom Dia!
A Rotina funcionou corretamente, preciso agora acrescentar algumas informações, para filtrar mais os resultados, da
seguinte maneira:
Quero informar uma margem, tipo se eu informar 1.00 e se o valor informado for 264.100, esse valor deverá ser acrescentado ou diminuido de 1.00 ou seja, a rotina vai só me mostrar os resultados que tenham 263.100 ou 265.100
incluindo 264.100.
Se a margem for 0.1 os resultados vão interferir somente nas casas decimais. Ou seja mostra os resultados a partir de
264.100.
Esses resultados quero mostrar num arquivo texto com a seguinte formatação:
23 23 25 33 = 264.000000
23 23 28 37 = 264.285706
O meu chefe quer vê esse resultado num relatorio simples, para poder escolher a melhor opção, a gente trabalha com
maquinas, tornos mecanicos de alta precisão, e precisamos informar a maquina, os valores mais precisos.
Atenciosamente
Bom Dia!
A Rotina funcionou corretamente, preciso agora acrescentar algumas informações, para filtrar mais os resultados, da
seguinte maneira:
Quero informar uma margem, tipo se eu informar 1.00 e se o valor informado for 264.100, esse valor deverá ser acrescentado ou diminuido de 1.00 ou seja, a rotina vai só me mostrar os resultados que tenham 263.100 ou 265.100
incluindo 264.100.
Se a margem for 0.1 os resultados vão interferir somente nas casas decimais. Ou seja mostra os resultados a partir de
264.100.
Esses resultados quero mostrar num arquivo texto com a seguinte formatação:
23 23 25 33 = 264.000000
23 23 28 37 = 264.285706
O meu chefe quer vê esse resultado num relatorio simples, para poder escolher a melhor opção, a gente trabalha com
maquinas, tornos mecanicos de alta precisão, e precisamos informar a maquina, os valores mais precisos.
Atenciosamente
