Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите с 4 задачами для зачета, препод не принял 4 задачи на Haskell 
:(
    Опции темы
Lunt
Дата 11.5.2012, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 11.5.2012

Репутация: нет
Всего: нет



привет всем, помогите с задачей, я пока что 0 в хаскеле и поэтому не знаю как решить.
помогите пожалуста, мне надо 4 задачи исправить...
1 сделал, спс народ

2.

4-30: дублирование кода, перепишите через 4-31

{4-30}
 Напишите функцию \prg{dPdX :: Poly -> Poly}, выполняющую дифференцирование многочлена.

Мое решение:
[
Код

color=red]\begin{code}
dPdX :: Poly -> Poly
dPdX (MkPoly (x:xs)) = MkPoly (f xs 1)
   where  f []     n = []
          f (y:ys) n = (y*n):(f ys (n+1))
\end{code}[/color]


{4-31}
 Напишите функцию \prg{dNPdXN :: Poly -> Int -> Poly}, вычисляющую производную \prg{dNPdXN p $n$} заданного порядка $n \geq 0$ от полинома \prg{p}.

Мое решение:
Код

\begin{code}
fact' :: Float -> Float -> [Float]
fact' poly n = (product [(poly - m)|m<-[0..(n-1)]]):(fact' (poly + 1) n)

dNPdXN :: Poly -> Int -> Poly
dNPdXN poly 0 = poly
dNPdXN (MkPoly xs) n = MkPoly (zipWith (*) (fact' poly poly) (drop n xs))
               where poly = fromIntegral n
\end{code}


3.

4-50: не определен случай, когда список переменных пуст

{4-50}
 Пусть задано арифметическое выражение и означивание всех переменных из выражения некими значениями.  Означивание задается в виде списка пар <<переменная~--- значение>>, например: \prg{[("p"{}, -1.7), ("q"{}, 3.14)] :: [(String,Float)]}.

Напишите функцию
\begin{center}
  \prg{evalEV :: Expr -> [(String,Float)] -> Float},
\end{center}
которая вычисляет значение арифметического выражения при заданных значениях переменных.

Мое решение:
Код

[color=red]\begin{code}
evalEV :: Expr -> [(String,Float)] -> Float
evalEV (Add e1 e2) xs = (evalEV e1 xs) + (evalEV e2 xs)
evalEV (Mul e1 e2) xs = (evalEV e1 xs) * (evalEV e2 xs)
evalEV (ConstF c)  xs = c
evalEV (VarF   e)  xs = find e xs
     where find p ((a,b):ys) = if (a==p) then b else find p ys
\end{code}[/color]


4.

4-54: перепишите через абстракцию списков


{4-54}
 Определите функцию
\begin{center}
   \prg{findContacts :: Contacts -> Name -> [(Phone, Email)]},
\end{center}
которая из списка контактов по имени персоны разыскивает все телефоны и адреса персоны.

Мое решение:
Код

[color=red]\begin{code}
findContacts :: Contacts -> Name -> [(Phone, Email)]
findContacts xs n = nub (map mailPhone (filter g xs))
   where g (s,_,_) = s == n
         mailPhone (_,p,e) = (p,e)
\end{code}[/color]


%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%
\subsection{\prg{(Tree a)}: деревья поиска}

Это сообщение отредактировал(а) Lunt - 12.5.2012, 10:24
PM MAIL   Вверх
dlebedev
Дата 12.5.2012, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 24.4.2012

Репутация: нет
Всего: нет



1.
Код

hanoiSteps :: Int -> [(Int, Int)]
hanoiSteps n | n < 0 = []
             | othewise = hanoiSteps' n 1 3

hanoiSteps' 1 a n = [(a, n)]
hanoiSteps' i a n = (hanoiSteps' (i-1) a b)++[(a, n)]++(hanoiSteps' (i-1) b n)
                            where b = 6-a-n

Как-то так. При отрицательном n выдает пустой список. Можно выводить ошибку:
Код

hanoiSteps :: Int -> [(Int, Int)]
hanoiSteps n | n < 0 = error "Разрешено вводить только положительное число!"
             | othewise = hanoiSteps' n 1 3

hanoiSteps' 1 a n = [(a, n)]
hanoiSteps' i a n = (hanoiSteps' (i-1) a b)++[(a, n)]++(hanoiSteps' (i-1) b n)
                            where b = 6-a-n


Добавлено через 7 минут и 17 секунд
Дальше глаза ломать не стал. Потрудитесь хотя бы очистить текст от теховского форматирования. Читать же невозможно.
PM MAIL   Вверх
Lunt
Дата 12.5.2012, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 11.5.2012

Репутация: нет
Всего: нет



я выделил код программы красным, так что надеюсь теперь ты сможешь мне помоч
PM MAIL   Вверх
k0rvin
Дата 12.5.2012, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: нет
Всего: 5



Цитата(Lunt @ 12.5.2012,  08:02)
я выделил код программы красным, так что надеюсь теперь ты сможешь мне помоч

Нет, не выделил. \begin{code} -- это не код программы


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Lunt
Дата 12.5.2012, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 11.5.2012

Репутация: нет
Всего: нет



все исправил 1 задачу  но с остальными проблема, помогите пожайлусто

Это сообщение отредактировал(а) Lunt - 12.5.2012, 11:04
PM MAIL   Вверх
dlebedev
Дата 12.5.2012, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 24.4.2012

Репутация: нет
Всего: нет



Цитата(Lunt @  11.5.2012,  15:38 Найти цитируемый пост)
Напишите функцию \prg{dNPdXN :: Poly -> Int -> Poly}, вычисляющую производную \prg{dNPdXN p $n$} заданного порядка $n \geq 0$ от полинома \prg{p}.

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

dPdX :: Poly -> Poly
dPdX poly = dNPdXN poly 1

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

Добавлено через 11 минут и 6 секунд
3.
Код

evalEV :: Expr -> [(String,Float)] -> Float
evalEV (Add e1 e2) xs = (evalEV e1 xs) + (evalEV e2 xs)
evalEV (Mul e1 e2) xs = (evalEV e1 xs) * (evalEV e2 xs)
evalEV (ConstF c)  xs = c
evalEV (VarF   e)  xs | null xs = error "Задано неправильное выражение, либо неверный список переменных!"
                      | otherwise = find e xs
     where find p ((a,b):ys) = if (a==p) then b else find p ys


Как-то так, наверное. Вы задали рекурсивную функцию без условия корректного выхода из нее в случае, если условие рекурсии не будет выполнено.
PM MAIL   Вверх
dlebedev
Дата 12.5.2012, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 24.4.2012

Репутация: нет
Всего: нет



4.
Код

findContacts :: Contacts -> Name -> [(Phone, Email)]
findContacts xs n = nub [ (p,e) | (s,p,e) <- xs, s == n ]

Как-то так должно выглядеть, я думаю...
PM MAIL   Вверх
Lunt
Дата 12.5.2012, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 11.5.2012

Репутация: нет
Всего: нет



огромное спасибо, если чем то могу помочь или чтото сделать обращайся (програмирую на c++ c#) хаскель долг висит со 2 курса.... надеюсь теперь примет задачи.
PM MAIL   Вверх
k0rvin
Дата 17.5.2012, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: нет
Всего: 5



Блин, я прошу прощенья за оффтоп, но не уж-то так сложно было убрать TeX'овую разметку?


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума «Функциональные языки: общие вопросы»
Void
  • Пожалуйста, создавайте темы с содержательными названиями. Если у Вас вопрос по конкретному языку, укажите его в заголовке, например: «[Haskell] Как использовать монаду State».
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Функциональные языки: общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.