Progressão aritmética em Delphi xe8

Delphi

22/09/2016

Bom Dia,

Sou novato no Delphi e na programação. Estou tentado criar um programa que calcule qualquer termo de uma progressão aritmética (Não o n-ésimo termo, mas qualquer um, ou AN). Estou com problemas de lógica e dando erros no compilador. Não vou postar muitos erros, porque estou indo na tentativa e erro.

Eis a Unit:

unit ProgreArit;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit4: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Var
A1,An,R,N: Integer;
Meu_Array : Array [0..50] of integer;


begin
Meu_Array[0]:= A1;
A1:=StrToInt(Edit2.Text);
Meu_Array = Array [0..50] of integer := N;
N:=StrToInt(Edit3.Text);
Meu_Array[0]:= (R+1);
R:= StrToInt(Edit4.Text);

An:=StrToInt(Edit1.Text);
An:=(A1 + (N - 1) * R);
An:=Meu_Array[0.50];
end;

end.


O último erro:

[dcc32 Error] ProgreArit.pas(44): E2010 Incompatible types: 'array[0..50] of Integer' and 'Set'


Vou ainda botar mais um Edit para dar a saída. Se Alguém puder me dar algumas luzes, agradeço imensamente.

Valew!
Adriano Freitas

Adriano Freitas

Curtidas 0

Respostas

Natanael Ferreira

Natanael Ferreira

22/09/2016

Você está tentando fazer algo parecido com este link:
https://br.answers.yahoo.com/question/index?qid=20061101103046AAOsvjE

Teste assim:

Var
  A1, An, R: Real;
  Meu_Array: Array [0 .. 50] of Integer;
  N: Integer;
begin
  A1 := StrToInt(Edit2.Text); // Primeiro Termo
  R := StrToInt(Edit4.Text); // Razao

  for N := 0 to 50 do
  begin
    An := A1 + (N - 1) * R;
    Meu_Array[N] := Trunc(An);
  end;

  for N := 0 to 50 do
    ShowMessage(FloatToStr(Meu_Array[N]));
end;
GOSTEI 0
Natanael Ferreira

Natanael Ferreira

22/09/2016

Correção do código:

Var
  A1, An, R: Real;
  Meu_Array: Array [0 .. 50] of Integer;
  N: Integer;
begin
  A1 := StrToInt(Edit2.Text); // Primeiro Termo
  R := StrToInt(Edit4.Text); // Razao
 
  for N := 0 to 50 do
  begin
    An := A1 + N * R;
    Meu_Array[N] := Trunc(An);
  end;
 
  for N := 0 to 50 do
    ShowMessage(FloatToStr(Meu_Array[N]));
end;
GOSTEI 0
Adriano Freitas

Adriano Freitas

22/09/2016

Amigo, obrigado pelo esforço, mas ainda não é isso. O que eu gostaria é de um programa que calcule qualquer termo da progressão, quando o usuário do mesmo forneça a razão, a quantidade de termos, o primeiro termo e o número do termo ou posição que ele deseja, AN.
Não sei se tem lógica mas seria isso. Se alguém ou você puder dar uma luz, valew. Mas fico grato mesmo assim.
Meu abraço!
GOSTEI 0
Natanael Ferreira

Natanael Ferreira

22/09/2016

Neste caso, você deve utilizar Array Dinâmico pois você não sabe quantos termos o usuário escolherá.

Coloque Edit's com os nomes:

- EditPrimeiroTermo
- EditRazao
- EditQuantTermos
- EditPosicao
- EditResultado


Teste o código abaixo em um Click de um Botão:

Var
  PrimeiroTermo, Razao, Posicao2: Real;
  Meu_Array: Array of Integer;
  N, QuantTermos, Posicao: Integer;
begin
  PrimeiroTermo := StrToInt(EditPrimeiroTermo.Text); // Primeiro Termo
  Razao := StrToInt(EditRazao.Text); // Razao
  QuantTermos := StrToInt(EditQuantTermos.Text); // Quant. Termos
  Posicao := StrToInt(EditPosicao.Text); // Posicao desejada

  SetLength(Meu_Array, QuantTermos);

  for N := 0 to QuantTermos - 1 do
  begin
    Posicao2 := PrimeiroTermo + N * Razao;
    Meu_Array[N] := Trunc(Posicao2);
  end;

  EditResultado.Text := IntToStr(Meu_Array[Posicao - 1]);
end;
GOSTEI 0
POSTAR