Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2016, 14:18   #1
SENDEJER
 
Регистрация: 03.12.2015
Сообщений: 5
Восклицание Чтение и запись в файл - расчёт окружности

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

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

Код:

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.
SENDEJER вне форума Ответить с цитированием
Старый 30.11.2016, 15:21   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

не очень понял, что надо.

но если btn2 - это кнопка "Сохранить",
а в LabeledEdit1 ... LabeledEdit6 занесены целые числа и нужно перезаписать текстовый файл (всё, что есть в файле стирается и записываются значение из эдитов)

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

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

  AssignFile(a, ExtractFilePath(Application.ExeName)+'Coord.txt');//файл в папке с программой
   Rewrite(a);
   Writeln (a,x1,y1,r1,x2,y2,r2);
   CloseFile(a);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.11.2016, 16:11   #3
SENDEJER
 
Регистрация: 03.12.2015
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
не очень понял, что надо.

но если btn2 - это кнопка "Сохранить",
а в LabeledEdit1 ... LabeledEdit6 занесены целые числа и нужно перезаписать текстовый файл (всё, что есть в файле стирается и записываются значение из эдитов)

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

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

  AssignFile(a, ExtractFilePath(Application.ExeName)+'Coord.txt');//файл в папке с программой
   Rewrite(a);
   Writeln (a,x1,y1,r1,x2,y2,r2);
   CloseFile(a);
end;
вроде так , но к сожалению не работает(
SENDEJER вне форума Ответить с цитированием
Старый 30.11.2016, 16:12   #4
SENDEJER
 
Регистрация: 03.12.2015
Сообщений: 5
По умолчанию

вот сама программа и коды, делаю на делфи 7
Вложения
Тип файла: rar Пересечение окружностей_1.rar (168.7 Кб, 10 просмотров)
SENDEJER вне форума Ответить с цитированием
Старый 30.11.2016, 16:31   #5
SENDEJ
 
Регистрация: 06.09.2015
Сообщений: 5
По умолчанию

получил более четче задание, поможете? 2 файла: 1 для данных и 1 для ввода данных. то чтения из одного файла (данные) и сохранение в другой
SENDEJ вне форума Ответить с цитированием
Старый 30.11.2016, 16:47   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Код:
procedure TForm1.Button2Click(Sender: TObject);
var x1,y1,r1,x2,y2,r2:integer;
    a:textfile;
begin
  try
    x1:=StrToInt(LabeledEdit1.Text);
    y1:=StrToInt(LabeledEdit2.Text);
    r1:=StrToInt(LabeledEdit3.Text);
    x2:=StrToInt(LabeledEdit4.Text);
    y2:=StrToInt(LabeledEdit5.Text);
    r2:=StrToInt(LabeledEdit6.Text);
  except
    Application.MessageBox(
      'Задайте правильные целые значения координат точек и радиусов',
      'Ошибка ввода данных', MB_OK or MB_ICONERROR);
    Exit;
  end;

  AssignFile(a, ExtractFilePath(Application.ExeName)+'Coord.txt');//файл в папке с программой
  Rewrite(a);
  Writeln(a,x1,' ',y1,' ',r1);
  WriteLn(a,x2,' ',y2,' ',r2);
  CloseFile(a);
  Application.MessageBox('Данные записаны в файл','Информация',MB_OK or MB_ICONINFORMATION);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.11.2016, 16:49   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от SENDEJ Посмотреть сообщение
2 файла: 1 для данных и 1 для ввода данных. то чтения из одного файла (данные) и сохранение в другой
простите, не понял..

уже не надо ничего никуда сохранять?

опишите, что должна делать программа.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение и запись в файл (С++) ura11_98 Помощь студентам 1 23.05.2016 19:13
Чтение\запись в файл VirtualAngel Помощь студентам 2 12.02.2011 12:54
Чтение и запись в файл Dycek Общие вопросы C/C++ 0 18.01.2011 15:04
Чтение и запись в файл. Ky3Heu, Помощь студентам 0 01.01.2010 11:24
Чтение и запись в файл deagle05 Общие вопросы C/C++ 3 22.12.2009 00:11