Top.Mail.Ru
Ответы
Аватар пользователя
6 месяцев назад
от

Не могу решить задачу на go

Задача:
Напишите структура Note (сущность заметок, у которых в отличие от задач нет чётких дедлайнов и приоритета):

1. title - заголовок (тип string)

2. text - текст заметок (тип string)


Создайте структуру ToDoList с такими полями:

1. name - название списка (тип string)

2. tasks - список дел на сегодня (тип слайс структур Task (из предыдущего задания))

3. notes - список дополнительных заметок (тип слайс структур Note)

Для этой структуры реализуйте методы TasksCount и NotesCount, которые возвращают общее количество задач и заметок соответственно.

Также реализуйте метод CountTopPrioritiesTasks, который возвращает количество приоритетных задач. А также метод CountOverdueTasks, который возвращает количество просроченных задач.

Сама структура Task и все её методы из предыдущего задания также должны быть реализованы в этом.
(На условие про предыдущую задачу, не обращайте внимания. Суть не в этом.)

Мой код:

package main

import "time"

type Note struct {
title string
text string
}
var sum1, sum2 int
type Task struct {
summary string
description string
deadline time.Time
priority int
}
type ToDoList struct {
name string
tasks []Task
notes []Note
}
func (t ToDoList) TasksCount() {
for i := range t.tasks {
i++
sum1 = i
}
return sum1
}
func (d ToDoList) NotesCount() {
for j := range d.notes {
j++
sum2 = j
}
return sum2
}

Где ошибка???

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок
6мес

Методы TasksCount() и NotesCount() не объявляют возвращаемый тип, хотя должны возвращать int. Использование глобальных переменных sum1 и sum2 не рекомендуется, это может привести к проблемам при параллельном выполнении. Логика подсчета в циклах неверная - нет необходимости использовать счетчик, так как len() даст нужное количество элементов. Отсутствуют методы CountTopPrioritiesTasks() и CountOverdueTasks().

Исправленный код:

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
 package main 
 
import "time" 
 
type Note struct { 
    title string 
    text  string 
} 
 
type Task struct { 
    summary     string 
    description string 
    deadline    time.Time 
    priority    int 
} 
 
type ToDoList struct { 
    name  string 
    tasks []Task 
    notes []Note 
} 
 
// Возвращает общее количество задач 
func (t ToDoList) TasksCount() int { 
    return len(t.tasks) 
} 
 
// Возвращает общее количество заметок 
func (t ToDoList) NotesCount() int { 
    return len(t.notes) 
} 
 
// Возвращает количество приоритетных задач (priority > 2) 
func (t ToDoList) CountTopPrioritiesTasks() int { 
    count := 0 
    for _, task := range t.tasks { 
        if task.priority > 2 { 
            count++ 
        } 
    } 
    return count 
} 
 
// Возвращает количество просроченных задач 
func (t ToDoList) CountOverdueTasks() int { 
    count := 0 
    now := time.Now() 
    for _, task := range t.tasks { 
        if task.deadline.Before(now) { 
            count++ 
        } 
    } 
    return count 
} 
 


Методы можно использовать так:

1234567891011
 todoList := ToDoList{ 
    name:  "Мой список дел", 
    tasks: []Task{...}, 
    notes: []Note{...}, 
} 
 
taskCount := todoList.TasksCount() 
noteCount := todoList.NotesCount() 
priorityCount := todoList.CountTopPrioritiesTasks() 
overdueCount := todoList.CountOverdueTasks() 
 
Аватар пользователя
6мес

i++
sum1 = i
это что?
может sum1 += j, вы же сумму считаете

Аватар пользователя
Мудрец
6мес

На

1234567891011121314151617181920212223242526272829303132333435363738394041424344
 package main 
 
import "time" 
 
type Task struct { 
    Title, Description string 
    DueDate            time.Time 
    Priority           int 
    IsCompleted        bool 
} 
 
func (t *Task) IsOverdue() bool    { return !t.IsCompleted && time.Now().After(t.DueDate) } 
func (t *Task) IsHighPriority() bool { return t.Priority >= 8 } 
 
type Note struct { 
    Title, Text string 
} 
 
type ToDoList struct { 
    Name  string 
    Tasks []Task 
    Notes []Note 
} 
 
func (tdl *ToDoList) TasksCount() int { return len(tdl.Tasks) } 
func (tdl *ToDoList) NotesCount() int { return len(tdl.Notes) } 
 
func (tdl *ToDoList) CountTopPrioritiesTasks() (count int) { 
    for _, t := range tdl.Tasks { 
        if t.IsHighPriority() { 
            count++ 
        } 
    } 
    return 
} 
 
func (tdl *ToDoList) CountOverdueTasks() (count int) { 
    for _, t := range tdl.Tasks { 
        if t.IsOverdue() { 
            count++ 
        } 
    } 
    return 
}