Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/27: Рейтинг темы: голосов - 27, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 26.09.2008
Сообщений: 12
1

Линейный поиск элементов

11.03.2010, 16:07. Показов 5315. Ответов 40
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите реализовать следующую задачу на языке Pascal :
В массиве H(n) хранятся значения высот некоторого профиля местности (ее вертикального сечения) с постоянным шагом по горизонтали. Найти области (номера точек измерения высоты), невидимые для наблюдателя, находящегося в точке h1.
Заранее благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2010, 16:07
Ответы с готовыми решениями:

Линейный поиск
Дали нам такое вот задание: Сформировать массив x состоящий из случ. элементов , найти вводимое...

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

Линейный поиск в упорядоченной таблице
Измерение количества сравнений ключей. Таблица содержит в качестве ключей неотрицательные целые...

получить линейный массив из четных элементов файла
очень нужна помощь. буду очень благодарна. Дан текстовый файл, содержащий целые числа. Получить...

40
4117 / 999 / 191
Регистрация: 09.04.2009
Сообщений: 4,223
11.03.2010, 16:16 2
sk1p, а как считать точки ети? ну я понимаю что за 100 метровой горкой 50-ти метровую не видно, но 101 метровую стоя на горбике 10 метров расположеную от наблюдателя на расстоянии 10 метров тоже не видно... тоесть считать как? тупо если я стою на 1, и третья больше второй то я ее вижу или есть нюансы?

Добавлено через 2 минуты
так же если я стою на 100 метровой то с расстоянием через 10 метров я вижу горки 90,85,80 метров высотой идущие в таком порядке...
0
0 / 0 / 0
Регистрация: 26.09.2008
Сообщений: 12
11.03.2010, 16:44  [ТС] 3
Значит как я понял точки следует считать следующим образом:
например стоим мы на высоте 4, а вершины профиля идут 5 3 4 6, то мы видим первую так как мы перед ней стоим, и четвертую высотой 6, т.к. она выше чем 5, и выводим номера 2 и 3 которые не видим. Проще говоря если какая-то вершина выше исходной на которой стоим , то мы находим есть ли какая-то вершина выше нее , и так перебираем до конца массива, а затем выводим все номера невидимых.
0
4117 / 999 / 191
Регистрация: 09.04.2009
Сообщений: 4,223
11.03.2010, 17:11 4
ня... ну я так и думал))) ща намутим)

Добавлено через 25 минут
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
uses crt;
var
a:array[1..100]of integer;
i,n,h1,m,k:integer;
begin
writeln('skoka tochek?');
readln(n);
if n>100 then n:=100;
writeln('itak geologi sdelali takie zameru:');
for i:=1 to n do begin
a[i]:=random(100);
write(a[i]:3);
end;
writeln;
writeln('a na kakoj iz tochek mu stoim?');
readln(h1);
write('sprava ot nas vushe ');
k:=0;
m:=a[h1];
for i:=h1+1 to n do begin
if a[i]>m then begin
k:=k+1;
write(i,' ');
m:=a[i];
end;
end;
if k=0 then writeln('tolko nebo i pticu...')
else if k=1 then writeln('vershuna')
else writeln('vershunu');
writeln;
write('slewa ot nas vushe ');
k:=0;
m:=a[h1];
for i:=h1-1 downto 1 do begin
if a[i]>m then begin
k:=k+1;
write(i,' ');
m:=a[i];
end;
end;
if k=0 then writeln('tolko nebo i pticu...')
else if k=1 then writeln('vershuna')
else writeln('vershunu');
end.
0
0 / 0 / 0
Регистрация: 26.09.2008
Сообщений: 12
12.03.2010, 14:24  [ТС] 5
Немного не разобрался с программой:
1) для чего пишется справа и слева
2) не совсем корректно отображает невидимые высоты

Пример: 4 точки высоты 74 24 97 57 стоим на высоте 40 слева от нас выше 4 и 3 вершины по программе, но на деле мы видим первую и третью поскольку она выше первой невидимые 2 и 4
0
4117 / 999 / 191
Регистрация: 09.04.2009
Сообщений: 4,223
12.03.2010, 15:12 6
смотрите ня...
как все происходит. вы задаете количество какбы срезов...
они вам выводятса в рядочек ето 74 24 97 57 какбы первая вершына - 74, вторая - 24 и так далее
потом вас спрашывают а на которой мы стоим? тоесть ето не 40 метров над уровнем моря а первая, вторая или третья, или четвертая...
тоесть оно нас ставит на ету вершыну ня...
тоесть ето например вершына 2... тоесть мы стоим на высоте 24 метра(2-ая вершына) и гордо глядим по сторонам... справа от нее выше третья(97м) а слева первая(74м)...
вот так вот)
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
12.03.2010, 15:47 7
Мне кажется неправильно истолковываете условие. Нужно еще угол зрения учитывать исходя из ометок и расстояний между ними. Например вы стоите на отметке 2, перед Вами в 5 метрах отметка 5, а за ней в километре отметка 6. Вряд ли Вы ее увидите.
0
4117 / 999 / 191
Регистрация: 09.04.2009
Сообщений: 4,223
12.03.2010, 15:49 8
Puporev, оно да) я с самого начала про ето говорил, но топик стартер хотел сделать так))) а желание важнее истины)))
0
0 / 0 / 0
Регистрация: 26.09.2008
Сообщений: 12
12.03.2010, 16:18  [ТС] 9
Цитата Сообщение от Puporev Посмотреть сообщение
Мне кажется неправильно истолковываете условие. Нужно еще угол зрения учитывать исходя из ометок и расстояний между ними. Например вы стоите на отметке 2, перед Вами в 5 метрах отметка 5, а за ней в километре отметка 6. Вряд ли Вы ее увидите.
На счет угла обзора, шаг по горизонтали в условии указано постоянный => расстояние между 4 и 5, 5 и 6 получается одинаково

Еще раз перечитав условия и посмотрев программу Jazon_deenAltа подумал еще вот над чем точка обзора которую мы вводим должна помещать в максимально близкую по значению вершину или ставить обозревателя перед самим профилем местности
0
4117 / 999 / 191
Регистрация: 09.04.2009
Сообщений: 4,223
12.03.2010, 16:27 10
уважаемый sk1p, обьясните ибо я бака, и немного не понимаю... вы хотите вводить высоту на которой стоит обозреватель??? например у нас есть горный хребет 100км длинной, с шагом 10 км мы измеряем высоты... например у нас такое розпределение высот
10 40 57 35 12 54 84 87 35 65...
где каждое двузначное число ето вершына по номерам 1 2 3 4 5 6 7 8 9 10...
сейчас так у нас спрашывают на какой номер вершыны мы высадим любознательного наблюдателя 1 2 3 4 5 6 7 8 9 или 10? садим его именно на ту вершыну номер которой мы задали и оттуда зырим... как надо вам? задавать высоту на которую смог вылезти альпинист? или подбирать самую близкую по заданой вершыну? а если ето 35? а таких вершын 2? или 3? как тогда?
0
0 / 0 / 0
Регистрация: 26.09.2008
Сообщений: 12
12.03.2010, 16:48  [ТС] 11
Уточнил подробности задачи, значит задаем начальный номер точки на которой стоим Jazon_deenAlt ты был прав на счет своего предположения, я с этим немного перемудрил. Значит единственное что осталось добавить в программу то, чтобы она выводил не какие вершины выше, а номера тех которые он не видит.
0
4117 / 999 / 191
Регистрация: 09.04.2009
Сообщений: 4,223
12.03.2010, 18:00 12
ну я же говорил, ня)
вот вариант с невидимыми горами)
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
uses crt;
var
a:array[1..100]of integer;
i,n,h1,m,k:integer;
begin
writeln('skoka tochek?');
readln(n);
if n>100 then n:=100;
writeln('itak geologi sdelali takie zameru:');
for i:=1 to n do begin
a[i]:=random(100);
write(a[i]:3);
end;
writeln;
writeln('a na kakoj iz tochek mu stoim?');
readln(h1);
write('sprava ot nas ne vidno ');
k:=0;
m:=a[h1];
for i:=h1+1 to n do begin
if a[i]>=m then begin
m:=a[i];
end
else begin
k:=k+1;
write(i,' ');
end;
end;
if k=0 then writeln('tolko nebo i ptic... oni skrutu gorami')
else if k=1 then writeln('vershuna')
else writeln('vershunu');
writeln;
write('slewa ot nas ne vidno ');
k:=0;
m:=a[h1];
for i:=h1-1 downto 1 do begin
if a[i]>=m then begin
m:=a[i];
end
else begin
k:=k+1;
write(i,' ');
end;
end;
if k=0 then writeln('tolko nebo i ptic... oni skrutu gorami')
else if k=1 then writeln('vershuna')
else writeln('vershunu');
end.
пробуйте)
2
0 / 0 / 0
Регистрация: 26.09.2008
Сообщений: 12
17.03.2010, 16:02  [ТС] 13
Всем спасибо за помощь остановлюсь пока на последнем варианте, представленном Jazon_deenAlt'ом. Если будут еще какие-то вопросы отпишусь в теме.
0
0 / 0 / 0
Регистрация: 07.12.2009
Сообщений: 36
02.06.2010, 08:19 14
помогите с этой задачкой. пробовала воспользоваться решением Jazon_deenAlt, но если вводить значения по убыванию, программа неправильно работает. например если ввести 5 4 3 2 0 и поставить наблюдателя в 1-ую точку, результат будет 2 3 4 5. или оно так и задумано?
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
02.06.2010, 08:41 15
Цитата Сообщение от cerenara Посмотреть сообщение
или оно так и задумано?
Видимо так, выводит которые видно, хотя по условию нужно как раз наоборот, которые не видно.

