|
Вопрос # 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]:
Извините что задел ваш средний бал...
Всёравно спасибо за помощь.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|