Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 02.12.2015
Сообщений: 8
1

Программа со вспомогательными функциями

02.12.2015, 10:42. Показов 589. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Требуется составить программу, используя вспомогательные функции.

Определите функцию (f s), которая вычисляет список (m1 m2 m3), состоящий из трех наибольших элементов числового списка s: m1>=m2>=m3. Исходный список содержит не менее трех элементов.

Заранее благодарен
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2015, 10:42
Ответы с готовыми решениями:

Программа с функциями с++
помогите не знаю почему не работает, может что не правильно #include "stdafx.h" #include...

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

Программа с функциями
Дано N десятков целых чисел. Определить, сколько из них могут составлять геометрическую прогрессию....

Представить многочлен n-й степени в каноническом виде не пользуясь вспомогательными массивами
Многочлен n-й степени задан следующим образом: c0 · (x − c1)· · ·(x − cn), где ci – целые...

3
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
02.12.2015, 11:45 2
А зачем здесь вспомогательные функции? За один проход:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun 3-max (lst &optional (m1 nil) (m2 nil) (m3 nil))
  (cond ((null lst) (list m1 m2 m3))
        ((null m1) (3-max (cdr lst) (car lst) m2 m3))
        ((> (car lst) m1) (3-max (cdr lst) (car lst) m1 m2))
        ((null m2) (3-max (cdr lst) m1 (car lst) m3))
        ((> (car lst) m2) (3-max (cdr lst) m1 (car lst) m2))
        ((null m3) (3-max (cdr lst) m1 m2 (car lst)))
        ((> (car lst) m3) (3-max (cdr lst) m1 m2 (car lst)))
        (t (3-max (cdr lst) m1 m2 m3))))   
 
==> 3-max
 
(3-max '(1 2 3 -3 2 5 2))
 
==> (5 3 2)
1
0 / 0 / 0
Регистрация: 02.12.2015
Сообщений: 8
02.12.2015, 11:59  [ТС] 3
Спасибо! Работает!
А вот как? Объясните пожалуйста
А именно, что, кому и куда передает?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
02.12.2015, 14:46 4
Проходим по списку, и каждый элемент сравниваем с текущими значениями m1, m2 и m3. Возможны случаи:

1) оч.эл > m1. В этом случае рекурсивно вызываем функцию, присвоив: m1=оч.эл, m2=m1 m3=m2
2) оч.эл > m2 но меньше m1. В этом случае рекурсивно вызываем функцию, присвоив: m2=оч.эл m3=m2
3) оч.эл > m3 но меньше m2. В этом случае рекурсивно вызываем функцию, присвоив: m3=оч.эл
4) оч.эл > m3 - пропускаем оч.эл.

Есть тонкость: первоначально m1=m2=m3=nil. Поэтому первые три ветви "удваиваются":

1a) Если m1=nil -> вызов с параметрами m1=оч.эл m2=m3=nil
1б) Если m1/=nil -> см. п.1
1
02.12.2015, 14:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2015, 14:46
Помогаю со студенческими работами здесь

Программа с перегруженными функциями
вывести на экран линии в 50 символов ‘#’. Что такое перегруженные функции знаю,но как реализовать...

Программа с API-функциями
Нужна программа в качестве лабки, на свободную тему, где бы использовались апи функции, минимум 10...

Программа на Python с классами и функциями
Никак не могу написать эту программу, второй день мучаюсь... Преподаватель не объяснил, как это...

Не работает программа с шаблонными функциями
Дана целочисленная прямоугольная матрица . Напишите программу, определяющую величины: 1)...


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

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