Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 10.04.2020
Сообщений: 6

Тренажер Робот

10.04.2020, 19:56. Показов 4810. Ответов 17

Студворк — интернет-сервис помощи студентам

6-9
Перед роботом находится "дорожка" из грядок, которая в произвольный момент поворачивает направо или налево.
"Дорожка" не прерывается, не разветвляется и заканчивается Базой.
Робот должен посадить цветы на все грядки и дойти до Базы.
Разрешается использовать только один цикл
РЕШАЮ УЖЕ 5 дней помогите описать полностью что там писать пожалуйста!!!!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.04.2020, 19:56
Ответы с готовыми решениями:

«Клавиатурный тренажер»
К сожалению моя тема наверное уже улетела, приходится создавать новую. Извините, если нарушаю какие то правила форума. Но мне здесь уже 2...

С чего начать делать клавиатурный тренажер?
Буду делать клавиатурный тренажер. Вот хочу спросить может кто что подскажет. хоть с чего начать. Может примеры будут какие. ВСЕ ДЕЛАТЬ...

Рекомендации для приложения «Клавиатурный тренажер»
Всем привет! Задали задание на курсовую работу. Не прошу писать программу за меня. Так как хотел бы сам разобраться и все сделать. Но...

17
Wanna be serious
 Аватар для Bespridelschic
587 / 474 / 186
Регистрация: 31.07.2013
Сообщений: 1,693
10.04.2020, 20:19
Ваше поле 15x15 можно представить в виде матрицы, где 0 - это элемент поля на котором дорожка не проходит, и 1 - где дорожка проходит, и например 2 - это база. Запускаете цикл while, и начинаете "мониторить" что вокруг происходит. Смотрите соседние элементы. Где единица или двойка - туда и "идёте".
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
10.04.2020, 20:25
Цитата Сообщение от StepanTixomirov Посмотреть сообщение
Робот должен посадить цветы на все грядки и дойти до Базы.
В задании не указано можно ли ходить роботу по грядкам, и в каком направлении он может посадить цветы. Может у него длинные руки и он может через 10 клеток сажать цветы. Также не указано можно ли сажать цветы по диагонали. Также не указано должен ли робот перед тем как посадить цветы повернуться.
Цитата Сообщение от StepanTixomirov Посмотреть сообщение
Разрешается использовать только один цикл
Даже условные операторы с переменными нельзя использовать ?
Цитата Сообщение от StepanTixomirov Посмотреть сообщение
РЕШАЮ УЖЕ 5 дней
и что нарешали
0
0 / 0 / 0
Регистрация: 10.04.2020
Сообщений: 6
10.04.2020, 20:34  [ТС]
Исполнитель РОБОТ.
Используем команды:
"пока", "если", "вперед", "назад", "налево", "направо", "посади".
Использование цикла "пока" обязательно!
Использование цикла "повтори" не разрешается!
Использование подпрограмм желательно.
Во всех заданиях считать, что расстояния до объектов неизвестны
Вот так нужно
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
10.04.2020, 20:48
Цитата Сообщение от StepanTixomirov Посмотреть сообщение
Вот так нужно
такими темпами и за год не решите
0
0 / 0 / 0
Регистрация: 10.04.2020
Сообщений: 6
10.04.2020, 20:48  [ТС]
Исполнитель РОБОТ.
Используем команды:
"пока", "если", "вперед", "назад", "налево", "направо", "посади".
Использование цикла "пока" обязательно!
Использование цикла "повтори" не разрешается!
Использование подпрограмм желательно.
Во всех заданиях считать, что расстояния до объектов неизвестны
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
10.04.2020, 20:48
Вы даже не знаете конкретных условий
0
0 / 0 / 0
Регистрация: 10.04.2020
Сообщений: 6
10.04.2020, 20:50  [ТС]
Там в программе все условия описаны, тренажер скачиватеся с сайт полякова, остается только написать код...Все условия даны!
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
10.04.2020, 21:33
Не знаю, что такое "пока" и "если", но пусть будет так.

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
using System;
 
class Program
{
    static int[] dx = { 0, 1, 0, -1 };
    static int[] dy = { -1, 0, 1, 0 };
    
    static int Next(string[] m, int x, int y, int d)
    {
        if (m[y + dy[d]][x + dx[d]] != '#')
            return d;
 
        d = (d + 1) % 4;
 
        if (m[y + dy[d]][x + dx[d]] != '#')
        {
            Console.WriteLine("направо");
            return d;
        }
 
        d = (d + 2) % 4;
        Console.WriteLine("налево");
        return d;
    }
 
    static void Main()
    {
        string[] m = new string[]
        {
            "###############",
            "#   ###   #   #",
            "# #     # # # #",
            "# ####### #   #",
            "# #   #   ### #",
            "# # # # ###   #",
            "#   # #   #####",
            "##### ### #P###",
            "#   # #   #   #",
            "# #   # ##### #",
            "# ##### #   # #",
            "#   #   # # # #",
            "### # ### # # #",
            "###S#     #   #",
            "###############"
        };
 
        int x = 3;
        int y = 13;
        int d = 0;
 
        while (m[y][x] != 'P')
        {
            d = Next(m, x, y, d);
            x += dx[d];
            y += dy[d];
            Console.WriteLine("вперед");
 
            if (m[y][x] == ' ')
                Console.WriteLine("посади");
        }
 
        Console.WriteLine("конец");
        Console.ReadKey();
    }
}
0
0 / 0 / 0
Регистрация: 10.04.2020
Сообщений: 6
10.04.2020, 21:48  [ТС]
круто, но не так
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
10.04.2020, 21:49
Цитата Сообщение от StepanTixomirov Посмотреть сообщение
круто, но не так
Разумеется не так, потому что у вас половина условия задачи приведена. Когда полностью напишете, тогда будет "так".
0
Wanna be serious
 Аватар для Bespridelschic
587 / 474 / 186
Регистрация: 31.07.2013
Сообщений: 1,693
10.04.2020, 22:09
Лучший ответ Сообщение было отмечено StepanTixomirov как решение

Решение

Длинновато получилось, но результат верный выдаёт. Массив cells сделаете под своё задание. В конструкторе Robot два цикла - определение текущей позиции робота. Можете зашивать сразу готовые координаты, тогда циклы не будут нужны.
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
using System;
 
namespace Study
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            CellStatus[,] cells = new CellStatus[,]
            {
                { CellStatus.Empty, CellStatus.Empty, CellStatus.Empty, CellStatus.Empty, CellStatus.Empty },
                { CellStatus.Empty, CellStatus.Bed,   CellStatus.Bed,   CellStatus.Bed,   CellStatus.Empty },
                { CellStatus.Empty, CellStatus.Bed,   CellStatus.Empty, CellStatus.Bed,   CellStatus.Empty },
                { CellStatus.Empty, CellStatus.Start, CellStatus.Empty, CellStatus.Bed,   CellStatus.Base },
                { CellStatus.Empty, CellStatus.Empty, CellStatus.Empty, CellStatus.Empty, CellStatus.Empty }
            };
 
            Robot robot = new Robot(cells);
            while(robot.Move())
            {
 
            }
 
            Console.ReadKey();
        }
    }
 
    public enum CellStatus
    {
        Start,
        Base,
        Empty,
        Bed,
    }
 
    class Robot
    {
        private System.Drawing.Point CurrentPosition { get; set; }
 
        private CellStatus[,] Field { get; set; }
 
        public Robot(CellStatus[,] field)
        {
            if (field.GetLength(0) > 0 && field.GetLength(1) > 0)
            {
                Field = field;
            }
 
            for (int i = 0; i < field.GetLength(0); i++)
            {
                for (int j = 0; j < field.GetLength(1); j++)
                {
                    if (Field[i, j] == CellStatus.Start)
                    {
                        CurrentPosition = new System.Drawing.Point(i, j);
                        break;
                    }
                }
            }
        }
 
        private System.Drawing.Point LookAround()
        {
            if (CurrentPosition.X - 1 >= 0)
            {
                if (Field[CurrentPosition.X - 1, CurrentPosition.Y] == CellStatus.Bed || Field[CurrentPosition.X - 1, CurrentPosition.Y] == CellStatus.Base)
                {
                    Console.WriteLine("Вверх");
                    return new System.Drawing.Point(CurrentPosition.X - 1, CurrentPosition.Y);
                }
            }
            if (CurrentPosition.X + 1 < Field.GetLength(0))
            {
                if (Field[CurrentPosition.X + 1, CurrentPosition.Y] == CellStatus.Bed || Field[CurrentPosition.X + 1, CurrentPosition.Y] == CellStatus.Base)
                {
                    Console.WriteLine("Вниз");
                    return new System.Drawing.Point(CurrentPosition.X + 1, CurrentPosition.Y);
                }
            }
 
            if (CurrentPosition.Y - 1 >= 0)
            {
                if (Field[CurrentPosition.X, CurrentPosition.Y - 1] == CellStatus.Bed || Field[CurrentPosition.X, CurrentPosition.Y - 1] == CellStatus.Base)
                {
                    Console.WriteLine("Влево");
                    return new System.Drawing.Point(CurrentPosition.X, CurrentPosition.Y - 1);
                }
            }
            if (CurrentPosition.Y + 1 < Field.GetLength(1))
            {
                if (Field[CurrentPosition.X, CurrentPosition.Y + 1] == CellStatus.Bed || Field[CurrentPosition.X, CurrentPosition.Y + 1] == CellStatus.Base)
                {
                    Console.WriteLine("Вправо");
                    return new System.Drawing.Point(CurrentPosition.X, CurrentPosition.Y + 1);
                }
            }
 
            return new System.Drawing.Point(-1, -1);
        }
 
        public bool Move()
        {
            var newPoint = LookAround();
            if (newPoint.X > -1)
            {
                Field[CurrentPosition.X, CurrentPosition.Y] = CellStatus.Empty;
                CurrentPosition = newPoint;
                Field[CurrentPosition.X, CurrentPosition.Y] = CellStatus.Start;
 
                return true;
            }
 
            Console.WriteLine("Робот достиг базы");
            return false;
        }
    }
}
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
10.04.2020, 22:14
Вообщем я немного погуглил чего хочет автор и поясню за него, раз у него это вызвало сложности.

