сравнение языков программирования

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Lepton
Писатель
Сообщения: 73
Зарегистрирован: 18 окт 2011, 20:26
Контактная информация:

Re: сравнение языков программирования

Непрочитанное сообщение Lepton » 04 май 2016, 15:15

Olej писал(а): 2. ещё то же самое на 4-х более экзотических языках программирования:
- Go
- Scheme
- Scala
- Ocaml
Это разве экзотика ? Вот экзотика :lol:
Baik - скриптовый язык программирования (с динамической типизацией), созданный Mr. Harris Hasanuddin (Jakarta, Indonesia) для обучения языку сценариев с использованием индонезийского словарного запаса, для ОС Windows, Linux на серверах, ПК, ноутбуках и встроенных компьютерах.
https://www.facebook.com/BAIK-Scripting ... 054530076/

[polygon.ina]

Код: Выделить всё

tulis "Введите число вершин многоугольника:", "\n"
masuk v
untaian x[v]
untaian y[v]
perintah "clear"
tulis "Число вершин многоугольника: ", v, "\n"
tulis "Координаты вершин:\n"
 untuk(i=0;i<v;i=i+1) ulang
  tulis "Координаты X вершины ", i+1, ":", "\n"
  masuk a
  x[i] = a
  tulis "Координаты Y вершины ", i+1, ":", "\n"
  masuk b
  y[i] = b
  perintah "clear"
   tulis "Число вершин многоугольника: ", v, "\n"
   tulis "Координаты вершин:\n"
   untuk(n=0;n<=i;n=n+1) ulang
    tulis "Вершина-", n+1, " X=", x[n], " Y=", y[n], "\n"
   lagi
 lagi

untuk (i=0; i<n; i++) ulang
j = (i + 1) % n
dl = (x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j])
p = p + (akar dl)
s = s + x[i] * y[j] - x[j] * y[i]
lagi

kalau s < 0 maka
 s = 0 - s
akhirkalau
s=s*0.5

tulis "Площадь = ", s,"\n"
tulis "Периметр = ", p,"\n"
tamat
Выполнение

Код: Выделить всё

$ ./baik9.2 -v
BAIK (Bahasa Anak Indonesia untuk Komputer) versi 9.2
Optimized for Web and GPIO robot controlling
Copyright Haris Hasanudin 2005-2016

$ ./baik9.2 polygon.ina
Число вершин многоугольника: 3
Координаты вершин:
Вершина-1 X=-1 Y=0
Вершина-2 X=0 Y=1
Вершина-3 X=1 Y=0
Площадь = 1.00
Периметр = 4.83

$ ./baik9.2 polygon.ina
Число вершин многоугольника: 4
Координаты вершин:
Вершина-1 X=1 Y=1
Вершина-2 X=1 Y=2
Вершина-3 X=2 Y=2
Вершина-4 X=2 Y=1
Площадь = 1.00
Периметр = 4.00
baik.gif
Исходник polygon.ina и скомпилированный Baik v9.2 для Ubuntu 14.04 (64-bit) вложен :roll:
Вложения
BAIK.tar
(953.5 КБ) 204 скачивания

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: сравнение языков программирования

Непрочитанное сообщение Olej » 06 фев 2018, 18:50

Продолжаем...
Olej писал(а):В завершение... (если не станетскучно и ещё какой язык в сравнение не вкину).
То же самое, на языке Kotlin:

Код: Выделить всё

import java.io.*
import java.util.*
import java.lang.Double.*

internal class Polygon : ArrayList<Complex>() {        // class Complex заимствуется из отдельного файла
    override fun toString(): String {
        var ret = ""
        for (i in 0..size - 1)
            ret += "[" + get(i).re.toString() + "," +
                    get(i).im.toString() + "] "
        return ret
    }

    fun perimeter(): Double {
        var summa = 0.0
        for (i in 0..size - 1)
            summa += get(i).minus(if (i != size - 1) get(i + 1) else get(0)).r()
        return summa
    }

    fun square(): Double {
        var summa = 0.0
        for (i in 1..size - 1 - 1) {
            val side1 = get(i).minus(get(0))
            val side2 = get(i + 1).minus(get(0))
            summa += side1.r() * side2.r() *
                    Math.abs(Math.sin(side1.theta() - side2.theta())) / 2.0
        }
        return summa
    }
}

