Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Alvin Seville
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
1

Как создать свою функцию, удаляющую элементы массива, удовлетворяющие предикату?

24.06.2017, 19:42. Показов 2532. Ответов 28
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как создать свою функцию, удаляющую элементы массива, удовлетворяющие предикату?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.06.2017, 19:42
Ответы с готовыми решениями:

Переставить элементы списка, удовлетворяющие некоторому предикату P, в начало списка
Можете помочь с заданием . Определите функцию (f s), которая в одноуровневом списке чисел s...

Как создать свою функцию?
Прошу прощения за тупой вопрос.. но в очередной раз столкнулся с "неприятными особенностями" языка...

Как создать свою функцию в SQL Server?
Kak sozdat' svou' function v SQL Server ?

Определить функцию, удаляющую из списка все элементы
Уважаемые знатоки, вопрос! Определить функцию, удаляющую из списка все элементы, являющиеся...

28
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
24.06.2017, 19:47 2
Если функция возвращает кастрированный массив , то так:
Объявить массив
Пройтись по первичному фор циклом и для каждого элемента вызывать предикат
В случае удовлетворения предикатом , добавлять элемент в новый массив , иначе нет.
1
Alvin Seville
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
24.06.2017, 19:53  [ТС] 3
Кодом можно?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,432
Записей в блоге: 8
24.06.2017, 20:35 4
Лучший ответ Сообщение было отмечено Volobuev Ilya как решение

Решение

Ну, скажем вот так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
function RemoveIf<T>(var a : array of T; predicate : T -> boolean) : array of T;
begin
  var L := new List<T>;
  foreach var v in a do if not predicate(v) then L.Add(v); // не стал пользоваться Where, ты ж хочешь свою написать
  result := L.ToArray;
end;
 
begin
  var a := arr(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
  var s := RemoveIf(a, v -> Odd(v));
  s.Println;
end.
0
Alvin Seville
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
24.06.2017, 20:39  [ТС] 5
Скажем, есть предикат x -> x = 10, то как Pascal поймет что надо вместо x подставлять?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,432
Записей в блоге: 8
24.06.2017, 21:05 6
Посмотри, как вызывается предикат. Что там еще можно подставить, кроме как единственный переданный параметр?
0
Alvin Seville
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
25.06.2017, 18:07  [ТС] 7
x -> x+1
() -> 1
(x,y) -> x*y
(x,y: integer) -> x*y
(x,y: integer): integer -> x*y
(x: integer; y: integer) -> x*y
(x,y: integer) -> begin Result := x*y end
(x,y: integer) -> begin Result := x*y end
function -> 1
function (x,y) -> x*y
function (x,y: integer) -> x*y
function (x,y: integer): integer -> x*y
function (x,y: integer): integer -> begin Result := x*y end
procedure -> begin write(1); write(2) end
procedure (x: integer; s: string)-> begin write(x,s) end


Все что нашел в справке.
0
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
29.06.2017, 11:00 8
И что , что ты это нашел? Тебе сказали посмотреть чтобы ты понял , а не скопировал текст и извлек из этого ничего.
0
Соколиный глаз
29.06.2017, 11:30  [ТС]
  #9

Не по теме:

Подсматривать в подсказки - полезно, ничего плохого. Со временем запоминается. А делать необоснованные выводы сходу - не признак высокого интеллекта. Не сочтите, за оскорбление лично Вас. Я говорю в общем, Вам стоит задуматься.

0
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
29.06.2017, 12:37 10
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
есть предикат x -> x = 10, то как Pascal поймет что надо вместо x подставлять?
Pascal уж точно , как язык ничего понимать не будет. Это выражение - лямбда , представляющая предикат - те , в зависимости от принимаемого объекта , возвращающая булево значение.
Лямбда , компилятором трансформируется в самую обычную функцию , поэтому ничхеро под x подставлять не прийдется - это будет просто параметр при вызове.

Добавлено через 2 минуты
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
Подсматривать в подсказки - полезно, ничего плохого.
Найди строку где я корю Уас за подсматривание в подсказки . Я лишь пытаюсь донести , что копирование текста из справки не создаст знаний или даже их видимости.

Добавлено через 5 минут
Цитата Сообщение от volvo Посмотреть сообщение
predicate : T -> boolean
Можно еще через делегат System - Func :
Pascal
1
predicate:System.Func<T,boolean>
0
Alvin Seville
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
29.06.2017, 12:53  [ТС] 11
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
что копирование текста из справки не создаст знаний или даже их видимости

Не по теме:

То, что я посмотрел сюда - факт, но то, что бездумно скопировал - нет.



Добавлено через 47 секунд
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Можно еще через делегат System - Func :
PascalВыделить код
1
predicate:System.Func<T,boolean>
Зачем усложнять?
0
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
29.06.2017, 15:03 12
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
но то, что бездумно скопировал - нет.
Если бы не бездумно , то таких сообщений типо : "нашел в справке и что дальше - то?" , не было бы.
0
Alvin Seville
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
29.06.2017, 15:05  [ТС] 13
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Если бы небездумно , то молча бы понял и не оставил вопросительного намека.

Не по теме:

Я не намекал. Я говорил тебе все здесь прямо.

0
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
29.06.2017, 15:06 14
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
Зачем усложнять?
Это просто вариант . А в данном случае использование "родного" делегата для .Net вовсе не усложнение.
0
Alvin Seville
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
29.06.2017, 15:09  [ТС] 15
Это просто вариант . А в данном случае использование "родного" делегата для .Net вовсе не усложнение.
По возможности лучше пользоваться минимумом возможностей языка, но без ущерба коду. Тут можно и без делегата, никакого ущерба коду нет -> можно и так использовать. А твой вариант - тоже имеет место быть. Я лишь высказал свое мнение.
0
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
29.06.2017, 15:10 16
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
Я говорил тебе все здесь прямо.

Не по теме:


Не слишком правильная фраза (Про намек) , я отредактировал сообщение , но ты его уже процитировал.
Постановка и значение предложения именно наталкивают на фразу "нашел в справке , что дальше".

0
Соколиный глаз
29.06.2017, 15:14  [ТС]
  #17

Не по теме:

Посмотреть и бездумно скопировать и выдать за тот код, который ты осознал не все равно, что посмотреть, осознать, понять и показать код.

0
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
29.06.2017, 15:14 18
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
По возможности лучше пользоваться минимумом возможностей языка
Бред. Тулить горбатого к стенке - да , не нужно применять то , что с трудом применимо к данному. Но как раз же выражение T -> boolean = сахарок pascal , который все равно соответствует делегату Func<T,boolean> .(К тому что сахар языка больше вписывается в его эдакое "возможности" , чем возможности фреймворка)
0
Соколиный глаз
29.06.2017, 15:18  [ТС]
  #19

Не по теме:

Если ты можешь пользоваться минимумом языка для непростых программ, то освоить что-то готовое - не так уж и сложно. Если ты можешь писать с этим минимумом - пиши, будет меньше ошибок, чем если бы ты понапихал всякого синтаксического сахара, не очень хорошо разбираясь в нем.

0
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
29.06.2017, 15:31 20

Не по теме:


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



Добавлено через 1 минуту
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
Если ты можешь писать с этим минимумом - пиши, будет меньше ошибок, чем если бы ты понапихал всякого синтаксического сахара, не очень хорошо разбираясь в нем.

Не по теме:


Если системный делегат для тебя минимум , чего ж ты юзать его не умеешь?

0
29.06.2017, 15:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2017, 15:31
Помогаю со студенческими работами здесь

Описать функцию, удаляющую из списка элементы в определенной последовательности
Нужно описать функцию, удаляющую из списка элементы в определенной последовательности: сначала 2,...

Создать функцию , удаляющую из заданной строки все последовательности символов
создать функцию , удаляющую из заданной строки все последовательности символов ,находящиеся между...

Функции. Написать функцию, удаляющую элемент массива
Написать функцию, удаляющую элемент массива. Все элементы после него сдвигаются на один влево, а...

Определить функцию , удаляющую из списка все элементы, входящие в список ровно один раз
Здравствуйте!!!!Помогите,пожалуйста решить задачу.Трудновато с Лиспом((( 1)Определить функцию ,...


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

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