Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Haskell
Перезагрузить страницу Программа, считывающая два числа и возвращающая их сумму
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
She'sma She'sma вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.10.2010
Red face Программа, считывающая два числа и возвращающая их сумму - 09.11.2010, 21:13

Здравствуйте ещё раз) не могли бы Вы помочь со следующими заданиями?
1. Напишите следующие программы:
а) программа, считывающая два числа и возвращающая их сумму
б) программа, распечатывающая переданные в неё аргументы командной строки
в) программа, которая принимает в командной строке имя файла и распечатывает его на экране
г) программа, принимающая в командной строке число n и имя файла и выводящая на экран первые n строк файла (используйте функцию lines, разбивающую строку на список строк в символах конца строки, т.е. например lines"line1\nline2" вернет ["line1", "line2"]. Также полезна функция unlines, осуществляющая обратную операцию.
д) реализовать данную программу так, чтобы параметры функции считывались с клавиатуры. Функция min, по трём целым возвращающая наименьшее из них

min :: Integer -> Integer -> Integer -> Integer
min a b c = if ((a < b)&&(a < c)) then a else if ((a > c)&&(b > c)) then c else if ((b < a)&&(b < c)) then b else if ((a < b)&&(b > c)&&(a < c)) then a else if ((a < b)&&(b > c)&&(a > c)) then c else if ((b < a)&&(a > c)&&(b < c)) then b else if ((b < a)&&(a > c)&&(b > c)) then c else a

