Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 23.11.2014
Сообщений: 4

Найти элементы в списке, значение которых совпадает с номерами их позиций

28.01.2017, 22:17. Показов 1346. Ответов 5

Студворк — интернет-сервис помощи студентам
Найти элементы в списке, значение которых совпадает с номерами их позиций в списке.
Я практически не знаю, пролога, но нужно на завтра решить задачи, который вокруг этого крутятся.

Вот задача которая находит количество таких элементов:
Prolog
1
2
3
4
5
6
7
8
9
10
11
sootv([], _, 0).
 
sootv([H|T], Ind, Col):- % проверка головы списка на неравенство с индексом Ind
    H \= Ind,
    Ind1 is Ind+1,
    sootv(T, Ind1, Col).
sootv([H|T], Ind, Col):- % проверка головы списка на равенство с индексом Ind и увеличением счетчика Col.
    H = Ind, 
    Ind1 is Ind+1, 
    sootv(T, Ind1, Col1),
    Col is Col1+1.
Помогите вместо счетчика, добавлять в переменную значения в виде результирующего массива.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.01.2017, 22:17
Ответы с готовыми решениями:

найти элементы списка, значения которых не совпадают с номерами их позиций.
например: список 1,2,3,98,5,6,78 - результат кода: 98, 78. помогите с кодом, пожалуйста.

Найти количество тех элементов первого списка, значение которых совпадает с символом «в»
Найти количество тех элементов первого списка, значение которых совпадает с символом «в».

Найти элементы списка значение которых не совпадает с номерами их позиций в списке
Найти элементы списка значение которых не совпадает с номером их позиций в списке

5
 Аватар для arlat
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
29.01.2017, 10:23
Лучший ответ Сообщение было отмечено sydorenkovd как решение

Решение

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
sootv1(Xs, Ys) :-
    sootv1(Xs, 1, Ys).
    
sootv1([], _, []).
sootv1([Pos | Teil], Pos, [Pos | Rest]) :-
    Pos1 is Pos + 1,
    sootv1(Teil, Pos1, Rest).
sootv1([Head | Teil], Pos, Rest) :-
    Head \= Pos,
    Pos1 is Pos + 1,
    sootv1(Teil, Pos1, Rest).
    
sootv2(Xs, Ys) :-
    sootv2(Xs, 1, Ys).
 
sootv2([], _, []).
sootv2([Pos | Teil], Pos, [Pos | Rest]) :-
    Pos1 is Pos + 1,
    !,
    sootv2(Teil, Pos1, Rest).
sootv2([_ | Teil], Pos, Rest) :-
    Pos1 is Pos + 1,
    sootv2(Teil, Pos1, Rest).
Добавлено через 34 секунды
Prolog
1
2
3
? - sootv1([1,4,3,7,5], Ys).
Ys = [1, 3, 5] ;
false.
Prolog
1
2
?- sootv2([1,4,3,7,5], Ys).
Ys = [1, 3, 5].
2
0 / 0 / 0
Регистрация: 23.11.2014
Сообщений: 4
29.01.2017, 11:03  [ТС]
Спасибо! Я не очень пока понимаю где именно происходит фильтрация. Можете, пожалуйста, написать например для элементов которые не совпадают с номерами в списке, чтобы я сравнил логику и понял принцип действия. А то логично менять \= на == но так не работает.
0
 Аватар для arlat
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
29.01.2017, 12:28
Prolog
1
2
3
4
5
6
7
8
not_sootv1([], _, []).
not_sootv1([Pos | Teil], Pos, Rest) :-
    Pos1 is Pos + 1,
    not_sootv1(Teil, Pos1, Rest).
not_sootv1([Head | Teil], Pos, [Head | Rest]) :-
    Head \= Pos,
    Pos1 is Pos + 1,
    not_sootv1(Teil, Pos1, Rest).
Prolog
1
2
3
?- not_sootv1([1,4,3,7,5], Ys).
Ys = [4, 7] ;
false.
Добавлено через 51 минуту
Цитата Сообщение от arlat Посмотреть сообщение
sootv1([Pos | Teil], Pos, ...) :-
это есть как sootv1([Head | Teil], Pos, ...) :- Head = Pos, ...
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,707
Записей в блоге: 14
29.01.2017, 14:38
Турбо-пролог:

Prolog
1
2
3
4
5
6
7
8
9
10
11
domains
int=integer
intl=int*
 
predicates
task(intl,int,intl)
 
clauses
task([],_,[]).
task([K|R],K,[K|Z]) :- K1=K+1,task(R,K1,Z).
task([P|R],K,Z) :- K<>P, K1=K+1,task(R,K1,Z).
0
 Аватар для arlat
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
31.01.2017, 13:53
Prolog
1
2
3
4
5
6
7
8
sootv3(Xs, Ys) :-
    sootv3(Xs, 1, Ys).
 
sootv3([], _, []).
sootv3([Head | Teil], Pos, Ys) :-
    ( Head = Pos -> Ys = [Head | Rest] ; Ys = Rest ),
    Pos1 is Pos + 1,
    sootv3(Teil, Pos1, Rest).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.01.2017, 13:53
Помогаю со студенческими работами здесь

Найти элементы списка, значения которых не совпадают с номерами их позиций. например: список 1,2,3,98,5,6,78 - результат кода: 98, 78
помогите с кодом, пожалуйста.

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

Найти элементы массива, в которых значение совпадает с порядковым номером и подсчитать их количество
#include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;iomanip&gt; using namespace std; int main(void) { int n,k=0; srand(time(NULL)); ...

Найти количество таких элементов, значение которых совпадает с их номером.
Найти количество таких элементов, значение которых совпадает с их номером. (сделать без массива)

Найти количество таких элементов последовательности, значение которых совпадает с их номером.
Задачу сделать двумя способами :без использования массива и с использованием массива. С клавиатуры вводится последовательность из n...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru