Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2019, 09:32   #1
Enotik_1998
Пользователь
 
Регистрация: 09.03.2018
Сообщений: 77
По умолчанию [РЕШЕНО] Работа с массивами в delphi7

Решение в следующем сообщении

Здравствуйте. Нужна помощь с этой задачей: Дан целочисленный вектор А(n). Построить вещественный вектор B(n), i-ый элемент которой равен среднему арифметическому двух соседних элементов вектора А: В [i]=
=(А[i]+А[i+1])/2, (и B[10]=A[10]).
У меня почему-то в массив b в stringgrid на другой форме записываются 0. Как это исправить? Вот исходный код:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ExtCtrls, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Label1: TLabel;
    Button1: TButton;
    Panel1: TPanel;
    UpDown1: TUpDown;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  i:integer;
  j:integer;
  n:integer;
  a:array[1..100]of integer;
  b:array[1..100]of double;
  s:string;
  f1:TextFile;
  f2:TextFile;
  L:TStringList;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
L:=TStringList.Create;
L.LoadFromFile('../1/f1.txt');
StringGrid1.RowCount:=L.Count;
StringGrid1.ColCount:=5;
for i:=0 to L.Count-1 do
StringGrid1.Rows[i].CommaText:=L.Strings[i];
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
AssignFile(f2,'../1/f2.txt');
Rewrite(f2);
for i:=0 to StringGrid1.RowCount-1 do begin
s:='';
For j:=0 to StringGrid1.ColCount-1 do
s:=s+StringGrid1.Cells[j,i]+' ';
writeln(f2,s);
writeln(f2,'');
end;
CloseFile(f2);
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
StringGrid1.ColCount:=StringGrid1.ColCount+1;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
n:=StringGrid1.ColCount;
For i:=1 to n do
begin
b[i]:=StrToFloatDef(StringGrid1.Cells[i-1, 0], 0);
b[i]:=(a[i]+a[i+1])/2;
b[n]:=a[n];
end;
For i:=1 to n do Form2.StringGrid1.Cells[i-1, 0]:=FloatToStr(b[i]);
Form2.Show;
Form1.Hide;
end;

end.
______________________
Используйте тег [CODE] (кнопка [CODE] в форме сообщения) при вставке кода на форум. Подробнее в FAQ

Последний раз редактировалось Вадим Мошев; 20.03.2019 в 17:04.
Enotik_1998 вне форума Ответить с цитированием
Старый 20.03.2019, 10:00   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

во-первых (и главное) у Вас массив a нигде не заполняется.

во-вторых, Вы уж определитесь откуда брать данные:
из грида
Цитата:
Сообщение от Enotik_1998 Посмотреть сообщение
Код:
b[i]:=StrToFloatDef(StringGrid1.Cells[i-1, 0], 0);
или из массива
Цитата:
Сообщение от Enotik_1998 Посмотреть сообщение
Код:
b[i]:=(a[i]+a[i+1])/2;
в третьих, бессмысленно выполнять два присвоения одному и тому же элементу.
Код:
b[i] := xxxxx;
b[i] := yyyyyyy;
вычеркнутая строчка не нужна.

четвёртое, b[n] нужно присваивать ВНЕ цикла. а цикл делать до n-1
(подумайте, чему будет равно a[i+1], если i=n

пятое, и последнее, пользуйтесь отступами, чтобы форматировать свой код.
иначе это смотрится плохо, да и сопровождать/отлаживать такой код плохо.

Последний раз редактировалось Serge_Bliznykov; 20.03.2019 в 10:05.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.03.2019, 10:14   #3
Enotik_1998
Пользователь
 
Регистрация: 09.03.2018
Сообщений: 77
По умолчанию

Спасибо. Теперь всё работает)
Enotik_1998 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с массивами в delphi7 Enotik_1998 Компоненты Delphi 4 19.03.2019 11:56
Операции над двумерными массивами Delphi7 VinDiz Помощь студентам 1 28.01.2012 19:14
[РЕШЕНО] Подскажите, где скачать нормальный пакет компонент TrayIcon для Delphi7... Рустам Компоненты Delphi 6 02.02.2008 21:48