Добавлено через 6 минут
По условию все немного сложнее, нужно смотреть угол наклона до всех точек по порядку и если угол наклона к точке больше чем к какой-то из более близких, она невидима.
0
4117 / 999 / 191
Регистрация: 09.04.2009
Сообщений: 4,223
02.06.2010, 10:39 16
cerenara, а где в моем коде в 12 посте у вас есть возможность вводить вершыны вручную???

Добавлено через 3 минуты
Цитата Сообщение от Puporev Посмотреть сообщение
По условию все немного сложнее, нужно смотреть угол наклона до всех точек по порядку и если угол наклона к точке больше чем к какой-то из более близких, она невидима.
ето если нам еще дадут параметр который значит росстояние между точками замера, а так как его нету то и угол проблематично вычислить ня) но в идеале конечно вы правы ето было бы намного точнее)
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
02.06.2010, 10:57 17
Jazon_deenAlt,
с постоянным шагом по горизонтали.
Думаю ввести его, как и элементы массива с клавиатуры не проблема.
0
4117 / 999 / 191
Регистрация: 09.04.2009
Сообщений: 4,223
02.06.2010, 11:07 18
Puporev, не проблема ня) но ведь топикстартеру не надо было) хотя пересмотрев свой тогдашний код я нашел причину такого неправельного вывода ня) и таки да там есть вот такой нехорошый момент) если cerenara, хочет то там легко переделать код под подобные треугольники для проверки на видимость)
0
0 / 0 / 0
Регистрация: 07.12.2009
Сообщений: 36
02.06.2010, 14:57 19
Jazon_deenAlt, да не, мне так сложно не надо, треугольники, постоянный шаг и углы - это перебор) попроще бы, как в 12 посте, только чтоб работало правильно с любыми значениями.
0
4117 / 999 / 191
Регистрация: 09.04.2009
Сообщений: 4,223
02.06.2010, 15:15 20
cerenara, ето срочно? просто немного сейчас занят)
0
02.06.2010, 15:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2010, 15:15
Помогаю со студенческими работами здесь

Дан неупорядоченный линейный односвязный список и массив, содержащий номера соответствующих элементов в упорядоченном списке. Перестроить данный списо
помогите, вот последняя работа осталась, а сделать ее не могу Дан неупорядоченный линейный...

Поиск элементов массива, для которых сумма предшествующих элементов больше суммы последующих
Помогите пожалуйста написать программу. Составить программу, которая в каждой строке матрицы...

Линейный поиск или поиск с барьером
Помогите с задачей, пожалуйста. Найти номер первого элемента массива, который больше количества...

Линейный Поиск в массиве со случайными числами
Задание: Сравнить время выполнения линейного поиска в массиве a,случайных чисел при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru