Результаты поиска
| |
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 глючит, может кто нибудь подсказать решение
Добавлено (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 ... И если это так, тогда я буду в этой теме задавать вопросы про 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) --------------------------------------------- Вы знаете что делает этот код
Код 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 ... Пока неудачно ...
Добавлено (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 |
был не раз
Сейчас нет на сайте
| Я являю миру метод Тупого Перебора во всей своей красе!!! Решать задачу на бумажке , да не в жизнь... А если серьёзно, я просто отчаялся , так что если кто то может предложить более робастный код, или алгоритм - в студию...
Код 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) работает намного быстрее
Код 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 Необходимое дополнение: код создавался не с нуля, так что некоторые моменты для меня "магия" 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... Добавлено (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... что ещё?!
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 |
|
| |
|