Следующая интересующая меня задача:Olej писал(а): 1-я интересующая меня задача:
- определение координат 2D точек, составных [X,Y] из 2-х Double значений
- ввод покоординатно таких чисел с терминала
- с контролем ошибок ввода: <2 или >2 чисел введено, не числовое значение, отработку конца ввода EOF=^D и т.д.
- с тем, чтобы обработку ошибок сделать через переопределённый протокол Error (собственных ошибок) и выбрасывание исключений try-catch, раз такое есть в языке
Код: Выделить всё
class point { // класс 2D точки
var x, y : Double?
init( x : Double, y : Double ) {
self.x = x
self.y = y
}
}
enum InputError: Error {
case noDigit( s : Substring )
case emptyString
case lessDigits
case moreDigits
}
func input() throws -> point? {
print( "координаты в формате X Y : ", terminator: "" )
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 )
}
while true {
do {
if let p = try input() { // p = не nil
print( "точка X=\(p.x!) Y=\(p.y!)" )
}
else { break } // EOF
} catch InputError.noDigit( let why ) {
print( "не число: \(why)" )
} catch InputError.emptyString {
print( "пустая строка" )
} catch InputError.lessDigits {
print( "мало чисел" )
} catch InputError.moreDigits {
print( "много чисел" )
} catch {
print( "непонятная ошибка: \(error)" )
}
}
print( "\nзавершение ввода" )
Код: Выделить всё
olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ make 2Din
swiftc -O 2Din.swift -o 2Din
Код: Выделить всё
olej@nvidia ~/2018_WORK/own.BOOKs/ManyLang/swift $ ./2Din
координаты в формате X Y : 23 45
точка X=23.0 Y=45.0
координаты в формате X Y : -22 +33
точка X=-22.0 Y=33.0
координаты в формате X Y : 1 2 3 4
много чисел
координаты в формате X Y : 7 6 5
много чисел
координаты в формате X Y : 666
мало чисел
координаты в формате X Y : 0
мало чисел
координаты в формате X Y : 0 0
точка X=0.0 Y=0.0
координаты в формате X Y : 0d 33
не число: 0d
координаты в формате X Y : 67 t5
не число: t5
координаты в формате X Y :
пустая строка
координаты в формате X Y :
завершение ввода
Код: Выделить всё
%: %.swift
swiftc -O $< -o $@