Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.03.2010, 02:32
Аватар для Biatov
Biatov Biatov вне форума
Прохожий
 
Регистрация: 04.03.2010
Сообщения: 20
Репутация: 9
Печаль Можно ли из Memo достать массив?

Задача такая: Разработать программу нахождения максимального и минимального элементов вектора. Координаты вектора находятся в файле.
Программа должна позволять сформировать исходный вектор.
Я думаю мне надо из текстового файла которые например выглядит так:
Код:
2 5
3 7
4 8
2 9
достать массив, этот файл читается в Memo.
Сделал программу которая может сформировать исходный вектор, может исправлять его, и выводит в указанное 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.: Если бы массива тут не было, то супер. Но тут...
Помогите дописать плиз.

Исходная задача прикреплена.
Вложения
Тип файла: rar primer.rar (6.7 Кбайт, 4 просмотров)

Последний раз редактировалось Biatov, 15.03.2010 в 02:36.
Ответить с цитированием
  #2  
Старый 15.03.2010, 03:10
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
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  
Старый 15.03.2010, 15:50
Аватар для Biatov
Biatov Biatov вне форума
Прохожий
 
Регистрация: 04.03.2010
Сообщения: 20
Репутация: 9
По умолчанию

Вообще ничего не понятно. Выбивает ошибку:
Код:
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  
Старый 15.03.2010, 16:35
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Код:
A[High(A)].Y := StrToInt(Copy(S,Pos(' ',S) + 1,MaxInt));
Может так ?

Хотя какоето странное сообщение об ошибке - '2' не число,
может
Код:
'' 2' is not a valid integer value'
( с пробелом перед 2 ) ?
Ответить с цитированием
  #5  
Старый 15.03.2010, 16:51
Аватар для Biatov
Biatov Biatov вне форума
Прохожий
 
Регистрация: 04.03.2010
Сообщения: 20
Репутация: 9
По умолчанию

Куда именно вставлять код 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  
Старый 15.03.2010, 17:18
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

На всякий случАй вместо
Код:
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  
Старый 15.03.2010, 17:33
Аватар для Biatov
Biatov Biatov вне форума
Прохожий
 
Регистрация: 04.03.2010
Сообщения: 20
Репутация: 9
По умолчанию

А как посчитать что из них максимальное, а что минимальное?
PS
А если просто прочитать read(f,a[i,j]); как матрицу из файла(двумерный массив)И потом проверить на максимальный и минимальный элемент.
Но как это будет выглядеть?

Последний раз редактировалось Biatov, 15.03.2010 в 18:03.
Ответить с цитированием
  #8  
Старый 15.03.2010, 20:29
Аватар для Biatov
Biatov Biatov вне форума
Прохожий
 
Регистрация: 04.03.2010
Сообщения: 20
Репутация: 9
По умолчанию

Всем спасибо!
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:07.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter