Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2012, 21:24   #1
dcPuFic
Пользователь
 
Регистрация: 02.10.2011
Сообщений: 25
По умолчанию Мова SCHEME

Кто-то шарит в Scheme?
А то помощь нужна,а в инете информации не найти(
dcPuFic вне форума Ответить с цитированием
Старый 16.12.2012, 22:06   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Как это не найти? А Вы искали? Гугл выдаёт кучу ссылок как на русском, так и на английском языках. Из популярного: SICP, HtDP (лучше второго издания, но там не совсем Scheme и не совсем о Scheme)
netrino вне форума Ответить с цитированием
Старый 16.12.2012, 22:25   #3
dcPuFic
Пользователь
 
Регистрация: 02.10.2011
Сообщений: 25
По умолчанию

То что мне нужно,я не могу найти.
У меня задание:
найти суму двух наименьших за значением елементов вектора ,в диапазоне(-17,23)
Код HTML:
define w (vector (- (random 40) 17) (- (random 40) 17) (- (random 40) 17) ))
  w

(cond
  ((and (< (vector-ref w  0) (vector-ref w 1)) (< (vector-ref w 0) (vector-ref w 2))) '1мин)
  ((and (< (vector-ref w 1) (vector-ref w 0)) (< (vector-ref w 1) (vector-ref w 2))) '2мин)
  ((and (< (vector-ref w 2) (vector-ref w 1)) (< (vector-ref w 2) (vector-ref w 0))) '3мин)
  (else 'равные))
этот код ищет минимальное значение,но я не знаю как найти суму двух наименьших...
dcPuFic вне форума Ответить с цитированием
Старый 16.12.2012, 23:00   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Ваш код ищет значение только для трёхэлементного вектора, этого точно достаточно? Если в векторе будет больше/меньше трёх элементов, код работать не будет. Чтобы получить значение минимального элемнта, в cond вместо символов '1мин и т.д., нужно было возвращать (vector-ref w 0), (vector-ref w 1) и т.д. Также, подозреваю, что нужно было использовать какой-нибудь из методов итерации по вектору, а не тупо сравнивать вручную три его элемента, таким образом можно будет искать минимальный/максимальный элемент на векторах любого размера. Например, здесь можно использовать цикл do или рекурсию.
Код:
(define (find-min-max v)
  (do ((i 1 (+ i 1))
       (minim (vector-ref v 0))
       (maxim (vector-ref v 0)))
      ((>= i (vector-length v))
       (values minim maxim))
    (let ((element (vector-ref v i)))
      (cond
        ((> minim element) (set! minim element))
        ((< maxim element) (set! maxim element))))))
 
(define v (vector (- (random 40) 17)
                  (- (random 40) 17)
                  (- (random 40) 17)
                  (- (random 40) 17)))
 
(display v) (newline)
 
(call-with-values (lambda () (find-min-max v))
                  (lambda (minim maxim)
                    (display minim) (newline) 
                    (display maxim) (newline)
                    (display "Sum is: ")
                    (display (+ minim maxim)) (newline)))
netrino вне форума Ответить с цитированием
Старый 16.12.2012, 23:50   #5
dcPuFic
Пользователь
 
Регистрация: 02.10.2011
Сообщений: 25
По умолчанию

Понимаете,проблема в том,что у нас было всего 4 занятия...и поэтому я не сильно его знаю)
Спасибо ВАМ большое за код,но он ищет суму минимального и максимального,а мне нужно найти суму двух минимальных(
dcPuFic вне форума Ответить с цитированием
Старый 17.12.2012, 00:31   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Я привёл исчерпывающий, с моей точки зрения, пример прохода по вектору с поиском какого-либо элемента, непонятные конструкции подробно описаны в интернете с примерами их применения, так что Вам не должно составить труда разобраться в этой программе и изменить её под свои нужды.
Ну или можете использовать эту функцию (написана под Racket):
Код:
(define (find-2-min vec)
  (let* ((minimal-1 (sequence-fold min (vector-ref vec 0) vec))
         (vec-1 (vector-filter-not (curry eq? minimal-1) vec))
         (minimal-2 (sequence-fold min (vector-ref vec-1 0) vec-1)))
    (values minimal-1 minimal-2)))
Тем не менее, не могу гарантировать, что она запуститься на Вашем интерпретаторе Scheme и что её примет преподаватель, потому, всё же, рекомендую направить свои усилия на самостоятельное написание программы.
netrino вне форума Ответить с цитированием
Старый 17.12.2012, 00:47   #7
dcPuFic
Пользователь
 
Регистрация: 02.10.2011
Сообщений: 25
По умолчанию

Спасибо большое,я переработал немного Ваш код,и сделал)
dcPuFic вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структуры. Мова С. Виктория Кусяк Общие вопросы C/C++ 2 22.12.2011 15:12
мова С. Матрица Виктория Кусяк Помощь студентам 1 16.12.2011 17:33
мова С. Матрица Виктория Кусяк Помощь студентам 1 12.12.2011 18:55
мова С Виктория Кусяк Помощь студентам 4 13.11.2011 20:57
статья - Введение в Scheme. Часть 2. Pblog Обсуждение статей 0 19.08.2010 14:50