Ver Mensaje Individual
  #3  
Antiguo 16-10-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola MoeHoward, bienvenido a los foros de Club Delphi

Y como acostumbramos con los ingresantes, te invitamos a que leas nuestra guía de estilo.

Si no interpreté mal la consigna, tu código está bién encaminado. Pero veo algunos detalles:
  • Solo ejecuta para el valor 1 del ComboBox.
  • La línea:
    Código Delphi [-]
    for i := 0 to ND1 do
  • tendría que ser:
    Código Delphi [-]
    for i := 0 to ND1-1 do
  • Y en lugar de la función Trunc, tendrias que usar la función Round
Quedaría así:
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  i : Integer;
  LI1, LS1, ND1 : Integer;  //LI: límite inferior, LS: límite superior, ND: número de divisiones
  x1 : Real;                //Acumulador
  RES1 : Real;              //Resolución de las variables
  VE1 : array of Real;
  RE1 : Integer;
begin
  LI1 := StrToInt(MaskEdit1.Text);     //Límite inferior en entero
  LS1 := StrToInt(MaskEdit2.Text);     //Límite superior en entero
  RES1 := StrToFloat(ComboBox1.Text);  //Resolución en real
  RE1 := LS1 - LI1;                    //Rango de la variable
  ND1 := Round(RE1/RES1);              //Número de divisiones
  SetLength(VE1, ND1);                 //Se establece longitud del vector

  x1 := 0;
  // Dec(ND1);  para evitar: ND1-1
  for i := 0 to ND1-1 do
  begin
    VE1[i] := x1;
    x1 := x1 + RES1;
  end;
  // mostrar valores en el memo
  Memo1.Clear;
  for i := 0 to ND1-1 do
    Memo1.Lines.Add(Format('v[%.2d] = %3.2f',[i, VE1[i]]))
end;

Se puede optimizar un poco,
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  v                : array of Double;
  i,topInf, topSup : Integer;
  Delta, Incr      : Double;;
begin
  topInf := StrToIntDef(MaskEdit1.Text, 0);
  topSup := StrToIntDef(MaskEdit2.Text, 0);
  if (TopSup-TopInf > 0) and (ComboBox1.ItemIndex <> -1) then
  begin
    delta := StrToFloat(ComboBox1.Items[ComboBox1.ItemIndex]);
    SetLength(v, Round((TopSup-TopInf) / Delta));

    Incr := 0;
    for i := Low(v) to High(v) do
    begin
      v[i] := Incr;
      Incr := Incr + Delta;
    end;

    // mostrar valores en el memo
    Memo1.Clear;
    for i := Low(v) to High(v) do
      Memo1.Lines.Add(Format('v[%.2d] = %3.2f',[i,v[i]]))
  end
  else
    ShowMessage('Revise los datos de ingreso');
end;
El control de ingreso no es muy exaustivo para no complicar el código (tal vez te convendría usar SpinEdits en lugar de los MaskEdits).

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita