Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для White Luna
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402

Ввести с клавиатуры три числа, и найти углы треугольника, пропорционально им заданные

04.04.2012, 23:51. Показов 2282. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
import IO
sumInt :: IO Integer
sumInt =
  let readNum :: IO Integer
      readNum = readLn
  in do putStr "Vvedite 1oe chislo: "
        x1 <- readNum
        putStr "Vvedite 2oe chislo: "
        x2 <- readNum
    putStr "Vvedite 3ue chislo: "
        x3 <- readNum
        putStr ("Ugl  = ")
        return (x1*180/(x1+x2+x3), x2*180/(x1+x2+x3), x3*180/(x1+x2+x3))
мне надо ввести с клавиатуры 3 числа и Найти углы треугольника, пропорционально им заданные
формулы в return верные, но я по мойму что то не верно делаю в IO , короче просто уже глючит
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.04.2012, 23:51
Ответы с готовыми решениями:

С клавиатуры вводятся три числа, считая их сторонами треугольника найти углы этого треугольника
с клавиатуры вводятся три числа, считая их сторонами треугольника найти углы этого треугольника, можно это как-то просто написать, без...

Даны три числа - углы треугольника
Даны три числа - углы треугольника. Определить его тип ( остроугольный, тупоугольный, прямоугольный).

Ввести три числа. если они могут быть длинами сторон остроугольного треугольника, вычислить площадь полученного треугольника
Задание:&quot;Ввести три числа. если они могут быть длинами сторон остроугольного треугольника, вычислить площадь полученного треугольника&quot;...

6
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
05.04.2012, 05:07
White Luna, return не печатает значение, а заворачивает его в монаду. Для печати используй print или комбинации putStr/putStrLn с show. У тебя же в монаду заворачивается кортеж из трех элементов, что не соответствует спецификации функции sumInt.
0
 Аватар для White Luna
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
05.04.2012, 11:39  [ТС]
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
import IO
sumInt :: IO Integer
sumInt =
  let readNum :: IO Integer
      readNum = readLn
  in do putStr "Vvedite 1oe chislo: "
        x1 <- readNum
        putStr "Vvedite 2oe chislo: "
        x2 <- readNum
    putStr "Vvedite 3ue chislo: "
        x3 <- readNum
        putStr ("Ugl  = ")
        putStr (x1*180/(x1+x2+x3), x2*180/(x1+x2+x3), x3*180/(x1+x2+x3))
я сделала так, и выводит такую ошибку

Добавлено через 29 секунд
C:\lab.hs:9:9:
The last statement in a 'do' construct must be an expression:
x2 <- readNum

Добавлено через 33 минуты
а как выровняла 3 chislo выводит такую аброкадабру
C:\lab.hs:13:9:
Couldn't match expected type `Integer' with actual type `()'
Expected type: IO Integer
Actual type: IO ()
In the return type of a call of `putStr'
In the expression:
putStr
(x1 * 180 / (x1 + x2 + x3), x2 * 180 / (x1 + x2 + x3),
x3 * 180 / (x1 + x2 + x3))
Failed, modules loaded: none.
0
313 / 268 / 5
Регистрация: 03.04.2011
Сообщений: 456
05.04.2012, 14:47
1) Спецификация функции sumInt говорит о том, что возвращается IO Integer, последняя функция в блоке do возвращает IO ().
2) В 13-ой строчке функция putStr вызывается не со строкой, а с кортежем.
Цитата Сообщение от Nameless One Посмотреть сообщение
Для печати используй print или комбинации putStr/putStrLn с show.
3) Оператор (/) определён для экземпляров класса Fractional, к коим не относятся целочисленные типы.
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import IO
 
sumInt :: IO ()
sumInt =
  let readNum :: IO Double
      readNum = readLn
  in do putStr "Vvedite 1oe chislo: "
        x1 <- readNum
        putStr "Vvedite 2oe chislo: "
        x2 <- readNum
        putStr "Vvedite 3ue chislo: "
        x3 <- readNum
        putStr "Ugl = "
        print (x1*180/(x1+x2+x3), x2*180/(x1+x2+x3), x3*180/(x1+x2+x3))
