Стася
Постоялец
Offline
|
|
« : 24-12-2008 15:11 » |
|
Представить на графике функцию, заданную в виде таблицы в текстовом файле. Определить ее среднее арифметическое значение. Я сделала текстовый файл такого вида: 1 2 2 3 4 8 1 9 5 7 Как сделать отдельно массив х и массив у, и запихнуть их в стоку Chart1. и так далее.
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #1 : 24-12-2008 15:13 » |
|
Стася, по поводу раздельных массивов - может, стоит читать элементы из файла по принципу: одно значение в x, одно в y?
|
|
|
Записан
|
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #2 : 24-12-2008 15:17 » |
|
Можно. А как это сделать?
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #3 : 24-12-2008 15:19 » |
|
Стася, как поместить значение в массив? Как открыть файл на чтение? Как прочитать из файла символ?
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
zubr
Гость
|
|
« Ответ #4 : 24-12-2008 15:24 » |
|
1. Последовательно читать строки из файла, или полностью прочитать файл и перебирать строки. 2. Парсить каждую строку на слова (в данном случае числа), где в качестве разделителя между словами использовать пробел. 3. Первое слово (число) записывать в массив X, соответственно второе слово-число в массив Y.
|
|
|
Записан
|
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #5 : 24-12-2008 15:26 » |
|
Setlength-только я не знаю, как это в скобочках написать. AssignFile-открыть файл. Readln-прочитать и перенести курсор на следующую строку. Азы я знаю,у меня массив именно по столбцу должен быть. Я не знаю,как это написать.
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #6 : 24-12-2008 15:31 » |
|
Стася,
массиаА := первый символ строки
пробел
массивБ := третий символ строки
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #7 : 24-12-2008 15:33 » |
|
Тогда получается следующее число в А это четвертый символ, а Б шестой. Setlength(x,length(x)+3); Setlength(y,length(y)+3; Так что ли?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #8 : 24-12-2008 15:43 » |
|
не путайте девушку while not(eof) do begin readln(first,second); {пихаем в массив end; паскаль сам разберется с типами
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
zubr
Гость
|
|
« Ответ #9 : 24-12-2008 15:50 » |
|
Sla, паскаль сам разберется с типами, если это типизированный файл. В случае же текстового файла, можно сделать так: AssignFile(F, Filename); //открыли файл Reset(F); i := 0; //начало массивов while not Eof(F) do begin Readln(F, s);//читаем в строку s s := Trim(s);// освобождаемся от крайних пробелов (на всякий случай) k := Pos(' ', s); // определяем позицию пробела inc(i);//инкрементируем индекс массива X[i] := StrToInt(Copy(s, 1, k-1)); Delete(s, 1, k); s := Trim(s); Y[i] := StrToInt(s); end;
|
|
|
Записан
|
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #10 : 24-12-2008 15:54 » |
|
Что такое инкрементация? И потом тогда для графика так написать: Chart1.SeriesList[0].Addxy(x,y,'',cl...)
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #11 : 24-12-2008 16:48 » |
|
Стася, инкремент - это +1.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #12 : 24-12-2008 16:52 » |
|
s,k:string? ?
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #13 : 24-12-2008 16:57 » |
|
Стася, ну уж подумай, поэксперементируй.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #14 : 24-12-2008 17:01 » |
|
Она то одну стоку красным выделяет, то другую, а голова уже в ауте. Мож завта с утречка соображу) Спасибо вам)
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #15 : 24-12-2008 17:16 » |
|
k: Integer; s: string; Сделать можно примерно так: For i:=1 to LenArray do // LenArray - число строк в текстовом файле или длина массивов Chart1.SeriesList[0].Add(Y[i], '', clRed); For i:=0 to Chart1.SeriesList[0].Count-1 do Chart1.SeriesList[0].XValue[i] := X[i+1];
|
|
|
Записан
|
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #16 : 24-12-2008 17:33 » |
|
A LenArray получается то же самое что и Length?
|
|
« Последнее редактирование: 24-12-2008 17:55 от Стася »
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #17 : 24-12-2008 17:55 » |
|
При чтении строк мы используем счетчик i - по выходу из цикла чтения файла значение i и будет LenArray
|
|
|
Записан
|
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #18 : 24-12-2008 17:58 » |
|
Что-то я запуталась((
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #19 : 24-12-2008 18:03 » |
|
var LenArray: Integer;
AssignFile(F, Filename); //открыли файл Reset(F); LenArray := 0; //начало массивов while not Eof(F) do begin Readln(F, s);//читаем в строку s s := Trim(s);// освобождаемся от крайних пробелов (на всякий случай) k := Pos(' ', s); // определяем позицию пробела inc(LenArray;//инкрементируем индекс массива X[LenArray] := StrToInt(Copy(s, 1, k-1)); Delete(s, 1, k); s := Trim(s); Y[LenArray] := StrToInt(s); end;
|
|
« Последнее редактирование: 24-12-2008 18:06 от zubr »
|
Записан
|
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #20 : 24-12-2008 18:20 » |
|
Он подчеркивает строку x:=strtoint(copy(s,1,k-1)) и ставит курсор перед двоеточием.И пишет что Array type required
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #21 : 24-12-2008 18:43 » |
|
Стася, ты если не хочешь врубаться в код что тебе показывают, хоть копи пасть правильно. X[LenArray] := StrToInt(Copy(s, 1, k-1));
|
|
|
Записан
|
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #22 : 24-12-2008 19:08 » |
|
Нет, как раз таки я хочу врубиться в код. Но никак не могу врубиться. И не понимаю, почему ошибка, потому что в delphi чайник еще.
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #23 : 24-12-2008 19:14 » |
|
zubr, кстате твоя учиница чего то пытается делать а вот моя тушите свет
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
zubr
Гость
|
|
« Ответ #24 : 24-12-2008 19:17 » |
|
Стася, ну все очень просто, ты пытаешься присвоить значение не элементу массива, а практически указателю на массив. Поэтому компилятор и ругается.
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #25 : 24-12-2008 19:19 » |
|
McZim, ну результат пока одинаков
|
|
|
Записан
|
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #26 : 24-12-2008 19:28 » |
|
Ну тогда надо задавать LenArray не как integer, а как массив array of integer. Но тогда вообще ерунда получится.
|
|
|
Записан
|
|
|
|
SEA
|
|
« Ответ #27 : 24-12-2008 20:22 » |
|
Стася, честно, ты покорила меня упорством в попытке понять... ) Смотри: var MyArray: array of integer; MyArray - теперь это пустой массив целых чисел. Вроде как и массив, но в нем ни одного элемента еще нет. Сравние его с пустой папкой для бумаг (скоросшиватель). Дальше: Теперь мы процедурой SetLength сделали так, что в массиве завелось пять элементов:: в скоросшиватель запихнули и прикрепили там пять файлов. (Кстати, ведь именно отсюда и берут названия Папка и Файл в системе Windows - это аналогия с офисным столом.) Теперь в нашем массиве MyArray уже есть пять чисел (в нашем скоросшивателе пять файлов вшито) Как же узнать, что это за числа? Смотри: MyArray[0] //Это нулевой элемент. {По человечески он первый, но в компьютерах принято начинать счет с нуля. Ноль-раз-два-три-четыре - вышел зайчик погулять... )))}
MyArray[1] // Это первый элемент... MyArray[2] // Это второй элемент... MyArray[3] // Это третий элемент... MyArray[4] // Это четвертый элемент...
Чтобы присвоить второму элементу нашего массива цифру 925466385 пишем: Поняла структуру массивов?
|
|
|
Записан
|
почувствуй радость творческих мук!
|
|
|
Стася
Постоялец
Offline
|
|
« Ответ #28 : 24-12-2008 20:25 » |
|
Да, спасибо. Но inc(LeanArray) он все равно будет ругать.
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #29 : 24-12-2008 20:34 » |
|
Стася, вспомни что я говорил по поводу инкремента. Вспомни что ты уже имеешь массив и 5-ти, вспомни что тебе нужно только переменщаться по этим элементам и либо изменять значения, либо получать из массива значения, а как перемещаться по массиву. То что написад SEA выглядит не угрожающе, а если у тебя в массиве 1000 элементов ты же не будешь их все описывать в отдельной строчке. Тебе нужно в массиве завести счетчик элементов.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
|