Консультация № 184794
14.12.2011, 18:59
102.88 руб.
0 2 1
Здравствуйте, уважаемые эксперты! Прошу вас решить в среде Turbo Pascal следующую задачу: дан начальный текстовый файл, содержащий символы среди которых есть цифры.
Требуется написать программу, выводящую в конечный текстовый файл число состоящее из цифр каждой строки, образуя при этом минимальное число, в случае отсутствия цифр в строке вывести -1. Если в строке находится несколько одинаковых цифр, то в результат записывается только одно из них. Имя исходного и результирующего файла вводятся пользователем с клавиатуры. При вводе производится проверка на существование файла. Использовать процедуры и функции с параметрами. Файлы передавать в параметрах через VAR.
Пример:
Исходные строки:
9433yr udsf2
percent
Результат:
2349
-1

Обсуждение

Неизвестный
14.12.2011, 21:06
общий
это ответ
Здравствуйте, Татьяна Турунжева!

Вот программа по вашему заданию:
Код:
program z184794;
var fIn,fOut: Text; {Файловые переменные}
name: string; {Переменная для имени файла}

{Функция обработки одиночной строки файла}
{Возвращает результат обработки входной строки по заданным правилам}
function ProcessString(Buf: string):string;
var i: char; {Счетчик}
result: string; {Переменная для временного хранения результата}
begin
result:='';
for i:='0' to '9' do
if pos(i,Buf)<>0 then
result:=result+i;
if result='' then ProcessString:='-1' else ProcessString:=result;
end;

{Процедура обработки заданных файлов}
{В параметрах получает файловые переменные с "открытыми" файлами}
procedure ProcessFiles(var fIn,fOut: text);
var Buffer: string;
begin
while not(Eof(fIn)) do begin
readln(fIn,Buffer);
writeln(fOut,ProcessString(Buffer));
end;
close(fIn);
close(fOut);
end;

{Основная программа}
{Запрашивает имена файлов, проверяет наличие входного файла,}
{открывает их и запускает процедуру обработки}
begin
write('Введите имя входного файла:');
readln(name);
Assign(fIn,name);
{$I-}
reset(fIn);
{$I+}
if IOResult<>0 then begin
writeln('Файл не найден!');
halt(1);
end;
write('Введите имя выходного файла:');
readln(name);
Assign(fOut,name);
rewrite(fOut);
ProcessFiles(fIn,fOut);
writeln('Сделано.');
end.

В коде достаточно прозрачно все вроде. Будут вопросы задавайте в минифорум.
И еще одно: если в строке встретится 0, то число получится вида 0123, что не очень красиво, по-моему.
Мне кажется что в таком случае правильнее было бы 1023. Если нужно переделаю, или сами.

С уважением, Дмитрий.
5
Неизвестный
14.12.2011, 22:22
общий
Спасибо большое, код поняла без проблем. Правда, мне ещё кое-что в него нужно включить, но это я сама сделаю.
Форма ответа