|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Можно ли из Memo достать массив?
Задача такая: Разработать программу нахождения максимального и минимального элементов вектора. Координаты вектора находятся в файле.
Программа должна позволять сформировать исходный вектор. Я думаю мне надо из текстового файла которые например выглядит так: Код:
2 5 3 7 4 8 2 9 Сделал программу которая может сформировать исходный вектор, может исправлять его, и выводит в указанное Memo... Но вот как сформировать массив? max и min по идее можно найти так: Код:
for i:=1 to n do begin if a[i]>max then max:=a[i]; end; for i:=1 to n do begin if a[i]<min then min:=a[i]; end; P.S.: Если бы массива тут не было, то супер. Но тут... Помогите дописать плиз. Исходная задача прикреплена. Последний раз редактировалось Biatov, 15.03.2010 в 02:36. |
#2
|
|||
|
|||
Код:
type TVector = record X, Y : Integer; end; var A : Array Of TVector; procedure TForm1.PackTextToArray; var I : Integer; begin SetLength(A,0); For I := 0 To Memo1.Lines.Count-1 Do If Trim(Memo1.Lines[i]) <> '' Then Begin SetLength(A,Length(A)+1); S := Trim(Memo1.Lines[i]); A[High(A)].X := StrToInt(Copy(S,1,Pos(' ',S))); A[High(A)].Y := StrToInt(Copy(S,Pos(' ',S),Length(S))); End; |
#3
|
||||
|
||||
Вообще ничего не понятно. Выбивает ошибку:
Код:
Project Project1.exe raised exception class EConvertError with message "2' is not a valid integer value'. Process stopped. Use Step or Run to continue. |
#4
|
||||
|
||||
Код:
A[High(A)].Y := StrToInt(Copy(S,Pos(' ',S) + 1,MaxInt)); Хотя какоето странное сообщение об ошибке - '2' не число, может Код:
'' 2' is not a valid integer value' |
#5
|
||||
|
||||
Куда именно вставлять код lmikle?:
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, Grids; type TVector = record X, Y : Integer; end; type TForm1 = class(TForm) Edit1: TEdit; Memo1: TMemo; Button1: TButton; Button2: TButton; Button3: TButton; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure N4Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure N3Click(Sender: TObject); procedure PackTextToArray(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; A : Array Of TVector; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var f: TextFile; // файл fName: String[80]; // имя файла buf: String[80]; // буфер для чтения из файла begin fName := Edit1.Text; AssignFile(f, fName); {$I-} Reset(f); // открыть для чтения {$I+} if IOResult <> 0 then begin MessageDlg('Ошибка доступа к файлу ' + fName, mtError,[mbOk],0); exit; end; // чтение из файла while not EOF(f) do begin readln(f, buf); // прочитать строку из файла Memo1.Lines.Add(buf); // добавить строку в поле Memo1 end; CloseFile(f); // закрыть файл end; procedure TForm1.Button2Click(Sender: TObject); var f: TextFile; // файл fName: String[80]; // имя файла i: integer; begin fName := Edit1.Text; AssignFile(f, fName); Rewrite(f); // открыть для перезаписи // запись в файл for i:=0 to Memo1.Lines.Count do // строки нумеруются с нуля writeln(f, Memo1.Lines[i]); CloseFile(f); // закрыть файл MessageDlg('Данные записаны в файл ',mtInformation,[mbOk],0); end; procedure TForm1.Button3Click(Sender: TObject); var f: TextFile; // файл fName: String[80];// имя файла a: array[1..6] of string; i:integer; begin fName := Edit1.Text; AssignFile(f, fName); Reset(f); // открыть для чтения CloseFile(f); // закрыть файл end; procedure TForm1.N4Click(Sender: TObject); begin MessageDlg('Лабораторную работу выполнил: *** (5 группа)', mtInformation, [mbOk], 0); end; procedure TForm1.N2Click(Sender: TObject); begin MessageDlg('Разработать программу нахождения максимального иминимального элементов вектора.'+#13+'Координаты вектора находятся в файле.'+#13+'Программа должна позволять сформировать исходный вектор.', mtInformation, [mbOk], 0); end; procedure TForm1.N3Click(Sender: TObject); begin Close; end; end. Последний раз редактировалось Biatov, 15.03.2010 в 16:54. |
#6
|
||||
|
||||
На всякий случАй вместо
Код:
fName: String[80]; Напиши Везде ( и не только для fName ) Код:
fName: String; В procedure TForm1.Button1Click(Sender: TObject); В начале Код:
SetLength(A,0); Код:
readln(f, buf); // прочитать строку из файла Код:
SetLength(A,Length(A)+1); readln(f, A[High(A)].X, A[High(A)].Y); buf := IntToStr(A[High(A)].X) + ' ' + IntToStr(A[High(A)].Y); |
#7
|
||||
|
||||
А как посчитать что из них максимальное, а что минимальное?
PS А если просто прочитать read(f,a[i,j]); как матрицу из файла(двумерный массив)И потом проверить на максимальный и минимальный элемент. Но как это будет выглядеть? Последний раз редактировалось Biatov, 15.03.2010 в 18:03. |
#8
|
||||
|
||||
Всем спасибо!
|