Форум программистов, компьютерный форум, киберфорум
Erlang, OTP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 27.02.2021
Сообщений: 89

Подсчитать количество положительных элементов в очереди

03.01.2023, 18:57. Показов 1424. Ответов 3

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

Prolog
1
2
3
4
5
6
7
%%% функция преобразования(потребления) элемента
%% Найти количество положительных элементов
num_poz([],_) -> 0;
num_poz([H|T],N) when H > 0 -> N1 = unbound, num_poz(T, N1), N=N1+1.
num_poz([H|T],N) when H=<0 -> num_poz(T, N).
 
consume(X)->{num_poz(X)}.
Вот функция в полном коде. Задание было такое: реализовать модель системы производителей потребителей. Взаимодействие через общий буфер с данными, в который производители кладут значение (числовые списки), а потребители забирают и производят операцию потребление (преобразование данных). Каждое действие над общим буфером выводится на экран
консоли.

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
-module(lr6).
-compile(nowarn_export_all).
-compile(export_all).
 
%%% процесс организующий общий буфер
%% Очередь
bufer(Buf)->
  io:format("Buffer      = ~w~n",[Buf]),
  receive
    {get,Pid} when (length(Buf)>0) -> [H|T]=Buf, Pid!{item,H}, bufer(T);
    {put,Value} -> bufer(Buf ++ [Value]);
    {clear} -> bufer([]);
    {stop} -> ok
  end.
 
%%% процесс производителя
producer(Number_proc,0)-> io:format("[Producer ~w] finished ~n",[Number_proc]);
producer(Number_proc,Count_iter)->
  random:seed(Number_proc,Count_iter,0),
  Elem=[Number_proc|produce(4)], % произведенный элемент
  io:format("[Producer ~w] create ~w~n",[Number_proc,Elem]),
  base!{put,Elem},
  producer(Number_proc,Count_iter-1).
 
%%% генерировать числовой список
produce(0)->[];
produce(X)->[5-random:uniform(10)|produce(X-1)].
 
%%% процесс потребителя
consumer(Number_proc,0)-> io:format("[Consumer ~w] finished ~n",[Number_proc]);
consumer(Number_proc,Count_iter)->
  base!{get,self()},
  receive
    {item,Elem} -> io:format("[Consumer ~w] consume ~w~n",[Number_proc,consume(Elem)]),
      consumer(Number_proc,Count_iter-1);
    {stop}->ok
  end.
 
%%% функция преобразования(потребления) элемента
%% Найти количество положительных элементов
num_poz([],_) -> 0;
num_poz([H|T],N) when H > 0 -> N1 = unbound, num_poz(T, N1), N=N1+1.
num_poz([H|T],N) when H=<0 -> num_poz(T, N).
 
consume(X)->{num_poz(X)}.
 
start() ->
  %% 1.создание процесса буфера
  case whereis(base) of
    undefined -> register(base,spawn(lr6, bufer,[[]]));
    _  -> base!{clear}
  end,
  io:format("Buffer initialized, all right!~n"),
  %% 2. создание процессов производителей
  [spawn(lr6,producer,[X,5]) || X <- [1,2,3,4,5]],
  %% 3. создание процессов потребителей
  [spawn(lr6,consumer,[X,5]) || X <- [1,2,3,4,5]],
  io:format("Init finished....~n~n").
 
stop() ->
  base!{stop}.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.01.2023, 18:57
Ответы с готовыми решениями:

Очереди: подсчитать количество элементов, удалить из очереди второй элемент, если такой есть
Описать программу, которая создает очередь Q, подсчитывает количество элементов в ней, а затем удаляет из очереди второй элемент, если...

В одномерном массиве подсчитать подсчитать количество положительных элементов
3. В одномерном массиве подсчитать подсчитать количество положительных элементов

Подсчитать количество различных элементов в очереди и вывести их на экран
1. Подсчитать число различных элементов в очереди и вывести их на экран 2. 3. На контрольной были эти задачи. Нужно их решить....

3
Модератор
 Аватар для Curry
5158 / 3482 / 536
Регистрация: 01.06.2013
Сообщений: 7,549
Записей в блоге: 9
04.01.2023, 00:06
Prolog
1
2
3
4
5
num_poz([],N) -> N;
num_poz([H|T],N) when H > 0 -> num_poz(T, N+1);
num_poz([_|T],N) -> num_poz(T, N).
 
num_poz(L) -> num_poz(L,0).
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,709
Записей в блоге: 14
04.01.2023, 08:52
Или простая (не хвостовая) рекурсия:

Prolog
1
2
3
4
num_pos([]) -> 0;
num_pos([H|T]) -> if H > 0 -> 1+num_pos(T);
                     true  -> num_pos(T)
                  end.
2
0 / 0 / 0
Регистрация: 27.02.2021
Сообщений: 89
04.01.2023, 12:30  [ТС]
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.01.2023, 12:30
Помогаю со студенческими работами здесь

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

Подсчитать количество нулевых, сумму и количество положительных и отрицательных элементов вектора
Дан Вещественный векторX(x0,x1,...x30). Подсчитать количество нулевых, сумму и количество положительных и отрицательных элементов...

Подсчитать количество положительных и количество отрицательных элементов целочисленного массива
Доброго времени суток)Есть у меня парочка задачек которые нужно написать в паскале.Очень нужна ваша помощь.буду очень благодарна) ...

В массиве X(n) подсчитать количество положительных k1 и количество отрицательных k2 элементов. Если k=|k1-k2|>1 , то изменить знаки стольких
В массиве X(n) подсчитать количество положительных k1 и количество отрицательных k2 элементов. Если k=|k1-k2|&gt;1 , то изменить знаки...

В массиве подсчитать количество положительных и количество отрицательных элементов и изменить знаки по заданному принципу.
В массиве x(n) подсчитать количество положительных k1 и количество отрица-тельных k2 элементов. Если k=|k1-k2|&gt;1 , то изменить знаки...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера 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 с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru