| пожалуйста помогите решить задачу | 
|  | 
| 
					| kardan | Дата: Четверг, 10.04.2008, 14:50 | Сообщение # 1 |  | Знакомый Группа: Пользователи Сообщений: 10 Статус: Offline | дан файл f элементы которого являются действительными числами. найти наименьшее из значений элементов с четными номерами.
 |  |  |  |  | 
| 
					| Alexander | Дата: Четверг, 10.04.2008, 16:46 | Сообщение # 2 |  | Всевышний Группа: Модераторы Сообщений: 475 Статус: Offline | Code n:=filesize(f) shr 1; read(F,x,x);
 Result:=x;
 for i:=2 to n do
 begin
 read(F,x,x);
 if x<Result then
 Result:=x;
 end;
P.S. предполагается, что в файле как минимум 2 элемента.
 
 Скажем дружно- нафиг нужно!
 |  |  |  |  | 
| 
					| kardan | Дата: Суббота, 12.04.2008, 17:21 | Сообщение # 3 |  | Знакомый Группа: Пользователи Сообщений: 10 Статус: Offline | я так понял что прога должна выводить только наименьшее число с четным номером? 1)-
 2)+
 я правильно понял?
  var f:file of real; r,min:real;
 i:integer;
 begin
 assign(f,'c:\t1.dat');
 rewrite(f);
 reset(f);
 read(f,r,min); i:=2;
 while not eof(f) do
 begin
 read(f,r); inc(i);
 if (i mod 2=0) and (r<min) then min:=r;
 end;
 close(f);
 writeln(min);
 readln;
 end.
 |  |  |  |  | 
| 
					| Alexander | Дата: Воскресенье, 13.04.2008, 00:35 | Сообщение # 4 |  | Всевышний Группа: Модераторы Сообщений: 475 Статус: Offline | Да.
 
 Quote rewrite(f); reset(f);
Нет, это только в анекдоты
  . Функция rewrite перезаписывает файл, т.е. уничтожает всё его содержимое. А reset подготавливает файл для чтения, а если вы его стёрли, то и читать там нечего. Дальше вы пытались придумать свой алгоритм. Это похвально, но давайте я вам лучше объясню мой, он получше
  : 
 Code n:=filesize(f) shr 1;Переменной "n" присваиваем значение, равное половине переменных, хранящихся в файле, с чётными номерами.
 
 В переменную "x" сначала читаем первое число, а затем туда же второе.
 
 Пока мы прочитали лишь одно число с чётным номером, его и присваиваем как текущий результат.
 
 Code for i:=2 to n do   {первый элемент уже прочитан, значит начинаем с двух} begin
 read(F,x,x);          {читаем следующее значение}
 if x<Result then     {проверяем не меньше ли оно текущего результата}
 Result:=x;          {если меньше, то это значение и становится результатом}
 end;
Алгоритм очень прост, главное понять как читаются чётные элементы(read(f,x,x)). Если что-то не ясно, то пишите.
 P.S. Старайтесь писать более читаемый код, а именно- делайте отступы и ставьте теги [сode][/сode], как это сделано у меня.
 
 Скажем дружно- нафиг нужно!
 |  |  |  |  | 
| 
					| kardan | Дата: Воскресенье, 13.04.2008, 03:30 | Сообщение # 5 |  | Знакомый Группа: Пользователи Сообщений: 10 Статус: Offline | прога пишет что нужно использовать перечисляемый тип [for i:=2 to n do]
 |  |  |  |  | 
| 
					| Alexander | Дата: Воскресенье, 13.04.2008, 03:52 | Сообщение # 6 |  | Всевышний Группа: Модераторы Сообщений: 475 Статус: Offline | Строго говоря, перечисляемый тип- это тип, который программа после компиляции будет представлять как целочисленный. В данном случае переменные "i" и "n" должны иметь либо тип BYTE(если в файле меньше 512 записей) либо WORD(от 512 до 131071 записи включительно). 
 Скажем дружно- нафиг нужно!
 |  |  |  |  | 
| 
					| kardan | Дата: Воскресенье, 13.04.2008, 04:02 | Сообщение # 7 |  | Знакомый Группа: Пользователи Сообщений: 10 Статус: Offline | он всё сремя выводит последнюю цифру [uses crt;
 var f:file of real;
 n,i:byte;
 x,result:real;
 begin
 assign(f,'c:\t1.dat');
 writeln('');
 reset(f);
 repeat
 n:=filesize(f) shr 1;
 read(x,x);
 until readkey=#27;
 Result:=x;
 for i:=2 to n do
 begin
 read(F,x,x);
 if x<Result then
 Result:=x;
 end;
 writeln(result);
 readln;
 end.]
 |  |  |  |  | 
| 
					| Alexander | Дата: Воскресенье, 13.04.2008, 04:16 | Сообщение # 8 |  | Всевышний Группа: Модераторы Сообщений: 475 Статус: Offline | Такс... 1) 8-ая строка. Зачем этот WriteLn('')? Он там не нужен. И вообще грамотнее было бы написать без параметров WriteLn;
 2) строки 10-13. Зачем там цикл?
 3) строка 12. Читать надо из файла, а не с клавиатуры.
 
 Скажем дружно- нафиг нужно!
 |  |  |  |  | 
| 
					| kardan | Дата: Воскресенье, 13.04.2008, 04:25 | Сообщение # 9 |  | Знакомый Группа: Пользователи Сообщений: 10 Статус: Offline | n:=filesize(f) shr 1; read(F,x,x); {пишет disk read error}
 Добавлено (12.04.2008, 21:25)---------------------------------------------
 так вроде начинаю понимать
 |  |  |  |  | 
| 
					| Alexander | Дата: Воскресенье, 13.04.2008, 04:27 | Сообщение # 10 |  | Всевышний Группа: Модераторы Сообщений: 475 Статус: Offline | Причины могут быть разные, но сводятся они всего к двум- файла не существует или файл уже полностью прочитан. Проверьте следующее:
 1) В процедуре Assign указан верный файл.
 2) В этом файле минимум две записи.
 Если не можете найти ошибку самостоятельно, то придётся вам выложить весь код.
 P.S. Не забывайте о тегах "code"(обведите напечатанный вами программный код и нажмите кнопочку "code").
 
 Скажем дружно- нафиг нужно!
 |  |  |  |  | 
| 
					| kardan | Дата: Воскресенье, 13.04.2008, 04:35 | Сообщение # 11 |  | Знакомый Группа: Пользователи Сообщений: 10 Статус: Offline | записал в файл 4 числа,менял числа всё равно выдаёт один и тот же ответ [/code]uses crt;
 var f:file of real;
 n,i:byte;
 x,result:real;
 begin
 clrscr;
 assign(f,'c:\t1.dat');
 reset(f);
 n:=filesize(f) shr 1;
 read(f,x,x);
 Result:=x;
 for i:=2 to n do
 begin
 read(F,x,x);
 if x<Result then
 Result:=x;
 end;
 writeln(x);
 readln;
 end.[code]
 Добавлено (12.04.2008, 21:35)---------------------------------------------
 
 Code  uses crt;
 var f:file of real;
 n,i:byte;
 x,result:real;
 begin
 clrscr;
 assign(f,'c:\t1.dat');
 reset(f);
 n:=filesize(f) shr 1;
 read(f,x,x);
 Result:=x;
 for i:=2 to n do
 begin
 read(F,x,x);
 if x<Result then
 Result:=x;
 end;
 writeln(x);
 readln;
 end.
 
 |  |  |  |  | 
| 
					| Alexander | Дата: Воскресенье, 13.04.2008, 04:40 | Сообщение # 12 |  | Всевышний Группа: Модераторы Сообщений: 475 Статус: Offline |  Всё верно. Девятнадцатую строчку проверьте(writeln(x);). Результат-то у вас не в "x" хранится, а в "Result". З.Ы. Вы теги местами перепутали
  . 
 Скажем дружно- нафиг нужно!
 |  |  |  |  | 
| 
					| kardan | Дата: Воскресенье, 13.04.2008, 04:49 | Сообщение # 13 |  | Знакомый Группа: Пользователи Сообщений: 10 Статус: Offline | всё равно выводит один и тот же результат, уже числа перезаписывал не помогает Добавлено (12.04.2008, 21:49)---------------------------------------------
 1.4072975394Е-25
 |  |  |  |  | 
| 
					| Alexander | Дата: Воскресенье, 13.04.2008, 04:56 | Сообщение # 14 |  | Всевышний Группа: Модераторы Сообщений: 475 Статус: Offline | Ну не знаю, где там ещё можно ошибиться  . Вот ваш же вариант, только с заполнением файла рандомными числами:
 
 Code uses crt; var
 f:file of real;
 n,i:byte;
 x,result:real;
 begin
 clrscr;
 assign(f,'c:\t1.dat');
 rewrite(f);
 Randomize;
 n:=Random(10)+2;
 for i:=1 to n do
 begin
 x:=Random+Random(11)-5;
 Write(F,x);
 Write(x:7:2);
 end;
 WriteLn;
 reset(f);
 n:=filesize(f) shr 1;
 read(f,x,x);
 Result:=x;
 for i:=2 to n do
 begin
 read(F,x,x);
 if x<Result then
 Result:=x;
 end;
 Close(F);
 writeln(Result:0:2);
 ReadKey;
 end.
 Скажем дружно- нафиг нужно!
 
 
 Сообщение отредактировал Alexander - Воскресенье, 13.04.2008, 04:59 |  |  |  |  | 
| 
					| kardan | Дата: Воскресенье, 13.04.2008, 05:11 | Сообщение # 15 |  | Знакомый Группа: Пользователи Сообщений: 10 Статус: Offline | странно! эта правда работает, огромное вам спасибо ! буду дальше разбираться |  |  |  |  |