Суббота, 27 Апреля 2024, 16:29

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Записи участника » colencor [22]
Результаты поиска
colencorДата: Четверг, 26 Апреля 2018, 13:45 | Сообщение # 1 | Тема: Программирование на Groovy
был не раз
Сейчас нет на сайте
Дубль программы на Tcl'Tk:
Код
-----------------------------------------------------------------------------------------------------------------------------------
swinger = new SwingBuilder()
gui = swinger.frame(title:'Арабские << >> Римские', size: [760, 160]) {
  panel(layout: new FlowLayout()) {
  arabrim =  new JLabel('Это        приложение        переводит       из       арабской        системы        счисления       в       римскую        и           обратно!')
  arabrim.setBorder(BorderFactory.createEtchedBorder())
  panel().add(arabrim)
  panel(layout: new FlowLayout()) {
    arab1 = new JLabel('Арабское число:')
      panel().add(arab1)
        message11 = textField(columns: 12)
          button11 = swinger.button(text: 'Вычислить', actionPerformed: {message12.setText("${Arab_Rim(message11.text)}")})
            /*JRootPane rootPane = SwingUtilities.getRootPane(button11)
                      rootPane.setDefaultButton(button11)*/
          button12 = swinger.button(text: 'Очистить', actionPerformed: {
                     message11.selectAll(); message11.cut();message12.selectAll(); message12.cut()})
    arab2 = new JLabel('Римское   число:')
      panel().add(arab2)
        message12 = textField(columns: 12)}

    rim1  = new JLabel('Римское   число:')
      panel().add(rim1)
        message21 = textField(columns: 12)
          button21 = swinger.button(text: 'Вычислить', actionPerformed: {message22.setText("${Rim_Arab(message21.text)}")})
            /* JRootPane rootPane = SwingUtilities.getRootPane(button21)
                    rootPane.setDefaultButton(button21)*/
          button22 = swinger.button(text: 'Очистить', actionPerformed: {
                     message21.selectAll(); message21.cut();message22.selectAll(); message22.cut()})
    rim2  = new JLabel('Арабское число:')
      panel().add(rim2)
        message22 = textField(columns: 12)}}
gui.show()


Добавлено (09 августа 2017, 04:36)
---------------------------------------------
Другая версия проги:
Код
//chislo.groovy
import groovy.swing.SwingBuilder
import javax.swing.*
import java.awt.FlowLayout
import java.util.*
import java.awt.*
import java.awt.event.*

public class ArabRim_2 {
  def Arabrim_2(Arab) { ArabRim m2 = new ArabRim(); def   Rim = m2.Arabrim(Arab); return Rim }}
  def Arab_Rim(Arab) {ArabRim_2 m3 = new ArabRim_2();  Rim = m3.Arabrim_2(Arab)}

public class RimArab_2 {
  def Rimarab_2(Rim) { RimArab m1 = new RimArab(); def   Arab = m1.Rimarab(Rim); return Arab }}
  def Rim_Arab(Rim) {RimArab_2 m2 = new RimArab_2();  Arab = m2.Rimarab_2(Rim)}

swinger = new SwingBuilder()
gui = swinger.frame(title:'Арабские << >> Римские', size: [540, 160]) {
  panel(layout: new FlowLayout()) {
  arabrim =  new JLabel('Это  приложение  переводит  из  арабской  системы  счисления  в  римскую  и  обратно !')
  arabrim.setBorder(BorderFactory.createEtchedBorder())
  panel().add(arabrim)
  panel(layout: new FlowLayout()) {
    arab = new JLabel('Арабское число:')
      panel().add(arab)
        message1 = textField(columns: 12)
          button11 = swinger.button(text: 'Вычислить', actionPerformed: {message2.setText("${Arab_Rim(message1.text)}")})
            /*JRootPane rootPane = SwingUtilities.getRootPane(button11)
                      rootPane.setDefaultButton(button11)*/
          button12 = swinger.button(text: 'Очистить', actionPerformed: {message1.selectAll(); message1.cut()})
    }
  panel(layout: new FlowLayout()) {
    rim  = new JLabel('Римское   число:')
      panel().add(rim)
        message2 = textField(columns: 12)
          button21 = swinger.button(text: 'Вычислить', actionPerformed: {message1.setText("${Rim_Arab(message2.text)}")})
           /* JRootPane rootPane = SwingUtilities.getRootPane(button21)
                    rootPane.setDefaultButton(button21)*/
          button22 = swinger.button(text: 'Очистить', actionPerformed: {message2.selectAll(); message2.cut()})
    }}}
gui.show()


Добавлено (10 сентября 2017, 17:39)
---------------------------------------------
Совершенно случайный список:
Код
def Vvod () {print "Vvedite n = "; s = System.in.newReader().readLine(); n = s as Integer}
def Spisok (n) {
    order = [null]; Q = 0;
  while (Q < n) {
     J = 0
     t = Math.round(Math.random() * n)
    if (t != 0) {for (i in order) {if (t != i) {++J} }
      if (J == order.size()) {order = order + t - null}
      }     
      order1 = order; Q = order1.size()
   }       
   return order1
}
def Vivod () {print "order1 = "; println order1}
while (1)  {
  Vvod (); if(n == "n") {break}
  Spisok (n)
  Vivod ()
}


Добавлено (18 сентября 2017, 21:59)
---------------------------------------------
Код
//--------------------------------------------------------
if (J == order.size()) {order = order + t}
      }     
      order1 = order - null; Q = order1.size()
//--------------------------------------------------------


Добавлено (05 октября 2017, 22:08)
---------------------------------------------
Код
def Spisok (n) {
    order = [null]; Q = 0
  while (Q <= n) {
     J = 0; T = Math.round(Math.random() * n)
    if(T != 0) {for(I in order) {if(T != I) {++J} }
      if(J == order.size()) {order = order + T}
      }   
      Q = order.size()
   }       
   order1 = order - null
}


Добавлено (20 ноября 2017, 00:30)
---------------------------------------------
Код
def Spisok (n) {
    order = [0]; Q = 0
  while (Q <= n) {
     J = 0; T = Math.round(Math.random() * n)
       for(I in order) {if(T != I) {++J}
      if(J == order.size()) {order = order + T}       
      Q = order.size()
   }       
   order1 = order - 0
}


Добавлено (26 Апреля 2018, 03:17)
---------------------------------------------
Игрушка Puzzle:
Код
//puzzle.groovy
package groovy

import groovy.swing.SwingBuilder
import javax.swing.*
import java.awt.FlowLayout
import java.util.*
import java.awt.*
import java.awt.event.*

jfrm = new JFrame('N-размерный puzzle')
gbag = new GridBagLayout()
gbc  = new GridBagConstraints()
gbc.fill = GridBagConstraints.BOTH
jfrm.getContentPane().setLayout(gbag)
jfrm.setSize(550, 550)
btnDim = new Dimension(50, 50)
gbc.weightx = 0.0       
gbc.insets  = new Insets(0, 0, 0, 0)

//N = Math.round(Math.random()*10); if (0 <= N && N <= 2) {N = 4} else {return N}

public class Spisok_2 {def spisok_2(N) {Spisok m1 = new Spisok(); def   order = m1.spisok(N)}}
                       def spisok(N) {m2 = new Spisok_2();  order = m2.spisok_2(N)}
N = 3
chisla = [1, 2, 3, 4, 5, 6, 7, 8, ""]//spisok(N)
Tablica()
Oglavlenie()
jfrm.setVisible(true)

def Tablica() {for (int I = 0; I < N**2; I++) knopka(I, N)}
def knopka(I, N) {  
  Y = (int)(I/N); X = I%N
  jbtnCh = new JButton(text: chisla[I], actionPerformed: {e -> e.getSource().setText(Poisk(I))})    
  gbc.gridy = Y+1; gbc.gridx = X+1  
  jbtnCh.setPreferredSize(btnDim)   
  gbag.setConstraints(jbtnCh, gbc)
  jfrm.getContentPane().add(jbtnCh)
}
def Poisk(I) {         
    def W = {chisla[F] == ""}
  if (((F = I-N) >= 0     &&  W{}) || ((F = I+1) <  N**2  &&  W{}) ||
      ((F = I+N) <  N**2  &&  W{}) || ((F = I-1) >= 0     &&  W{}))
      {chisla[F] = chisla[I]; knopka(F, N); chisla[I] = ""} else {"${chisla[I]}"}     
}

GUI глючит, может кто нибудь подсказать решение deal

Добавлено (26 Апреля 2018, 13:45)
---------------------------------------------
Код
//Spisok.groovy
package groovy
public class Spisok {
Integer S, J, T, Q
List Order
def spisok (N) {
S = (N as Integer )**2
Order = [0]; Q = 0
while (Q < S) {
J = 0; T = Math.round(Math.random() * S)
for (i in Order) {if (T != i) {++J}}
if (J == Order.size()) {Order = Order + T}
Q = Order.size()
}
Order = Order - 0 + ""
   }
}


litl

Сообщение отредактировал colencor - Четверг, 26 Апреля 2018, 13:47
colencorДата: Суббота, 10 Февраля 2018, 20:38 | Сообщение # 2 | Тема: Языки программирования на основе JVM
был не раз
Сейчас нет на сайте
В этом разделе обсуждается всё, что связанно с Java ... deal
И если это так, тогда я буду в этой теме задавать вопросы про Groovy
А если не так - :(

Добавлено (13 апреля 2017, 20:08)
---------------------------------------------
Как можно из одного файла вызвать метод описанный в другом файле?...

Добавлено (08 мая 2017, 23:58)
---------------------------------------------
Наверное, стоило бы назвать эту тему "Вопросы - ответы", а то как то глухо ... :(
Приходиться отвечать на свой вопрос самому:
Код
// Main.java
public class Main {
    public static void main(String args[]) {
        chis m2 = new chis();
        Object run = m2.run();
        pro m3 = new pro();
        m3.run();
    }
}

Код
//pro.java
class pro {

    public pro() {
    }

    void run() {
        throw new UnsupportedOperationException("Not yet implemented");
    }

}

Код
//chis.groovy
public class RimArab_2 {
  def Rimarab_2(Rim) { RimArab m1 = new RimArab(); def   Arab = m1.Rimarab(Rim); return Arab }}
def Method() {RimArab_2 m2 = new RimArab_2();  Arab = m2.Rimarab_2(Rim)}

public class ArabRim_2 {
   def Arabrim_2(Arab) { ArabRim m2 = new ArabRim(); def   Rim = m2.Arabrim(Arab); return Rim }}
def Method2() {ArabRim_2 m3 = new ArabRim_2();  Rim = m3.Arabrim_2(Arab)}

def Vvod() {print "Vvedite Rim = "; Rim = System.in.newReader().readLine()}
def Vivod() { print "Arab = "; println Arab }
def Vvod2() {print "Vvedite Arab = "; Arab = System.in.newReader().readLine()/* ; Arab = s as Integer*/}
def Vivod2() { print "Rim = "; println Rim }
while (1) {
    Vvod()
    Method()
    Vivod()
     Vvod2()
    Method2()
    Vivod2()
}

Код
//RimArab.groovy
public class RimArab {
    String  f
    Integer Arab
    Map rimArab = ["I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000]
  def Rimarab (Rim) {
    f = Rim.replace("IV", "IIII").replace("IX", "VIIII").replace("XL", "XXXX").replace("XC", "LXXXX").replace("CD", "CCCC").replace("CM", "DCCCC")
    Arab = 0; for(i in f) { Arab = Arab + rimArab[i]}; return Arab
   }
}

Код
//ArabRim.groovy
public class ArabRim {
    String Rim, A, r, r2, r1
    Integer i, x, iI, iV, iX, x1
    List L, rim = [ "I", "V", "X", "L", "C", "D", "M"]
  def Arabrim (Arab) {
    A = Arab.reverse(); i = 0; L = []
  for( v in A){ x = v as Integer; iI = i*2; iV = 2*i+1; iX = 2*i+2
    switch (x){
      case 4:    r  = rim[iI] + rim[iV]; break
      case 9:    r  = rim[iI] + rim[iX]; break
      case 1..3: r  = ""; for( int j = 0; j < x;  j++){ r  = r  + rim[iI]}; break
      case 5..8: r2 = ""; x1 = x - 5; for( int j = 0; j < x1; j++){ r2 = r2 + rim[iI]}; r1 = rim[iV]; r = r1 + r2; break
      case 0:    r  = ""; break }
           ++i; L = L + r }
    Rim = L.reverse().join(); return Rim
          }
}

Делалось и компоновалось всё это в NetBeans.

Добавлено (10 Февраля 2018, 20:38)
---------------------------------------------
Игрушка puzzle :

Код
//puzzle.groovy
package groovy
import groovy.swing.SwingBuilder
import javax.swing.*
import java.awt.FlowLayout
import java.util.*
import java.awt.*
import java.awt.event.*

jfrm = new JFrame('N-размерный puzzle')
gbag = new GridBagLayout()
gbc  = new GridBagConstraints()
gbc.fill = GridBagConstraints.BOTH
jfrm.getContentPane().setLayout(gbag)
jfrm.setSize(550, 550)
btnDim = new Dimension(50, 50)
gbc.weightx = 0.0       
gbc.insets  = new Insets(0, 0, 0, 0)

//N = Math.round(Math.random()*10); if (0 <= N && N <= 2) {N = 4} else {return N}

public class Spisok_2 {def spisok_2(N) {Spisok m1 = new Spisok(); def   order = m1.spisok(N)}}
                       def spisok(N) {m2 = new Spisok_2();  order = m2.spisok_2(N)}
N = 3
chisla = [1, 2, 3, 4, 5, 6, 7, 8]//spisok(N)
Tablica(N)
jfrm.setVisible(true)

def Tablica(N) {for (int I = 0; I < N**2 - 1; I++) {knopka(N, I)}}
def knopka(N, I) {  
  Y = (int)(I/N); X = I%N
  jbtnCh = new JButton(text: chisla[I], actionPerformed: {e -> e.getSource().setText(null); Poisk(N, I)})    
  gbc.gridy = Y+1; gbc.gridx = X+1  
  jbtnCh.setPreferredSize(btnDim)   
  gbag.setConstraints(jbtnCh, gbc)
  jfrm.getContentPane().add(jbtnCh)
}
def Poisk(N, I) {    
  if (((F = I-N) >= 0     &&  chisla[F] == null) ||
      ((F = I+1) <  N**2  &&  chisla[F] == null) ||
      ((F = I+N) <  N**2  &&  chisla[F] == null) ||
      ((F = I-1) >= 0     &&  chisla[F] == null))
      {chisla[F] = chisla[I]; knopka(N, F); chisla[I] = null}     
}

В данный момент мне надо знать что надо поместить вместо setText(null), что-бы кнопка удалялась, и как поместить полученное в ветку then метода def Poisk(N, I) , что-бы удалялась только кнопка соседняя с пустым полем ...
Код
//Spisok.groovy
package groovy
  public class Spisok {
    Integer S, J, T, Q
    List Order
def spisok (N) {
    S = (N as Integer  )**2 - 1
    Order = [0]; Q = 0
  while (Q <= S) {
     J = 0; T = Math.round(Math.random() * S)
    for (i in Order) {if (T != i) {++J}}
      if (J == Order.size()) {Order = Order + T}         
       Q = Order.size()
      }
    Order = Order - 0
   }
}

/
Код
/Main.java
package javaclass;
public class Main {
      public static void main(String args[]) {
        puzzle m2 = new puzzle();
        m2.run();
    }
}

Код
//puzzle.java
package javaclass;
class puzzle {
    void run() {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}


litl

Сообщение отредактировал colencor - Вторник, 09 Мая 2017, 00:04
colencorДата: Четверг, 30 Ноября 2017, 20:04 | Сообщение # 3 | Тема: Язык программирования Io
был не раз
Сейчас нет на сайте
Вот код:
Код
proc map {lambda list} {
   set result {}
   foreach item $list {
      lappend result [apply $lambda $item]
   }
   return $result
}
set x {a bb ccc dddd eeeee }
map {x {return [append x xyz]}} $x
#map {x {return [string length $x]:$x}} $x
#set x {1 5 10 50 100 500 1000}
#map {x {return [expr 2 * $x]}} $x

Вопрос знатокам Tcl!
Почему если после append стоит $x то получается
xyz xyz xyz xyz xyz
а если просто x, то тогда
axyz bbxyz cccxyz ..., хотя такой результат логичнее при $x,
исходя из других примеров...

Добавлено (04 января 2017, 01:24)
---------------------------------------------
Lua:
Код
rim = {"M", "D", "C", "L", "X", "V", "I"}
function dom(a, b)
  x = (a - math.fmod(a, b))/b
  return x
end
function a_r(Arab)
     local qm = ""
  d = dom(Arab, 1000)
  for k = 1, d do
     qm = qm .. "M"
  end
  w = ""
  for i = 1, 3 do
  s = dom(math.fmod(Arab, math.pow (10, (4-i))), math.pow (10, (3-i)))
  i3 = 2*i+1; i2 = 2*i; i1 = 2*i-1; s1 = s-5
      if s == 9 then q = rim[i3] .. rim[i1]
     elseif s == 4 then q = rim[i3] .. rim[i2]
     elseif 0 < s and s < 4 then q = ""
        for j = 1, s do q = q .. rim[i3] end
     elseif 4 < s and s < 9 then q1 = rim[i2]; q2 = ""
        for j = 1, s1 do q2 = q2 .. rim[i3] end
    q =  q1 .. q2
    else       q = ""
  end
w = w .. q
end
return qm, w
end
repeat
print("Введите Arab = ")
Arab = io.read()
print("Rim = ", a_r(Arab))
until Arab == "n"

Другой вариант:
Код
rim = {"I", "V", "X", "L", "C", "D", "M"}
function a_r(Arab)
Bara = Arab:reverse()
local U = {}; local j = 1
for i in string.gmatch(Bara, ".") do U[j] = i; j=j+1 end
function values (t)
   local k = 0
   return function () k = k + 1; return t[k] end
   end
   i = 0; w = {}; l = 1
for t in values(U) do
   s = t + 0
         ii = 2*i+1; iv = 2*i+2; ix = 2*i+3; s1 = s-5
   if s == 9 then q = rim[ii] .. rim[ix]
  elseif s == 4 then q = rim[ii] .. rim[iv]
  elseif s < 4 then q = ""
    for j = 1, s do q = q .. rim[ii] end
  else       q1 = rim[iv];  q2 = ""
    for j = 1, s1 do q2 = q2 .. rim[ii] end
        q =  q1 .. q2
end
l = Arab:len() - i
w[l] = q
i = i + 1
end
return table.concat(w)
end
repeat
print("Введите Arab = ")
Arab = io.read()
print("Rim = ", a_r(Arab))
until Arab == "n"


Добавлено (16 февраля 2017, 01:36)
---------------------------------------------
Удобочитаемый код на Groovy:
Код
List Rim = [ "I", "V", "X", "L", "C", "D", "M"]
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
while(1) {
print "Vvedite Arab = "
Arab = br.readLine(); if ( Arab == "n") {break}
A = Arab.reverse(); i = 0; L = []
for( v in A){ x = v as Integer; iI = i*2; iV = 2*i+1; iX = 2*i+2
              switch (x){
                  case 4: r = Rim[iI] + Rim[iV]; break
                  case 9: r = Rim[iI] + Rim[iX]; break
                  case 1..3: r  = ""; for( int j = 0; j < x;  j++){ r  = r  + Rim[iI]}; break
                  case 5..8: r2 = ""; x1 = x - 5; for( int j = 0; j < x1; j++){ r2 = r2 + Rim[iI]}; r1 = Rim[iV]; r = r1 + r2; break
                  case 0: r = ""; break
                        }; ++i; L = L + r}
S = L.reverse().join(); print "Rim = "; println S
}


Добавлено (19 февраля 2017, 00:44)
---------------------------------------------
Улучшенная версия Arab_Rim (Tcl):
Код
#!/usr/local/bin/wish
set a_r {I V X L C D M}
while 1 {
puts stdout { Vvedite Arab:}
set Arab [gets stdin]
set Arabn [split $Arab {}]
set Zx [string reverse $Arabn]
set I 0; set W ""; set W2 ""                       
foreach V $Zx { set I2 [expr 2*$I]; set I1 [expr 2*$I+1]
                set I3 [expr 2*$I+2]; set V1 [expr $V - 5]
            if {$V == 4} {
        append W [lindex $a_r $I1] [lindex $a_r $I2]
      } elseif {$V == 9} {
        append W [lindex $a_r $I3] [lindex $a_r $I2]
      } elseif {$V1 < 0} {
         for {set J 0} {$J < $V} {incr J} {
        append W [lindex $a_r $I2]
      }} else {
      for {set J 0} {$J < $V1} {incr J} {
        append W [lindex $a_r $I2]
                    }
        append W [lindex $a_r $I1]
              }
      incr I
      }
       set L [string reverse $W]
               puts stdout "Arab = $Arab ===> Rim = $L"
}


Добавлено (04 марта 2017, 23:07)
---------------------------------------------
Код
def Vvod () {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
print "Vvedite Rim = "; Rim = br.readLine()
            }
def rimarab (Rim) {
Map rimArab = [ "I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000]
f = Rim.replace("IV", "IIII").replace("IX", "VIIII").replace("XL", "XXXX").replace("XC", "LXXXX").replace("CD", "CCCC").replace("CM", "DCCCC")
Arab = 0; for(i in f) { Arab = Arab + rimArab[i]}
                  }
def Vivod () { print "Arab = "; println Arab}
while (1) {
Vvod (); if(Rim == "n") {break}
rimarab (Rim)      
Vivod ()  }


Добавлено (08 марта 2017, 09:15)
---------------------------------------------
Код
def Vvod () {print "Vvedite Rim = "; Rim = System.in.newReader().readLine()}


Добавлено (23 марта 2017, 13:25)
---------------------------------------------
Код Groovy и Swing:
Код
import groovy.swing.SwingBuilder
import javax.swing.JOptionPane
def ArabRim (Arab) {
List Rim = [ "I", "V", "X", "L", "C", "D", "M"]
A = Arab.reverse(); i = 0; L = []
for( v in A){ x = v as Integer; iI = i*2; iV = 2*i+1; iX = 2*i+2
              switch (x){
                  case 4: r = Rim[iI] + Rim[iV]; break
                  case 9: r = Rim[iI] + Rim[iX]; break
                  case 1..3: r  = ""; for( int j = 0; j < x;  j++){ r  = r  + Rim[iI]}; break
                  case 5..8: r2 = ""; x1 = x - 5; for( int j = 0; j < x1; j++){ r2 = r2 + Rim[iI]}; r1 = Rim[iV]; r = r1 + r2; break
                  case 0: r = ""; break
                        }; ++i; L = L + r}
S = L.reverse().join(); return S
                  }
swing = new SwingBuilder()
button = swing.button(text: 'Вычислить', actionPerformed: {
JOptionPane.showMessageDialog(frame, ArabRim(message.text))
})
frame = swing.frame(title: 'Арабские в римские'){
    panel(){
    message = textField(columns: 10)
    widget(button)
}}
frame.pack()
frame.show()       


Код
import groovy.swing.SwingBuilder
import javax.swing.JOptionPane
def RimArab (Rim) {
Map rimArab = [ "I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000]
f = Rim.replace("IV", "IIII").replace("IX", "VIIII").replace("XL", "XXXX").replace("XC", "LXXXX").replace("CD", "CCCC").replace("CM", "DCCCC")
Arab = 0; for(i in f) { Arab = Arab + rimArab[i]}; return Arab
                  }                 
swing = new SwingBuilder()
button = swing.button(text: 'Вычислить', actionPerformed: {
         JOptionPane.showMessageDialog(frame, RimArab(message.text))
})
//button1 = swing.button(text: 'Очистить', actionPerformed: {//message.cut()})
         // JOptionPane.showMessageDialog(frame, message.cut())
//})
frame = swing.frame(title: 'Римские в арабские'){
    panel(){
    message = textField(columns: 12)
    widget(button)
   // widget(button1)
}}
frame.pack()
frame.show()


Добавлено (03 апреля 2017, 18:43)
---------------------------------------------
Извините, смотрите в теме Программирование на Groovy

Добавлено (13 августа 2017, 18:20)
---------------------------------------------
Вот мальчики и девочки что получается когда пытаешься забить
гвоздь микроскопом (рубанком по моему будет правильнее :) )
Код на CLIPS:
Код
(defrule arab_rim   =>
(bind ?a_r  "M" "D" "C" "L" "X" "V" "I")
(bind ?R (create$ ?a_r))
(printout t "Vvedite Arab = ")
(bind ?Arab (read))
(printout t "Arab = " ?Arab "  ==>  " "Rim = ")
(bind ?Rt (div ?Arab 1000 ))
(if (> ?Rt 0) then (loop-for-count  ?Rt do (bind ?W "M") (printout t ?W )))
(loop-for-count (?I 0 2) do (bind ?S (div (mod ?Arab (** 10 (- 3 ?I))) (** 10 (- 2 ?I))))
(bind ?Ii (+ (* ?I 2) 3))
(bind ?Vi (+ (* ?I 2) 2))
(bind ?Xi (+ (* ?I 2) 1))
(bind ?S1 (- ?S 5))
(if (= ?S 0) then (bind ?Q "")
else
(if (= ?S 9) then (bind ?Q (str-cat (nth$ ?Ii ?R) (nth$ ?Xi ?R)))
else
(if (= ?S 4) then (bind ?Q (str-cat (nth$ ?Ii ?R) (nth$ ?Vi ?R)))
else
(if (< ?S1 0) then (loop-for-count ?S  do (bind ?Q1 (nth$ ?Ii ?R)) (printout t ?Q1) (bind ?Q ""))
              else (bind ?Q2 (nth$ ?Vi ?R)) (printout t ?Q2)
                   (loop-for-count ?S1 do (bind ?Q3 (nth$ ?Ii ?R)) (printout t ?Q3))
(bind ?Q "")     
))))
(printout t ?Q))
(printout t crlf))

Добавлено (30 ноября 2017, 20:04)
---------------------------------------------
Вы знаете что делает этот код :D

Код
Spisok := method(n,
  order := list(0); Q := 0
  while(Q <= n,
    J := 0; T := (Number Random value(1, n) round)
   order foreach(I, if(T != I, J := J + 1))
     if(J == order size, order := order append(T))
        Q := order size
   )
    order select(order, order > 0)
)   
input  := method(File standardInput readLine)
writeln("Press Enter for exit")
loop(" N = " print; inp := input; if(inp isNil, break)
     n := inp asNumber; if(n isNan,  break )
  W := Spisok(n)
writeln( " Spisok = ", W)
)


litl

Сообщение отредактировал colencor - Воскресенье, 13 Августа 2017, 18:25
colencorДата: Понедельник, 20 Ноября 2017, 00:22 | Сообщение # 4 | Тема: Программирование на Tcl'Tk
был не раз
Сейчас нет на сайте
Более компактная и упрощённая реализация команды создания списка:
Код
  proc Vvod {a} {
      global t  
      puts stdout { Vvedite a:}
      set a [gets stdin]
      set t [format "%d" $a]         
    }
# ----------------------------------------------------------    
  proc Bez_X {order} {
        set len [expr [llength $order] - 1]
        set len1 [expr $len + 1]
    for {set i 0} {$i <= $len} {incr i} {
   for {set j [expr {$i + 1}]} {$j <= $len1} {incr j} {
     set qi [lindex $order $i]
     set qj [lindex $order $j]
   if {$qi == $qj} {
     set order [lreplace $order $j $j]
       }
     }
   set len1 [llength $order]
    }   
    return $order
}
# -----------------------------------------------------------   
  proc Spisok {t} {
    for {set k 1} {$k <= $t} {incr k} {
      set j [expr {round(rand()*$t)}]
    if {$j == 0} {
      lappend order [expr {$j + 1}]
}   else {
      lappend order $j
     }     
    }
   return $order
}  
# -------------------------------------------------------------
  proc Ok_spisok {t} {
     set order [Bez_X [Spisok $t]]
   for {set x 1} {$x <= $t} {incr x} {
      set order [Bez_X [lappend order $x]]
    }
   return $order
}
# ----------------------------------------------------------------   
    while 1 {
      Vvod a
    if {$t == n} {
   break }
   set order [Ok_spisok $t]
      puts stdout "order = $order"   
}


Добавлено (16 апреля 2017, 00:55)
---------------------------------------------
Код
proc Ok_spisok {t} {
     set order [Bez_X [Spisok $t]]
# При таком цикле получающийся список становится более "случайным"
# игра становится более интересной (сложной)  
   for {set x $t} {1 <= $x} {incr x -1} {
# -----------------------------------------------------------------    
      set order [Bez_X [lappend order $x]]
    }
   return $order
}


Добавлено (14 мая 2017, 13:28)
---------------------------------------------
А вот теперь список становится ещё более "случайным" ...
Код
proc Qwer {t} {
      set order_1 [Bez_X [Spisok $t]]
   for {set x $t} {1 <= $x} {incr x -1} {
      set order_1 [Bez_X [lappend order_1 $x]]
    }
     set order [Bez_X [Spisok $t]]
       foreach valume $order_1 {
      set order [Bez_X [lappend order $valume]]
    }
   return $order
}


Добавлено (22 мая 2017, 20:46)
---------------------------------------------
А теперь у меня просьба!
Мне нужен код который правильно делает то,
что должен по идее делать следующий код:
Код
entry  .entry   -textvar a
bind   .entry <Return> {[eval {Vvod $a}] }
pack   .entry   -side left

proc Vvod a {
set u [format "%d" a]
puts stdout "u = $u"}


Добавлено (15 июня 2017, 22:09)
---------------------------------------------
И тишина ...
Ладно, вот Вам -
Код
source [file join [file dirname [info script]] chisla.tcl]

package require Tk
. config -bg gray75
set w .search
catch {destroy $w}
toplevel $w
wm title $w "Арабские << >> Римские!"
frame  $w.tri
label  $w.tri.label3  -text "Это  приложение    переводит      числа из    арабской
системы        счисления    в    римскую    и    обратно!"
pack   $w.tri.label3  -side left

frame  $w.two
label  $w.two.label2  -text "Арабское_число:"
entry  $w.two.entry2  -textvar Arab           
button $w.two.button3 -text "Вычислить!" -command {tk_messageBox  -title "Арабское в Римское " \
                    -message "Арабское $Arab  ==>  Римское [eval {Runo $Arab}]" }
bind   $w.two.entry2 <Return> { tk_messageBox  -title "Арабское в Римское " \
                    -message "Арабское $Arab  ==>  Римское [eval {Runo $Arab}]" }
button $w.two.button4 -text "Очистить!"  -command {$w.two.entry2 delete 0 [string length $Arab]}
bind   $w.two.entry2 <Delete> {$w.two.entry2 delete 0 [string length $Arab]}
pack   $w.two.label2  $w.two.entry2  $w.two.button3  $w.two.button4  -side left
         
frame  $w.one
label  $w.one.label1  -text "Римское__число:"
entry  $w.one.entry1  -textvar Rim     
button $w.one.button1 -text "Вычислить!" -command {tk_messageBox  -title "Римское в Арабское" \
                    -message "Римское $Rim  ==>  Арабское [eval {Run $Rim}]"}
bind   $w.one.entry1  <Return> {tk_messageBox  -title "Римское в Арабское" \
                    -message "Римское $Rim  ==>  Арабское [eval {Run $Rim}]"}       
button $w.one.button2 -text "Очистить!"  -command {$w.one.entry1 delete 0 [string length $Rim]}
bind   $w.one.entry1 <Delete> {$w.one.entry1 delete 0 [string length $Rim]}
pack   $w.one.label1  $w.one.entry1  $w.one.button1  $w.one.button2  -side left

pack   $w.tri  $w.two  $w.one  -side top


Добавлено (18 июня 2017, 20:00)
---------------------------------------------
А теперь, что бы не загромождать ответ лишним кодом:
Код
set E [expr {.1/$u}]
set R [expr {2.5/$u}]

proc puzzleSwitch {w num} {
    global xpos ypos E R
    if   {(($ypos($num) >= ($ypos(space) - $E))
     && ($ypos($num) <= ($ypos(space) + $E))
     && ($xpos($num) >= ($xpos(space) - $R))
     && ($xpos($num) <= ($xpos(space) + $R)))
    || (($xpos($num) >= ($xpos(space) - $E))
     && ($xpos($num) <= ($xpos(space) + $E))
     && ($ypos($num) >= ($ypos(space) - $R))
     && ($ypos($num) <= ($ypos(space) + $R)))} {
    ...............................................................................
    }  }

Теперь прога работает и при размерности 2 и 3!

Следующий кусок кода ограничивает ввод размерности от 3 до 10 включительно.
Размерность 2 убрана потому, что пазлы ( 3 шт ) при ней "ходят по кругу".
Кто не понял - поставте прогу на выполнение ...
Код
if {$a < 3} {    
tk_messageBox  -title "Предупреждение!"   -message "Число a = $a < 3"
exit     
} else {
if {$a > 10} {
tk_messageBox  -title "Предупреждение!"   -message "Число a = $a > 10"
exit
} else {
set u [format "%d" $a]
set d [expr {1.0 / $u}]
set t [expr {round(pow($u, 2)) - 1}]
set order [Qwer $t]
}}


Добавлено (10 июля 2017, 17:01)
---------------------------------------------
Творчески переработанная и улучшенная прога по переводу чисел:
Код
source [file join [file dirname [info script]] chisla.tcl]

package require Tk
. config -bg gray75
set w .search
catch {destroy $w}
toplevel $w
wm title $w "Арабские << >> Римские!"
frame  $w.one
label  $w.one.label   -text "Это    приложение    переводит    числа    из    арабской    системы \
                             счисления    в    римскую    и    обратно!"
pack   $w.one.label   -side left

frame  $w.two
label  $w.two.label1    -text "Арабское  число:"
entry  $w.two.entry1    -textvar Arab -fg red -validate all -vcmd {ValidInt %P}         
ttk::button $w.two.button1   -text "Вычислить!" -command { $w.two.entry2  insert 0  "[eval {Arab_Rim $Arab}]"}
bind   $w.two.entry1  <Return> { $w.two.entry2  insert 0  "[eval {Arab_Rim $Arab}]" }
ttk::button $w.two.button2   -text "Очистить!"   -command {$w.two.entry1 delete 0 end; $w.two.entry2 delete 0 end}
bind   $w.two.entry1  <Delete> {$w.two.entry1 delete 0 end; $w.two.entry2 delete 0 end}
label  $w.two.label2    -text " Римское    число:"
entry  $w.two.entry2    -textvar myVar -fg blue
pack   $w.two.label1   $w.two.entry1  $w.two.button1 \
       $w.two.button2  $w.two.label2  $w.two.entry2  -side left
    
frame  $w.three
label  $w.three.label1   -text "Римское    число:"
entry  $w.three.entry1   -textvar Rim -fg blue -validate all -vcmd {ValidIM %P}
ttk::button $w.three.button1  -text "Вычислить!" -command {$w.three.entry2  insert 0  "[eval {Rim_Arab $Rim}]"}
bind   $w.three.entry1  <Return> {$w.three.entry2  insert 0  "[eval {Rim_Arab $Rim}]"}       
ttk::button $w.three.button2  -text "Очистить!"   -command {$w.three.entry1 delete 0 end; $w.three.entry2 delete 0 end}
bind   $w.three.entry1  <Delete> {$w.three.entry1 delete 0 end; $w.three.entry2 delete 0 end}
label  $w.three.label2   -text " Арабское  число:"
entry  $w.three.entry2   -textvar myVar_2 -fg red
pack   $w.three.label1   $w.three.entry1  $w.three.button1 \
       $w.three.button2  $w.three.label2  $w.three.entry2  -side left
          
pack   $w.one  $w.two  $w.three  -side top

Код
proc ValidInt {Arab} {
     return [expr {[string is integer $Arab]
      && [expr {$Arab < 4000}]}]
}

Код
proc ValidIM {Rim} {
     return [regexp {^(M{0,3})(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$} $Rim]
}


Добавлено (01 августа 2017, 15:33)
---------------------------------------------
Упрощённый интерфейс проги:
Код
source [file join [file dirname [info script]] chisla.tcl]

package require Tk
. config -bg gray75
set w .search
catch {destroy $w}
toplevel $w
wm title $w "Арабские << >> Римские!"
frame  $w.one
label  $w.one.label   -text "Это приложение переводит числа из арабской системы \
                             счисления в римскую и обратно!"
pack   $w.one.label   -side left

frame  $w.two
label  $w.two.label1    -text "Арабское  число:"
entry  $w.two.entry1    -textvar Arab  -fg red  -validate all -vcmd {ValidInt %P}
entry  $w.two.entry2    -textvar Rim   -fg blue -validate all -vcmd {ValidIM %P}        
ttk::button $w.two.button1   -text "Вычислить!" -command {$w.two.entry2  insert 0 "[eval {Arab_Rim $Arab}]" ;\
                    $w.two.entry1  insert 0 "[eval {Rim_Arab $Rim }]"}
ttk::button $w.two.button2   -text "Очистить!"  -command {$w.two.entry1 delete 0 end; $w.two.entry2 delete 0 end}                    
bind   $w.two.entry1  <Return> {$w.two.entry2  insert 0 "[eval {Arab_Rim $Arab}]"}
bind   $w.two.entry2  <Return> {$w.two.entry1  insert 0 "[eval {Rim_Arab $Rim }]"}
bind   $w.two.entry1  <Delete> {$w.two.entry1 delete 0 end; $w.two.entry2 delete 0 end}
bind   $w.two.entry2  <Delete> {$w.two.entry1 delete 0 end; $w.two.entry2 delete 0 end}
label  $w.two.label2    -text " Римское    число:"
pack   $w.two.label1   $w.two.entry1  $w.two.button1 \
       $w.two.button2  $w.two.label2  $w.two.entry2  -side left
          
pack   $w.one  $w.two   -side top


Добавлено (01 августа 2017, 17:44)
---------------------------------------------
Была найдена ошибка и переформатирован текст:
Код
source [file join [file dirname [info script]] chisla.tcl]

package require Tk
. config -bg gray75
set w .search
catch {destroy $w}
toplevel $w
wm title $w "Арабские << >> Римские!"
frame  $w.one
label  $w.one.label    -text "Это приложение переводит числа из арабской системы \
                             счисления в римскую и обратно!"
pack   $w.one.label    -side left

frame  $w.two
label  $w.two.label1    -text " Арабское  число:"
label  $w.two.label2    -text " Римское    число:"
entry  $w.two.entry1    -textvar Arab  -fg red   -validate  all  -vcmd {ValidInt %P}
entry  $w.two.entry2    -textvar Rim   -fg blue  -validate  all  -vcmd {ValidIM  %P}        
ttk::button $w.two.button1   -text "Вычислить!" -command {$w.two.entry2  insert 0 "[eval {Arab_Rim $Arab}]"}
ttk::button $w.two.button3   -text "Вычислить!" -command {$w.two.entry1  insert 0 "[eval {Rim_Arab $Rim }]"}
bind   $w.two.entry1  <Return> {$w.two.entry2  insert 0 "[eval {Arab_Rim $Arab}]"}
bind   $w.two.entry2  <Return> {$w.two.entry1  insert 0 "[eval {Rim_Arab $Rim }]"}                    
ttk::button $w.two.button2   -text "Очистить!"  -command {$w.two.entry1 delete 0 end; $w.two.entry2 delete 0 end}
bind   $w.two.entry1  <Delete> {$w.two.entry1 delete 0 end; $w.two.entry2 delete 0 end}
bind   $w.two.entry2  <Delete> {$w.two.entry1 delete 0 end; $w.two.entry2 delete 0 end}

pack   $w.two.label1   $w.two.entry1  $w.two.button1 \
       $w.two.button2  $w.two.label2  $w.two.entry2 $w.two.button3  -side left
          
pack   $w.one  $w.two  -side top


Добавлено (09 августа 2017, 04:57)
---------------------------------------------
Улучшенная версия проги:
Код
source [file join [file dirname [info script]] chisla.tcl]
package require Tk
. config -bg gray75
set w .search
catch {destroy $w}
toplevel $w
wm title $w "Арабские << >> Римские!"
frame  $w.one
label  $w.one.label    -text "Это приложение переводит числа из арабской системы \
                             счисления в римскую и обратно!"
pack   $w.one.label    -side left
frame  $w.two
frame  $w.three
label  $w.two.label     -text " Арабское  число:"
label  $w.three.label   -text " Римское    число:"
entry  $w.two.entry     -textvar Arab  -fg red   -validate  all  -vcmd {ValidInt %P}
entry  $w.three.entry   -textvar Rim   -fg blue  -validate  all  -vcmd {ValidIM  %P}        
ttk::button $w.two.button     -text "Вычислить!"  -command {$w.three.entry  insert 0 "[eval {Arab_Rim $Arab}]"}
ttk::button $w.three.button   -text "Вычислить!"  -command {$w.two.entry    insert 0 "[eval {Rim_Arab $Rim }]"}
bind   $w.two.entry     <Return>  {$w.three.entry  insert 0 "[eval {Arab_Rim $Arab}]"}
bind   $w.three.entry   <Return>  {$w.two.entry    insert 0 "[eval {Rim_Arab $Rim }]"}                    
ttk::button $w.two.button1     -text "Очистить!"   -command {$w.two.entry   delete 0 end}                    
ttk::button $w.three.button1   -text "Очистить!"   -command {$w.three.entry delete 0 end}
bind   $w.two.entry     <Delete>  {$w.two.entry  delete  0 end}
bind   $w.three.entry   <Delete>  {$w.three.entry delete 0 end}

pack   $w.two.label    $w.two.entry    $w.two.button     $w.two.button1    -side left
pack   $w.three.label  $w.three.entry  $w.three.button   $w.three.button1  -side left
pack   $w.one  $w.two  $w.three    -side top


Добавлено (13 сентября 2017, 02:58)
---------------------------------------------
Код
proc Vvod {a} {
    global t  
    puts stdout { Vvedite a =}
    set a [gets stdin]
    set t [format "%d" $a]         
}
proc ldelete_val {list val} {
    set ix [lsearch -exact $list $val]
   if {$ix >= 0} {
     return [lreplace $list $ix $ix]
  } else {
  return $list
   }
}
proc Qwer {t} {
      set order {0}
   set q 0
   while {$q < $t} {
      set k 0
   set n [expr {round(rand()*$t)}]
   if {$n != 0} {
     foreach i $order {if {$i != $n} {  
   incr k   
   }
}     
   set w [llength $order]   
   if {$w == $k} {       
      set order [ldelete_val [lappend order $n] 0]   
   }
}
      set order1 $order
   set q [llength $order1]            
   }
   return $order1
}
    while 1 {
      Vvod a
    if {$t == "n"} {
   break }
   set order [Qwer $t]
      puts stdout "order = $order"   
}


Добавлено (05 октября 2017, 22:28)
---------------------------------------------
Код
proc Qwer {t} {
      set order {0}; set q 0
   while {$q <= $t} {
      set k 0; set n [expr {round(rand()*$t)}]
   if {$n != 0} {
     foreach i $order {if {$i != $n} {  
   incr k}
         }     
   set w [llength $order]   
   if {$w == $k} {       
      set order [lappend order $n]}
      }
      set q [llength $order]           
   }
      set order1 [ldelete_val $order 0]
}


Добавлено (16 октября 2017, 19:21)
---------------------------------------------
Изменённый фрагмент кода:
Код
#--------------------------------------------------------------------------------------------
set i 0   
for {set x 0} {$x < $u} {incr x} {
  for {set y 0} {$y < $u} {incr y} {
    if {($x == $u - 1) && ($y == $u - 1)} {continue}
     set num [lindex  $order $i]
     set xpos($num)  [expr {$x*$d}]
     set ypos($num)  [expr {$y*$d}]
ttk::button $w.frame.$num     -text $num          -command "puzzleSwitch $w $num"
place       $w.frame.$num     -relx $xpos($num)   -rely $ypos($num) \
                           -relwidth $d        -relheight $d
incr i
   }
}
#----------------------------------------------------------------------------------------------------


Добавлено (20 ноября 2017, 00:22)
---------------------------------------------
Код
proc Qwer {t} {
set order {0}; set q 0
while {$q <= $t} {
set k 0; set n [expr {round(rand()*$t)}]
foreach i $order {if {$i != $n} {incr k}}
set w [llength $order]
if {$w == $k} {set order [lappend order $n]}
set q [llength $order]
}
set order1 [ldelete_val $order 0]
}

Добавлено (02 Ноября 2018, 16:23)
---------------------------------------------
Игра "жизнь"

Код
#Live.tcl
label        .label     -text     "Введите размерность  жизненого пространства:"
entry        .entry     -textvar   razmer       -validate  all   -vcmd  {Valid %P}
ttk::button  .button_1  -text     "Вычислить!"  -command  {source [file join [file dirname [info script]] forma.tcl]}
bind         .entry     <Return>                          {source [file join [file dirname [info script]] forma.tcl]}
ttk::button  .button_2  -text     "Очистить!"   -command  {.entry delete 0 end}
bind         .entry     <Delete>                          {.entry delete 0 end}
ttk::button  .button_3  -text     "New!"        -command  {set order [pokolenie $order]; tablica $order}
bind         .button_3  <Return>                          {set order [pokolenie $order]; tablica $order}
pack         .label  .entry  .button_1  .button_2  .button_3  -side   left
# --------------------------------------------------------------------------------------------------
proc Valid {razmer} {
  return [regexp {^(3{0,1}|4{0,1}|5{0,1}|6{0,1}|7{0,1}|8{0,1}|9{0,1}|10{0,1}| \
                   |11{0,1}|12{0,1}|13{0,1}|14{0,1}|15{0,1}|16{0,1})$} $razmer]
}      

Код
#forma.tcl
source [file join [file dirname [info script]] tablica.tcl]
source [file join [file dirname [info script]] spisok.tcl]

set u [format "%d" $razmer]
set d [expr {1.0 / $u}]
set t [expr {pow($u, 2)}]
set order [Spisok $t]

package require Tk
set w .puzzle
catch {destroy $w}
toplevel $w  
set font 04ddd84
label $w.msg  -font  $font  -wraplength  4i  -justify  left  -text  "Жизненное пространство - $u на $u."
pack  $w.msg  -side  top

wm title    $w    "Игра \"Жизнь\""
wm iconname $w    "$t - Жизнь"
scrollbar   $w.s

if {[tk windowingsystem] eq "aqua"} {set frameSize 600} else {set frameSize 530}

frame $w.frame    -width    $frameSize     -height   $frameSize     -borderwidth  2 \
               -relief   sunken         -bg       [$w.s cget     -troughcolor]   
pack  $w.frame    -side     top            -pady     1c             -padx    1c
destroy $w.s
tablica $order

Код
#tablica.tcl
source [file join [file dirname [info script]] pokolenie.tcl]

proc tablica {order } {
global  u d w t
for {set i 0} {$i < $t} {incr i} {
destroy  $w.frame.$i
set num [lindex  $order $i]
set xpos [expr {($i%$u)*$d}]
set ypos [expr {($i/$u)*$d}]
ttk::button  $w.frame.$i   -text $num   -command {set order [pokolenie $order]; tablica $order}
place        $w.frame.$i   -relx $xpos   -rely $ypos   -relwidth $d   -relheight $d
   }
}

Код
#pokolenie.tcl
proc pokolenie {order} {    
global   u t
set Q {lindex $order $f}
set W {set Xs [expr {$Xs+1}]}
set E {lappend order1 ""}
set R {lappend order1 "X"}
  for {set i 0} {$i < $t} {incr i} {     
       set Xs 0; set q [expr {($i+1)%$u}]
   if {([set f [expr {$i-$u}]]    >= 0              && [eval $Q] == "X" && [eval $W]) |
       ([set f [expr {$i-$u+1}]]  >= 0 &&  $q != 0  && [eval $Q] == "X" && [eval $W]) |  
       ([set f [expr {$i+1}]]     < $t &&  $q != 0  && [eval $Q] == "X" && [eval $W]) |
       ([set f [expr {$i+$u+1}]]  < $t &&  $q != 0  && [eval $Q] == "X" && [eval $W]) |
       ([set f [expr {$i+$u}]]    < $t              && [eval $Q] == "X" && [eval $W]) |
       ([set f [expr {$i+$u-1}]]  < $t &&  $q != 1  && [eval $Q] == "X" && [eval $W]) |    
       ([set f [expr {$i-1}]]     >= 0 &&  $q != 1  && [eval $Q] == "X" && [eval $W]) |
       ([set f [expr {$i-$u-1}]]  >= 0 &&  $q != 1  && [eval $Q] == "X" && [eval $W])} {  
    switch -- $Xs {
     1 {eval $E}
     2 {if {[lindex  $order  $i] == "X"} then {eval $R} else {eval $E}}
     3 {eval $R}
     4 {eval $E}
     5 {eval $E}
     6 {eval $E}
     7 {eval $E}
     8 {eval $E}
}     
      } else {eval $E}
   }
    return $order1
}

Код
#spisok.tcl
proc Spisok {t} {    
for {set i 0} {$i < $t} {incr i} {        
  set n [expr {round(rand()*1)}]
   if {$n == 1} then {lappend order "X"} \
                else {lappend order ""}     
   }
   return $order    
}


litl

Сообщение отредактировал colencor - Понедельник, 20 Ноября 2017, 00:25
colencorДата: Вторник, 13 Июня 2017, 02:42 | Сообщение # 5 | Тема: Языки программирования на основе JVM
был не раз
Сейчас нет на сайте
Цитата TLT ()
Откуда такая инфа?

Уважаемый TLT, эта инфа из разных источников в Сети,
например developerWorks Россия - Техническая библиотека
... Java-технология оставит в наследство не язык, а платформу. На платформе JVM работают
более 200 языков программирования; какой-то из них со временем неминуемо вытеснит язык Java
в качестве наилучшего способа программирования для JVM. Этот цикл статей посвящен
исследованию трех языков нового поколения для платформы JVM — Groovy, Scala и Clojure — а также
сравнению и противопоставлению новых возможностей и парадигм, чтобы дать Java-разработчикам
возможность заглянуть в свое ближайшее будущее ...
Нил Форд
А так же из пары книжек, Тейт Брюс например ...


litl
colencorДата: Понедельник, 12 Июня 2017, 21:29 | Сообщение # 6 | Тема: Языки программирования на основе JVM
был не раз
Сейчас нет на сайте
Создать этот опрос меня побудило:
1. Интерес к языкам JVM постоянно возрастает ...
2. Количество просмотров двух моих тем ...


litl
colencorДата: Вторник, 30 Мая 2017, 13:56 | Сообщение # 7 | Тема: Программирование на Groovy
был не раз
Сейчас нет на сайте
Код
import groovy.swing.SwingBuilder
import javax.swing.*
import java.awt.FlowLayout
/*def download(address) {
    def file = new FileOutputStream(address)
    def out  = new BufferedOutputStream(file)
    out      << file (address).openStream()
    out.close()
    }
download(chisla)*/
swinger = new SwingBuilder()
  gui = swinger.frame(title:'Арабские << >> Римские', size: [448, 160]) {
    panel(layout: new FlowLayout()) {
    arabrim =  new JLabel('Это приложение переводит из арабской cистемы счисления в римскую и обратно!')
    arabrim.setBorder(BorderFactory.createEtchedBorder())
    panel().add(arabrim)
    panel(layout: new FlowLayout()) {
      arab = new JLabel('Арабское число:'); panel().add(arab)
      message1 = textField(columns: 12)
      button = swinger.button(text: 'Вычислить', actionPerformed: {
               JOptionPane.showMessageDialog(gui, ArabRim(message1.text))})         
      button = swinger.button(text: 'Очистить', actionPerformed: {         
               message1.selectAll(); message1.cut()})
}
      rim  = new JLabel('Римское__число:'); panel().add(rim)         
      message2 = textField(columns: 12)
      button = swinger.button(text: 'Вычислить', actionPerformed: {
               JOptionPane.showMessageDialog(gui, RimArab(message2.text))})
      button = swinger.button(text: 'Очистить', actionPerformed: {         
               message2.selectAll(); message2.cut()})
}}
gui.show()

def ArabRim (Arab) {
List Rim = [ "I", "V", "X", "L", "C", "D", "M"]
A = Arab.reverse(); i = 0; L = []
for( v in A){ x = v as Integer; iI = i*2; iV = 2*i+1; iX = 2*i+2
              switch (x){
                  case 4:    r  = Rim[iI] + Rim[iV]; break
                  case 9:    r  = Rim[iI] + Rim[iX]; break
                  case 1..3: r  = ""; for( int j = 0; j < x;  j++){ r  = r  + Rim[iI]}; break
                  case 5..8: r2 = ""; x1 = x - 5; for( int j = 0; j < x1; j++){ r2 = r2 + Rim[iI]}; r1 = Rim[iV]; r = r1 + r2; break
                  case 0:    r  = ""; break
                        }; ++i; L = L + r}                        
Rim = L.reverse(); return Rim.join()
                  }
def RimArab (Rim) {
Map rimArab = [ "I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000]
f = Rim.replace("IV", "IIII").replace("IX", "VIIII").replace("XL", "XXXX").replace("XC", "LXXXX").replace("CD", "CCCC").replace("CM", "DCCCC")
Arab = 0; for(i in f) { Arab = Arab + rimArab[i]}; return Arab
                  }

В комментарии моя попытка подключить файл chisla.groovy в котором находятся методы ArabRim и RimArab ...
Пока неудачно ... help

Добавлено (06 апреля 2017, 05:11)
---------------------------------------------
Переделанный на Groovy код создающий список длиной равной N, без 0, без повторов чисел, без лакун ...
Код
package demo
def Vvod () {print "Vvedite n = "; s = System.in.newReader().readLine(); n = s as Integer}
def Spisok (n) {
     order = []
  for (int i = 1; i <= n; i++) {
     j = Math.round(Math.random() * n)
  if (j == 0) {order << ( j + 1)}
    else      {order <<   j }
    }
    return order
}
def Bez_X (order) {
     len  = order.size() - 1
     len1 = len + 1
  for (int i = 0; i <= len; i++) {
    for (int j = (i + 1); j <= len1; j++) {
      if (order[j] == order[i]) {order.remove(j)}        
        }
        len1 = order.size()
    }
    return order
}
def Ok_Spisok (n) {
      order = Bez_X (Spisok (n))
   for (int k = 1; k <= n; k++) {
      order = Bez_X (order + k)
                    }
      return order
                  }
def Vivod () { print "order = "; println order}

while (1)  {
  Vvod (); if(n == "n") {break}
  Ok_Spisok (n)
  Vivod ()
           }


Добавлено (16 апреля 2017, 08:21)
---------------------------------------------
Код
def Ok_Spisok (n) {
      order = Bez_X (Spisok (n))
   for (int k = n; 1 <= k; k--) {
      order = Bez_X (order + k)
                    }
      return order
                  }


Добавлено (11 мая 2017, 22:00)
---------------------------------------------
Следующий код не работает как отдельная прога,
а только "в" IDE ...

Код
//Main.java
public class Main {
      public static void main(String args[]) {
        chislo m2 = new chislo();
        m2.run();
    }
}


Код
//chislo.groovy
import groovy.swing.SwingBuilder
import javax.swing.*
import java.awt.FlowLayout

public class ArabRim_2 {
  def Arabrim_2(Arab) { ArabRim m2 = new ArabRim(); def   Rim = m2.Arabrim(Arab); return Rim }}
  def Arab_Rim(Arab) {ArabRim_2 m3 = new ArabRim_2();  Rim = m3.Arabrim_2(Arab)}

public class RimArab_2 {
  def Rimarab_2(Rim) { RimArab m1 = new RimArab(); def   Arab = m1.Rimarab(Rim); return Arab }}
  def Rim_Arab(Rim) {RimArab_2 m2 = new RimArab_2();  Arab = m2.Rimarab_2(Rim)}

  swinger = new SwingBuilder()
  gui = swinger.frame(title:'Арабские << >> Римские', size: [510, 160]) {
    panel(layout: new FlowLayout()) {
    arabrim =  new JLabel('Это приложение переводит из Арабской системы счисления в Римскую и обратно!')
    arabrim.setBorder(BorderFactory.createEtchedBorder()); panel().add(arabrim)
    panel(layout: new FlowLayout()) {
      arab = new JLabel('Арабское  число:'); panel().add(arab)
        message1 = textField(columns: 12)
          button = swinger.button(text: 'Вычислить', actionPerformed: {
                   JOptionPane.showMessageDialog(gui, Arab_Rim(message1.text))})
          button = swinger.button(text: 'Очистить', actionPerformed: {
                   message1.selectAll(); message1.cut()})}
      rim  = new JLabel('Римское__число:'); panel().add(rim)
        message2 = textField(columns: 12)
          button = swinger.button(text: 'Вычислить', actionPerformed: {
                   JOptionPane.showMessageDialog(gui, Rim_Arab(message2.text))})
          button = swinger.button(text: 'Очистить', actionPerformed: {
                   message2.selectAll(); message2.cut()})}}
gui.show()


Код
//ArabRim.groovy
public class ArabRim {
    String Rim, A, r, r2, r1
    Integer i, x, iI, iV, iX, x1
    List L, rim = [ "I", "V", "X", "L", "C", "D", "M"]
  def Arabrim (Arab) {
    A = Arab.reverse(); i = 0; L = []
  for( v in A){ x = v as Integer; iI = i*2; iV = 2*i+1; iX = 2*i+2
    switch (x){
      case 4:    r  = rim[iI] + rim[iV]; break
      case 9:    r  = rim[iI] + rim[iX]; break
      case 1..3: r  = ""; for( int j = 0; j < x;  j++){ r  = r  + rim[iI]}; break
      case 5..8: r2 = ""; x1 = x - 5; for( int j = 0; j < x1; j++){ r2 = r2 + rim[iI]}; r1 = rim[iV]; r = r1 + r2; break
      case 0:    r  = ""; break }
           ++i; L = L + r }
    Rim = L.reverse().join(); return Rim } }


Код
//RimArab.groovy
public class RimArab {
    String  f; Integer Arab
    Map rimArab = ["I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000]
  def Rimarab (Rim) {
    f = Rim.replace("IV", "IIII").replace("IX", "VIIII").replace("XL", "XXXX").replace("XC", "LXXXX").replace("CD", "CCCC").replace("CM", "DCCCC")
    Arab = 0; for(i in f) { Arab = Arab + rimArab[i]}; return Arab } }


Код
class chislo {
    void run() {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}


Добавлено (14 мая 2017, 21:26)
---------------------------------------------
"Случайность" списка "усилена" ...
Код
def Ok_Spisok (n) {
      order1 = Bez_X (Spisok (n))
   for (int k = n; 1 <= k; k--) {
      order1 = Bez_X (order1 + k)
                    }
   order = Bez_X (Spisok (n))
   for (i in order1) {
      order = Bez_X (order + i)
                    }
      return order
                  }


Добавлено (30 мая 2017, 13:56)
---------------------------------------------
При таком изменении кода вывод становится более "информативным":
Код
button = swinger.button(text: 'Вычислить', \
                        actionPerformed: { swinger.optionPane(message: \
                    "Арабское $message1.text  ==>  Римское ${Arab_Rim(message1.text)}"). \
                    createDialog(null, 'Арабские в Римские').show()})

Код
button = swinger.button(text: 'Вычислить', \
                        actionPerformed: { swinger.optionPane(message: \
                    "Римское $message2.text  ==>  Арабское ${Rim_Arab(message2.text)}"). \
                    createDialog(null, 'Римские в Арабские').show()})


litl

Сообщение отредактировал colencor - Вторник, 30 Мая 2017, 13:58
colencorДата: Вторник, 11 Апреля 2017, 19:59 | Сообщение # 8 | Тема: Программирование на Tcl'Tk
был не раз
Сейчас нет на сайте
Я являю миру метод Тупого Перебора во всей своей красе!!! crazy
Решать задачу на бумажке deal , да не в жизнь...
А если серьёзно, я просто отчаялся :( , так что если кто то может предложить
более робастный код, или алгоритм - в студию...
Код
  proc Vvod {a} {
       global t
       puts stdout { Vvedite a:}
       set a [gets stdin]
       set t [format "%d" $a]
    }
  proc Ldelete {list value} {
        set ix [lsearch -exact $list $value]
        if {$ix >= 0} {
           return [lreplace $list $ix $ix]
        } else {
           return $list
        }
    }
  proc Bez_X {order} {    
    foreach valume $order {
      set m [lsearch -all $order $valume]
      set y [lrange $m 1 end]
    foreach val $y {
      lset order $val X
              }
      set order [Ldelete $order X]         
    }    
   return $order
}    
  proc Spisok {t} {
    for {set i 1} {$i <= $t } {incr i} {
      set j [expr {round(rand()*$t)}]
    if {$j == 0} {
      set k [expr {$j + 1}]
}   else {
      set k $j}   
      lappend order $k  
    }
   return $order
}    
    while 1 {
    Vvod a
    if {t == n} {
   break}
    while 1 {
   set order [Spisok $t]
      set order [Bez_X $order]   
   set dlina [llength $order]
    if {$dlina == $t} {      
   break         
        }   
    }
   puts stdout "order = $order "
}


Добавлено (19 марта 2017, 23:55)
---------------------------------------------
Да, совсем забыл - a >14 лучше не задавать!

Добавлено (20 марта 2017, 14:43)
---------------------------------------------
Это как ни как форум игроделов, так?
Тогда вот Вам игрушка
Код
# puzzle.tcl
package require Tk

set u [format "%d" $a]
set d [expr {1.0 / $u}]
set t [expr {round(pow($u, 2)) - 1}]

set w .puzzle
catch {destroy $w}
toplevel $w
    
set font #4ddd84
label $w.msg -font $font -wraplength 4i -justify left -text "Пазлы - $t штук."
pack $w.msg -side top

wm title $w "$t - Puzzle Demonstration"
wm iconname $w "$t - Пазлы"

scrollbar $w.s

if {[tk windowingsystem] eq "aqua"} {
    set frameSize 360
} else {
    set frameSize 240}

frame $w.frame -width $frameSize -height $frameSize -borderwidth 2\
    -relief sunken -bg [$w.s cget -troughcolor]
pack $w.frame -side top -pady 1c -padx 1c
destroy $w.s

set order ""
set order [Qwer $t]

for {set i 0} {$i < $t} {incr i} {
    set num [lindex  $order $i]
    set xpos($num)  [expr {($i%$u)*$d}]
    set ypos($num)  [expr {($i/$u)*$d}]
    button $w.frame.$num    -relief raised    -text $num    -highlightthickness 0 \
     -command "puzzleSwitch $w $num"
    place $w.frame.$num    -relx $xpos($num)    -rely $ypos($num) \
    -relwidth $d   -relheight $d
}
set xpos(space) .75
set ypos(space) .75

Код
#dot.tcl
label  .label   -text "Введите размерность пазла:"
entry  .entry   -textvar a
button .button  -text "Вычислить!" -command {source [file join [file dirname [info script]] puzzle.tcl]}
pack   .label .entry .button  -side left

proc puzzleSwitch {w num} {
    global xpos ypos
    if   {(($ypos($num) >= ($ypos(space) - .01))
     && ($ypos($num) <= ($ypos(space) + .01))
     && ($xpos($num) >= ($xpos(space) - .26))
     && ($xpos($num) <= ($xpos(space) + .26)))
    || (($xpos($num) >= ($xpos(space) - .01))
     && ($xpos($num) <= ($xpos(space) + .01))
     && ($ypos($num) >= ($ypos(space) - .26))
     && ($ypos($num) <= ($ypos(space) + .26)))} {
    set tmp $xpos(space)
    set xpos(space) $xpos($num)
    set xpos($num) $tmp
    set tmp $ypos(space)
    set ypos(space) $ypos($num)
    set ypos($num) $tmp
    place $w.frame.$num    -relx $xpos($num)    -rely $ypos($num)
    }}    

proc Ldelete {list value} {
      set ix [lsearch -exact $list $value]
    if {$ix >= 0} {
      return [lreplace $list $ix $ix]
        } else {
      return $list
        }
    }
  proc Bez_X {order} {    
    foreach valume $order {
      set m [lsearch -all $order $valume]
      set y [lrange $m 1 end]
    foreach val $y {
      lset order $val X
              }
      set order [Ldelete $order X]         
    }    
   return $order
}    
  proc Spisok {t} {
    for {set i 1} {$i <= $t } {incr i} {
      set j [expr {round(rand()*$t)}]
    if {$j == 0} {
      set k [expr {$j + 1}]
}   else {
      set k $j}   
      lappend order $k  
    }
   return $order
}    
  proc Qwer {t} {
    if {t == n} {
   break}
    while 1 {
   set order [Spisok $t]
      set order [Bez_X $order]   
   set dlina [llength $order]
    if {$dlina == $t} {      
   break         
        }   
    }
   return $order
}

Пока игрушка работает при размерности пазла = 4, и то пазл(картинка) появляется слишком медленно,
а я хочу что бы размерность пазла можно было задавать до 10 включительно.
Если у меня будет быстрый код(алгоритм), тогда я буду "расширять" proc puzzleSwitch ...

Добавлено (21 марта 2017, 16:40)
---------------------------------------------
А вот при таком алгоритме proc Qwer(t) работает намного быстрее hands
Код
proc Qwer {t} {
    if {t == n} {
        break}
          set order [Spisok $t]  
          set order [Bez_X $order]    
    for {set j 1} {$j <= $t } {incr j} {    
          set order [Bez_X [lappend order $j]]   
        }
          return $order    
}


Добавлено (05 апреля 2017, 16:00)
---------------------------------------------
Исправление:
Код
proc Qwer {t} {
    if {$t == n} {
        break}
       set order [Bez_X [Spisok $t]]    
    for {set j 1} {$j <= $t } {incr j} {    
       set order [Bez_X [lappend order $j]]   
        }
      return $order
}


Добавлено (11 апреля 2017, 19:59)
---------------------------------------------
Дополняем и изменяем код:
Код
-relwidth $d   -relheight $d
}
# ------------------------------------------------------
#switch $u { 2 {set X .5;   set Y .5  } 3 {set X .1;   set Y .1  }
#            4 {set X .75;  set Y .75 } 5 {set X .8;   set Y .8  }
#            6 {set X .835; set Y .835} 7 {set X .858; set Y .858}
#            8 {set X .875; set Y .875} 9 {set X .89;  set Y .89 }
#           10 {set X .9;   set Y .9  }   
# --------------------------------------------------------
# Зачем нужен такой switch, если можно применить
# следующую формулу ...
set Q [expr {1.0-1.0/$u}]
set xpos(space) $Q
set ypos(space) $Q

При u = 2 и u = 3 кнопки не двигаются с любым значением Q ...


litl

Сообщение отредактировал colencor - Четверг, 13 Апреля 2017, 01:28
colencorДата: Четверг, 16 Марта 2017, 07:51 | Сообщение # 9 | Тема: Программирование на Tcl'Tk
был не раз
Сейчас нет на сайте
Это приложение является GUI для сами знаете чего ... :)
Поставьте на выполнение и увидите ...
Если не знаете - тем более на выполнение!
Код
source [file join [file dirname [info script]] arab_rim.tcl]
source [file join [file dirname [info script]] rim_arab.tcl]
package require Tk
set w .filebox
catch {destroy $w}
toplevel $w
wm title $w "Из римских в арабские!"
wm iconname $w "filebox"
ttk::frame $w._bg
place $w._bg -x 0 -y 0 -relwidth 1 -relheight 1
set font #4ddd84
ttk::label $w.msg -font $font -wraplength 4i -justify left -text "Это приложение переводит числа из римской  системы    счисления,  в  арабскую и обратно!"
pack $w.msg -side top

    set i "Ввести число"
    set g [ttk::frame $w.$i]
    ttk::label  $g.lab    -text "Римское__число: $i: " -anchor e
    ttk::entry  $g.ent    -textvar Rim
    ttk::button $g.but    -text "Вычислить!!!" -command {tk_messageBox  -title "Арабское число"  -message "Римское $Rim  ==>  Арабское [eval {Run $Rim}]"}
    ttk::button $g.but1   -text "Очистить!"    -command {$g.ent delete 0 [string length $Rim]}  
    pack $g.lab  -side left
    pack $g.ent  -side left   -expand yes -fill x
    pack $g.but  -side left
    pack $g.but1 -side left
    pack $g -fill x -padx 1c -pady 3
    
    set j "Ввести_число"
    set f [ttk::frame $w.$j]
    ttk::label  $f.lab1   -text "Арабское число: $j: " -anchor e
    ttk::entry  $f.ent1   -textvar Arab  
    ttk::button $f.but2   -text "Вычислить!!!" -command {tk_messageBox  -title "Римское число"  -message "Арабское $Arab  ==>  Римское [eval {Runo $Arab}]"}
    ttk::button $f.but3   -text "Очистить!"    -command {$f.ent1 delete 0 [string length $Arab]}
    pack $f.lab1  -side left
    pack $f.ent1  -side left   -expand yes   -fill x
    pack $f.but2  -side left
    pack $f.but3  -side left
    pack $f -fill x -padx 1c -pady 3

Необходимое дополнение: код создавался не с нуля, так что некоторые моменты для меня "магия" facepalm
arab_rim.tcl
Код
#!/usr/local/bin/wish
proc Runo {Arab} {
set a_r {I V X L C D M}
set Arabn [split $Arab {}]
set Zx [string reverse $Arabn]
set I 0; set W ""; set W2 ""                       
foreach V $Zx { set I2 [expr 2*$I]; set I1 [expr 2*$I+1]
                set I3 [expr 2*$I+2]; set V1 [expr $V - 5]
            if {$V == 4} {
        append W [lindex $a_r $I1] [lindex $a_r $I2]
      } elseif {$V == 9} {
        append W [lindex $a_r $I3] [lindex $a_r $I2]
      } elseif {$V1 < 0} {
         for {set J 0} {$J < $V} {incr J} {
        append W [lindex $a_r $I2]
      }} else {
      for {set J 0} {$J < $V1} {incr J} {
        append W [lindex $a_r $I2]
                    }
        append W [lindex $a_r $I1]
              }
      incr I
      }
       set L [string reverse $W]
}

rim_arab.tcl
Код
proc Run {Rim} {
set r_a(I) 1; set r_a(V) 5; set r_a(X) 10; set r_a(L) 50;
set r_a(C) 100; set r_a(D) 500; set r_a(M) 1000
#set Rim [gets stdin]
set RimCM [string map {IV IIII IX VIIII XL XXXX XC LXXXX CD CCCC CM DCCCC} $Rim]
set RimN [split $RimCM {}]
set Arab 0
foreach P $RimN {set Arab [expr $Arab + $r_a($P)]}
set T $Arab
}

Следующий код чисто мой!
Код
source [file join [file dirname [info script]] arab_rim.tcl]
source [file join [file dirname [info script]] rim_arab.tcl]

package require Tk
. config -bg gray75
wm title . "Rim << >> Arab"

label  .label1  -text "Римское число:"
entry  .entry1  -textvar Rim
button .button1 -text "Вычислить!" -command {tk_messageBox  -title "Арабское число"  -message "Римское $Rim  ==>  Арабское [eval {Run $Rim}]"}
button .button2 -text "Очистить!"  -command {.entry1 delete 0 [string length $Rim]}
pack   .label1 .entry1 .button1 .button2 -side left

label  .label2  -text "Арабское число:"
entry  .entry2  -textvar Arab
button .button3 -text "Вычислить!" -command {tk_messageBox  -title "Римское число"  -message "Арабское $Arab  ==>  Римское [eval {Runo $Arab}]"}
button .button4 -text "Очистить!"  -command {.entry2 delete 0 [string length $Arab]}
pack   .label2 .entry2 .button3 .button4 -side left

Добавлено (16 марта 2017, 07:51)
---------------------------------------------
Следующее ...
По идее код должен делать следующее:
Создавать список из чисел длиной = a,
без 0, без повторов чисел, без лакун.
Например a = 7 => {2 4 6 7 5 3 1}, но
происходит бесконечный цикл ...
Вопрос - как исправить код что бы он
работал корректно ...

Код
proc Vvod {a} {
       global t
       puts stdout { Vvedite a:}
       set a [gets stdin]
       set t [format "%d" $a]
    }
  proc Ldelete {list value} {
        set ix [lsearch -exact $list $value]
        if {$ix >= 0} {
           return [lreplace $list $ix $ix]
        } else {
           return $list
        }
    }
  proc Bez_X {order} {    
    foreach valume $order {
      set m [lsearch -all $order $valume]
      set y [lrange $m 1 end]
    foreach val $y {
      lset order $val X
              }
      set order [Ldelete $order X]         
    }    
   return $order
}    
  proc Spisok {t} {
    for {set i 1} {$i <= $t } {incr i} {
      set j [expr {round(rand()*$t)}]
    if {$j == 0} {
        set k [expr {$j + 1}]
} else {
      set k $j
        }   
      lappend order $k  
    }    
   puts stdout "order = $order"   
      set order [Bez_X $order]
      puts stdout "order1 = $order"   
      return $order     
      }  
  proc !Spisok {order t} {
      set dlina [llength $order]
    if {$dlina < $t} {
   set q [expr $t - $dlina]   
      set order1 [Spisok $q]
   puts stdout "order11 = $order1"
      set order [concat $order $order1]
   puts stdout "order2 = $order"
# ----------------------------------------------------------------------   
#      set order [Bez_X $order ]
# При присутствии этой команды Bez_X получается бесконечный цикл!   
      puts stdout "order3 = $order"    
      !Spisok $order $t
} else {
      return $order
   }
}
    while 1 {
      Vvod a
      set order [Spisok $t]
      set x [!Spisok $order $t]
      puts stdout "x = $x"   
    }


litl
colencorДата: Суббота, 31 Декабря 2016, 08:38 | Сообщение # 10 | Тема: Язык программирования Io
был не раз
Сейчас нет на сайте
Если Вы не обратили внимание -
Код
var c = prompt("Введите римское число :", "");
    c = c.replace(/IV/, "IIII").replace(/IX/, "VIIII").replace(/XL/, "XXXX").replace(/XC/, "LXXXX").replace(/CD/, "CCCC").replace(/CM/, "DCCCC");
   var v = c.split(""), rez = 0, r_a = {"I":1,"V":5,"X":10,"L":50,"C":100,"D":500,"M":1000};
   for ( var f=0; f < v.length; f++ )  { rez += r_a[v[f]]; };  alert(rez);

и ещё -
Код
var n = prompt("Введите арабское число :", "");
  n = parseInt(n);
  var rim = ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"];
  var arab = [1000,900,500,400,100,90,50,40,10,9,5,4,1];
     var i=0, s="";
      while ( n > 0 ) {
       while (arab[i] <= n) {
       s += rim[i];
       n -= arab[i];     }
              i++; }
                   alert(s);

Добавлено (31 декабря 2016, 08:38)
---------------------------------------------
... и что то я не узнаю родный JS - просветите невежду :( :)


litl
colencorДата: Четверг, 29 Декабря 2016, 20:33 | Сообщение # 11 | Тема: Язык программирования Io
был не раз
Сейчас нет на сайте
Python:
Код
Rim = ["I", "V", "X", "L", "C", "D", "M"]
Q = input("Введите арабское число = ")
W = str(Q)
R = reversed(W)
i = 0; L = []; Re = ""
for D in R:
    i0 = 2*i; i1 = 2*i+1; i2 = 2*i+2
    E = int(D); E1 = E - 5
    if   E == 4:
     T = Rim[i0] + Rim[i1]
    elif E == 9:
     T = Rim[i0] + Rim[i2]
    elif E1 < 0:
     T = ""
     while E > 0:
      T = T + Rim[i0]; E = E - 1   
    else:
     T1 = Rim[i1]; T2 = ""
     while E1 > 0:
      T2 = T2 + Rim[i0]; E1 = E1 - 1
     T = T1 + T2
    i = i+1            
    L.append(T)
L.reverse()
for V in L:
    Re = Re + V
print("Rim = ", Re)

Код
import re
r_a = dict(I=1, V=5, X=10, L=50, C=100, D=500, M=1000)
B = input("Введите римскую цифру = ")
Q = re.sub("IV",  "IIII", B)
W = re.sub("IX", "VIIII", Q)
E = re.sub("XL",  "XXXX", W)
R = re.sub("XC", "LXXXX", E)
T = re.sub("CD",  "CCCC", R)
U = re.sub("CM", "DCCCC", T)
Rez = 0
for D in U:
    Rez = Rez + r_a[D]
print("Arab = ", Rez)

Вроде как, Groovy считается скриптовым языком для платформы Java, интересно
как Вы думаете на этот счёт...
Также хотелось бы прочесть ответ на мой "любимый" вопрос о присвоении ввода
с клавиатуры переменной...
А пока так:
Код
List Rim = [ "I", "V", "X", "L", "C", "D", "M"]
println "Vvedite Arab = "; Arab = "3497"; A = Arab.reverse(); i = 0; l = []
for( v in A){ x = v as Integer; i0 = i*2; i1 = 2*i+1; i2 = 2*i+2
              switch (x){
                  case 4: r = Rim[i0] + Rim[i1]; break
                  case 9: r = Rim[i0] + Rim[i2]; break
                  case 1..3: r  = ""; for( int j = 0; j < x;  j++){ r  = r  + Rim[i0]}; break
                  case 5..8: r2 = ""; x1 = x - 5; for( int j = 0; j < x1; j++){ r2 = r2 + Rim[i0]}; r1 = Rim[i1]; r = r1 + r2; break
                        }; ++i; l = l + r}
                           L = l.reverse(); S = L.join(); print "Rim = "; print S

Код
Map rim_arab = [ "I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000]
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
print "Vvedite Rim = "
Rim = br.readLine()
while( Rim != "n") {
f = Rim.replace("IV", "IIII").replace("IX", "VIIII").replace("XL", "XXXX").replace("XC", "LXXXX").replace("CD", "CCCC").replace("CM", "DCCCC")
Arab = 0
for(i in f) { Arab = Arab + rim_arab[i]}
print "Arab = "; print Arab
                    }

Vvedite Rim =  
Exception thrown

java.io.IOException: Неверный дескриптор

    at java.io.FileInputStream.readBytes(Native Method)
....................................................................................

Мне непонятно, что с дескриптором...

Добавлено (28 декабря 2016, 00:08)
---------------------------------------------
Вопрос с самим Lua решён самостоятельно, а вот за код спасибо! :)

Код
r_a = {}
r_a["I"] = 1; r_a["V"] = 5; r_a["X"] = 10; r_a["L"] = 50
r_a["C"] = 100; r_a["D"] = 500; r_a["M"] = 1000
repeat
print("Введите Rim")
Rim = io.read()
RimIV = string.gsub(Rim,   "IV", "IIII")
RimIX = string.gsub(RimIV, "IX", "VIIII")
RimXL = string.gsub(RimIX, "XL", "XXXX")
RimXC = string.gsub(RimXL, "XC", "LXXXX")
RimCD = string.gsub(RimXC, "CD", "CCCC")
RimCM = string.gsub(RimCD, "CM", "DCCCC")
local W = {}
local j = 1
for i in string.gmatch(RimCM, ".") do W[j] = i; j=j+1 end
function values (t)
   local k = 0
   return function () k = k + 1; return t[k] end
   end
  Rez = 0
for elem in values(W) do
   Rez = Rez + r_a[elem]
   end
   print("Rez = ", Rez)
until Rim == "n"

Добавлено (29 декабря 2016, 20:33)
---------------------------------------------
Работающий код на Groovy:

Код
Map rim_arab = [ "I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000]
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
Rim = "q"
while( Rim != "n") {
print "Vvedite Rim = "
Rim = br.readLine()
f = Rim.replace("IV", "IIII").replace("IX", "VIIII").replace("XL", "XXXX").replace("XC", "LXXXX").replace("CD", "CCCC").replace("CM", "DCCCC")
Arab = 0
for(i in f) { Arab = Arab + rim_arab[i]}
print "Arab = "; println Arab
                   }


litl
colencorДата: Среда, 07 Декабря 2016, 22:19 | Сообщение # 12 | Тема: Язык программирования Io
был не раз
Сейчас нет на сайте
Спасибо, sfabrikan - актуально...
Но, возникли проблемы с самим Lua - с интерпритатором... :(


litl
colencorДата: Пятница, 25 Ноября 2016, 14:13 | Сообщение # 13 | Тема: Язык программирования Io
был не раз
Сейчас нет на сайте
Код
r_a = {}
r_a["I"] = 1; r_a["V"] = 5; r_a["X"] = 10; r_a["L"] = 50
r_a["C"] = 100; r_a["D"] = 500; r_a["M"] = 1000
repeat
print("Введите Rim")
Rim = io.read()
RimIV = string.gsub(Rim,   "IV", "IIII")
RimIX = string.gsub(RimIV, "IX", "VIIII")
RimXL = string.gsub(RimIX, "XL", "XXXX")
RimXC = string.gsub(RimXL, "XC", "LXXXX")
RimCD = string.gsub(RimXC, "CD", "CCCC")
RimCM = string.gsub(RimCD, "CM", "DCCCC")
RimCM = {"I", "V", "X"} -- на месте этой строки
-- должен находиться код перевода строки в список
-- в данный момент RimCM - это тест.
function values (t)
   local i = 0
   return function () i = i + 1; return t[i] end
   end
  Rez = 0
for elem in values(RimCM) do
   Rez = Rez + r_a[elem]
   end
   print(Rez)
until Rim == "n"


litl
colencorДата: Вторник, 22 Ноября 2016, 23:14 | Сообщение # 14 | Тема: Язык программирования Io
был не раз
Сейчас нет на сайте
Думаете Xakep, я не знаю этот алгоритм и эту структуру данных...
Тогда посмотрите в начало темы( на Io)...
Но такая структура данных как
Код
rim := list( "M", "D", "C", "L", "X", "V", "I" )

или
Код
rim :=list("I", "V", "X", "L", "C", "D", "M")

выглядит куда как более симпотно! :)
И, кстати:
Код
set a_r(0) "I"; set a_r(1) "V"; set a_r(2) "X"
set a_r(3) "L"; set a_r(4) "C"; set a_r(5) "D"
set a_r(6) "M"
while 1 {
puts stdout { Vvedite Arab:}
set Arab [gets stdin]
set Arabn [split $Arab {}]
set Zx [string reverse $Arabn]
set I 0; set W ""; set W2 ""                       
foreach V $Zx { set I2 [expr 2*$I]; set I1 [expr 2*$I+1]
                set I3 [expr 2*$I+2]; set V1 [expr $V - 5]
            if {$V == 4} {
        lappend W $a_r($I1) $a_r($I2)
      } elseif {$V == 9} {
        lappend W $a_r($I3) $a_r($I2)
      } elseif {$V1 < 0} {
         for {set J 0} {$J < $V} {incr J} {
        lappend W $a_r($I2)
      }} else {
      for {set J 0} {$J < $V1} {incr J} {
        lappend W $a_r($I2)
                    }
        lappend W $a_r($I1)
              }
      incr I
      }
       set L [string reverse $W]
    set Rim [join $L {}]
                puts stdout "Arab = $Arab ===> Rim = $Rim"
        }

Может быть, ради интереса, сделать проги на Python... :D

Добавлено (22 ноября 2016, 23:14)
---------------------------------------------
Просьба - нужен код (язык Lua) для перевода строки в список ("Hello" --> {"H", "e", "l", "l", "o"})


litl
colencorДата: Четверг, 10 Ноября 2016, 23:05 | Сообщение # 15 | Тема: Язык программирования Io
был не раз
Сейчас нет на сайте
Из римской в арабскую, на Tcl:
Код
set r_a(I) 1; set r_a(V) 5; set r_a(X) 10; set r_a(L) 50;
set r_a(C) 100; set r_a(D) 500; set r_a(M) 1000
while 1 {       
puts stdout {Введите римское число:}
set Rim [gets stdin]
regsub {IV} $Rim IIII RimIV;   regsub {IX} $RimIV VIIII RimIX
regsub {XL} $RimIX XXXX RimXL; regsub {XC} $RimXL LXXXX RimXC
regsub {CD} $RimXC CCCC RimCD; regsub {CM} $RimCD DCCCC RimCM
set RimN [split $RimCM {}]
set Arab 0
foreach P $RimN {set Arab [expr  $r_a($P) + $Arab]}
puts stdout "Rim = $Rim ===> Arab = $Arab"
}


Добавлено (09 ноября 2016, 01:12)
---------------------------------------------
Усовершенствованная версия:
Код
set r_a(I) 1; set r_a(V) 5; set r_a(X) 10; set r_a(L) 50;
set r_a(C) 100; set r_a(D) 500; set r_a(M) 1000
while 1 {       
puts stdout {Введите римское число:}
set Rim [gets stdin]
set RimCM string map {IV IIII IX VIIII XL XXXX XC LXXXX CD CCCC CM DCCCC} $Rim
set RimN [split $RimCM {}]
set Arab 0
foreach P $RimN {set Arab [expr  $r_a($P) + $Arab]}
puts stdout "Rim = $Rim ===> Arab = $Arab"
}


Добавлено (10 ноября 2016, 23:05)
---------------------------------------------
Смотрю в книгу, вижу фигу... :(
Книга "Практическое программирование на Tcl и Tk" (4-ое изд.)
А нужно мне произвести реверс списка...
Так что, кто знает, просьба помочь!
Нашёл в сообщении об ошибке - reverse


litl

Сообщение отредактировал colencor - Пятница, 11 Ноября 2016, 04:44
colencorДата: Среда, 09 Ноября 2016, 02:05 | Сообщение # 16 | Тема: FORTH
был не раз
Сейчас нет на сайте
Почему на Вашем сайте (раздел "Первоисточники") нет упоминания о "FORTH - A Text and Reference" (Mahlon G. Kelly, Nicholas Spies)
и о его переводе - "РАДИО И СВЯЗЬ" - 1993 г.


litl
colencorДата: Вторник, 01 Ноября 2016, 16:07 | Сообщение # 17 | Тема: Язык программирования Io
был не раз
Сейчас нет на сайте
Просьба!!!
Нужен код на Tcl, который позволяет ввести с клавиатуры значение,
присвоить его переменной, вывести на экран (всё это в цикле).


litl
colencorДата: Понедельник, 31 Октября 2016, 20:10 | Сообщение # 18 | Тема: Язык программирования Io
был не раз
Сейчас нет на сайте
Из арабской в римскую:
Код
#!/usr/bin/perl
print "Введите арабское число:\n\n"; $_ = <STDIN>; chop( $_ );
@rim = ("I", "V", "X", "L", "C", "D", "M");
@s = split( //, $_ ); @y = reverse(@s); $i = 0;
foreach ( @y )
        { $w = ""; $w2 = ""; $i2 = 2*$i; $i1 = 2*$i+1;
            if( $_ == 4)   { $w = $rim[$i2] . $rim[$i1];}
     else { if( $_ == 9)   { $w = $rim[$i2] . $rim[2*$i+2];}
     else { if(($v = $_ - 5) < 0){ for( $q = 0; $q < $_; $q++){ $w = $w . $rim[$i2];};}
     else { for( $q = 0; $q < $v; $q++){ $w2 = $w2 . $rim[$i2];}; $w = $rim[$i1] . $w2;};};};
          $i++;
          @a[$i] = $w;
        }
        @u = reverse(@a); $p = "";
        for ( $j=0; $j < $i; $j++) { $p = $p . $u[$j]; };
        print "Arab = $_ ===> Rim = $p\n";

Добавлено (31 октября 2016, 20:10)
---------------------------------------------
На JS:

Код
var n = prompt("Введите арабское число :", "");    
    var n = n.split(""), n = n.reverse(), a = new Array(), rim = ["I", "V", "X", "L", "C", "D", "M" ];
    for ( var i=0; i < n.length; i++)
        {     w = "", w2 = "", i2 = 2*i, i1 = 2*i+1;
            v = parseInt(n[i]);
            if ( v == 4   ) { w = rim[i2] + rim[i1]; }
     else if ( v == 9   ) { w = rim[i2] + rim[2*i+2]; }
     else if (( v1 =  v - 5) < 0) { for ( var q=0; q < v; q++) { w += rim[i2];}; }
     else   {  for ( var q=0; q < v1; q++) { w2 += rim[i2];}; w = rim[i1] + w2; }
        a[i] =w;
     }
     a.reverse(), u = "";
     for ( var j=0; j< a.length; j++) { u += a[j] }; alert( u );


litl
colencorДата: Суббота, 29 Октября 2016, 21:00 | Сообщение # 19 | Тема: Язык программирования Io
был не раз
Сейчас нет на сайте
На Perl:
Код
#!/usr/bin/perl
print "Введите римское число:\n\n";  $_ = <STDIN>;   chop( $_ ); $r = $_ ;
s/IV/IIII/; s/IX/VIIII/; s/XL/XXXX/; s/XC/LXXXX/; s/CD/CCCC/; s/CM/DCCCC/;
%r_a = ( "I" => 1, "V" => 5, "X" => 10, "L" => 50, "C" => 100, "D" => 500, "M" => 1000 );
@s = split( //, $_ );   $a_ch = 0;
foreach ( @s ) { $a_ch += $r_a{ $_ }; };   print "Rim = $r  ===>  Arab = $a_ch\n";
#$d = split(//, $_);    for( $i = 0; $i < $d; $i++ ) { $a_ch += $r_a{ $s[$i] }; }
#print "Арабское число: $a_ch\n";


Добавлено (29 октября 2016, 21:00)
---------------------------------------------
Tcl, Python, Ruby, Lua... что ещё?! :D


litl

Сообщение отредактировал colencor - Воскресенье, 30 Октября 2016, 00:22
colencorДата: Понедельник, 26 Сентября 2016, 21:13 | Сообщение # 20 | Тема: Язык программирования Io
был не раз
Сейчас нет на сайте
Отвечу цитатой из книги:
3.5 В заключение об Io
Io - замечательный язык, он отлично подходит для изучения принципов программирования на языках, основанных на прототипах.
Синтаксис языка удивительно прост, но его семантика обладает невероятной широтой. Языки на основе прототипов обеспечивают
инкапсуляцию данных и поведение подобно объектно-ориентированным языкам. Но механизм наследования в них реализуется
намного проще. В Io нет ни модулей, ни классов. Каждый объект наследует свойства и методы непосредственно от своего прототипа.
Сильные стороны
Языки на основе прототипов обычно более удобны.Они позволяют изменять любые слоты любых объектов. Io обладает огромной
гибкостью, давая возможность изменять его синтаксис по мере необходимости. Как и в случае с языком Ruby, чтобы сделать язык
Io таким динамичным, его создателю пришлось пойти на компромиссы, касающиеся потери производительности, по крайней мере в
однопоточных приложениях. Мощные, современные библиотеки поддержки параллельных вычислений превращают Io в отличный
инструмент параллельной разработки. Рассмотрим поближе наиболее сильные стороны Io.
Размер интерпретатора
Интерпретатор языка Io имеет очень небольшой размер. Большинство промышленных приложений на Io выполняется во встраиваемых
системах. И это вполне закономерно, потому что язык очень маленький, мощный и гибкий, а виртуальная машина легко переносится в
различные операционные окружения.
Простота
Io имеет особенно компактный синтаксис. Изучить его можно в самые кратчайшие сроки. Как только вы научитесь понимать базовый
синтаксис языка, вам останется лишь познакомиться со структурой библиотек языка.
Гибкость
В Io используется модель "утиной" типизации и разрешается изменять любые слоты любых объектов в любой момент времени. Такая
свобода означает, что вы можете изменить даже самые основные правила языка в угоду своему приложению. Вы легко можете
реализовать обработку обращений к несуществующим методам посредством слота forward. Вы можете также переопределить ключевые
конструкции языка, непосредственно изменяя их слоты. Вы можете даже определять свои синтаксические конструкции.
Параллельные вычисления
В Io используются современные механизмы параллельных вычислений. Акторы, отложенные вычисления и сопрограммы значительно
облегчают создание многопоточных приложений, более простых в тестировании и обладающих более высокой производительностью.
Io также придаёт особое значение изменяемым данным и помогает избежать их использования. Наличие всех этих особенностей,
реализованных в виде стандартных библиотек, упрощает изучение более надёжной модели параллельных вычислений.

Добавлено (26 сентября 2016, 21:13)
---------------------------------------------
Пытался выяснить как в Io обстоят дела с функциями высшего порядка ( map, foreach, ... )
Конкретно хотел узнать есть ли в Io формальный способ их создания (например как в LISP, Haskell, ...)
Не вышло. Поэтому решил сделать функцию zipWith "в лоб":

Код
input_x := method( File standardInput readLine split(","))
input_y := method( File standardInput readLine split(","))
input_z := method( File standardInput readLine)
loop(
      " Vvedite 1 spisok := " print; x := input_x map( asNumber)
      " Vvedite 2 spisok := " print; y := input_y map( asNumber)
      " Vvedite operator := " print; z := input_z; if( z == "n", break)
      %+  := method( a, b, ( a - a % b)/b)
d := method( a, b, if( c == "+" , a +  b, if( c == "-" , a - b,
                   if( c == "*" , a *  b, if( c == "/" , a / b,
                   if( c == "..", a .. b, if( c == "%" , a % b,
                    if( c == "%+", %+(a, b)))))))))
zipWith := method( a, b, c, a map( i, x,  d( x, b at(i))))
zipWith( x, y, z) println

Функция берёт два списка и превращает их в один, используя заданный оператор (функцию)

Код
s := Map clone
s atPut( "+", "x + y"); s atPut( "-", "x - y")
s atPut( "*", "x * y"); s atPut( "/", "x / y")
input_r := method( File standardInput readLine)
input_x := method( File standardInput readLine)
input_y := method( File standardInput readLine)
input_z := method( File standardInput readLine)
loop(
" Vvedite r        := " print; r := input_r; if( r == "n", break)
" Vvedite 1 spisok := " print; x := input_x split(" ") map( asNumber)
" Vvedite 2 spisok := " print; y := input_y split(" ") map( asNumber)
" Vvedite operator := " print; z := input_z
d := method( x, y, doString( s at( z)))
zipWith := method( x, y, x map( i, v, d( v, y at(i))))
zipWith( x, y, z) println
   )

Пока в Io меня раздражает только синтаксис Map...
Возможность же, обращаться с List как со списком, так и как с массивом -несомненная находка. Подскажите, кто знает, есть ли такая возможность в других языках, и названия этих языков.


litl

Сообщение отредактировал colencor - Понедельник, 26 Сентября 2016, 21:02
Форум игроделов » Записи участника » colencor [22]
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг