Форум программистов, компьютерный форум, киберфорум
Scala
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
6 / 6 / 3
Регистрация: 13.09.2013
Сообщений: 48
1

Не компилируется решение Гипотезы Коллаца

23.08.2020, 15:44. Показов 2164. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, товарищи!

Уже несколько часов бьюсь над решением одной задачки. Вроде бы не сложная сама по себе. Только я решил попробовать решить не используя переменные. Ну, или почти без переменных. И я уже сожалею о затраченном времени.
Подсобите, пожалуйста. Решение у меня вроде есть. Только компилятор не запускает скрипт. Я уже с разных сторон попробовал подойти. Но без толку. Ошибки не выбрасывает. Идёт долгий процесс компиляции. И всё.

Вот задачка (увы, не сумел загрузить задачку сюда - 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.08.2020, 15:44
Ответы с готовыми решениями:

Не компилируется решение задачи в MinGW (WINDOWS)
#include &lt;stdio.h&gt; int main(void) { int N=0; int D=6; int mp,mk,mc,i; int p=0;...

Решение уравнений теплопроводности - программа не компилируется
Здравствуйте! С горем пополам написана программа, но вот незадача при запуске выдает ошибки природу...

Программа компилируется в Borland 6.0 но не компилируется в Visual Studio 2008
Ета програма компилируетса в борланде 6.0 но не компилируетса в Visualstudio 2008 и в борланде 10-м...

Заголовочный файл, который компилируется в VS2017, не компилируется в Qt
В общем был класс &quot;Матрицы&quot;, который нормально работал в VS2017. Возникла необходимость...

3
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()
Есть некоторые продвижения, друзья! Только осталась одна проблема. Отображение Set добавляет значения иногда в начало, а иногда в конец.
0
Эксперт функциональных языков программированияЭксперт Java
4539 / 2732 / 486
Регистрация: 28.04.2012
Сообщений: 8,628
24.08.2020, 15:00 3
Цитата Сообщение от Miostat Посмотреть сообщение
Отображение Set добавляет значения иногда в начало, а иногда в конец.
Set — неупорядоченное множество. Или о чём ты?
0
6 / 6 / 3
Регистрация: 13.09.2013
Сообщений: 48
25.08.2020, 03:28  [ТС] 4
Цитата Сообщение от korvin_ Посмотреть сообщение
Set — неупорядоченное множество
Приветствую, Korvin!
Да, я об этом. Я не знал, что оно не упорядочено, честно говоря. Буду смотреть дальше.
Теперь, я хочу понять, как мне организовать доступ к последнему добавленному значению в Set. Потому что, как я понял, вот это работает неверно.
Код
val counts = mutable.Set[Int]()
def getLastStep():Int = counts.last
Если Set неупорядоченное множество, то метод last класса Set будет возвращать не всегда последнее добавленное значение. Кажется действительно проблема в этом.

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()
[/SPOILER]
0
25.08.2020, 03:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2020, 03:28
Помогаю со студенческими работами здесь

Компилируется в С++ bulder 6.0 но не компилируется в VS 2010 express
Здравствуйте. есть небольшая программка которая с успехом компилируется в borland C++ builder 6.0...

В формате .cpp код компилируется, а в .c не компилируется
1).Подскажите почему в формате .cpp код компилируется, а в .c не компилируется 2). Как сделать...

Проверка гипотезы
Добрый день! В процессе написания курсовой работы зашел в тупик: не понимаю, почему программа...

Проверка гипотезы
Подскажите пожалуйста программу, которая по заданной выборке определяет закон распределения и его...

Проверка гипотезы
На двух аналитических весах, в одном и том же порядке, взвешены 10 проб химического вещества и...

Проверка нулевой гипотезы
Здравствуйте, помогите разобраться, как проверить нулевую гипотезу, что выборка принадлежит...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru