McZim
|
|
« Ответ #30 : 24-12-2008 20:36 » |
|
Стася, zubr тебе написал коментарий к коду что инкрементируем индекс массива(счетчик), а не сам массив. Как в массиве укзаато что нужно взять какой то из элементов?
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #31 : 24-12-2008 20:59 » |
|
Он есть. Программирование не для меня(((((
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #32 : 24-12-2008 23:29 » |
|
Стася, ну для тебя или не для тебя это другой вопрос, а задачу давай решай немного внимательности и все, тебе все уже разложили по полочкам. соберись с мыслями.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
SEA
|
|
« Ответ #33 : 24-12-2008 23:32 » |
|
Гы... Все мы так думали. Не вешай нос. Все дело в том, что вместо банальной цифры, как у меня в коде: MyArray[1] мы подставляем переменную, например, var digit: integer; Вот так: MyArray[digit] = 9123546; Теперь этот код позволит нам работать с тем элементом массива по счету, какой будет переменная digit;
|
|
|
Записан
|
почувствуй радость творческих мук!
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #34 : 25-12-2008 22:01 » |
|
Вы знаете, я сделала проще, и сейчас мучаюсь уже с другой проблемой в этой проге.
|
|
|
Записан
|
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #35 : 28-12-2008 16:37 » |
|
Не считает максимумы, вообще. Помогите пожалуйста найти ошибку. unit Unit8;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, TeEngine, Series, ExtCtrls, TeeProcs, Chart,Math;
type TForm8 = class(TForm) Button1: TButton; Chart1: TChart; Series1: TLineSeries; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Edit4: TEdit; Label6: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form8: TForm8;
implementation
{$R *.dfm}
procedure TForm8.Button1Click(Sender: TObject); Var tx:textfile; i,j,n,k:integer; x:array of real; y:array of real; //meanval:double; begin Assignfile(tx,'tab.txt'); Reset(tx); i:=0; j:=0; while not EOF(tx) do begin Setlength(x,i+1); Setlength(y,j+1); readln(tx,x[i],y[j]); inc(i); inc(j); if (y[j-1]<y[j]) and (y[j]<y[j+1]) then Edit1.Text:=floattostr(y[j]) else Showmessage('Нет глобальных максимумов'); if (y[i-1]>y[i]) and (y[i]<y[i+1]) then Edit2.Text:=floattostr(y[i]) else Showmessage('Нет глобальных минимумов'); end; n:=strtoint(edit3.Text); For i:=0 to n do Chart1.SeriesList[0].Addxy(x[i],y[i], '', clRed); end; //meanval:=Mean(x[i]); //Closefile(tx);
end.
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #36 : 28-12-2008 17:19 » |
|
1. Зачем в цикле чтения файла нужно i и j - достаточно какого то одного счетчика, ведь они всегда будут равны i = j 2. Выражение if (y[j-1]<y[j]) and (y[j]<y[j+1]) then Edit1.Text:=floattostr(y[j]) else Showmessage('Нет глобальных максимумов'); if (y[i-1]>y[i]) and (y[i]<y[i+1]) then Edit2.Text:=floattostr(y[i]) else Showmessage('Нет глобальных минимумов'); полный бред. Элементов с индексами i, j, i+1, j+1 еще не существует (подумай почему) 3. Очень криво вызывать ShowMessage после проверки каждого элемента массива, а если 1000 элементов массива,так что придется 1000 раз нажимать Ok. Лучше введи какую нить булеву переменную, которая до цикла проверок будет False, а если выполнится хотя бы для одного элемента условие проверки то в True. После цикла проверки если переменная останется в False - вот тогда и выдашь ShowMessage
|
|
|
Записан
|
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #37 : 28-12-2008 18:31 » |
|
Почему не существуют? Мы же прочитали их уже. А к чему именно отнести эту булеву переменную?
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #38 : 28-12-2008 18:40 » |
|
Стася, возьми в отладке посмотри значения индексов в функции readln и при проверке твоих условий и еще раз подумай.
|
|
|
Записан
|
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #39 : 28-12-2008 19:32 » |
|
С этим я разобралась. А что с булевой переменной? Я поняла, что нужно ее здать как False. Но что именно под ней задать не знаю.
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #40 : 28-12-2008 19:52 » |
|
1. Объявляешь 2 булевы переменных, к примеру var b_max, b_min: boolean; 2. До цикла чтения файла b_max := False; b_min := False; 3. В цикле до инкрементирования индекса проверяешь условие: If (Y[i-1] > Y[i-2]) and (Y[i-1] > Y[i]) then b_max := True; // аналогично для минимума
Естественно надо проверить на наличие минимального индекса (если индекс < 2 то выражение Y[i-2] будет бессмысленно, более того - опасно) 4. По выходу из цикла чтения файла выполняем условие: if not b_max then Showmessage('Нет глобальных максимумов'); // аналогично для минимума
|
|
|
Записан
|
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #41 : 28-12-2008 20:44 » |
|
Я немного не так сделала, но главное, что работает как надо. Спасибо вам. Еще вопрос: хочу посчитать среднее значение элементов массива с помощью функции Mean. В Uses Math подключила, тип переменной double, но насчет этой переменной он пишет, что Expected Incialization but received an identifer
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #42 : 28-12-2008 21:11 » |
|
Стася, ну если ты сама все предыдущее написала, то не должна делать подобных ошибок. У тебя переменная meanval:double; закомментирована при объявлении - и что же ты хочешь, что бы сказал компилятор?
|
|
|
Записан
|
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #43 : 28-12-2008 21:14 » |
|
Не понятно.
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #44 : 28-12-2008 22:07 » |
|
Стася, покажи где и как ты объявила эту переменную.
|
|
|
Записан
|
|
|
|
|