Jump to content

Dúvida| Calcular uma função afim


LagMaster
 Share

Recommended Posts

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

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

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

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

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

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

Isso parece-me deveras complicado  :wallbash:

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

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

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

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

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

É 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

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

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

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

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

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.