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

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

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

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

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

Вот задачка (увы, не сумел загрузить задачку сюда - 502 Bad Gateway. Гружу на сторонний хостинг)
https://i.ibb.co/CWxc3cG/Whats... -51-48.jpg

Вот мои попытки:
https://scastie.scala-lang.org... NF5e07PdZw

Кликните здесь для просмотра всего текста

Code Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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

Кликните здесь для просмотра всего текста

Code Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
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; mp=1001*1001; mk=1001; ...

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

Программа компилируется в Borland 6.0 но не компилируется в Visual Studio 2008
Ета програма компилируетса в борланде 6.0 но не компилируетса в Visualstudio 2008 и в борланде 10-м почему? #include&lt;iostream&gt; ...

3
6 / 6 / 3
Регистрация: 13.09.2013
Сообщений: 48
24.08.2020, 13:42  [ТС]
https://scastie.scala-lang.org... RQ8Ke3iX0A

Code Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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
 Аватар для korvin_
4552 / 2750 / 487
Регистрация: 28.04.2012
Сообщений: 8,675
24.08.2020, 15:00
Цитата Сообщение от Miostat Посмотреть сообщение
Отображение Set добавляет значения иногда в начало, а иногда в конец.
Set — неупорядоченное множество. Или о чём ты?
0
6 / 6 / 3
Регистрация: 13.09.2013
Сообщений: 48
25.08.2020, 03:28  [ТС]
Цитата Сообщение от korvin_ Посмотреть сообщение
Set — неупорядоченное множество
Приветствую, Korvin!
Да, я об этом. Я не знал, что оно не упорядочено, честно говоря. Буду смотреть дальше.
Теперь, я хочу понять, как мне организовать доступ к последнему добавленному значению в Set. Потому что, как я понял, вот это работает неверно.
Code Скопировано
1
2
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
Code Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.08.2020, 03:28
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Агрегаты и сущности в DDD микросервисах
Javaican 10.04.2025
Разработка современных программных систем часто приводит на распутье: монолит или микросервисы? Даже при выборе микросервисной архитектуры многие команды сталкиваются с проблемой правильного. . .
Многопоточность в C#: Task и параллельное программирование
UnmanagedCoder 10.04.2025
Современные процессоры уже давно перестали наращивать тактовую частоту в пользу увеличения количества ядер. Это создало интересную ситуацию: разработчики, привыкшие к последовательному. . .
Линейное решение нелинейной задачи будет применено как метод обработки данных из double buffering. Формулы от LM конечно с ошибками.
Hrethgir 10.04.2025
В продолжение Эта LM дала ответ похожий на нормальный. В комментриях мой комментарий - похоже она ошиблась с выведением итоговой формулы, но остальные проверю. Assistant qwen2. 5-14b-instruct . . . .
Переменные в Python
py-thonny 10.04.2025
Переменная в программировании — это символическое имя, связанное с областью памяти, в которой хранится значение. Она позволяет получать доступ к данным через понятные человеку идентификаторы, а не. . .
Многопоточность в C#: Task и асинхронные операции
UnmanagedCoder 10.04.2025
Многопоточность позволяет выполнять несколько операций одновременно, что важно для решения двух основных задач: повышения скорости выполнения вычислительно-сложных операций и сохранения отзывчивости. . .
Линейное решение не линейной задачи (емкость вычислений в сравнении с традиционными решениями пока не определена).
Hrethgir 10.04.2025
В рамках предстоящих вычислений пришлось (да, я тоже знаю про корень числа, и про степеня, и прочие теоремы, но. . . ) найти способ нахождения отношения двух углов. . . .
Запуск контейнеров Docker на ARM64
Mr. Docker 09.04.2025
Появление таких решений, как Apple M1/ M2, AWS Graviton, Ampere Altra и Raspberry Pi, сделало использование ARM-систем обыденностью для многих разработчиков и DevOps-инженеров. При этом Docker,. . .
Vue SFC компонент на PHP с Fusion
Jason-Webb 09.04.2025
PHP на сервере и JavaScript на клиенте — классическое сочетание, которое, несмотря на свою эффективность, создает определенный когнитивный диссонанс при разработке. В этом контексте появляются. . .
TypeScript vs JavaScript: Отличия и когда что использовать
Reangularity 09.04.2025
JavaScript появился в 1995 году как творение Брендана Эйха и быстро стал основой интерактивности в вебе. За свою историю он прошел путь от простого языка для манипуляций с DOM до полноценной. . .
Подключение Kafka к Elasticsearch
Codd 09.04.2025
Apache Kafka и Elasticsearch — две мощные технологии, которые при совместном использовании создают эффективную платформу для обработки и анализа данных в реальном времени. Kafka, выступая в роли. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер