![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
MayBe |
![]() ![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: ![]() ![]() ![]() |
Помогите, пожалуйста, решить задачу
Создать файл целых чисел. Определить суммы между локальными минимумами, записав их в новый файл. |
amega |
![]()
Сообщение
#2
|
![]() ? ![]() ![]() ![]() Группа: Пользователи Сообщений: 283 Пол: Мужской Репутация: ![]() ![]() ![]() |
ну с файлом все просто
type
TFile = file of integer;
...
var
f:tfile;
...
Цитата Определить суммы между локальными минимумами незнаю как по руски но какой "окіл"? |
Айра |
![]()
Сообщение
#3
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: ![]() ![]() ![]() |
Цитата незнаю как по руски но какой "окіл"? Ну уж мы то тем более не знаем, что это на русском.. Может ты имел в виду интервал, на котором нужно искать минимум? Сообщение отредактировано: Айра - 13.03.2009 23:28 |
amega |
![]()
Сообщение
#4
|
![]() ? ![]() ![]() ![]() Группа: Пользователи Сообщений: 283 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Ну уж мы то тем более не знаем Просто я с украин и у мну лекции на укр идут по вышке дак вспомнил определение типа лок минимуму, там типа знайдеться такий дельта окил(типа промежуткана котором расматривается)..... Цитата Может ты имел в виду интервал ага ток мне слово интервал роишло в голову когда прочитал сабж ![]() |
MayBe |
![]()
Сообщение
#5
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: ![]() ![]() ![]() |
в условии задачи никакой интервал задан не был...
|
andriano |
![]()
Сообщение
#6
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
Так в чем проблема?
Локальный минимум - любая точка от второй до предпоследней такая, что оба ее соседа больше. Т.к. в задании употреблено слово "между", значит, сами эти локальные минимумы не включаются. Естественно, никакая окрестность (по всей видимости, именно она имелась в виду, а не интервал) к данной задаче никакого отношения не имеет. |
MayBe |
![]()
Сообщение
#7
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: ![]() ![]() ![]() |
хееелп
![]() |
klem4 |
![]()
Сообщение
#8
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
В чем проблема ? Пока не достигли конца файла пытаетесь читать по три значения от текущего (пользуйтесь seek), если удалось прочитать 3 значения и если второе прочитанное меньше 1-го и третьего, значит оно - лок. мин.
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
amega |
![]()
Сообщение
#9
|
![]() ? ![]() ![]() ![]() Группа: Пользователи Сообщений: 283 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата пытаетесь читать по три значения от текущего (пользуйтесь seek) да но после сравнения нужно на 2 значения вернутся назад, и начинать считовать с 2 елемента |
klem4 |
![]()
Сообщение
#10
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Цитата да но после сравнения нужно на 2 значения вернутся назад, и начинать считовать с 2 елемента И что ? Юзая seek это не вызовет никаких трудностей с реализацией по крайней мере. Да и не надо никуда возвращаться. В каждый момент мы будем хранить номер текущего (первого в тройке) элемента. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
amega |
![]()
Сообщение
#11
|
![]() ? ![]() ![]() ![]() Группа: Пользователи Сообщений: 283 Пол: Мужской Репутация: ![]() ![]() ![]() |
все наши мысли можна проверить если автор даст исходные и результируещее данные
![]() |
Айра |
![]()
Сообщение
#12
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: ![]() ![]() ![]() |
Ну как бы файл можно заполнить и рэндомно, а потом посмотреть самим
![]() |
MayBe |
![]()
Сообщение
#13
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: ![]() ![]() ![]() |
файл итак надо заполнять рандомно...
|
Айра |
![]()
Сообщение
#14
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: ![]() ![]() ![]() |
Ну вот) Какие у самого мысли, попытки - делись ))
|
MayBe |
![]()
Сообщение
#15
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: ![]() ![]() ![]() |
на счёт рандомно - я имел ввиду первоначальный файл... его я создал (с этим проблем нет)
а вот с нахождением суммы возникли проблемы 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 |
![]()
Сообщение
#16
|
![]() ? ![]() ![]() ![]() Группа: Пользователи Сообщений: 283 Пол: Мужской Репутация: ![]() ![]() ![]() |
давай по порядку
все вот это
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 записіваеш в файл |
![]() ![]() |
![]() |
Текстовая версия | 7.08.2025 5:35 |