Заранее блгодарю!
Ответить с цитированием
  (#2 (permalink)) Старый
calabi-yau calabi-yau вне форума
Member
 
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 10 сообщениях
Регистрация: 28.09.2009
По умолчанию 10.11.2010, 12:42

[cpp]
import Control.Monad
import Control.Applicative

a = (+) <$> readLn <*> readLn

b = getArgs >>= print

c = do [path] <- getArgs
print =<< readFile path
`catch`
(\_ -> print "Error: file not found")

d = do [n, path] <- getArgs
show_n_lines (read n) =<< readFile path
`catch`
(\_ -> print "Error: file not found")
where
show_n_lines n = print . (take n) . lines

e = min3 <$> readVar "a: " <*>
readVar "b: " <*>
readVar "c: "
where
readVar n = do putStr n; readLn
[/cpp]

Цитата:
min :: Integer -> Integer -> Integer -> Integer
min a b c = if ((a < b)&&(a < c)) then a else if ((a > c)&&(b > c)) then c else if ((b < a)&&(b < c)) then b else if ((a < b)&&(b > c)&&(a < c)) then a else if ((a < b)&&(b > c)&&(a > c)) then c else if ((b < a)&&(a > c)&&(b < c)) then b else if ((b < a)&&(a > c)&&(b > c)) then c else a
Святой Йорген!


Don't fear the Monad
Ответить с цитированием
  (#3 (permalink)) Старый
ташанаша ташанаша вне форума
Member
 
Сообщений: 18
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.11.2011
По умолчанию 01.12.2011, 18:11

извините а не могли вы расписать что значит каждая строчка функция и слово а то я не понимаю)пожалуйста
Ответить с цитированием
  (#4 (permalink)) Старый
calabi-yau calabi-yau вне форума
Member
 
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 10 сообщениях
Регистрация: 28.09.2009
По умолчанию 02.12.2011, 16:30

может так будет понятнее (getArgs из модуля System.Environment, имена стандартных функций кликабельны):
haskell Код:
a = do a <- readLn
       b <- readLn
       return (a + b)
       -- (+) <$> readLn <*> readLn

b = do args <- getArgs
       print args
       -- getArgs >>= print

c = do [path] <- getArgs
       content <- readFile path
       print content

d = do [n, path] <- getArgs
       content <- readFile path
       print (take (read n) (lines content))
       
e = do a <- readVar "a: "
       b <- readVar "b: "
       c <- readVar "c: "
       return (min3 a b c)
   where
    readVar n = do putStr n
                   readLn
  {-min3 <$> readVar "a: " <*>
    readVar "b: " <*>
    readVar "c: "
 
-}


Don't fear the Monad
Ответить с цитированием
  (#5 (permalink)) Старый
ташанаша ташанаша вне форума
Member
 
Сообщений: 18
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.11.2011
По умолчанию 04.12.2011, 16:39

спасибо , а первые две строчки это мы что то подключаем? и что значит например <$> и <*>
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
calabi-yau calabi-yau вне форума
Member
 
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 10 сообщениях
Регистрация: 28.09.2009
По умолчанию 06.12.2011, 14:53

Цитата:
Сообщение от ташанаша Посмотреть сообщение
спасибо , а первые две строчки это мы что то подключаем?
аппликативный и монадический интерфейсы.
Цитата:
и что значит например <$> и <*>
<$> отображает функцию вида a -> b в F a -> F b, где F экземпляр функтора. <*> отображает F (a -> b) в F a -> F b.


Don't fear the Monad
Ответить с цитированием
  (#7 (permalink)) Старый
ташанаша ташанаша вне форума
Member
 
Сообщений: 18
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.11.2011
По умолчанию 08.12.2011, 00:18

с=do...
ошибку выдает типа выражение должно быть
Ответить с цитированием
  (#8 (permalink)) Старый
ташанаша ташанаша вне форума
Member
 
Сообщений: 18
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.11.2011
По умолчанию 08.12.2011, 00:50

а здесь нет привязки к монадам?
Ответить с цитированием
  (#9 (permalink)) Старый
calabi-yau calabi-yau вне форума
Member
 
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 10 сообщениях
Регистрация: 28.09.2009
По умолчанию 08.12.2011, 02:39

Цитата:
Сообщение от ташанаша Посмотреть сообщение
с=do...
ошибку выдает типа выражение должно быть
восстановите разбивку, добавьте отступы, или укажите блок:
haskell Код:
c = do { [path] <- getArgs
       ; print =<< readFile path
       }
    `catch`
        (\_ -> print "Error: file not found")
Цитата:
Сообщение от ташанаша Посмотреть сообщение
а здесь нет привязки к монадам?
где именно "здесь"? если это о функторах, то нет.


Don't fear the Monad
Ответить с цитированием
  (#10 (permalink)) Старый
ташанаша ташанаша вне форума
Member
 
Сообщений: 18
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.11.2011
По умолчанию 08.12.2011, 18:45

import System
import IO

main1 :: IO Integer
main1 =
do
a <- getLine
b <- getLine
return((read a + 0) + (read b + 0))

main2 :: IO ()
main2 =
do
[name] <- getArgs
putStr name

main3 :: IO ()
main3 =
do
[name] <- getArgs
handle <- openFile name ReadMode
contents <- hGetContents handle
putStr contents
hClose handle

fun :: [String] -> Integer -> [String]
fun (x:xs) n = if n > 0 then [x] ++ (fun xs (n-1)) else []
fun [] _ = []

main4 :: IO ()
main4 =
do
n:name:_ <- getArgs
handle <- openFile name ReadMode
contents <- hGetContents handle
putStr(unlines(fun (lines contents) (read n + 0)))
hClose handle




можете объяснить подробно (где что делаем что значит) каждая строчка, на русском языке пожалуйста





и Реализуйте программу по такому же принципу
min3, по трем целым возвращающая наименьшее из
них.
Параметры функций должны считы-
ваться с клавиатуры.и тоже каждое действие разъяснить в комментариях --
заранее большое спасибо
Ответить с цитированием
  (#11 (permalink)) Старый
ташанаша ташанаша вне форума
Member
 
Сообщений: 18
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.11.2011
По умолчанию 08.12.2011, 18:57

я понимаю что:
1) Прога, счит. два числа и возвр. их сум-
му.
2) Прога, распечатывающая переданные в нее аргументы ко-
мандной строки.
3) Программа, которая принимает в командной строке имя файла
и распечатывает его на экране.
4) Программа, принимающая в командной строке число n и
имя файла и выводящая на экран первые n строк фай-
ла (используйте функцию lines, разбивающую строку
на список строк в символах конца строки, т.е., напри-
мер lines"line1\nline2" вернет ["line1", "line2"].
Также полезна функция unlines, осуществляющая обратную
операцию.)

но как это работает
Ответить с цитированием
  (#12 (permalink)) Старый
Undina Undina вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 22.11.2011
По умолчанию 11.12.2011, 06:00

Помогите если можно с заданием
Цитата:
Сообщение от She'sma Посмотреть сообщение
д) реализовать данную программу так, чтобы параметры функции считывались с клавиатуры.
для функции:
isParallel, возвращающей True,если два отрезка,концы которых задаютя в аргументах функции,параллельны(или лежат на одной прямой).Например значение выражения isParallel (1,1) (2,2) (2,0) (4,2)должно равняться True, т.к (1, 1) − (2, 2) и (2, 0) − (4, 2) параллельны.

isParallel x1 x2 y1 y2 = if x1/x2==y1/y2 then True else False
Спасибо зарание!
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
ташанаша ташанаша вне форума
Member
 
Сообщений: 18
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.11.2011
По умолчанию 12.12.2011, 22:05

нароооод((((((((((
Ответить с цитированием
  (#14 (permalink)) Старый
calabi-yau calabi-yau вне форума
Member
 
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 10 сообщениях
Регистрация: 28.09.2009
По умолчанию 14.12.2011, 17:52

haskell Код:
t = do (x0,y0) <- readLn
                  :: IO (Int, Int)
       (x1,y1) <- readLn
                  :: IO (Int, Int)
       return (isParallel x0 x1 y0 y1)


Don't fear the Monad
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа , считывающая два числа и возвращающая их сумму Demon21 Haskell 4 18.05.2012 16:52
Программа вычисляющая сумму первых n членов арифметической прогрессии gem Вопросы начинающих программистов 0 13.05.2011 23:46
Программа перевода числа из 10 СС в 2 СС Gock C++ Builder 18 25.02.2010 09:11
Как из натурального числа вычеслить сумму serzhi Lisp 6 22.09.2009 00:29
Разложение натурального числа на сумму квадратов. rom-x Вопросы начинающих программистов 14 24.12.2007 21:06
Программа вычисляющая сумму положительных элементов списка bl77 Lisp 6 23.11.2006 12:38
Написать программу которая считывает из файла F числа и подчитывает сумму derastl Вопросы начинающих программистов 0 17.01.2006 16:05
Программа на C++ которая выбирает простые числа alexnike Вопросы начинающих программистов 5 05.12.2005 12:04
Программа на преобразование десятичного числа в двоичное HroniC Вопросы начинающих программистов 10 02.12.2005 12:46
Программа переводящая числа из троичной системы в десятичную CraaZy Вопросы начинающих программистов 8 25.11.2005 10:38
Нужно из заданного числа вывести сумму витамин Assembler 0 20.05.2005 15:50
Определить сумму положительных и сумму отрицательных элементов массива emm Pascal 1 07.12.2004 16:48



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов