[Pascal]Работа с файлами.

Ответить
maxg5
Сообщения: 10
Зарегистрирован: 06 фев 2007, 21:54

помогите с здачкой.условие такое:
дан файл,каждая строка которго-целое число.найти наименьшее число и поставить его первым.
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

Решение: создаёшь массив со всеми числами файла, и ищешь там минимальный элемент - это и будет наименьшее число. Ставим его первым, и всё!
Вот код:

Код: Выделить всё

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.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
maxg5
Сообщения: 10
Зарегистрирован: 06 фев 2007, 21:54

Спасибо)))
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Колядин Максим писал(а):Решение: создаёшь массив со всеми числами файла, и ищешь там минимальный элемент - это и будет наименьшее число. Ставим его первым, и всё!
Зачем вообще создавать массив? (в приведенном тексте задачи про массив, вообще-то, не блоы сказано ни слова). У тебя жестко объявлен массив лишь на 100 элементов. А если в файле строк больше? (btw, перед подсчетом строк в цикле чтения из файлы не обнулена переменная-счетчик). Можно искать минимум без всякого массива, по ходу чтения строк из файла.
Правда, я не понял, что надо сделать с найденным числом. Из фразы в тексте задачи "поставить его первым" мне не ясно, КУДА его надо поставить первым. Единственное ПРЕДПОЛОЖЕНИЕ, пришедшее мне в голову - поставить первой строкой в данном файле.

UPD:

Код: Выделить всё

for i:= 1 to n do begin
  a[index]:=a[1];
  a[1]:=min;
  break;
end;
А тут-то вообще зачем цикл??? Тем более, с наличием безусловного break в его теле! :) В общем, формально, ошибки тут нет, но, Холмс, черт возьми, ЗАЧЕМ!?!? (почти (с)) :lol:
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

можно сделать так.
1. пробегаем по всему файлу и находим минимальное число.
2. записываем в выходной файл минимальное число
3. идем по входному файлу, считываем по одному числу, сравниваем с минимальным. если не совпадает - выводим в выходной файл. если совпадает - пропускаем.
4. если на предыдущем ходу только что было пропущено число - перетаскиваем весь остальной входной файл чохом в выходной
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить