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

Прогноз погоды

21.12.2012, 00:49. Показов 1456. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем)
"l1 - список, элементами которого являются структуры, в которых хранятся дневные сводки температуры за месяц. Сформировать список l2, содержащий только те дни месяца, в которые температура была одинаковой.Например, 5-го и 26-го числа температура была 26 С"

Реализовал это дело через структуры. А сейчас вот попытался сделать то же самое через список подсписков, в каждом подсписке храню число месяца и температуру. И вот не могу понять как можно отловить сравнение температур, т.е найти те дни когда температура была одинаковой.
Подскажите пожалуйста...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.12.2012, 00:49
Ответы с готовыми решениями:

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

Прогноз погоды
Доброго времени суток! Пишу гаджет - средневзвешенный прогноз погоды с рейтингом доверия для каждого метео-портала. Уже пропарсил 2 сайта...

Прогноз погоды
Пишу телеграм-бота. Показывает погоду на данный момент. Как реализовать ежедневную рассылку прогноза погоды на сутки?

9
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2773 / 491
Регистрация: 28.04.2012
Сообщений: 8,760
21.12.2012, 10:41
Lisp
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
(defun report (date temperature)
  (list date temperature))
 
(defun report-date (report)
  (car report))
 
(defun report-temperature (report)
  (cadr report))
 
(defun find-same-temperature (reports)
  (let ((result nil))
    (dolist (group (group-by reports #'report-date :by #'report-temperature))
      (when (> (length (group-values group)) 1)
        (push group result)))
    result))
 
(defun group-by (list getter &key (by #'identity))
  (let ((groups nil))
    (dolist (item list)
      (setf groups
            (group-add (funcall by     item)
                       (funcall getter item)
                       groups)))
    groups))
 
(defun group-add (key value groups &key (test #'eql))
  (if (null groups)
      (list (group key value))
    (let* ((group (car groups))
           (rest  (cdr groups))
           (gkey  (group-key    group)))
      (if (funcall test key gkey)
          (cons (group-add-value group value) rest)
          (cons group (group-add key value rest :test test))))))
 
(defun group (key &rest values)
  (cons key values))
 
(defun group-key (group)
  (car group))
 
(defun group-values (group)
  (cdr group))
 
(defun group-add-value (group value)
  (list* (group-key group) value (group-values group)))
 
(defun test ()
  (let ((reports
         (list (report 1 21)
               (report 2 12)
               (report 3 33)
               (report 4 33)
               (report 5 21)
               (report 6 16)
               (report 7 21)
               (report 8 18)
               (report 9 19))))
    (find-same-temperature reports)))
 
(test)
; ((33 4 3) (21 7 5 1))
0
0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 80
21.12.2012, 10:55  [ТС]
Ох ты... круто так то) а просто через рекурсию это как нибудь можно реализовать?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
21.12.2012, 12:31
А вот так, мне кажется, проще:

Lisp
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
;; Список (дата температура)
 
(setq *tlist* '((1 15) (2 17) (3 15) (4 21) (5 19) (6 17) (7 17) (8 21) (9 20)))
 
;; сортировка списка по температуре:
 
(defun tsort (x) 
   (COND ((NULL x) NIL) 
         (T (APPEND (tsort (remove-if (FUNCTION (LAMBDA (z) (> (cadr z) (CAdaR x)))) (CDR x))) 
                    (LIST (CAR x)) 
                    (tsort (remove-if (FUNCTION (LAMBDA (z) (<= (cadr z) (CAdaR x)))) (CDR x)))))))
 
==> tsort
 
;; Формирование нужного списка дат:
 
(defun mklt (lst)
  (let ((res nil) (c nil) (p nil) (tmp nil))
      (dolist (i lst (if (> (length tmp) 1) (append (list tmp) res) res))
        (setq c (cadr i))
        (if (eq c p)
            (setq tmp (cons (car i) tmp))
            (progn
               (when (> (length tmp) 1) (setq res (append (list tmp) res)))
               (setq tmp (list (car i)))))
        (setq p c)))) 
 
;; А теперь решение получается совсем просто:
 
(defun task (tlist)
   (mklt (tsort tlist)))
 
==> task
 
(task *tlist*)
 
==> ((4 8) (2 6 7) (1 3))
1
 Аватар для _sg
4706 / 4401 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
21.12.2012, 22:34
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun same-celsius (w)
 (mapcar
  #'(lambda (z) (mapcar #'car z))
  (remove-if-not
   #'cdr (mapcar
          #'(lambda (a) (remove-if-not
                         #'(lambda (e) (eq a e))
                         w :key #'cadr))
          (remove-duplicates (mapcar #'cadr w))))))
 
> (same-celsius '((1 15) (2 17) (3 15) (4 21) (5 19) (6 17) (7 17)))
((1 3) (2 6 7))
1
0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 80
22.12.2012, 21:32  [ТС]
Спасибо всем, помогли)
Catstail, а вы на HomeLisp пишете, да?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
22.12.2012, 21:48
Цитата Сообщение от dow Посмотреть сообщение
Catstail, а вы на HomeLisp пишете, да?
- в основном... Хотя, при необходимости, под руками LispWorks, XLisp и старенький muLisp.
0
0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 80
22.12.2012, 22:52  [ТС]
ааа.. просто я в elisp не встречал еще конструкции remove-if.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
22.12.2012, 23:02
Цитата Сообщение от dow Посмотреть сообщение
remove-if.
- а она на Лиспе и написана:

Lisp
1
2
3
4
5
6
7
8
9
(DEFUN REMOVE-IH (p lst &KEY (count NIL) (from-end NIL)) 
    (COND (from-end (reverse (remove-if p (reverse lst) :count count :from-end NIL)))
          (T (COND ((NULL count) 
                    (COND ((NULL lst) NIL) 
                          ((FUNCALL p (CAR lst)) (remove-if p (CDR lst))) 
                          (T (CONS (CAR lst) (remove-if p (CDR lst)))))) 
                    (T (COND ((NULL lst) NIL)
                             ((= count 0) lst) ((FUNCALL p (CAR lst)) (remove-if p (CDR lst) :count (SUB1 count)))
                             (T (CONS (CAR lst) (remove-if p (CDR lst) :count count)))))))))
0
0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 80
23.12.2012, 18:47  [ТС]
Понятно, спасибо

Добавлено через 7 часов 34 минуты
Вот опять вопрос
Препод сказал, что решение должно быть без использования функционала. А если быть точнее, то решить задачу надо 2 способами:
1) без использования функционала, чисто с пом. рекурсии
2) с использованием функционала
С функционалом то, понятное дело, теперь вопросов нет)
Помогите пожалуйста с первым вариантом, с реализацией рекурсии
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.12.2012, 18:47
Помогаю со студенческими работами здесь

Прогноз погоды
Добрый день.Только познаю мир Delphi.Никак не могу разобраться с задачей: по клику на button или просто через label выводить на экран...

Прогноз погоды
Составить приложение которое по введенному прошедшему дню календаря показывает прогноз погоды. Не знаю с чего начать даже.

Виджет прогноз погоды
8. Виджет прогноз погоды. Размещен на сайте. Обращается к любому серверу погоды, снимает показания в городе по геолокации или по выбору...

Программный прогноз погоды
Собственно препод дал задание на курсовую: написать программу симулирующую/моделирующую прогноз погоды, т.е. у нас есть входящие значения...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru