Форум программистов, компьютерный форум, киберфорум
Наши страницы
Haskell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
iduchev
0 / 0 / 0
Регистрация: 15.10.2017
Сообщений: 12
1

Сумма элементов массива

15.10.2017, 13:08. Просмотров 1283. Ответов 8

Здравствуйте. Стоит задача посчитать сумму элементов массива, информации такой мало. Плюс массив должен задаваться через консоль, а не из файла или в самой программе. Я недавно начал заниматься не только Хаскелем, а и функциональным программированием вообще. Где в коде я свернул не туда?
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import Data.Array
import System.IO.Unsafe
 
let i = 0
let summ = 0
     
func :: [Float] -> Float -> IO
func a1 i summ = do
if i /= num 
    then sum a1 (i+1) (summ + a1(i))
else if i == num then print summ
 
main = do
       let num <- getLine
       let a1[] <- getLine
       func a1 i summ
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2017, 13:08
Ответы с готовыми решениями:

для массивов А и В определить y[i] = a[i]^2 / (сумма элементов массива В) и k[i] = b[i] / (сумма элементов массива А)
всем мир помогите с задачкой братишки

Найти R=(Х+Y)/Z,где Х-сумма всех элементов массива А(14), Y-сумма всех элементов массива В(9),Z-сумма всех элементов массива С(11)
Заданы три массива:А(5),В(8) и С(12). Найти R=(Х+Y)/Z,где Х-сумма всех элементов массива А(14),...

Произведение положительных элементов массива, сумма элементов массива, удаление четных элементов
в одномерном массиве состоящим из n элементов вычислить: произведение положительных элементов...

Количество положительных элементов массива, сумма элементов массива после последнего элемента, равного нулю
В одномерном массиве, который состоит из n действительных элементов, рассчитать: а) количество...

Вычислить сумму тех элементов массива сумма индексов которых совпадает с значением элементов массива.
Вычислить S сумму тех элементов массива Mas сумма индексов которых совпадает с значением элементов...

8
Curry
2993 / 2074 / 257
Регистрация: 01.06.2013
Сообщений: 4,527
Записей в блоге: 9
15.10.2017, 13:38 2
Уточните, что вы хотите.
В модуле Data.Array (пакет array) ассоциативный массив, он ли вам нужен?
Возможно вы хотите что то ближе к обычным массивам, скажем в Си? Тогда лучше использовать пакет vector.
Массив иммутабельный (не изменяемый после создания)? Такие есть и в array, и в vector.
Для Data.Array (или Data.Array.IArray) создание такого массива по данным ввода с консоли, фактически, только через промежуточное создание списка при вводе с консоли.
Можно мутабельные (с изменяемыми значениями элементов) массивы использовать, тоже есть и в array, и в vector.
Цитата Сообщение от iduchev Посмотреть сообщение
import System.IO.Unsafe
Не надо никакие unsafe использовать. Без них всё получится.
Цитата Сообщение от iduchev Посмотреть сообщение
let i = 0
let вне тела функции в Haskell не используется, в отличии от ML,F#,OCaml...
Цитата Сообщение от iduchev Посмотреть сообщение
if i /= num
* * then sum a1 (i+1) (summ + a1(i))
else if i == num then print summ
Отступ обязателен. Вложенности задаются отступами.
1
iduchev
0 / 0 / 0
Регистрация: 15.10.2017
Сообщений: 12
15.10.2017, 13:53  [ТС] 3
На C++ это бы выглядело типа как:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int num;
float F[50];
 
void func(float F[])
{
float sum = 0;
for(int i=0;i<num;i++)
{
sum += F[i];
}
cout<<sum;
}
 
void main()
{
cin>>num;
for(int i=0;i<num;i++)
{
cin>>F[i];
}
}
0
Curry
2993 / 2074 / 257
Регистрация: 01.06.2013
Сообщений: 4,527
Записей в блоге: 9
15.10.2017, 14:12 4
Haskell
1
2
3
4
5
6
7
8
9
10
import qualified Data.Vector as V
 
main:: IO ()
main = do 
    putStr "Size of array ? "
    num <- readLn
    f <- V.generateM num $ \i -> do
        putStr $ "Elem #" ++ show i ++ " ? "
        readLn
    print (V.sum f :: Float)
В директории проекта, в файле *.cabal, после строки build-depends: base вставляете строку
,vector
с отступом на уровне слова base.
1
15.10.2017, 14:12
Catstail
Модератор
24925 / 12647 / 2314
Регистрация: 12.02.2012
Сообщений: 20,586
15.10.2017, 14:28 5
На списках:

Haskell
1
2
3
4
5
6
7
8
9
import System.IO 
 
main = do
  lst <- getLine
  putStrLn $ show $ sum (read lst :: [] Int)
 
*Main> main
[1,2,3,4]
10
2
Curry
2993 / 2074 / 257
Регистрация: 01.06.2013
Сообщений: 4,527
Записей в блоге: 9
15.10.2017, 15:31 6
Catstail, ТС хотел массив. Ну и, вообще, как я понимаю, посмотреть "чё по чём в Haskell".

Даже без списков
Haskell
1
2
3
4
5
6
7
8
9
main:: IO ()
main = do 
    putStr "Size of array ? "
    num <- readLn
    let go i s | i>=num = return s
               | otherwise = do
            putStr $ "Elem #" ++ show i ++ " ? "
            go (i+1) . (s+) =<< readLn
    print =<< go (0 :: Int) (0 :: Float)
1
iduchev
0 / 0 / 0
Регистрация: 15.10.2017
Сообщений: 12
15.10.2017, 16:43  [ТС] 7
То, как написат Catstail очень близко, но на вход должны подаваться просто числа через пробел.

Входные данные:
В первой строке записано число n (n ≤ 100). В следующей строке записано n действительных чисел, каждое из которых не превосходит по модулю 100.

Выходные данные:
Вывести сумму всех элементов массива.

Это - задача на e-olymp, поэтому я не могу внести какие-то изменения в компилятор. Только код.

Входные данные #1
5
1.2 1.3 5.7 1.8 12.4

Выходные данные #1
22.4
0
Curry
2993 / 2074 / 257
Регистрация: 01.06.2013
Сообщений: 4,527
Записей в блоге: 9
15.10.2017, 17:32 8
Лучший ответ Сообщение было отмечено iduchev как решение

Решение

Цитата Сообщение от iduchev Посмотреть сообщение
Это - задача на e-olymp
Haskell
1
2
main:: IO ()
main = getLine >> getLine >>= print . sum . map (read :: String -> Float) .words
2
iduchev
0 / 0 / 0
Регистрация: 15.10.2017
Сообщений: 12
15.10.2017, 17:43  [ТС] 9
Спасибо, работает)
0
15.10.2017, 17:43
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2017, 17:43

Если сумма элементов массива положительна, то осуществить циклический сдвиг элементов массива вправо
Прощу помочь с решением задачи. Дан массив А(N). Если сумма элементов массива положительна, то...

Найдите строки массива А (N), сумма элементов которых больше суммы элементов в строках массива В (M)
Дано два масива А(N) и В(M). 1)Найдите строки массива А (N), сумма элементов которых больше суммы...

Если сумма всех элементов массива чётная, вывести количество нечётных элементов массива
Дан массив, содержащий неотрицательные целые числа. Если сумма всех элементов массива чётная, нужно...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.