пожалуйста помогите решить задачу
|
|
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
| странно! эта правда работает, огромное вам спасибо ! буду дальше разбираться
|
|
| |