Haskell
1
2
3
4
5
*Main> sumInt
Vvedite 1oe chislo: 1
Vvedite 2oe chislo: 2
Vvedite 3ue chislo: 3
Ugl = (30.0,60.0,90.0)

Не по теме:

Когда хоть что-то прочитаешь, а не будешь "ляпать" код в надежде, что что-то заработает?

1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
05.04.2012, 15:11
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
angles :: [Double] -> [Double]
angles xs = let factor = 180 / sum xs
            in map (* factor) xs
 
for :: Int -> (Int -> IO a) -> IO [a]
for n act = sequence $ map (act $) [1..n]
 
get :: Int -> IO Double
get i = putStrLn ("Input number " ++ show i ++ ":") >> readLn
 
main :: IO ()
main = for 3 get >>= mapM_ print . angles
Добавлено через 11 минут
или даже вот так:
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
import System.Environment (getArgs)
import System.IO
 
angles :: [Double] -> [Double]
angles xs = let factor = 180 / sum xs
            in map (* factor) xs
 
main :: IO ()
main = do args <- getArgs
          case args of
            [a, b, c] -> mapM_ print $ angles $ map read args
            _         -> hPutStrLn stderr "Expected three numbers"
2
313 / 268 / 5
Регистрация: 03.04.2011
Сообщений: 456
05.04.2012, 15:29
Цитата Сообщение от Nameless One Посмотреть сообщение
Haskell
1
2
3
angles :: [Double] -> [Double]
angles xs = let factor = 180 / sum xs
            in map (* factor) xs
Кстати, судя по задаче (найти углы треугольника, пропорциональные заданным величинам) и принимая во внимание стремление обобщить её, то в формуле должно фигурировать число углов (количество элементов списка). Но все равно можно сделать немного проще.
Это замечание, конечно, только для первого варианта имеет смысл.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
05.04.2012, 15:35
Цитата Сообщение от bokunopico Посмотреть сообщение
Кстати, судя по задаче (найти углы треугольника, пропорциональные заданным величинам) и принимая во внимание стремление обобщить её, то в формуле должно фигурировать число углов (количество элементов списка)
ну да, можно и обобщить, только количество углов не обязательно передавать параметром, т.к. оно будет равно длине списка:

Haskell
1
2
3
4
angles :: [Double] -> [Double]
angles xs = let factor = 180 * (n - 2) / sum xs
                n = fromIntegral $ length xs
            in map (* factor) xs
Цитата Сообщение от bokunopico Посмотреть сообщение
Но все равно можно сделать немного проще.
ТС явно тяготеет к простым решениям, судя по ее темам
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.04.2012, 15:35
Помогаю со студенческими работами здесь

Ввести с клавиатуры три числа, и вывести их в порядке убывания
Дословное условие задачи: Ввести с клавиатуры три числа, и вывести их в порядке убывания. Решаю для JavaRush и это решение не проходит...

Ввести с клавиатуры три числа, вывести на экран среднее из них
Ввести с клавиатуры три числа, вывести на экран среднее из них. Т.е. не самое большое и не самое маленькое.

Ввести с клавиатуры три числа и вывести наибольшее из этих чисел на экран
Помогите решить задачу на ассемблере в частности на платформе intel emu 8086 (можно на MASM). Задача. Необходимо ввести с клавиатуры три...

Ввести с клавиатуры три числа, и вывести их в порядке убывания. Как улучшить код?
Подскажите , как улучшить это ? Сделать более компактным чтоль. А то мне напоминает индусский код. BufferedReader reader = new...

Ввести с клавиатуры три целых числа и вывести на экран их произведение в прямом и обратном порядке
1)Нужно написать программу которая реализует диалог с пользователем : запрашивает с клавиатуры три целых числа , и выводит на экран...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru