Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Удалить из списка все элементы, равные последнему; найти длину полученного списка

Помогите реализовать.Создайте список и Удалите из списка все элементы, равные последнему, найдите длину оставшегося списка;

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
domains
list_string=string*
predicates
has(string,list_string)
general(list_string,list_string,list_string)                    
clauses 
has(X,[X|_]):-!.
has(X,[_|Y]):-has(X,Y).
general([],_,[]):-!.
general([H|T1],L2,[H|T3]):-general(T1,L2,T3),has(H,L2),not(has(H,T3)),!.
general([_|T1],L2,L3):-general(T1,L2,L3).
goal
general(["0","1","3","3","4","4","5","6","7","2"],["3","0","8","2","4","6","6","5"],List).
Получилось так,но это не то что мне нужно,подскажите как сделать именно по заданию? Что бы был один список и из него удалить все элементы равные последнему и посчитать длину списка?

Добавлено через 5 часов 5 минут
ПОлучилось такой код сделать,но все равно не пойму как реализовать удаление элемента и потом выведение суммы списка
Prolog
1
2
3
4
5
6
7
8
9
10
11
DOMAINS
list = integer*
PREDICATES
member(integer, list)
CLAUSES
member(X,[X|_]):-write("yes"),!.
member(X,[]):-write("no"),!.
member(X,[_|L]) :- member(X, L).
GOAL
L=[1,2,3,4], write(L),nl, write("X="),readint(X),
member(X, L),nl.
Ответ:
Сообщение от Vovcik0
у меня visual prolog,это не такой код.
На самом деле не так уж много нужно переделать
1) опишите предикаты
2) замените is на =
Вопрос: Удалить элементы равные последнему и посчитать сумму оставшегося списка

Подскажете как добавить рекурсию, так чтобы удалять элементы равные последнему и посчитать сумму оставшегося списка?

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DOMAINS
list = integer*
PREDICATES
member(integer, list)
nondeterm del(integer,list,list)
CLAUSES
member(X,[X|L]):-!.
member(X,[_|L]):-member(X,L).
del(X,[X|L],L):-!.
del(X,[X|L],[X|L1]):-del(X, L,L1).
 
GOAL
X=4,
L=[4,1,4,3,4],member(4,L),
del(X,L,L1).
Добавлено через 5 часов 13 минут
Я тут немного не понял задание, нужно подсчитать количество элементов оставшегося списка, а вот моя программа удаляет только первый элемент списка.
Ответ: arlat, Сказали не правильно внесли свои коррективый,теперь не пойму,в чем ошибка
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
domains
int=integer
intl=int*
 
predicates
nondeterm last(intl,int)
nondeterm del(intl,int,intl)
nondeterm dlina(intl,int)
nondeterm task(intl,int)
 
clauses
last([X],X):- !.
last([_|R],X) :-last(R,X).
 
del([],_,[]).
del([X|T],X,R) :- del(T,X,R).
del([Y|T],X,[Y|R]) :- X<>Y, del(T,X,R).
 
dlina([],0).
dlina([H|T],S) :- dlina(T,SS), S=SS+H.
 
task(X,S) :- last(X,L), del(X,L,XX), dlina(XX,S).
goal
X=4, S=[4,1,4,3,4], del(S,X,R),task(X,L),dlina(XX,S).
Вопрос: Дана последовательность из 100 чисел. Удалить элементы равные максимальному значению. Вставить значение К межд

Дана последовательность из 100 чисел. Удалить элементы равные максимальному значению. Вставить значение К между соседними элементами, имеющими отрицательные значения.
Ответ:
Сообщение от Суренчик
Дана последовательность
Что за последовательность?
А ещё „удалить“ и „вставить“!
Да и, не плохо бы, указать IDE…
Вопрос: В списке удалить элементы равные полусумме своих соседей

Дана задача "Список из n целых чисел a1,a2,...,an, Удалить элементы равные полусумме своих соседей в исходном списке". Подскажите каким образом это сделать удобнее... можно даже наглядно разъяснить. Спасибо.
Ответ: значит надо заменить цикл обработки листа на
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
list* current = phead->next; 
while (current->next)
{
    if (current->value == (current->prev->value + current->next->value)/2) {
        current->prev->next = current->next;
        current->next->prev = current->prev;
        list* delete_me = current;
        current = current->next;
        delete_me = nullptr;
    } else {
        current = current->next;
    }
}
Вопрос: Каждый член, начиная с четвертого, равен последней цифре суммы трех предыдущих. Найти n-ый элемент

.В последовательности (1 2 3 , , , ..., n) a каждый член, начиная с четвертого, равен последней цифре суммы трех предыдущих. Найти n-ый элемент последовательности.
Детали реализации: при реализации решения массивы, множества и строки использовать нельзя
Ответ: нету времени читать, на инженерную графику всё время убила, а завтра сдавать уже надо
Вопрос: Найти максимальный элемент массива и посчитать сумму элементов стоящих после него

Дано задание: найти максимальный элемент массива и посчитать сумму элементов стоящих после него. Алгоритм такой: идем по массиву, проверяем, если элемент больше максимального - делаем этот элемент максимальным и обнуляем сумму. В ином случае - добавляем к сумме этот элемент. Всё вроде бы норм. Но тут появляются отрицательные числа. Они не хотят отниматься. Они либо складываются, либо ничего не делают. Я не знаю в чем тут ошибка. Решил добавить проверку на отрицательное число. Что бы в случае чего отнимало. Но оно не работает. Возможно ошибка в старших битах. Мол если число меньше 0 то нужно ставить старший бит в 1. А он не ставиться. В общем я без понятия. Вопрос: как сложить отрицательное число, что бы исходное уменьшилось, а не увеличилось
Assembler
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
49
50
51
52
53
54
55
56
57
include 'emu8086.inc' 
data segment
len equ 10
mas db 1,0,9,8,0,7,8,0,-50,2
rez db 0
max db 0
sum db 0
ends
 
stack segment
    dw   128  dup(0)
ends
 
code segment
start:
mov ax,@data
mov ds,ax
mov cx,len  
xor ax,ax
xor bx,bx
xor si,si       
jcxz    exit
mov al,max  
cycl:
cmp mas[si], al
jl  m1   
mov bl,0
mov al, mas[si] 
m1:
inc si
test mas[si],0x80
js negative
add bl,mas[si]
jmp skipneg
negative: 
sub bl, mas[si]
skipneg:
loop cycl   
mov max,al
mov sum, bl
mov ah,0      
PRINT "Max element is "
call Print_Num_UNS    
PRINTN
mov ah,bh
mov al,bl
PRINT "SUM IS "
call Print_Num
exit:     
 
mov ax,4c00h
int 21h    
 
ends
DEFINE_PRINT_NUM_UNS 
DEFINE_PRINT_NUM
end start
Ответ: Спасибо, учту

Добавлено через 19 секунд
Спасибо большое
Вопрос: В матрице (m x n) все элементы, равные единице, заменить суммой положительных элементов той строки

В матрице (m x n) все элементы, равные единице, заменить суммой положительных элементов той строки, где встретилась первая единица.
Ответ: С этой
Вопрос: В списке определить число элементов, равных последнему

Добрый вечер. Написала код на прологе к заданию "В списке определить число елементов, равных последнему". Почемуто компилятор ругается на начало на домен.
Код задачи:
Prolog
1
2
3
4
5
6
7
8
DOMAINS
int=Integer
list=int*
PREDICATES
Print_last(list).
Print_last(L):-conc(L,[H|_]),write(H),nl.
GOAL
Print_last([1,2,3,4]).
Ошибки которые выдает пролог:
Compiling the file:
C:\Program Files\Strawberry Prolog\Programs\Fractals.pro
Error 15: The operator int is a prefix but what is expected here is something like an infix operator or a full stop. (line 5, before the first clause)
Error 16: Instead of variable what is expected here is something like an infix operator or a full stop. (line 8, after clause 0)
2 errors, 0 warnings.
Такая же ситуация и в коде семейное дерево
Prolog
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
код:DOMAINS
s=symbol*
PREDICATES
nondeterm man(symbol*)
nondeterm woman(symbol*)
nondeterm parent(symbol,symbol*)
nondeterm father(symbol,symbol*)
nondeterm mother(symbol,symbol*)
nondeterm child(symbol,symbol*)
nondeterm brother(symbol,symbol*)
nondeterm sister(symbol,symbol*)
nondeterm vnuk(symbol,symbol*)
nondeterm grandmother(symbol,symbol*)
nondeterm grandfather(symbol,symbol*)
nondeterm parent_parent(symbol,symbol*)
nondeterm ancestor(symbol,symbol*)
CLAUSES
 man("Alla").
 man("Vita").
 man("Yra").
 man("Yulia").
 man("Vladimir").
 woman("Valy").
 woman("Lida").
 woman("Tany").
 parent("Anna","Vladimir").
 parent("Yulia","Alla").
 parent("Yulia","Vita").
 parent("Lida","Valy").
 parent("Lida","Vita").
 parent("Vladimir","Tany").
 parent("Vita","Yra").
 parent("Vita","Luba").
 parent("Tany","Yra").
 mother(X,Y):-parent(X,Y),woman(X).
 father(X,Y):-parent(X,Y),man(X).
 child(Y,X) :-parent(X,Y).
 brother(X,Y):-parent(Z,X),parent(Z,Y),man(X).
 sister(X,Y) :-parent(Z,X),parent(Z,Y),woman(X). 
 grandmother(X,Y):-parent_parent(X,Y),woman(X).
 grandfather(X,Y):-parent_parent(X,Y),man(X).
 vnuk(X,Z) :-child(X,Y),child(Y,Z).
 parent_parent(X,Z):-parent(X,Y),parent(Y,Z).
 ancestor(X,Z) :-parent(X,Z).
 ancestor(X,Z) :-parent(X,Y),ancestor(Y,Z).
 Goal: mother(X,"Anna").
ошибка:
Error 16: Instead of the atom s what is expected here is something like an infix operator or a full stop. (line 18, before the first clause).
Я уже вывернула весь интернет, не знаю как справиться с этими ошибками.
Ответ: Сдается мне, это Strawberry Prolog, нет?
Вопрос: Найти количество элементов ,равных 0 и сумму элементов массива, распол-ых после минимального элемента

Я написала программу с двумя элементами ввода массивов, но результат выводит не неверный и после выбора ручного ввода программа вылетает. Помогите пожалуйста
C
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
#include<time.h>
#include<math.h>
#include<conio.h>
#define N 500
#define MIN 80
int main(void)
{
setlocale (0, "rus");
int a[N],n,i, min=a[0], nummin=0, sum=0, nol=0, k;
srand((unsigned)time(NULL)); 
printf ( " Определите характер заполнения: 1- автоматическое, 2- вручную");
printf("\n");
scanf("%d",&k);
 
switch(k)
{ case 1:
{
printf("vvedite n - "); 
scanf("%d",&n);
for (i=0; i<n; i++)
{
a[i]=rand()%30-8;
printf("%4d", a[i]);
} break;}
case 2: 
{printf("Введите 5 элементов\n"); 
for(i=0; i<5; i++)
{
printf (" Введите элемент массива mas[i]");
scanf("%d", &a [i]);
} break;}
default:
    printf("номер введён неверно"); getch(); return 0;
 
}
 
 
for (i=0; i<n; i++)
{
 
if (a[i]==0)
{
nol=nol+1;
 
}}
printf("\n");
printf("Количество элементов равных нулю - %d",nol);
for (i=0; i<n; i++)
          if (min>a[i])
          {
              printf("\n");
              min=a[i];
             nummin=i;}
       
for (i=nummin+1; i<n; i++)  
   sum=sum+a[i];
 
   
 printf("min=%d\nsum=%d\n",min,sum);
 
getchar();
return 0; 
}
Ответ: В районе 28 строчки добавьте:
C
1
n=5;
Вопрос: Определить сумму модулей элементов, расположенных после первого элемента равного нулю

Написать программу, которая для целочисленного массива из n элементов определяет сумму модулей элементов, расположенных после первого элемента равного нулю. Написать описательные тесты к этой программе( например, в массиве нулевой элемент стоит последним).
Ответ: Nukityaoooo, это не ответ. Если Вы начали изучать C# и Вам дали такое задание - значит Вы, как минимум, должны знать, как объявлять массив, как заполнять его данными, знаете циклы и поддерживаемые языком математические операции.

Код, набросанный на коленке за 2 минуты:

C#
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
// запрашиваем размер массива
Console.Write("Введите размер массива: ");
int size = int.Parse(Console.ReadLine());
 
// создали массив
int[] array = new int[size];
 
// ... тут заполнили его данными - это Вы сможете реализовать самостоятельно
 
// ищем первый элемент, равный нулю
int zeroIndex = -1;
for (int index = 0; index < size; ++index)
{
    if (array[index] == 0)
    {
        zeroIndex = index; break;
    }
}
 
if (zeroIndex != -1)
{
    // если элемент найден - считаем сумму модулей
    int absoluteSumm = 0;
    for (int index = zeroIndex + 1; index < size; ++index)
    {
        absoluteSumm += Math.Abs(array[index]);
    }
    Console.WriteLine("Сумма модулей элементов после первого нулевого равна {0}.", absoluteSumm);
}
else
{
    // если не найден - ну упс
    Console.WriteLine("В массиве отсутствует элемент, равный нулю; сумма равна 0.");
}
Описательные тесты (как я себе это представляю) должны представлять из себя что-то типа такого:

"Если в массиве отсутствует нулевой элемент, сумма должна равняться нулю."
"Если нулевой элемент является последним, сумма должна равняться нулю." ну и т. д.