| 
Вопрос # 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 (статус: Посетитель) 
Вопрос отправлен: 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™ (статус: Доктор наук), 26 февраля 2010, 18:14 [#1]: 
Давай файл, сделаю.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! 
 |   
26 февраля 2010, 18:43: Вопрос перемещён из тематического раздела Delphi » Работа с файловой системой в раздел Лабораторный практикум » Delphi модератором Ерёмин А.А. 
 
 | 
 Мережников Андрей (статус: Абитуриент), 26 февраля 2010, 20:39 [#2]: 
проверьте условие, i не может быть до n. Почему, подумайте сами
 |   
 
 | 
 LDO (статус: Посетитель), 27 февраля 2010, 14:55 [#3]: 
Любой файл .txt с натуральными числами. К примеру: 
123 345 567 65 4324 64 23
 |   
 
 | 
 min@y™ (статус: Доктор наук), 27 февраля 2010, 15:02 [#4]: 
Цитата (LDO): 
			Любой файл .txt с натуральными числами. К примеру: 123 345 567 65 4324 64 23   
Числа в файле записаны именно так? Не построчно, а в одну строку?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! 
 |   
 
 | 
 min@y™ (статус: Доктор наук), 28 февраля 2010, 19:22 [#5]: 
Цитата (Егор): 
			Оценка за ответ: 4 Комментарий: благодарю!   
А чо 4? Что-то не так?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! 
 |   
 
 | 
 LDO (статус: Посетитель), 2 марта 2010, 00:18 [#6]: 
всё работает) просто программа немного сложна.. 
в след. раз обязательно 5 будет))
 |   
 
 | 
 Егор (статус: 10-ый класс), 2 марта 2010, 06:00 [#7]: 
Цитата (LDO): 
			всё работает) просто программа немного сложна..  
есть минифорум - туда всегда можно высказывать пожелания - и насчёт сложности, и насчёт ещё чего-нибудь 
да и заранее в вопросе можно было бы указать требования
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его. 
— Donald E. Knuth. 
 |   
 
 | 
 min@y™ (статус: Доктор наук), 2 марта 2010, 08:12 [#8]: 
Цитата (LDO): 
			всё работает) просто программа немного сложна..   
Задача выполнена? Да! На счёт сложности - программа простейшая. И вообще, никаких критериев по сложности/простоте указано не было. 
 
Цитата (LDO): 
			в след. раз обязательно 5 будет))   
Нет, спасибо, следующего раза не будет. Лучше пусть мой средний балл останется как есть.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! 
 |   
 
 | 
 LDO (статус: Посетитель), 4 марта 2010, 20:09 [#9]: 
Извините что задел ваш средний бал... 
Всёравно спасибо за помощь.
 |   
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. 
 |