Форум программистов, компьютерный форум, киберфорум
Языки JVM
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
5 / 5 / 3
Регистрация: 25.07.2016
Сообщений: 182
1

Groovy Теоретически-практический ? про замыкания (Groovy)

18.04.2018, 06:40. Показов 4774. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
order = ["X", "0", "0", "X", "X", "X", "0", "X", "X"]
V = 0; n = 3
def Vid = {it ->
           print it; print V
           if ((V+1)%n == 0) println() 
           ++V}
def Vvod_s () {print "Для выхода введите n => "; s = System.in.newReader().readLine()
}
Vid(order);  println("- - - -")
while (1) {
order = Poisk(order, n);  Vid(order)
Vvod_s (); if (s == "n") {break}
}
Вывод:

[X, 0, 0, X, X, X, 0, X, X]0- - - -
[X, 0, 0, X, 0, X, X, 0, X]1Для выхода введите n =>
[0, X, 0, X, 0, 0, 0, 0, 0]2
Для выхода введите n =>
[0, 0, 0, 0, 0, 0, 0, 0, 0]3Для выхода введите n =>
[0, 0, 0, 0, 0, 0, 0, 0, 0]4Для выхода введите n =>
[0, 0, 0, 0, 0, 0, 0, 0, 0]5
Для выхода введите n =>


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
n = 3; q = 9
order = ["X", "0", "0", "X", "X", "X", "0", "X", "X"]
def Vid (n, q) {
  for (int i = 0; i < q; i++) {
      print("${order[i]} ")
    if ((i+1)%n == 0) {println()}  
  }  
}
def Vvod_s () {print "Для выхода введите n => "; s = System.in.newReader().readLine()
}
 Vid (n, q);  println("- - - -")
while (1) {
order = Poisk(order, n);  Vid (n, q)
Vvod_s (); if (s == "n") {break}
}
Вывод при цикле вместо замыкания:

X 0 0
X X X
0 X X
- - - -
X 0 0
X 0 X
X 0 X
Для выхода введите n =>
0 X 0
X 0 0
0 0 0
Для выхода введите n =>
0 0 0
0 0 0
0 0 0
Для выхода введите n =>


Это фрагмент кода (псевдографика приложения "Live")
Вопрос следующий - можно ли с помощью замыкания сделать
такой же вывод как при цикле, и, если да, то просьба
предоставить код такого замыкания ...

Добавлено через 5 часов 46 минут
Ну вот, как-то так:
Java
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
//Live1.groovy
package groovy
 
def Vvod() {print "Vvedite n = "; s = System.in.newReader().readLine(); n = s as Integer}
def Spisok() {
    order = []; q = n**2
    for (int i = 0; i < q; i++) {        
      T = Math.round(Math.random() * 1)
      if (T == 1) {order = order + "X"} else {order = order + "0"}
   }
      return order 
}
def Poisk() { 
    order1 = []
  for (int i = 0;i < q; i++) {
          Xs = 0; p = (i+1)%n     
    if (((f = i-n)   >= 0 &&           order[f] == "X" && (Xs = Xs + 1)) |
        ((f = i-n+1) >= 0 && p != 0 && order[f] == "X" && (Xs = Xs + 1)) |
        ((f = i+1)   <  q && p != 0 && order[f] == "X" && (Xs = Xs + 1)) |
        ((f = i+n+1) <  q && p != 0 && order[f] == "X" && (Xs = Xs + 1)) |
        ((f = i+n)   <  q &&           order[f] == "X" && (Xs = Xs + 1)) |
        ((f = i+n-1) <  q && p != 1 && order[f] == "X" && (Xs = Xs + 1)) |
        ((f = i-1)   >= 0 && p != 1 && order[f] == "X" && (Xs = Xs + 1)) |
        ((f = i-n-1) >= 0 && p != 1 && order[f] == "X" && (Xs = Xs + 1))) {             
      switch (Xs) {          
        case 2 : if (order[i] == "X") {order1 = order1 + "X"}
                                 else {order1 = order1 + "0"}; break
        case 3 : order1 = order1 + "X"; break        
        default: order1 = order1 + "0"
         }
      }    else {order1 = order1 + "0"} 
   }    
    return order1 
}
/*def Vid() {
    y = 0
  for (i in order) {
       print(i+" "); if ((y+1)%n == 0) println(); ++y
   }  
}*/
def Vvod_s() {print "Для выхода введите n => "; s = System.in.newReader().readLine()
}
y = 0
def T = {order.each{print it+" "; if ((y+1)%n == 0) println(); ++y}}
Vvod();  println();  Spisok(); T(order)
println("- - - -")
while (1) {
order = Poisk(); T(order)
Vvod_s(); if (s == "n") {break}
}
Добавлено через 4 часа 10 минут
А можно и так:
Java
1
2
def T = {y = 0; order.each{print it+" "; if ((y+1)%n == 0) println(); ++y}}
/*def Vid() {y = 0; for (i in order) {print i+" "; if ((y+1)%n == 0) println(); ++y}}*/
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.04.2018, 06:40
Ответы с готовыми решениями:

Замыкания, и замыкания в объекте. Где данные?
Помогите пожалуйста разобраться где хранятся данные. Ниже 2 примера. В первом все вроде как понятно...

практический вопрос....
Вывел сайт клиента в ТОП20 и дальше ни в какую. Решил внутреннюю оптимизацию еще раз прошерстить....

Практический аспект задачи
Помогите отразить практический аспект задачи: var a,b:array of real; c:array of real; ...

Практический курс программирования на Си
Привет. В сети есть конспект лекций для обучения языку си школьников в старших классах -...

2
5 / 5 / 3
Регистрация: 25.07.2016
Сообщений: 182
19.04.2018, 21:55  [ТС] 2
Java
1
2
def Y = {print it+" "; if ((y+1)%n == 0) println(); ++y}
def T = {y = 0; order.each(Y)}
и T{} вместо T(order)
0
5 / 5 / 3
Регистрация: 25.07.2016
Сообщений: 182
21.04.2018, 17:04  [ТС] 3
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//.............................................................................
for (int i = 0;i < q; i++) {
          Xs = 0; def U = {Xs = Xs + 1}
          p = (i+1)%n; def R0 = {p != 0}; def R1 = {p != 1}
          def W = {order[f] == "X"}
    if (((f = i-n)   >= 0 &&         W{} && U{}) |
        ((f = i-n+1) >= 0 && R0{} && W{} && U{}) |
        ((f = i+1)   <  q && R0{} && W{} && U{}) |
        ((f = i+n+1) <  q && R0{} && W{} && U{}) |
        ((f = i+n)   <  q &&         W{} && U{}) |
        ((f = i+n-1) <  q && R1{} && W{} && U{}) |
        ((f = i-1)   >= 0 && R1{} && W{} && U{}) |
        ((f = i-n-1) >= 0 && R1{} && W{} && U{})) {
//..............................................................................
Добавлено через 17 часов 5 минут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def Poisk() { 
    order1 = []
    def W  = {order[f] == "X" && (Xs = Xs + 1)}
    def W0 = {p != 0 && W{}}; def W1 = {p != 1 && W{}}
    def X  = {order1 = order1 + "X"}; def O = {order1 = order1 + "0"}
  for (int i = 0;i < q; i++) {
          p = (i+1)%n; Xs = 0          
    if (((f = i-n)   >= 0 && W{})  |
        ((f = i-n+1) >= 0 && W0{}) |
        ((f = i+1)   <  q && W0{}) |
        ((f = i+n+1) <  q && W0{}) |
        ((f = i+n)   <  q && W{})  |
        ((f = i+n-1) <  q && W1{}) |
        ((f = i-1)   >= 0 && W1{}) |
        ((f = i-n-1) >= 0 && W1{})) {             
      switch (Xs) {          
        case 2 : if (order[i] == "X") {X{}} else {O{}}; break
        case 3 : X{}; break        
        default: O{}
         }
      }    else {O{}} 
   }    
    return order1 
}
0
21.04.2018, 17:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2018, 17:04
Помогаю со студенческими работами здесь

Практический семинар от Яндекса
Присоединяюсь! Делать там нечего! Потратите свои силы и время!

Указатели (pointers) и их практический смысл?
Добрый день, будьте добры, пожалуйста, объясните - вот я сейчас читаю про указатели (*pointers...

Как получить практический опыт программирования?
Доброго времени суток. Может, кто поделится лайфхаком - как получить практический опыт? Может...

В чём практический смысл async/await?
Пытаюсь разобраться с новомодными async / await, чтобы не быть мамонтом, но нифига не понимаю, в...


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

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