IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Типизированный файл
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Помогите, пожалуйста, решить задачу
Создать файл целых чисел. Определить суммы между локальными минимумами, записав их в новый файл.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


ну с файлом все просто

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



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


незнаю как по руски но какой "окіл"?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


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

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

Сообщение отредактировано: Айра -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


Цитата
Ну уж мы то тем более не знаем


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

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

ага ток мне слово интервал роишло в голову когда прочитал сабж blum.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


в условии задачи никакой интервал задан не был...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Так в чем проблема?
Локальный минимум - любая точка от второй до предпоследней такая, что оба ее соседа больше. Т.к. в задании употреблено слово "между", значит, сами эти локальные минимумы не включаются. Естественно, никакая окрестность (по всей видимости, именно она имелась в виду, а не интервал) к данной задаче никакого отношения не имеет.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


хееелп cray.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


В чем проблема ? Пока не достигли конца файла пытаетесь читать по три значения от текущего (пользуйтесь seek), если удалось прочитать 3 значения и если второе прочитанное меньше 1-го и третьего, значит оно - лок. мин.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


Цитата
пытаетесь читать по три значения от текущего (пользуйтесь seek)
да но после сравнения нужно на 2 значения вернутся назад, и начинать считовать с 2 елемента
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
да но после сравнения нужно на 2 значения вернутся назад, и начинать считовать с 2 елемента


И что ? Юзая seek это не вызовет никаких трудностей с реализацией по крайней мере. Да и не надо никуда возвращаться. В каждый момент мы будем хранить номер текущего (первого в тройке) элемента.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


все наши мысли можна проверить если автор даст исходные и результируещее данные smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


Ну как бы файл можно заполнить и рэндомно, а потом посмотреть самим smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


файл итак надо заполнять рандомно...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


Ну вот) Какие у самого мысли, попытки - делись ))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


на счёт рандомно - я имел ввиду первоначальный файл... его я создал (с этим проблем нет)
а вот с нахождением суммы возникли проблемы

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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


давай по порядку
все вот это

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 записіваеш в файл

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 17:55
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name