Это не имеет никакого отношения к C#.
http://www.inform239.narod.ru/
Вот тут есть ссылки на задачи "Исполнитель РОБОТ", где можно скачать файлы *.maz и саму программу эмуляции. На прикрепленном скриншоте пример справки по командам робота. Думаю на этом все, составлять для этого робота скрипты я конечно же не буду.
Миниатюры
Тренажер Робот  
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
10.04.2020, 22:33
StepanTixomirov, если вкратце, то можно сделать так (скрипт пишите сами):
пока впереди свободно
{
вперед
если слева свободно влево
если справа свободно вправо
если грядка посади
}
1
0 / 0 / 0
Регистрация: 10.04.2020
Сообщений: 6
10.04.2020, 23:04  [ТС]
Вы супер!!!! Я бы вам орден выдал...Я очень плохо ориентируюсь на этом форуме, но вы явный специалист...У меня не получается сделать программу..Очень долго сижу мозгов не хватает, думал здесь есть боги информатики для которых это пустяки, но Ваш ответ мне понравился очень сильно, я бы Вас рекомендовал, у вас прекрасный подход к делу, однако задачу я так и не решил, бьюсь как рыба в стекло аквариума уже несколько дней((((((
0
10.04.2020, 23:08

Не по теме:

Какая интересная беседа выходит)

0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
10.04.2020, 23:48
StepanTixomirov,...
В этой задаче пустые пространства по бокам, а не стены, поэтому чуть сложнее вышло. Остальные сами.

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Программа
{
  пока ( не база )
  {
    вперед(1);
    если (не грядка и не база)
    {
      назад(1);
      налево;
      вперед(1);
      если (не грядка и не база)
      {
        кругом;
        вперед(2);
      }
    }
    назад(1);
    если (грядка) посади;
    вперед(1);        
  }
}
1
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
10.04.2020, 23:55
StepanTixomirov, спасибо, этого уже итак было слишком...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.04.2020, 23:55
Помогаю со студенческими работами здесь

Нужно написать клавиатурный тренажер в консоли
Вот мой код static void Main(string args) { Random rnd = new Random(); char arr = new char; ...

Клавиатурный тренажер: как оформить программу согласно вложению
Хочу написать программу, которая будет загружать из файла слова, а дальше мы будем их набирать какое-то время( например 5 минут). Хочу...

Поисковый робот
Здравствуйте. Пробую написать робота для поиска нужного текста на сайте. Есть кое-что не понятно в алгоритме но надеюсь поправите. ...

Программа-робот
Всем доброго дня! Не могли бы вы мне подсказать или кинуть ссылку на мануал, как написать программу, которая будет при запуске выполнять...

Тренажер по математике: добавить возможность сохранения максимального счета в настройках
Программа интерактивный тренажер по математике, проверяющий умение пользователя выполнять простые арифметические операции над числами. в...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru