Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 17.12.2017
Сообщений: 9
1

Робот сажающий грядки. Минимум кода!

25.12.2017, 11:53. Показов 1462. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть лабиринт такого типа (может быть любых размеров)
Робот сажающий грядки. Минимум кода!


Нужно, что бы робот находясь напротив стены в любой точке, дошел до стены и нашел отверстие, а внутри уже засадил все грядки. Длина кода не больше 45 строк. Когда пытался сделать я вышло около 120 строк)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.12.2017, 11:53
Ответы с готовыми решениями:

Робот, сажающий грядки
Есть такая среда "Исполнители", написанная питерским учителем. Там встроена черепашка, рисовалка и...

Вложенные циклы, небольшая задача, минимум кода
Всем приветы, нужно написать алгоритм вывода на экран все возможные комбинации 3-х натуральных...

Сколько дачников приземлится на свои грядки?
Помогите решить. Некое садоводческое товарищество располагается на острове, а дачники добираются...

Минимум и максимум для целого без ветвления кода на java
Написал для минимума на Java. Будет работать на машинах, где один байт = 8 бит. Размер целого и...

12
458 / 387 / 118
Регистрация: 23.05.2016
Сообщений: 1,551
25.12.2017, 12:02 2
Телепаты на рождественских каникулах. Код - в студию!
0
0 / 0 / 0
Регистрация: 17.12.2017
Сообщений: 9
25.12.2017, 12:12  [ТС] 3
Ну раз так надо)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
Программа
  {
  пока ( впереди_свободно )
    {
    вперед(впереди_свободно);
    }
  если ( впереди_стена )
    {
    налево;
    }
    пока (справа_стена и впереди_свободно )
      {
      вперед(справа_стена и впереди_свободно);
      }
 
 
если ( справа_свободно или слева_свободно )
  {
  направо;
  если ( слева_стена )
    {
     направо;
     вперед(1);
     пока ( слева_стена )
       {
        вперед(слева_стена);
       }
     если ( слева_свободно )
       {
        налево;
       }
    }
 
  вперед(справа_свободно );
  пока ( впереди_свободно )
    {
    вперед(не впереди_стена);
    если ( грядка )
      {
      посади;
      }
    }
  }
налево;
пока ( впереди_свободно )
  {
  вперед(впереди_свободно );
  если ( грядка )
    {
    посади;
    }
  если ( впереди_стена и сзади_клумба и справа_стена )
    {
    налево;
    вперед(1);
    налево;
    вперед(1);
    посади;
    направо;
    }
  }
пока ( впереди_стена )
  {
  налево;
  вперед(впереди_стена и сзади_клумба);
  вперед(1);
  посади;
  пока ( справа_стена )
    {
    вперед(справа_стена);
    если ( грядка )
      {
      посади;
      }
    }
  }
пока (впереди_свободно)
  {
  вперед ( впереди_свободно ) ;
  если ( грядка )
    {
    посади;
    }
  если ( впереди_стена )
    {
    налево;
    вперед(1);
    налево;
    вперед(1);
    если ( грядка )
      {
      посади;
      прервать;
      направо;
      }
    }
  }
пока ( справа_свободно и слева_клумба )
  {
  направо;
  вперед( впереди_свободно и сзади_клумба );
  пока ( грядка )
    {
    посади;
    вперед(грядка);
    }
  }
пока ( впереди_свободно и сзади_клумба )
  {
  вперед ( впереди_свободно и сзади_клумба ) ;
  если ( грядка )
    {
    посади;
    }
  если ( впереди_стена и сзади_клумба )
    {
    налево;
    вперед ( впереди_свободно и справа_стена );
    если ( грядка )
      {
      посади;
      }
    }
 
  }
}
Добавлено через 7 минут
Есть у меня мысль, сделать что бы он как принтер перемещался вверх вниз от грядки к грядке и вместе с этим правее с каждым переходом. Возможно, код выйдет меньше, но как реализовать без понятия.
0
458 / 387 / 118
Регистрация: 23.05.2016
Сообщений: 1,551
25.12.2017, 12:55 4
А вы уверены, что операторные скобки идут в зачет строчек? А вы уверены, что пример лабиринта привели верно?

На вашем лабиринте рационально двигаться в один из углов, либо правый нижний, либо правый верхний, затем засаживать клумбы и выкатываться обратно через отверстие в стене (ну раз уж так в задаче сказано).

В любом случае, вот на этот начальный участок программы обратите внимание:
1C
1
2
3
4
5
6
7
8
9
10
Программа
{
пока ( впереди_свободно )
 {
вперед(впереди_свободно);
 }
если ( впереди_стена )
 {
налево;
 }
Сразу два комментария:
1. Вы не говорили, что робот гарантировано стоит не напротив отверстия в стене. Если он будет стоять напротив отверстия, то вкатится внутрь периметра, далее программа будет работать некорректно.
2. Лабиринт нам известен, этим надо пользоваться и дополнительных проверок не делать. Из цикла выходим упершись в стену. Не нужна проверка "если ( впереди_стена )", она заведомо истинная, можно сразу писать команду "налево".
0
0 / 0 / 0
Регистрация: 17.12.2017
Сообщений: 9
25.12.2017, 13:16  [ТС] 5
Робот гарантированно напротив СТЕНЫ. Он не может быть напротив входа, он должен зайти в отверстие, засадить клумбы и может не выходить. С лабиринтом я не ошибся. Что ж попытаюсь написать что-то поменьше

Добавлено через 1 минуту
Даже без учета лимита строк, 120 слишком много для этого задания. И я еще не понял про: "Не нужна проверка "если ( впереди_стена )", она заведомо истинная, можно сразу писать команду "налево".", если просто поставить налево, он же пройдет 1 клетку и повернёт.
0
Модератор
Эксперт функциональных языков программирования
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,472
25.12.2017, 13:46 6
VacCena,
В лабиринте верхняя и нижняя линия всегда пустые?
Робот всегда изначально находится выше отверстия?
0
0 / 0 / 0
Регистрация: 17.12.2017
Сообщений: 9
25.12.2017, 13:51  [ТС] 7
Да, пустые. Он может находится везде напротив стены, не может быть напротив отверстия, и в самом верху или низу, где нет стены.

Добавлено через 31 секунду
И через верхнее и нижнее нельзя проходить, только через центральное.
0
Модератор
Эксперт функциональных языков программирования
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,472
25.12.2017, 14:08 8
Как-то так (но я не проверял):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Программа
{
    найти_вход();
    вперед(1);
    направо;
    вперед(1);
    повторить(5)
        посади_линию();
}
 
найти_вход()
{
    пока(впереди_свободно)
        вперед(1);
    направо;
    пока(слева_стена)
        вперед(1);
    налево;
    вперед(1);
}
 
посади_линию()
{
    пока(впереди_свободно)
    {
        если(грядка)
        {
            посади;
            вперед(1);
        }
        иначе
        {
            налево;
            вперед(1);
            налево;
            вперед(1);
            направо;
            return;
        }
    }
    налево;
    вперед;
}
Добавлено через 54 секунды
Цитата Сообщение от VacCena Посмотреть сообщение
Он может находится везде напротив стены
напротив стены выше отверстия?
0
0 / 0 / 0
Регистрация: 17.12.2017
Сообщений: 9
25.12.2017, 14:15  [ТС] 9
везде в красной зоне.
0
458 / 387 / 118
Регистрация: 23.05.2016
Сообщений: 1,551
25.12.2017, 14:20 10
Цитата Сообщение от VacCena Посмотреть сообщение
И я еще не понял про: "Не нужна проверка "если ( впереди_стена )", она заведомо истинная, можно сразу писать команду "налево".", если просто поставить налево, он же пройдет 1 клетку и повернёт.
код в сообщении четыре эквивалентен такому коду:

1C
1
2
3
4
5
6
7
Программа
{
пока ( впереди_свободно )
 {
вперед(впереди_свободно);
 }
налево;
Т.е. налево он повернет только после достижения стены. Дополнительный оператор "если" ничем не помогает и ни на что не влияет.

И что это за команда у вас такая в пятой строчке
1C
1
вперед(впереди_свободно);
????
Ваша программа вообще запускается? Проверяли?
0
0 / 0 / 0
Регистрация: 17.12.2017
Сообщений: 9
25.12.2017, 14:23  [ТС] 11
Исполнитель Робот Полякова, вперед и назад требуют условие в "()". А
1C
1
2
3
4
5
6
7
8
пока ( впереди_свободно )
    {
    вперед(впереди_свободно);
    }
  если ( впереди_стена )
    {
    налево;
    }
работает, объясняю, если написать без "если", то он будет ехать на 1 клетку вперед и затем поворачивать, создавая для себя карусель.
0
458 / 387 / 118
Регистрация: 23.05.2016
Сообщений: 1,551
25.12.2017, 14:49 12
Цитата Сообщение от VacCena Посмотреть сообщение
Исполнитель Робот Полякова, вперед и назад требуют условие в "()"
описание языка читали? Не условие они требуют, а количество шагов в скобках указывать.

Цитата Сообщение от VacCena Посмотреть сообщение
объясняю, если написать без "если", то он будет ехать на 1 клетку вперед и затем поворачивать, создавая для себя карусель.
"Объясняю" должно содержать конструкцию "потому что". Но при этом "потому что у меня когда-то началась карусель, я вставил заглушку и все почему-то заработало" не прокатывает. В двух операторах запутались? Ну блок-схему составьте, отвлекитесь от работы на пол часика, потом свежим взглядом посмотрите что получается. В конце концов проверьте как работают вот эти две программы и убедитесь, что одинаково:

1C
1
2
3
4
5
6
7
8
пока ( впереди_свободно )
    {
    вперед(1);
    }
  если ( впереди_стена )
    {
    налево;
    }

1C
1
2
3
4
5
пока ( впереди_свободно )
    {
    вперед(1);
    }
    налево;
А карусель у вас началась из-за неправильной расстановки операторных скобок.
0
0 / 0 / 0
Регистрация: 17.12.2017
Сообщений: 9
25.12.2017, 16:36  [ТС] 13
В общем, посидел подумал, вышло так, зашел через верхнее отверстие, оказалось, в условии написано: "должен найти отверстие", не сказано какое. 21 строка, освоил то, о чем Вы рассказывали, спасибо!
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Программа
  {
  пока ( впереди_свободно )
    {
    вперед(1);
    }
  налево;
  пока ( впереди_свободно )
    {
    вперед(1);
    }
  направо;вперед(2);направо;
  пока ( впереди_свободно )
    {
    вперед(1);
    если ( грядка )
      {
      посади;
      }
    }
  направо;назад(1);налево;назад(1);направо;посади;
  пока ( сзади_свободно)
    {
    назад(1);посади;
    }
  направо;
  пока ( справа_стена и впереди_свободно )
    {
    вперед(1);
    если ( грядка )
      {
      посади;
      }
    }
  налево;вперед(1);налево;вперед(1);направо;посади;
  пока ( впереди_свободно )
    {
    вперед(1);посади;
    }
  }
0
25.12.2017, 16:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.12.2017, 16:36
Помогаю со студенческими работами здесь

Записи с вариантами: Вычислить средний вес урожая с грядки для каждого дачника
1. Для каждого дачника даны сведения: фамилия, название овоща и урожай с каждой из пяти грядок. ...

Построить изображение, состоящее минимум из 30 объектов, созданных с использованием минимум 5 цветов
а)составить программу, отображающую на экране статичное изображение, состоящее минимум из 30...

Построить изображение, состоящее минимум из 30 объектов, созданных с использованием минимум 5 цветов
Графика в Паскале.  составить программу, отображающую на экране статичное изображение, состоящее...

Двумерные массивы Найти минимум получить новую матрицу деленные на минимум
Дана матрица размером N x M. Найти в ней наименьший элемент. Получить новую матрицу, элементы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru