Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение и запись в файл - расчёт окружности, помогите создать запись в файл 
:(
    Опции темы
SENDEJ
  Дата 30.11.2016, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.12.2015

Репутация: нет
Всего: нет



добрый день, нужна помощь

есть программа расчёта пересечения окружностей, помогли сделать чтение из файла, но как сделать запись в файл с начала? 

пробовал сам сделать, но бред получается


Код


unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    LabeledEdit3: TLabeledEdit;
    LabeledEdit4: TLabeledEdit;
    LabeledEdit5: TLabeledEdit;
    LabeledEdit6: TLabeledEdit;
    Button1: TButton;
    LabeledEdit7: TLabeledEdit;
    btn2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


// думал сделать так, добавить еще одну кнопку и сохранять данные, но абракадабра получается ( 
procedure TForm1.btn2Click(Sender: TObject);
var x1,y1,r1,x2,y2,r2:integer;
    a:textfile;
begin

AssignFile(a,'Coord.txt');//файл в папке с программой
Rewrite(a);
Writeln (a,x1,y1,r1,x2,y2,r2);
CloseFile(a);

LabeledEdit1.Text:=IntToStr(x1);
LabeledEdit2.Text:=IntToStr(y1);
LabeledEdit3.Text:=IntToStr(r1);
LabeledEdit4.Text:=IntToStr(x2);
LabeledEdit5.Text:=IntToStr(y2);
LabeledEdit6.Text:=IntToStr(r2);

Append(a);
Read(a);
end;



// программа чтения из файла к примеру 4 4 4 и в след строке 5 5 5 - работает 
procedure TForm1.Button1Click(Sender: TObject);
const e=0.0001;
var x1,y1,r1,x2,y2,r2:integer;
    x,y,a,b,h,d,x3,y3,x4,y4:real;
    f:textfile;




begin
AssignFile(f,'Coord.txt');//файл в папке с программой
Reset(f);
Read(f,x1,y1,r1,x2,y2,r2);
CloseFile(f);
LabeledEdit1.Text:=IntToStr(x1);
LabeledEdit2.Text:=IntToStr(y1);
LabeledEdit3.Text:=IntToStr(r1);
LabeledEdit4.Text:=IntToStr(x2);
LabeledEdit5.Text:=IntToStr(y2);
LabeledEdit6.Text:=IntToStr(r2);
Append(f);
Writeln(f,'');
if (abs(x1-x2)<e)and(abs(y1-y2)<e)and(abs(r1-r2)<e)
then
 begin
   LabeledEdit7.Text:='Окружности совпадают';
   Writeln(f,'Окружности совпадают');
 end
else
 begin
  d:=sqrt(sqr(x1-x2)+sqr(y1-y2));
  if (d>r1+r2)or(d<abs(r1-r2)) then
   begin
    LabeledEdit7.Text:='Точек пересечения нет';
    Writeln(f,'Точек пересечения нет');
   end
  else if abs(d-(r1+r2))<0.000001 then
   begin
    x:=(x1+x2)/2;
    y:=(y1+y2)/2;
    LabeledEdit7.Text:='Окружности касаются в точке x='
    +FloattostrF(x,ffFixed,6,2)+'  y='
    +FloattostrF(y,ffFixed,6,2);
    Writeln(f,'Окружности касаются в точке x=',x:0:2,'  y=',y:0:2);
   end
  else
   begin
    b:=(sqr(r2)-sqr(r1)+sqr(d))/(2*d);
    a:=d-b;
    h:=sqrt(sqr(r2)-sqr(b));
    x:=x1+(x2-x1)/(d/a);
    y:=y1+(y2-y1)/(d/a);
    x3:=x-(y-y2)*h/b;
    y3:=y+(x-x2)*h/b;
    x4:=x+(y-y2)*h/b;
    y4:=y-(x-x2)*h/b;
    LabeledEdit7.Text:='Точки пересечения x1='
    +FloattostrF(x3,ffFixed,6,2)+'  y1='
    +FloattostrF(y3,ffFixed,6,2)
    +'  x2='+FloattostrF(x4,ffFixed,6,2)+'  y2='
    +FloattostrF(y4,ffFixed,6,2);
    Writeln(f,'Точки пересечения x1=',x3:0:2,' y1=',y3:0:2,' x2=',x4:0:2,'  y2=',y4:0:2);
   end;
  end;
CloseFile(f);  
end;


end.


PM MAIL   Вверх
Rodeon
Дата 30.11.2016, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 28.8.2008
Где: Россия, Ухта

Репутация: нет
Всего: нет



Из помощи к делфи:
Запись в файл:
Код

var F: TextFile;

begin
  AssignFile(F, 'NEWFILE.$$$');
  Rewrite(F);
  Writeln(F, 'Just created file with this text in it...');
  CloseFile(F);
end;


Чтение из файла:
Код

var 

  F: TextFile;
  S: string;
begin
  if OpenDialog1.Execute then            { Display Open dialog box }
  begin
    AssignFile(F, OpenDialog1.FileName); { File selected in dialog }
    Reset(F);
    Readln(F, S);                        { Read first line of file }
    Edit1.Text := S;                     { Put string in a TEdit control }
    CloseFile(F);
  end;
end;


Добавлено через 9 минут и 18 секунд
В вашем случае записать данные со всех эдитов в файл:
Код

procedure TForm1.sButton1Click(Sender: TObject);
var
  F: TextFile;
  i: Integer;
begin
  AssignFile(F, 'NEWFILE.txt');
  Rewrite(F);
  for i:=1 to 15 do
  if findcomponent('Edit'+inttostr(i))<>nil then
  begin
    Writeln(F, TEdit(findcomponent('Edit'+inttostr(i))).text);
  end;
  CloseFile(F);

end;


Добавлено через 14 минут и 42 секунды
Либо так:
Код

procedure TForm1.sButton1Click(Sender: TObject);
var
  F: TextFile;
  i: Integer;
begin
  AssignFile(F, 'NEWFILE.txt');
  Rewrite(F);
  for i := 0 to ComponentCount - 1 do
  if Components[i] is TEdit then Writeln(F, (Components[i] as TEdit).Text);
  CloseFile(F);
end

PM MAIL   Вверх
Rodeon
Дата 30.11.2016, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 28.8.2008
Где: Россия, Ухта

Репутация: нет
Всего: нет



Загрузить значения:
Код

procedure TForm1.sButton2Click(Sender: TObject);
var
  F: TextFile;
  S: string;
  i: Integer;
begin
  AssignFile(F, 'NEWFILE.txt');
  Reset(F);
  for i := 0 to ComponentCount - 1 do
  if Components[i] is TEdit then
  Begin
    ReadLn(F, S);
    (Components[i] as TEdit).Text:=s;
  End;
end;

PM MAIL   Вверх
SENDEJ
Дата 30.11.2016, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.12.2015

Репутация: нет
Всего: нет



Цитата(Rodeon @ 30.11.2016,  14:54)


Добавлено @ 15:03
В вашем случае записать данные со всех эдитов в файл:
Код

procedure TForm1.sButton1Click(Sender: TObject);
var
  F: TextFile;
  i: Integer;
begin
  AssignFile(F, 'NEWFILE.txt');
  Rewrite(F);
  for i:=1 to 15 do
  if findcomponent('Edit'+inttostr(i))<>nil then
  begin
    Writeln(F, TEdit(findcomponent('Edit'+inttostr(i))).text);
  end;
  CloseFile(F);

end;


Добавлено @ 15:09
Либо так:
Код

procedure TForm1.sButton1Click(Sender: TObject);
var
  F: TextFile;
  i: Integer;
begin
  AssignFile(F, 'NEWFILE.txt');
  Rewrite(F);
  for i := 0 to ComponentCount - 1 do
  if Components[i] is TEdit then Writeln(F, (Components[i] as TEdit).Text);
  CloseFile(F);
end

пробовал так, к сожалению не записывает данные , выдает все в 0( только начал изучать делфи , можете помочь с этой программой ?

Добавлено через 6 минут и 59 секунд
вот сама программа

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Пересечение_окружностей_1.rar 168,65 Kb
PM MAIL   Вверх
Rodeon
Дата 30.11.2016, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 28.8.2008
Где: Россия, Ухта

Репутация: нет
Всего: нет



ну для начала у меня в примере указаны просто Edit-ы. У вас в программе LabeledEdit-ы. Т.е. необходимо заменить в цикле Edit на LabelEdit:
Сохранение значений:
Код

procedure TForm1.sButton1Click(Sender: TObject);
var
  F: TextFile;
  i: Integer;
begin
  AssignFile(F, 'NEWFILE.txt');
  Rewrite(F);
  for i := 0 to ComponentCount - 1 do
  if Components[i] is TLabelEdit then Writeln(F, (Components[i] as TLabelEdit).Text);
  CloseFile(F);
end

Загрузка:
Код

procedure TForm1.sButton2Click(Sender: TObject);
var
  F: TextFile;
  S: string;
  i: Integer;
begin
  AssignFile(F, 'NEWFILE.txt');
  Reset(F);
  for i := 0 to ComponentCount - 1 do
  if Components[i] is TLabelEdit then
  Begin
    ReadLn(F, S);
    (Components[i] as TLabelEdit).Text:=s;
  End;
end;


Добавлено через 1 минуту и 26 секунд
А что не так с той программой, что вы прислали? ведь все работает!
Вот что было в текстовом файле:
2 2 5
4 4 6

Вот что стало:
2 2 5
4 4 6
Точки пересечения x1=5.14 y1=-1.89 x2=-1.89  y2=5.14

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1286 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.