Помощь - Поиск - Пользователи - Календарь
Полная версия: Типизированный файл
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
MayBe
Помогите, пожалуйста, решить задачу
Создать файл целых чисел. Определить суммы между локальными минимумами, записав их в новый файл.
amega
ну с файлом все просто

type
TFile = file of integer;
...
var
f:tfile;
...



Цитата
Определить суммы между локальными минимумами


незнаю как по руски но какой "окіл"?
Айра
Цитата
незнаю как по руски но какой "окіл"?

Ну уж мы то тем более не знаем, что это на русском.. Может ты имел в виду интервал, на котором нужно искать минимум?
amega
Цитата
Ну уж мы то тем более не знаем


Просто я с украин и у мну лекции на укр идут по вышке дак вспомнил определение типа лок минимуму, там типа знайдеться такий дельта окил(типа промежуткана котором расматривается).....

Цитата
Может ты имел в виду интервал

ага ток мне слово интервал роишло в голову когда прочитал сабж blum.gif
MayBe
в условии задачи никакой интервал задан не был...
andriano
Так в чем проблема?
Локальный минимум - любая точка от второй до предпоследней такая, что оба ее соседа больше. Т.к. в задании употреблено слово "между", значит, сами эти локальные минимумы не включаются. Естественно, никакая окрестность (по всей видимости, именно она имелась в виду, а не интервал) к данной задаче никакого отношения не имеет.
MayBe
хееелп cray.gif
klem4
В чем проблема ? Пока не достигли конца файла пытаетесь читать по три значения от текущего (пользуйтесь seek), если удалось прочитать 3 значения и если второе прочитанное меньше 1-го и третьего, значит оно - лок. мин.
amega
Цитата
пытаетесь читать по три значения от текущего (пользуйтесь seek)
да но после сравнения нужно на 2 значения вернутся назад, и начинать считовать с 2 елемента
klem4
Цитата
да но после сравнения нужно на 2 значения вернутся назад, и начинать считовать с 2 елемента


И что ? Юзая seek это не вызовет никаких трудностей с реализацией по крайней мере. Да и не надо никуда возвращаться. В каждый момент мы будем хранить номер текущего (первого в тройке) элемента.
amega
все наши мысли можна проверить если автор даст исходные и результируещее данные smile.gif
Айра
Ну как бы файл можно заполнить и рэндомно, а потом посмотреть самим smile.gif
MayBe
файл итак надо заполнять рандомно...
Айра
Ну вот) Какие у самого мысли, попытки - делись ))
MayBe
на счёт рандомно - я имел ввиду первоначальный файл... его я создал (с этим проблем нет)
а вот с нахождением суммы возникли проблемы

Program z1;
uses crt;
var f, f1: file of integer;
a, b, c, d, i, min, sum, k, l: integer;
begin
clrscr;
randomize;
assign (f1, 'f1.pas');
assign (f, 'f.pas');
rewrite (f);
b:=10;
for i:=1 to b do
begin
a:=random(50)+25;
write (f,a);
end;
while not eof(f) do
begin
read (f,a);
write (a:4);
end;
close (f);
l:=0;
reset(f);
i:=0;
While i<filesize(f)-4 do
begin
read (f, b, c, d);
if (c<b) and (c<d) then
begin
sum:=sum+b;
seek(f,i);
i:=i+2;
end
else if c>d then
begin
sum:=sum+b;
seek(f,i);
i:=i+1;
end
else
begin
sum:=sum+b+c;
seek(f,i);
i:=i+2;
end;
rewrite(f1);
write (f1,sum);
close (f1);
sum:=0;
end;
reset(f);
for i:=0 to filesize(f)-1 do
begin
read (f,a);
write (a:4);
end;
writeln;
reset (f1);
read (f1,a);
write (a:4);
readln;
end.
amega
давай по порядку
все вот это

b:=10;
for i:=1 to b do
begin
a:=random(50)+25;
write (f,a);
end;
while not eof(f) do
begin
read (f,a);
write (a:4);
end;
close (f);
l:=0;
reset(f);
i:=0;


можно записать как


writeln('введите количество чисел ');
readln(b);
for i:=1 to b do
begin
a:=random(50)+25;
write (f,a);
write(a:4);
end;
readln; //дляя просмотра чисел, можно и не писать.
seek(f,0)
l:=0;
i:=0;



все вот ето лудше переределать на фунции
 While i<filesize(f)-4 do
begin
read (f, b, c, d);
if (c<b) and (c<d) then
begin
sum:=sum+b;
seek(f,i);
i:=i+2;
end
else if c>d then
begin
sum:=sum+b;
seek(f,i);
i:=i+1;
end
else
begin
sum:=sum+b+c;
seek(f,i);
i:=i+2;
end;
rewrite(f1);
write (f1,sum);
close (f1);
sum:=0;
end;


тоесть нужно сначала провеку зделать вдруг там 2 или 1 число;
if filesize(f)<3 then 
begin
writeln('min nety');
readln;
halt;
end;


мини функция
function my(a,b,c:integer):boolean;
begin
my:=false;
if (b<c) and (b<a) then my:=true
end;


потом
i:=0;
while i<=filesize(f)-3 do
begin
read(f,a,b,c);
if my(a,b,c) then sum:=sum+b;
seek(f,i+2);
i:=i+1;
end;

и потом sum записіваеш в файл

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.