Форум программистов, компьютерный форум, киберфорум
F# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
5 / 5 / 10
Регистрация: 08.01.2016
Сообщений: 80

Объем воды через N лет

29.01.2016, 12:46. Показов 1977. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь изучать F# ,решая задачи из сборника задач :\
Озеро содержит А км^3 воды. Ежегодно объём воды уменьшается на P%.
Определить объем воды в озере через 1,2..N лет, а также его ежегодное уменьшение.

Написал код, но я совершенно не знаю, как правильно составить функцию, чтобы она считала от текущего количества воды, а не от исходного.Прикрепляю код-черновик и блок-схему для императивных яп. Пришла только идея решить задачу через список, но ответы всё равно неправильные - так как считает от исходного количества, а не от текущего :\

F#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
open System
 
Console.WriteLine ("Input A")
let A=Console.ReadLine()|> int
 
 
Console.WriteLine ("Input P")
let P=Console.ReadLine()|> int
 
 
Console.WriteLine ("Input number of years")
let N=Console.ReadLine ()|> int
 
let Spisok=[A]
 
for i=1 to N do 
     
     Spisok|>List.map(fun A->A-(A*P/100*i))|>printf "Вода - %A ;"
     Spisok|>List.map(fun A->A-( A-(A*P/100*i) ))|>printfn "Уменьшение - %A ;"     
 
 
     
Console.ReadLine ()

0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.01.2016, 12:46
Ответы с готовыми решениями:

Найти объем воды в бассейне через заданное время (acmp)
Привет всем. Я решаю такую задачу: Для поддержания температуры и чистоты воды в бассейн постоянно наливают новую воду и выливают старую....

Водонапорная башня цилиндрической формы имеет радиус основания 10 метров. Ввести замеренную высоту уровня воды и рассчитать объем воды в башне.
Водонапорная башня цилиндрической формы имеет радиус основания 10 метров. Ввести замеренную высоту уровня воды и рассчитать объем воды в...

Каков расход воды в сечении, т. е. сколько кубометров воды протекает через сечение в секунду?
Гидрологами исследовано течение реки в некотором сечении: произведена серия замеров по прямой от берега до берега перпендикулярно...

5
Заблокирован
29.01.2016, 21:26
Лучший ответ Сообщение было отмечено TonyWinter как решение

Решение

TonyWinter, если не возражаете вначале немного критики...
Обычно, вместо Console.WriteLine используют printfn . И если у вас есть необходимость в однотипном действии, удобно вынести в отдельную функцию. Т.к. в F# строгая типизация, то можно или сразу считывать в float или использовать приведение типов. Например, так:

F#
1
2
3
4
5
6
7
let readValue message = 
    message |> printfn "%s"
    System.Console.ReadLine() |> float
 
let A = "Input A" |> readValue
let P = "Input P" |> readValue
let N = "Input number of years" |> readValue
Для остального можно использовать scan:

F#
1
2
3
4
{1.0..N} 
|> Seq.scan (fun (x,y) _ -> let n = (x * P / 100.0) in x - n, n) (A, 0.0)
|> Seq.skip 1
|> Seq.iter(printfn "%A")
https://dotnetfiddle.net/CRrbbc

Пример:
Code
1
2
3
4
5
6
7
8
9
10
11
Input A
1000
Input P
5
Input number of years
5
(950.0, 50.0)
(902.5, 47.5)
(857.375, 45.125)
(814.50625, 42.86875)
(773.7809375, 40.7253125)
P.S. Старайтесь по максимуму использовать стандартные возможности языка - так код будет намного читабельнее.
0
5 / 5 / 10
Регистрация: 08.01.2016
Сообщений: 80
29.01.2016, 23:23  [ТС]
Спасибо огромное, кажется, начинаю постепенно вникать.
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
|> Seq.scan (fun (x,y) _ -> let n = (x * P / 100.0) in x - n, n) (A, 0.0)
Можете объяснить , что тут происходит? Применяется к последовательности анонимная функция, которая находит процент от количества воды, а потом
F#
1
in x - n
этот процент отнимается от текущего количества воды?
0
Заблокирован
30.01.2016, 00:12
Лучший ответ Сообщение было отмечено TonyWinter как решение

Решение

Цитата Сообщение от TonyWinter Посмотреть сообщение
Можете объяснить , что тут происходит?
TonyWinter, scan применяет функцию к каждому элементу коллекции, передавая накапливаемое значение аргумента по потоку в процессе вычисления с сохранением промежуточных результатов.

https://msdn.microsoft.com/en-... 70620.aspx

(A, 0.0) - начальное значение. Это кортеж, первый элемент - количество воды, второй - на сколько уменьшилось.

F#
1
(fun (x,y) _ -> let n = (x * P / 100.0) in x - n, n)
сама функция. Первый параметр - наш аккумулятор, второй (_) - число. В данном случае оно не используеться, поэтому ставиться такой символ.
let n = (x * P / 100.0) - вычисляем на сколько должно уменьшиться
теперь можно вернуть результат:
x - n, n

Цитата Сообщение от TonyWinter Посмотреть сообщение
этот процент отнимается от текущего количества воды?
да

Не по теме:

Цитата Сообщение от TonyWinter Посмотреть сообщение
Пытаюсь изучать F# ,решая задачи из сборника задач :\
Если не секрет, что за сборник?

1
5 / 5 / 10
Регистрация: 08.01.2016
Сообщений: 80
30.01.2016, 09:53  [ТС]
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
fun (x,y)
Цитата Сообщение от TonyWinter Посмотреть сообщение
(A, 0.0)
А сюда передается A и 0.0?Т.е вместо x - A , а вместо y подставляется 0.0?


Не по теме:

Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Если не секрет, что за сборник?
Сборник задач. Зубов,Батасова

0
Заблокирован
30.01.2016, 12:48
Цитата Сообщение от TonyWinter Посмотреть сообщение
А сюда передается A и 0.0?Т.е вместо x - A , а вместо y подставляется 0.0?
TonyWinter, совершенно верно для первой итерации. Для второй - значения вычисленные на предыдущем шаге.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.01.2016, 12:48
Помогаю со студенческими работами здесь

смешали v1 литров воды с температурой t1 градусов Цельсия с v2 литрами воды с температурой t2 градусов Цельсия. Вычислите объем и температуру
смешали v1 литров воды с температурой t1 градусов Цельсия с v2 литрами воды с температурой t2 градусов Цельсия. Вычислите объем и...

Объем резервуара для воды
Подскажите неопытному кофеману, каким должен быть резервуар для воды в кофеварке, чтобы можно было приготовить порядка 1-2 чашек кофе за...

Вычислить объем и температуру воды
Смешаны V1 литр воды температуры Т1 с V2 литрами воды температуры Т2. Написать программу вычисления объема и температуры воды ...

Определить, через сколько лет средняя продолжительность жизни превысит 60 лет
Средняя продолжительность жизни населения региона равна А лет. Ожидается ее ежегодный рост на р % вследствие улучшения медицинского ...

Найти объем воды и температуру равновесия
В воду при температура 60 градусов, заполняющую цилиндрический резервуар с диаметром дна 9см поместили кусок льда при температуре 0...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru