6 / 6 / 3
Регистрация: 13.09.2013
Сообщений: 48
|
|
1 | |
Не компилируется решение Гипотезы Коллаца23.08.2020, 15:44. Показов 2164. Ответов 3
Метки нет (Все метки)
Доброго времени суток, товарищи!
Уже несколько часов бьюсь над решением одной задачки. Вроде бы не сложная сама по себе. Только я решил попробовать решить не используя переменные. Ну, или почти без переменных. И я уже сожалею о затраченном времени. Подсобите, пожалуйста. Решение у меня вроде есть. Только компилятор не запускает скрипт. Я уже с разных сторон попробовал подойти. Но без толку. Ошибки не выбрасывает. Идёт долгий процесс компиляции. И всё. Вот задачка (увы, не сумел загрузить задачку сюда - 502 Bad Gateway. Гружу на сторонний хостинг) https://i.ibb.co/CWxc3cG/Whats... -51-48.jpg Вот мои попытки: https://scastie.scala-lang.org... NF5e07PdZw Кликните здесь для просмотра всего текста
Код
import scala.collection.mutable val valL = 2 val valR = 5 val points = mutable.Set[Int]() //Точки для множеств P(n) val steps = mutable.Set[CountSteps]() // Коллекция для множеств P(n) var end = true class CountSteps(firstStep: Int) { //Множество значений гипотезы P(n) val counts = mutable.Set[Int]() def setStep(step: Int): Unit = counts += step def getLastStep():Int = counts.last def getLengthStep():Int = counts.size def firstCount(count: Int) = if (count%2>0) setStep(Odd(count)) else setStep(Even(count)) def setEnd():Unit = if(counts.contains(1)) end = false def getEnd():Boolean = end def Even(x: Int) = x / 2 def Odd(x: Int) = 3*x + 1 firstCount(firstStep) } def EnterPoints(l: Int, r: Int): mutable.Set[Int] = { points += l if (points.last < r) EnterPoints(points.last + 1, r) else points } def CreateSteps(count: Int): CountSteps = new CountSteps(count) for (i <- EnterPoints(valL, valR)) steps += CreateSteps(i) for (n <- steps) { while(n.getEnd()) { n.firstCount(n.getLastStep()) n.setEnd() } } Вот другая попытка: https://scastie.scala-lang.org... b1Yez12lDQ Кликните здесь для просмотра всего текста
Код
import scala.collection.mutable val valL = 2 val valR = 5 val points = mutable.Set[Int]() //Будет хранить натуральные числа для отрезка [valL; valR] val countSteps = mutable.Set[Int]() //Будет хранить значения шагов для p(n) val lengthSteps = mutable.Set[Int]() //Будет хранить длины шагов для всех p(n) def SummKollac(points: mutable.Set[Int]): mutable.Set[Int] = { for (point <- points) { print("Шаг - ", point) if (point % 2 > 0) countSteps += Odd(point) //Внесём в Set значение первого шага для p(point) else countSteps += Even(point) println(countSteps) while (!countSteps.contains(1)){ if (countSteps.head % 2 > 0) { countSteps += Odd(countSteps.head) } else { countSteps += Even(countSteps.head) } print(countSteps) } println(countSteps) lengthSteps += countSteps.size println(lengthSteps) countSteps.clear() //Опустошим Set значений шагов, для последующей итерации } lengthSteps } def EnterPoints(l: Int, r: Int): mutable.Set[Int] = { points += l if (points.last < r) EnterPoints(points.last + 1, r) else points } def Even(x: Int) = x / 2 def Odd(x: Int) = 3*x + 1 SummKollac(EnterPoints(valL, valR)) (EnterPoints(5, 10)).last Я согласен, очень сильно намудрил, честно говоря. Только всё же пытаюсь выяснить, чего же нужно компилятору. У меня такое ощущение, что ему не нравиться цикл while. Потому что я заметил, что компилятор в него даже не входит. Эх... Я уже чутка устал. Попробую позже с переменными и свежими силами. И между тем, есть надежда на вашу помощь, товарищи! Моё уважение!
0
|
23.08.2020, 15:44 | |
Ответы с готовыми решениями:
3
Не компилируется решение задачи в MinGW (WINDOWS) Решение уравнений теплопроводности - программа не компилируется Программа компилируется в Borland 6.0 но не компилируется в Visual Studio 2008 Заголовочный файл, который компилируется в VS2017, не компилируется в Qt |
6 / 6 / 3
Регистрация: 13.09.2013
Сообщений: 48
|
|
24.08.2020, 13:42 [ТС] | 2 |
https://scastie.scala-lang.org... RQ8Ke3iX0A
Код
import scala.collection.mutable class StresTest { val valL = 2 val valR = 5 val points = mutable.Set[Int]() //Точки для множеств P(n) val steps = mutable.Set[CountSteps]() // Коллекция для множеств P(n) // def EnterPoints(l: Int, r: Int): mutable.Set[Int] = { points += l if (points.last < r) EnterPoints(points.last + 1, r) else points } def CreateSteps(count: Int):Unit = { steps += new CountSteps steps.last.fullSteps(count) println(steps.last.counts) } def Starting():Unit ={ for (i <- EnterPoints(valL, valR)) { CreateSteps(i) println(steps.last.counts) } } } (new StresTest).CreateSteps(3) //for (i <- EnterPoints(valL, valR)) CreateSteps(i) //for (n <- steps) { //} class CountSteps { //Множество значений гипотезы P(n) val counts = mutable.Set[Int]() var container = 0 def Even(x: Int):Int = x / 2 //если чётное def Odd(x: Int):Int = 3*x + 1 //если нечётное def setStep(step: Int): Unit = counts += step def getLastStep():Int = counts.last def getLengthStep():Int = counts.size //def firstCount(count: Int) = if (count%2>0) setStep(Odd(count)) else setStep(Even(count)) //def setEnd():Unit = if(counts.contains(1)) end = false // def getEnd():Boolean = end final def fullSteps(count: Int):Unit = { if (count%2>0) container = Odd(count) else container = Even(count) setStep(container) println(counts.head) if (!counts.contains(1)) fullSteps(container) } //fullSteps(firstStep) } //steps.last.getLastStep()
0
|
4539 / 2732 / 486
Регистрация: 28.04.2012
Сообщений: 8,628
|
|
24.08.2020, 15:00 | 3 |
0
|
6 / 6 / 3
Регистрация: 13.09.2013
Сообщений: 48
|
|
25.08.2020, 03:28 [ТС] | 4 |
Приветствую, Korvin!
Да, я об этом. Я не знал, что оно не упорядочено, честно говоря. Буду смотреть дальше. Теперь, я хочу понять, как мне организовать доступ к последнему добавленному значению в Set. Потому что, как я понял, вот это работает неверно. Код
val counts = mutable.Set[Int]() def getLastStep():Int = counts.last Korvin, подскажите, а как можно попросить у пользователя ввести значения для этих переменных. val valL = 2 val valR = 5 Например, в формате - (2 5) Добавлено через 2 часа 39 минут Использовал ArrayBuffer вместо Set То что нужно ) Теперь я хочу попробовать, смогу ли я написать для этого скрипта рекурсивную функцию, чтобы обойтись без var summ = 0 https://scastie.scala-lang.org... 8JUTyZTjJg Код
import scala.collection.mutable val test = new StresTest var summ = 0 test.Starting() for (i <- test.steps) summ += i.getLengthStep() print(summ) class StresTest { val valL = 2 val valR = 5 val points = mutable.ArrayBuffer[Int]() //Точки для множеств P(n) val steps = mutable.ArrayBuffer[CountSteps]() // Коллекция для множеств P(n) // def EnterPoints(l: Int, r: Int): mutable.ArrayBuffer[Int] = { points += l if (points.last < r) EnterPoints(points.last + 1, r) else points } def CreateSteps(count: Int):Unit = { steps += new CountSteps steps.last.fullSteps(count) //println(steps.last.getLengthStep()) } def Starting():Unit = (EnterPoints(valL, valR)).foreach(CreateSteps) } //for (i <- EnterPoints(valL, valR)) CreateSteps(i) //for (n <- steps) { //} class CountSteps { //Множество значений гипотезы P(n) val counts = mutable.ArrayBuffer[Int]() def Even(x: Int):Int = x / 2 //если чётное def Odd(x: Int):Int = 3*x + 1 //если нечётное def setStep(step: Int): Unit = counts += step def getLastStep():Int = counts.last def getLengthStep():Int = counts.size //def firstCount(count: Int) = if (count%2>0) setStep(Odd(count)) else setStep(Even(count)) //def setEnd():Unit = if(counts.contains(1)) end = false // def getEnd():Boolean = end final def fullSteps(count: Int):Unit = { if (count%2>0) { setStep(Odd(count)) if (!counts.contains(1)) fullSteps(Odd(count)) } else { setStep(Even(count)) if (!counts.contains(1)) fullSteps(Even(count)) } } //fullSteps(firstStep) } //steps.last.getLastStep()
0
|
25.08.2020, 03:28 | |
25.08.2020, 03:28 | |
Помогаю со студенческими работами здесь
4
Компилируется в С++ bulder 6.0 но не компилируется в VS 2010 express В формате .cpp код компилируется, а в .c не компилируется Проверка гипотезы Проверка гипотезы Проверка гипотезы Проверка нулевой гипотезы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |