Страница 1 из 1
[Pascal]Работа с файлами.
Добавлено: 09 май 2007, 15:35
maxg5
помогите с здачкой.условие такое:
дан файл,каждая строка которго-целое число.найти наименьшее число и поставить его первым.
Re: [Pascal]Работа с файлами.
Добавлено: 09 май 2007, 18:57
Колядин Максим
Решение: создаёшь массив со всеми числами файла, и ищешь там минимальный элемент - это и будет наименьшее число. Ставим его первым, и всё!
Вот код:
Код: Выделить всё
var f: text;
a: array [1..100] of integer;
i,min,index,n: integer;
begin
assign(f, '1.txt'); reset(f);
while not eof(f) do begin
inc(i);
readln(f,a[i]);
end;
n:=i;
min:=a[1];
index:=1;
for i:= 1 to n do if a[i]<min then begin
min:=a[i];
index:=i;
end;
close(f);
for i:= 1 to n do begin
a[index]:=a[1];
a[1]:=min;
break;
end;
assign(f, '1.txt'); rewrite(f);
for i:= 1 to n do writeln(f,a[i]);
close(f);
end.
Re: [Pascal]Работа с файлами.
Добавлено: 09 май 2007, 20:18
maxg5
Спасибо)))
Критический взгляд.
Добавлено: 10 май 2007, 14:19
BBB
Колядин Максим писал(а):Решение: создаёшь массив со всеми числами файла, и ищешь там минимальный элемент - это и будет наименьшее число. Ставим его первым, и всё!
Зачем вообще создавать массив? (в приведенном тексте задачи про массив, вообще-то, не блоы сказано ни слова). У тебя жестко объявлен массив лишь на 100 элементов. А если в файле строк больше? (btw, перед подсчетом строк в цикле чтения из файлы не обнулена переменная-счетчик). Можно искать минимум без всякого массива, по ходу чтения строк из файла.
Правда, я не понял, что надо сделать с найденным числом. Из фразы в тексте задачи "поставить его первым" мне не ясно, КУДА его надо поставить первым. Единственное ПРЕДПОЛОЖЕНИЕ, пришедшее мне в голову - поставить первой строкой в данном файле.
UPD:
Код: Выделить всё
for i:= 1 to n do begin
a[index]:=a[1];
a[1]:=min;
break;
end;
А тут-то вообще зачем цикл??? Тем более, с наличием безусловного
break в его теле!

В общем, формально, ошибки тут нет,
но, Холмс, черт возьми, ЗАЧЕМ!?!? (почти (с)) :lol:
Re: [Pascal]Работа с файлами.
Добавлено: 10 май 2007, 16:38
Хыиуду
можно сделать так.
1. пробегаем по всему файлу и находим минимальное число.
2. записываем в выходной файл минимальное число
3. идем по входному файлу, считываем по одному числу, сравниваем с минимальным. если не совпадает - выводим в выходной файл. если совпадает - пропускаем.
4. если на предыдущем ходу только что было пропущено число - перетаскиваем весь остальной входной файл чохом в выходной