Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 820

/ вопрос открыт /

Здравствуйте!
Есть файл. Его элементами есть натуральные числа а1,а2...аn. Нужно создать такой файл чтоб его элементы b1,b2...bn были получены след. образом а1=b1, an=bn, b[i]=(a[i+1]-a[i])/3, i=2,3....n;
Заранее спасибо всем кто откликнулся!

LDO Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: LDO (статус: Посетитель)
Вопрос отправлен: 26 февраля 2010, 16:32
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: min@y™

Ну, типа, вот:

program p3820;
 
{$APPTYPE CONSOLE}
 
uses
  Classes, SysUtils;
 
const
  Source = 'Source.txt';
  Target = 'Target.txt';
 
var
  Index, Value, Next: Integer;
  sList, dList: TStringList;
  Temp: string;
 
begin
  sList:= TStringList.Create();
  dList:= TStringList.Create();
 
  try
    try
      sList.LoadFromFile(Source);
      Temp:= sList[0];
      sList.Clear();
      sList.Delimiter:= #32;
      sList.DelimitedText:= Temp;
 
      if sList.Count <> 0
        then begin
               dList.Add(sList[0]);
 
               for Index:= 1 to sList.Count - 2 do
                 if TryStrToInt(sList[Index], Value) and TryStrToInt(sList[Index + 1], Next)
                   then dList.Add(FloatToStr((Next - Value) / 3))
                   else begin
                          WriteLn('Invalid file format.');
                          Break;
                        end;
 
               dList.Add(sList[sList.Count - 1]);
             end;
 
      dList.SaveToFile(Target);
      WriteLn('File saved successfully!');
    except
      WriteLn('IO Error.');
    end;
  finally
    sList.Free();
    dList.Free();
  end;
 
  Write('Press "ENTER" to exit...');
  ReadLn;
end.

Файл Source.txt содержит исходные данные в текстовом виде: 123 345 567 65 4324 64 23.
В файл Target.txt программа записывает результат. С такими исходными данными у меня он получился вот такой:
123
74
-167,333333333333
1419,66666666667
-1420
-13,6666666666667
23

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 27 февраля 2010, 15:36
Оценка за ответ: 4

Комментарий к оценке: Спасибо) работает хорошо)

Ответ #2. Отвечает эксперт: Егор

Здравствуйте, LDO!
Вариант для оконного приложения.
На форму вставляете кнопку и компоненты открытия и сохранения файлов (OpenDialog, SaveDialog).
Затем в обработчик кнопки прописываете код:

procedure TForm1.Button1Click(Sender: TObject);
var
  fIn, fOut : TextFile;
  a, a1 : integer;
  b : extended;
begin
  if not OpenDialog1.Execute then exit;
  SaveDialog1.InitialDir := OpenDialog1.InitialDir;
  if not SaveDialog1.Execute then exit;
  if OpenDialog1.FileName = SaveDialog1.FileName then
  begin
    ShowMessage('Входной и выходной файлы должны иметь разные имена!');
    exit;
  end;
  AssignFile(fIn,OpenDialog1.FileName);
  AssignFile(fOut,SaveDialog1.FileName);
  try
    Reset(fIn);
  except
    ShowMessage('Не удалось открыть входной файл');
    exit;
  end;
  try
    Rewrite(fOut);
  except
    CloseFile(fIn);
    ShowMessage('Не удалось открыть результирующий файл');
    exit;
  end;
  try
    read(fIn,a1);
    a:=a1;
    write(fOut,a,' ');
    while not eof(fIn) do
    begin
      read(fIn,a1);
      b:=(a+a1)/3;
      write(fOut,b:1:5,' ');
      a:=a1;
    end;
    write(fOut,a1);
    ShowMessage('Готово');
  except
    ShowMessage('Ошибка ввода-вывода');
  end;
  CloseFile(fIn);
  CloseFile(fOut);
end;

При запуске приложения нужно нажать кнопку и выбрать тот файл, который содержит нужные данные. Затем (в окне сохранения файла) ввести имя файла, в котором нужно сохранить полученные данные.

Будут вопросы - пишите в минифорум.

Ответ отправил: Егор (статус: 10-ый класс)
Время отправки: 28 февраля 2010, 13:53
Оценка за ответ: 4

Комментарий к оценке: благодарю!

Мини-форум вопроса

Всего сообщений: 9; последнее сообщение — 4 марта 2010, 20:09; участников в обсуждении: 4.
min@y™

min@y™ (статус: Доктор наук), 26 февраля 2010, 18:14 [#1]:

Давай файл, сделаю.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

26 февраля 2010, 18:43: Вопрос перемещён из тематического раздела Delphi » Работа с файловой системой в раздел Лабораторный практикум » Delphi модератором Ерёмин А.А.

Мережников Андрей

Мережников Андрей (статус: Абитуриент), 26 февраля 2010, 20:39 [#2]:

проверьте условие, i не может быть до n. Почему, подумайте сами
LDO

LDO (статус: Посетитель), 27 февраля 2010, 14:55 [#3]:

Любой файл .txt с натуральными числами. К примеру:
123 345 567 65 4324 64 23
min@y™

min@y™ (статус: Доктор наук), 27 февраля 2010, 15:02 [#4]:

Цитата (LDO):

Любой файл .txt с натуральными числами. К примеру: 123 345 567 65 4324 64 23

Числа в файле записаны именно так? Не построчно, а в одну строку?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 28 февраля 2010, 19:22 [#5]:

Цитата (Егор):

Оценка за ответ: 4 Комментарий: благодарю!

А чо 4? Что-то не так?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
LDO

LDO (статус: Посетитель), 2 марта 2010, 00:18 [#6]:

всё работает) просто программа немного сложна..
в след. раз обязательно 5 будет))
Егор

Егор (статус: 10-ый класс), 2 марта 2010, 06:00 [#7]:

Цитата (LDO):

всё работает) просто программа немного сложна..

есть минифорум - туда всегда можно высказывать пожелания - и насчёт сложности, и насчёт ещё чего-нибудь
да и заранее в вопросе можно было бы указать требования
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
min@y™

min@y™ (статус: Доктор наук), 2 марта 2010, 08:12 [#8]:

Цитата (LDO):

всё работает) просто программа немного сложна..

Задача выполнена? Да! На счёт сложности - программа простейшая. И вообще, никаких критериев по сложности/простоте указано не было.

Цитата (LDO):

в след. раз обязательно 5 будет))

Нет, спасибо, следующего раза не будет. Лучше пусть мой средний балл останется как есть.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
LDO

LDO (статус: Посетитель), 4 марта 2010, 20:09 [#9]:

Извините что задел ваш средний бал...
Всёравно спасибо за помощь.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:55
Выполнено за 0.03 сек.