LagMaster Posted March 26, 2012 Report Share Posted March 26, 2012 Boas Eu devia tar mesmo a dormir quando pensei nisso, pois parecia mesmo de génio. Mas agora não me tou a lembrar Tipo tinha que calcular a recta (Y) apartir de dois pontos dados ex: (3,2) (3,6) Aí atribuia ao primeiro ponto o nome de ponto um e ao segundos de dois. P1= (3,2) P2=(3,6) Primeiro calcularia o m (declive) da seguinte forma: m=y2-y1 6-2 4 _____=____=__ x2-x1 3-3 0 then y=0x +b escolhia-se um dos pontos (ex: (3,6) ) e atribuia-se ao y da equação da reta o y do ponto e ao x da equação o x do ponto: 6=0 x 3 +b 6=0+b 6-0=b 6=b ou seja a equação seria: y=0x + 6 --------------------------------------------------------------------------------------------- O programa teria de fazer isso.. O meu problema é passar isto para código.. Alguém me pode dar umas luzes ?? Entretanto vou estudar mais pascal ;D Cumprimentos LagMaster YOU SHALL NOT PASS !!! Link to comment Share on other sites More sharing options...
pmg Posted March 26, 2012 Report Share Posted March 26, 2012 Divisao por 0? ??? Tens a certeza? Eu nao me lembro dessa parte da matematica, mas uma recta vertical nao pode ser expressa com a formula que usaste em cima, pois nao? What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
LagMaster Posted March 26, 2012 Author Report Share Posted March 26, 2012 Eu antes de postar confirmei no meu caderno de mat.. Isto aqui foi só um exemplo e acho que não me enganei em lado nenhum... Mas vou experimentar com outros nº: P1= (5,2) P2=(7,6) m=y2-y1 6-2 4 _____=____=__=2 x2-x1 7-5 2 then y=2x +b Escolho o ponto 1 (5,2) 2=2 x 5 +b 2=10+b 2-10=b -8=b y=2x-8 ------------------------------------------------------ Escolho o ponto 2 nesta ultimo etapa: (7,6) 6=2 x 7 + b 6=14 + b 6-14=b -8=b --------------------------------------------------------------------------- Portanto acho que não cometi nenhum erro .. :S Cumprimentos Lagmaster 😄 YOU SHALL NOT PASS !!! Link to comment Share on other sites More sharing options...
nunopicado Posted March 26, 2012 Report Share Posted March 26, 2012 Afinal, o que é que o utilizador deverá inserir para o programa calcular? Exemplifica deste modo. Imagina que a conta a fazer é x=a+b. O utilizador deverá inserir, por exemplo: 2 3 e o programa iria retornar x=5 Tenta traduzir isto para a tua equação... 😁 PS: A cena que o pmg fala da divisão por 0 é porque no teu primeiro exemplo aparecia-te isso, mas tal é uma divisão impossível, pelo que o compilador daria erro ao tentar... "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to comment Share on other sites More sharing options...
LagMaster Posted March 26, 2012 Author Report Share Posted March 26, 2012 Ok vou tentar.. ( ainda nem comecei a rever Pascal no site de tutoriais lo) E quanto aquilo do 0 não tinha entendido. Mas isso seria um problema pois em casos como aquele daria portanto erro. Cumprimentos Lagmaster YOU SHALL NOT PASS !!! Link to comment Share on other sites More sharing options...
LagMaster Posted March 26, 2012 Author Report Share Posted March 26, 2012 Estava a ver e por exemplo.. program Noname0; begin WriteLn('Escreva o ponto 1 Ex: 3,2!'); Readln(P1); WriteLn end. Nao daria (ainda nem escrevi as variaveis nem nada tava so a pensar).. pois dentro da variavel P1 existem outras 2 variaveis.Como coloco isso ?? Cumprimentos Lagmaster YOU SHALL NOT PASS !!! Link to comment Share on other sites More sharing options...
nunopicado Posted March 26, 2012 Report Share Posted March 26, 2012 E quanto aquilo do 0 não tinha entendido. Mas isso seria um problema pois em casos como aquele daria portanto erro. Tudo tem solução. Bastaria, antes de efectuar o cálculo, verificar se o denominador é = a 0. Se for, dá uma mensagem a indicar sobre o porquê de não ser possível efectuar o cálculo. Se não for, calcula da maneira normal. Isso é simples! 😄 Nao daria (ainda nem escrevi as variaveis nem nada tava so a pensar).. pois dentro da variavel P1 existem outras 2 variaveis.Como coloco isso ?? Ah, OK. Então aí 3,2 são dois valores distintos, certo? Imagino que seja o x e o y do ponto P1, neste caso. Também é simples. Ou lês em separado o x e o y para variáveis diferentes, ou crias uma função que leia uma string (caracteres alfanumericos) e depois a analise: Pega no valor que estiver antes da virgula, converte-o para real, e atribui-o ao x; e faz o mesmo com o valor depois da virgula e atribui-o ao y (ou vice-versa). Quanto à/às variáveis usadas para guardar essas coordenadas, até se pode usar um tipo predefinido do Delphi/FreePascal, especifico para coordenadas. uses Classes; var P1:TPoint; begin P1.X:=5; // O tipo TPoint define uma variável com dois campos: X e Y, que se usam colocando um . entre o nome da variável e o do campo P1.Y:=3; end. Sendo mais do que um ponto (como me parece que precisas, podes até usar um array deste tipo: uses Classes; var P:Array [1..2] of TPoint; // Define-se um Array de TPoints, neste caso com dois begin P[1].X:=3; // Coordenada X do ponto 1 P[1].Y:=5; // Coordenada Y do ponto 1 P[2].X:=1; // Coordenada X do ponto 2 P[2].Y:=2; // Coordenada Y do ponto 2 end. "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to comment Share on other sites More sharing options...
LagMaster Posted March 26, 2012 Author Report Share Posted March 26, 2012 Isso parece-me deveras complicado Acho que mais simples ir pedindo 1 a 1.. o valor de x no ponto 1 etc.. Entretanto vou começar a "montar" o programa 😁 e deixo para amanha o estudo.. Obrigado pela ajuda.. daqui a uns momentos volto a postar com a duvida que obviamente vou ter xD Cumprimentos LagMaster YOU SHALL NOT PASS !!! Link to comment Share on other sites More sharing options...
nunopicado Posted March 26, 2012 Report Share Posted March 26, 2012 A parte da função para separar os valores por virgulas é um pouco mais complexa. Mas podes usar os TPoint individualmente: uses Classes; var P1,P2:TPoint; // Com duas variáveis, em vez do array begin Write('Insira a coordenada X do 1º ponto: '); readln(p1.x); Write('Insira a coordenada Y do 1º ponto: '); readln(p1.y); Write('Insira a coordenada X do 2º ponto: '); readln(p2.x); Write('Insira a coordenada Y do 2º ponto: '); readln(p2.y); . . . end. "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to comment Share on other sites More sharing options...
LagMaster Posted March 26, 2012 Author Report Share Posted March 26, 2012 Só vi o post agora 😁 Mas entretanto tinha feito o seguinte: [code]program Noname0; var x1,x2,y1,y2,result: Real; begin WriteLn('Escreva o nº equivalente a x no ponto 1'); Readln (x1); WriteLn ('Escreva o nº equivalente a y no ponto 1'); readln (y1); writeLn ('Escreva o nº equivalente a x no ponto 2 '); readln (x2); writeln ('Escreva o nº equivalente a y no ponto 2'); readln (y2); writeln ('Portanto Ponto 1:(',x1:3:2,',',y1:3:2,')'); readln; writeln ('Portanto Ponto 2:(',x2:3:2,',',y2:3:2,')'); readln; end. [/code] Mas tb daria assim não ?? (assim acho mais facil por agora)... YOU SHALL NOT PASS !!! Link to comment Share on other sites More sharing options...
nunopicado Posted March 26, 2012 Report Share Posted March 26, 2012 Sim, também dá. Aliás, se as coordenadas precisam de ser do tipo Real, então é mesmo melhor não usar o TPoint, que só aceita coordenadas Integer. Já agora, aquela variável Result, sugiro que lhe dês outro nome. Embora neste caso concreto não haja problemas, a palavra Result serve de variável criada automáticamente em funções, para guardar o valor que essas retornam. Logo, é de bom tom criar o hábito de não a usar para mais uso nenhum além desse, para que quando uses funções não corras o risco de ter problemas e depois não saber porquê! 😁 "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to comment Share on other sites More sharing options...
LagMaster Posted March 26, 2012 Author Report Share Posted March 26, 2012 Agora veio a parte mais dificil: fazer a equação no programa... a fase 1 deu (m= (y2-y1) / (x2-x1) ) Mas a outra não consigo já :/ (da erro) program Noname0; const y: var x1m,m,b,x1,x2,y1,y2,result: Real; begin WriteLn('Escreva o nº equivalente a x no ponto 1'); Readln (x1); WriteLn ('Escreva o nº equivalente a y no ponto 1'); readln (y1); writeLn ('Escreva o nº equivalente a x no ponto 2 '); readln (x2); writeln ('Escreva o nº equivalente a y no ponto 2'); readln (y2); writeln ('Portanto Ponto 1:(',x1:3:2,',',y1:3:2,')'); readln; writeln ('Portanto Ponto 2:(',x2:3:2,',',y2:3:2,')'); readln; m:=(y2-y1)/(x2-x1); y:= m + b; y1:=m * x1 + b; y1:= mx1+ b; y1 -mx1:=b; writeln ('y=',m,b,); readln; end. Entre outros não sei que tipo de constante o Y será ? Any help, please ? 🙂 Cumprimentos LagMaster 😁 YOU SHALL NOT PASS !!! Link to comment Share on other sites More sharing options...
nunopicado Posted March 26, 2012 Report Share Posted March 26, 2012 É assim... De matemática, népias... Mas se estás a atribuir a y a soma de dois valores reais, y, não pode ser uma constante, e sim uma variável, também ela real. "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to comment Share on other sites More sharing options...
LagMaster Posted March 26, 2012 Author Report Share Posted March 26, 2012 Estava a pensar mal.. pensava que como não se alterava o Y seria constante lol Eu agora niveis de mat tou com um problema y:= m + b y1:= m * x1 + b <----------- apos a conta de multiplicar, o que iria dar ? coloquei uma variavel real mx1 e depois coloquei y1:= mx1 +b como resultado, mas nada :/ Agradeço a ajuda dada 😁 Amanha volto com a cabeça fresca e com sorte alguem que tenha conhecimentos nesta area da "matematica pascaliana" tenha visto e respondido xd Cumprimentos e agradecimentos LagMaster YOU SHALL NOT PASS !!! Link to comment Share on other sites More sharing options...
LagMaster Posted March 26, 2012 Author Report Share Posted March 26, 2012 E a luz acendeu-se... espero que dê assim: program Noname0; var y,x1m,m,b,x1,x2,y1,y2,result: Real; begin WriteLn('Escreva o nº equivalente a x no ponto 1'); Readln (x1); WriteLn ('Escreva o nº equivalente a y no ponto 1'); readln (y1); writeLn ('Escreva o nº equivalente a x no ponto 2 '); readln (x2); writeln ('Escreva o nº equivalente a y no ponto 2'); readln (y2); writeln ('Portanto Ponto 1:(',x1:3:2,',',y1:3:2,')'); readln; writeln ('Portanto Ponto 2:(',x2:3:2,',',y2:3:2,')'); readln; m:=(y2-y1)/(x2-x1); y:= m + b; y1:=m * x1 + b; y1:= m*x1+ b; y1-m*x1:=b; writeln ('y=',m,b); readln; end. ? Agora necessito de não matematica mas da linguagem... na linha: y1-m*x1:=b; Dá o erro: Variable Identifier Expected What can I do ?? BTW Thanks for helping YOU SHALL NOT PASS !!! Link to comment Share on other sites More sharing options...
bsccara Posted March 26, 2012 Report Share Posted March 26, 2012 Para desenhar linhas rectas existem algoritmos melhores como o Bresenham (http://en.wikipedia.org/wiki/Bresenham's_line_algorithm), que não precisa de virgula flutuante. Link to comment Share on other sites More sharing options...
nunopicado Posted March 26, 2012 Report Share Posted March 26, 2012 y1:=m * x1 + b; y1:= m*x1+ b; Antes de mais tens de rever isto. Ao colocares em duas linhas seguidas a atribuires a y1 um calculo qualquer, a primeira linha basicamente não servirá de nada. De qualquer maneira, neste caso, elas são repetidas, pelo que basta apagar uma. Perguntas o que ele faria aqui? A prioridade é a multiplicação, pelo que ele irá multiplicar primeiro m por x1, e depois soma o valor de b ao total. No fim atribui tudo a y1. y1-m*x1:=b; Aqui dá-te erro porque é uma operação impossível. Do lado esquerdo do sinal := só podes ter uma variável, sem mais nada. Terás de desmultiplicar matematicamente essa equação de modo a que fiques só com a incógnita (termo matemático para variável 😁🙂 ) do lado esquerdo, e tudo o resto do lado direito... "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to comment Share on other sites More sharing options...
bsccara Posted March 26, 2012 Report Share Posted March 26, 2012 Agora necessito de não matematica mas da linguagem... na linha: y1-m*x1:=b; Dá o erro: Variable Identifier Expected Sabes que no lado esquerdo duma atribuição tens de ter sempre uma variável ? Reparaste que estás a tentar atribuir o valor duma variável a uma expressão ? Link to comment Share on other sites More sharing options...
LagMaster Posted March 27, 2012 Author Report Share Posted March 27, 2012 Aqui vai o source code: program Noname0; var y,x1m,m,b,x1,x2,y1,y2,result: Real; begin WriteLn('Escreva o nº equivalente a x no ponto 1'); Readln (x1); WriteLn ('Escreva o nº equivalente a y no ponto 1'); readln (y1); writeLn ('Escreva o nº equivalente a x no ponto 2 '); readln (x2); writeln ('Escreva o nº equivalente a y no ponto 2'); readln (y2); writeln ('Portanto Ponto 1:(',x1:3:2,',',y1:3:2,')'); readln; writeln ('Portanto Ponto 2:(',x2:3:2,',',y2:3:2,')'); readln; m:=(y2-y1)/(x2-x1); b:=y-m*x1; writeln ('y=',m:3:2,b:3:2); readln; end. Isto é estranho.. tou a algum tempo a resolver varias vezes a conta à mão e dá-me certo.. Entretanto antes de adormecer vejo se resolvo este problema :/ Cumprimentos e Boas Noites ;D YOU SHALL NOT PASS !!! Link to comment Share on other sites More sharing options...
pmg Posted March 27, 2012 Report Share Posted March 27, 2012 y1-m*x1:=b; Dá o erro: Variable Identifier Expected Tens que escrever ao contrário, ou seja: a variável que queres atribuir do lado esquerdo do := e o valor (a conta) do lado direito b := y1 - m*x1; What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now