Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Программирование на Golang. Исправьте синтаксис пожалуйста!!! P.S. Строки так сдвинул чтобы можно было опубликовать

Никита Свирь Ученик (94), на голосовании 4 дня назад
package main
import ( "errors" "strings" "math" )
func Calc(expression string) (float64, error) {
result := 0
num := make([]float64, 0, 20)
deist := make([]string, 0, 19)
//Удаляем все пробелы
expression = strings.ReplaceAll(expression, " ", "")
for _, k := range expression {
if k != "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "*", "/", "+", "-", "(", ")" {
err := errors.New ("Неверно набран пример")
return 0, err } }
for i:=0, i==cap(num), i++ {
if num[i]==nil{
num[i], expression = Number(expression) }
deist[i] = expression[0]
expression = append(str[:0], str[1:]...)
if expression[i]=="("{
expression = append(str[:0], str[1:]...)
in := ""
for _, p := range expression {
if p==")" {
break
} else {
in = in + p } }
num[i+1]=Calc(in) } }
for i:=0, i<len(deist), i++ {
if deist[i]=="/" {
if num[i+1]==0 {
err := errors.New ("На ноль делить нельзя!")
return 0, err }
deist = append(str[:i], str[i+1:]...)
num[i]=num[i] / num[i+1]
num = append(str[:i+1], str[i+2:]...)
} else if deist[i]=="*" {
deist = append(str[:i], str[i+1:]...)
num[i]=num[i] * num[i+1]
num = append(str[:i+1], str[i+2:]...) }
for i:=0, i<len(deist), i++ {
if deist[i]=="-" {
deist = append(str[:i], str[i+1:]...)
num[i]=num[i] - num[i+1]
num = append(str[:i+1], str[i+2:]...)
} else if deist[i]=="+" {
deist = append(str[:i], str[i+1:]...)
num[i]=num[i] + num[i+1]
num = append(str[:i+1], str[i+2:]...) } }
result = num[0]
return result, nil }
func Number (str string) (int, string) { chislo := 0.0
chisl := 0.0
for i:=0, i==1 {
if str[i] == "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" {
chisl = float64(str[i])
chislo = chislo * 10 + chisl
str = append(str[:i], str[i+1:]...)
} if else str[i] == "."{
t=0.0
str = append(str[:i], str[i+1:]...)
for k:=0, k==1 {
t++
ten := math.Pow(10.0, t)
if str[k] == "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" {
chisl = float64(str[i])
chislo = (chislo * ten + chisl) / ten
str = append(str[:k], str[k+1:]...)
} else { break } }
} else { break }
} return chislo }
Голосование за лучший ответ
Андрей Высший разум (461907) 1 месяц назад
Во всех заголовках for меняешь все ',' на ';'. Разделитель - точка с запятой, а не запятая. Там, где получилась одна точка с запятой, добавить недостающую: заголовок for должен иметь либо ровно 2 либо ровно 0 точек с запятой, но никак не одну.

Вот это вот:
 for i := 0; i == cap(num); i++ {
if num[i] == nil {
содержит сразу две ошибки:

Во первых, cap() - размер выделенной для среза области памяти, но не размер среза. Нельзя выполнить num[i] для i >= len(num). Даже если cap(num) многократно больше len(num).

Во вторых, num - массив вещественных чисел и num[i] - всегда вещественное число. А nil - значение указателя и только указателя. Само сравнение числа с nil уже является ошибкой.

Остальное не смотрел.

P.S. Для публикации кода в редакторе есть кнопочка <>. А если код не влезает целиком в вопрос, то в интернете есть множество сайтов специально для этого. Выкладываешь код на приличном сайте, а в вопрос вставляешь ссылку на него.
Похожие вопросы