Интерфейсы: Напишите программу 3

Messages
1,701
Reaction score
288
Website
tehadm.ru
Давайте используем ваши знания структур, методов и интерфейсов на практике и реализуем объект, удовлетворяющий интерфейсу fmt.Stringer. Назовем его "Батарейка".

Во-первых, вы должны объявить новый тип, удовлетворяющий интерфейсу fmt.Stringer.

Ваш тип должен предусматривать, что на печати он будет выглядеть так: [ XXXX]: где пробелы - "опустошенная" емкость батареи, а X - "заряженная".

Во-вторых, на стандартный ввод вы получаете строку, состоящую ровно из 10 цифр: 0 или 1 (порядок 0/1 случайный). Ваша задача считать эту строку любым возможным способом и создать на основе этой строки объект объявленного вами на первом этапе типа: надеюсь, вы понимаете, что строка символизирует емкость батарейки: 0 - это "опустошенная" часть, а 1 - "заряженная".

В-третьих, созданный вами объект должен называться batteryForTest (использование этого имени обязательно).

В вашем распоряжении фактически весь файл, НО завершающая фигурная скобка функции main() вам не видна, но она присутствует. Перед этой скобкой присутствует функция (которая вам тоже не видна), принимающая в качестве аргумента объект типа fmt.Stringer - batteryForTest, и направляющая его на стандартный вывод, поэтому вам не требуется выводить что-то на печать самостоятельно.

Sample Input:
1000010011

Sample Output:
[ XXXX]

C-like:
package main

import "fmt" // пакет используется для проверки ответа, не удаляйте его

func main() {
    // batteryForTest - не забывайте об имени
// } Скобка, закрывающая функцию main() вам не видна, но она есть
 
Last edited:
C-like:
package main

import (
    "fmt"
    "strings"
)

type Battery struct {
    charge string
}

func (b *Battery) String() string {
    zeros := strings.Count(b.charge, "0")
    ones := strings.Count(b.charge, "1")
    result := "[" + strings.Repeat(" ", zeros) + strings.Repeat("X", ones) + "]"
    return result
}

func main() {
    var s string
    fmt.Scan(&s)
    batteryForTest := &Battery{charge: s}
    fmt.Println(batteryForTest)
}

для решения из кода убираем:
C-like:
fmt.Println(batteryForTest)
}
 
C-like:
package main

import (
    "fmt"
    "strings"
)

type Battery struct {
    capacy int
}

func (b Battery) String() string {
    return "[" + strings.Repeat(" ", 10-b.capacy) + strings.Repeat("X", b.capacy) + "]"
}

func main() {
    var s string
    fmt.Scan(&s)
    batteryForTest := Battery{strings.Count(s, "1")}
 
Back
Top