object triangle {
    @JvmStatic fun main(args: Array<String>) {
        val `in` = Scanner(System.`in`) // создание объекта чтения из стандартного потока ввода
        while (true) {
            println("координаты вершин в формате: X Y")
            val polygon = Polygon()
            var coord = ""
            while (true) {
                System.out.printf("%s%d%s", "вершина № ", polygon.size + 1, " : ")
                try {
                    coord = `in`.nextLine()
                }                   // чтение строки из консоли
                catch (ex: java.util.NoSuchElementException) {
                    println("завершение работы")
                    System.exit(0)  // EOF: ^D
                }
                if (0 == coord.length)
                    if (polygon.size != 0)
                        break       // завершение многоугольника
                    else {
                        println("завершение работы")
                        System.exit(0)
                    }
                try {               // выделение координат
                    val st = StringTokenizer(coord, " \t\n")
                    val x: Double? = (st.nextElement() as String).toDouble()
                    val y: Double? = (st.nextElement() as String).toDouble()
                    polygon.add(Complex(x!!, y!!))
                } catch (ex: java.util.NoSuchElementException) {
                    println("ошибка ввода!: " + ex.toString())
                    continue
                } catch (ex: java.lang.NumberFormatException) {
                    println("ошибка формата!: " + ex.toString())
                    continue
                }
            }
            println("вершин " + polygon.size + " : " + polygon)
            println("периметр = " + polygon.perimeter())
            println("площадь = " + polygon.square())
            println("---------------------------------")
        }
    }
}
Можем выполнять (и разрабатывать нечто подобное) это в IDE Intellij IDEA от компании JetBrains:
k1.png
А можно работать с консольными (как привычнее) инструментами Kotlin:
- сборка в .class

Код: Выделить всё

$ kotlinc triangle.kt Complex.kt -d triangle
...
$ cd triangle/
$ ls -l triangle 
итого 20
-rw-rw-r-- 1 olej olej 7274 фев  6 14:26 Complex.class
-rw-rw-r-- 1 olej olej 1541 фев  6 14:26 'Complex$Companion.class'
-rw-rw-r-- 1 olej olej 3082 фев  6 14:26 Polygon.class
-rw-rw-r-- 1 olej olej 3860 фев  6 14:26 triangle.class
$ java -classpath ./:/home/olej/.IdeaIC2017.3/config/plugins/Kotlin/kotlinc/lib/kotlin-runtime.jar triangle 
координаты вершин в формате: X Y
вершина № 1 : 
...
завершение работы
- сборка в .jar

Код: Выделить всё

$ kotlinc triangle.kt Complex.kt -include-runtime -d triangle.jar
...
$ kotlin -classpath triangle.jar triangle
координаты вершин в формате: X Y
вершина № 1 : 
…
завершение работы
Вложения
triangle.kt
(3.05 КБ) 74 скачивания
Complex.kt
(7.73 КБ) 83 скачивания

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: сравнение языков программирования

Непрочитанное сообщение Olej » 10 фев 2018, 12:01

Olej писал(а): То же самое, на языке Kotlin:
То же самое на языке Swift:

Код: Выделить всё

import Glibc

enum InputError: Error {
    case noDigit( s : Substring )
    case emptyString
    case lessDigits
    case moreDigits
}

class point {   // класс 2D точки 
   var x, y : Double
   init( x : Double, y : Double ) {
      self.x = x
      self.y = y
   }
   func display() {
      print( "[\( x ),\( y )]", terminator: " " )
   }
   func minus( p : point ) -> point {
      return point( x:x - p.x, y:y - p.y )
   }
   func abs() -> Double {
      return sqrt( pow( x, 2 ) + pow( y, 2 ) ) 
   }
   func polar() -> ( Double, Double ) {
      let r = abs(), θ = atan2( y, x )
      return ( r, θ )
   }
}

func input() throws -> point? {
   let line : String! = readLine()
   if nil == line { return nil } // EOF
   if 0 == line.count { throw InputError.emptyString }
   let компоненты : Array<Substring> = line.split( whereSeparator: { $0 == " " } )
   if компоненты.count < 2 { throw InputError.lessDigits }
   if компоненты.count > 2 { throw InputError.moreDigits } 
   let x : Double! = Double( компоненты[ 0 ] )
   if x == nil { throw InputError.noDigit( s:компоненты[ 0 ] ) }
   let y : Double! = Double( компоненты[ 1 ] )
   if y == nil { throw InputError.noDigit( s:компоненты[ 1 ] ) }
   return point( x:x, y:y )
} 

class polygon {
   var count = 0
   var pts = [point]()
   func append( p : point ) {
      pts.append( p )
   }
   init() {
      print( "координаты вершин в формате: X Y (^D конец ввода)" )
      while true {
         print( "вершина № \( count + 1 ) : ", terminator: "" )
         do {
            if let p = try input() {       // p = не nil
               pts.append( p )
               count += 1
            }
            else { 
               print( "\r", terminator: "" )
               break                       // ^D - EOF
            }   
         }
         catch InputError.emptyString {
            break;                         // Enter - EOF
         }
         catch InputError.lessDigits {
            print( "мало чисел" ) 
         } 
         catch InputError.moreDigits {
            print( "много чисел" ) 
         }
         catch InputError.noDigit( let why ) {
            print( "не число: \(why)" ) 
         }
         catch {
            print( "непонятная ошибка: \(error)" )
         }
      }
      if 0 == count { return }            
      print( "вершин \(count) : ", terminator: "" )
      for p in pts {
         p.display()
      }
      print()
   }
   func perimeter() -> Double {
      var summa = 0.0
      for i in 1 ... count {
         summa += ( pts[ i % count ].minus( p:pts[ i - 1 ] ) ).abs()
      } 
      return summa
   }
   func square() -> Double {
      var summa = 0.0
      for i in 1 ... count - 2 {
         let ( r1, θ1 ) = ( pts[ i ].minus( p:pts[ 0 ] ) ).polar(),
             ( r2, θ2 ) = ( pts[ i + 1 ].minus( p:pts[ 0 ] ) ).polar()
         summa += r1 * r2 * fabs( sin( θ2 - θ1 ) ) / 2.0 
      }
      return summa
   }
}  

while true {
   let  plg = polygon()
   if( plg.count < 3 ) { break }
   print( "периметр = \( plg.perimeter() )" )
   print( "площадь = \( plg.square() )" )
}

Код: Выделить всё

olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ swiftc -O triangle.swift -o triangle
Выполнение:

Код: Выделить всё

olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ ./triangle
координаты вершин в формате: X Y (^D конец ввода)
вершина № 1 : 0 0
вершина № 2 : 0 1
вершина № 3 : 1 0
вершин 3 : [0.0,0.0] [0.0,1.0] [1.0,0.0]
периметр = 3.41421356237309
площадь = 0.5
координаты вершин в формате: X Y (^D конец ввода)
вершина № 1 : 0 0
вершина № 2 : 0 1
вершина № 3 : 1 1
вершина № 4 : 1 0
вершин 4 : [0.0,0.0] [0.0,1.0] [1.0,1.0] [1.0,0.0]
периметр = 4.0
площадь = 1.0
координаты вершин в формате: X Y (^D конец ввода)
Вложения
triangle.swift
(3.21 КБ) 89 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: сравнение языков программирования

Непрочитанное сообщение Olej » 10 фев 2018, 13:56

Новая редакция (3.37) текста (и архив примеров кодов, соответственно) по этой теме.

Там же библиография со ссылками: где что скачать, онлайн справочники по языкам (достаточные для написания кода) ... в тексте кратко описания: как установить то что скачали, как начать использовать.
Вложения
ManyLangL_37.odt
(488.31 КБ) 84 скачивания
ManyLangL_37.tgz
(345.94 КБ) 109 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: сравнение языков программирования

Непрочитанное сообщение Olej » 12 фев 2018, 17:10

Olej писал(а):Новая редакция (3.37) текста (и архив примеров кодов, соответственно) по этой теме.
Добавлена реализация той же сравнительной задачи на Tcl.
Она показана здесь, чтобы не дублировать: Вопросы по языку TCL.
Новый текст описания и архив - добавлю вскорости...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: сравнение языков программирования

Непрочитанное сообщение Olej » 15 фев 2018, 16:51

Olej писал(а):
Olej писал(а):Новая редакция (3.37) текста (и архив примеров кодов, соответственно) по этой теме.
Добавлена реализация той же сравнительной задачи на Tcl.
Она показана здесь, чтобы не дублировать: Вопросы по языку TCL.
Добавлена реализация той же сравнительной задачи на языке Rust.
Она показана здесь, чтобы не дублировать: код на Rust.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: сравнение языков программирования

Непрочитанное сообщение Olej » 15 фев 2018, 18:33

Olej писал(а):Новый текст описания и архив - добавлю вскорости...
Как и обещал :lol: - последняя редакция.
Сюда добавлены:
- Kotlin
- Swift
- Tcl
- Rust

Теперь здесь 91 страница А4 офисного формата (OO) ... так что если кто хотел бы "бегло пробежать" - дело дурное, не стоит на это настраиваться.
Вложения
ManyLangL_42.odt
(525.34 КБ) 84 скачивания
ManyLangL_40.tgz
(349.94 КБ) 97 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: сравнение языков программирования

Непрочитанное сообщение Olej » 23 фев 2018, 09:04

Olej писал(а): Как и обещал :lol: - последняя редакция.
Самая правленая (и обновляемая!) редакция текста размещена на "Флибуста. Книжное братство.":
Изображение

За 1-е сутки (или чуть меньше) после размещения, число скачиваний этой книги составило 147 ;-)
Хорошо читается :lol:

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей