Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/26: Рейтинг темы: голосов - 26, средняя оценка - 4.77
 Аватар для irineyxxx
151 / 53 / 11
Регистрация: 18.09.2011
Сообщений: 730

GPS навигатор в консольном приложении

05.01.2012, 01:05. Показов 5568. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Люди, прошу помощи. Я тут мозг себе ломаю об стену, уже не могу, как можно находить короткие пути как это делают в играх и в GPS навигаторах тоже. Вот код того, что я делал, но устал ужасно, это не выгодно как-то, но действует.
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
using System;
using System.Threading;
class Program
{
    static void Main()
    {
        back:
        int i;
        //Основной путь
        //-------------------------
        const int SHS_to_RSS = 12;
        const int RSS_to_MVS = 3;
        const int MVS_to_BHS = 19;
        const int BHS_to_BAS = 20;
        const int BAS_to_OMS = 27;
        //-------------------------
        //Побочный путь
        //-------------------------
        const int RSS_to_OMS = 16;
        const int RSS_to_BHS = 23;
        Console.Title = "GPS https://www.cyberforum.ru";
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine("\tGPS от irineyxxx");
        string[] NamesOfStations =
        {"Станция Высушенная Голова", "Станция Жаренный Лосось", "Станция Маньяки и Водочники",
         "Станция Черный Молот", "Станция Кровавый Выкидыш", "Станция Древний Мутант"};
        for (i = 0; i < NamesOfStations.Length; i++)
        {
            Console.WriteLine((i + 1) + ": " + NamesOfStations[i]);
        }
        try
        {
            Console.WriteLine();
            Console.Write("Выберите соответствующую цифру для начала пути А: ");
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            int A = int.Parse(Console.ReadLine());
            Console.ForegroundColor = ConsoleColor.Green;
            if (A == 1) Console.WriteLine("A: " + NamesOfStations[0]);
            else if (A == 2) Console.WriteLine("A: " + NamesOfStations[1]);
            else if (A == 3) Console.WriteLine("A: " + NamesOfStations[2]);
            else if (A == 4) Console.WriteLine("A: " + NamesOfStations[3]);
            else if (A == 5) Console.WriteLine("A: " + NamesOfStations[4]);
            else if (A == 6) Console.WriteLine("A: " + NamesOfStations[5]);
            else
            {
                Console.WriteLine("Ввод некорректен. Превышен диапозон значений.");
                Thread.Sleep(1500);
                Console.Clear();
                goto back;
            }
            Console.Write("Выберите соответствующую цифру для конца пути B: ");
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            int B = int.Parse(Console.ReadLine());
            Console.ForegroundColor = ConsoleColor.Green;
            if (B == 1) Console.WriteLine("B: " + NamesOfStations[0]);
            else if (B == 2) Console.WriteLine("B: " + NamesOfStations[1]);
            else if (B == 3) Console.WriteLine("B: " + NamesOfStations[2]);
            else if (B == 4) Console.WriteLine("B: " + NamesOfStations[3]);
            else if (B == 5) Console.WriteLine("B: " + NamesOfStations[4]);
            else if (B == 6) Console.WriteLine("B: " + NamesOfStations[5]);
            else
            {
                Console.WriteLine("Ввод некорректен. Превышен диапозон значений.");
                Thread.Sleep(1500);
                Console.Clear();
                goto back;
            }
            if (B == A)
            {
                Console.WriteLine("Введённые данные не соответствуют стандартам реализации.");
                Thread.Sleep(1500);
                Console.Clear();
                goto back;
            }
            Thread.Sleep(500);
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            Console.WriteLine("Начиную путь...");
            Console.ForegroundColor = ConsoleColor.Green;
            //----------------------------------------------------------------------
            //НАЧАЛО А1
            if (A == 1 & B == 2)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.WriteLine("От " + NamesOfStations[0] + " до " + NamesOfStations[1] + " = " + SHS_to_RSS + " км.");
                Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS);
            }
            else if (A == 1 & B == 3)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.WriteLine("От " + NamesOfStations[0] + " до " + NamesOfStations[2] + " = " + (SHS_to_RSS+RSS_to_MVS) + " км.");
                Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS + " " + RSS_to_MVS);
            }
            else if (A == 1 & B == 4)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.WriteLine("От " + NamesOfStations[0] + " до " + NamesOfStations[3] + " = " + 
                    (SHS_to_RSS + RSS_to_MVS + MVS_to_BHS) + " км.");
                Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS + " " + RSS_to_MVS + " " + MVS_to_BHS);
            }
            else if (A == 1 & B == 5)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.WriteLine("От " + NamesOfStations[0] + " до " + NamesOfStations[4] + " = " +
                    (SHS_to_RSS + RSS_to_MVS + MVS_to_BHS + BHS_to_BAS) + " км.");
                Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS + " " + RSS_to_MVS + " " + MVS_to_BHS + " " + BHS_to_BAS);
            }
            else if (A == 1 & B == 6)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.ForegroundColor = ConsoleColor.DarkGreen;
                Console.WriteLine("От " + NamesOfStations[0] + " до " + NamesOfStations[5] + " = " +
                    (SHS_to_RSS + RSS_to_MVS + MVS_to_BHS + BHS_to_BAS + BAS_to_OMS) + " км,");
                Console.WriteLine("если проходить его длинным путем.");
                Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS + " " + RSS_to_MVS + " " + MVS_to_BHS 
                    + " " + BHS_to_BAS + " " + BAS_to_OMS + " = этот путь длинный.");
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("От " + NamesOfStations[0] + " до " + NamesOfStations[5] + " = " +
                    (SHS_to_RSS + RSS_to_MVS + BAS_to_OMS) + " км,");
                Console.WriteLine("если проходить его коротким путем.");
                Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS + " " + RSS_to_MVS + " " + BAS_to_OMS + " = этот путь короткий.");
            }
            //--------------------------------------------------------------------КОНЕЦ А1
            else if (A == 2 & B == 1)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.WriteLine("От " + NamesOfStations[1] + " до " + NamesOfStations[0] + " = " + SHS_to_RSS + " км.");
                Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS);
            }
            else if (A == 2 & B == 3)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.WriteLine("От " + NamesOfStations[1] + " до " + NamesOfStations[2] + " = " + RSS_to_MVS + " км.");
                Console.WriteLine("Путь: " + 0 + " " + RSS_to_MVS);
            }
            else if (A == 2 & B == 4)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.WriteLine("От " + NamesOfStations[1] + " до " + NamesOfStations[3] + " = " + (RSS_to_MVS + MVS_to_BHS) + " км.");
                Console.WriteLine("Путь: " + 0 + " " + RSS_to_MVS + " " + MVS_to_BHS);
            }
            else if (A == 2 & B == 5)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.WriteLine("От " + NamesOfStations[1] + " до " + NamesOfStations[4] + " = " + (RSS_to_MVS + MVS_to_BHS + 
                    BHS_to_BAS) + " км.");
                Console.WriteLine("Путь: " + 0 + " " + RSS_to_MVS + " " + MVS_to_BHS + " " + BHS_to_BAS);
            }
            else if (A == 2 & B == 6)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.WriteLine("От " + NamesOfStations[1] + " до " + NamesOfStations[5] + " = " + (RSS_to_MVS + MVS_to_BHS +
                    BHS_to_BAS + BAS_to_OMS) + " км.");
                Console.WriteLine("Путь: " + 0 + " " + RSS_to_MVS + " " + MVS_to_BHS + " " + BHS_to_BAS + " " + BAS_to_OMS);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Invalid variable. " + e);
            Thread.Sleep(1500);
            Console.Clear();
            goto back;
        }
        Console.WriteLine();
        Console.WriteLine("Нажмите любую клавишу для повторного вычисления пути.");
        Console.ReadKey();
        Console.Clear();
        goto back;
    }
}
Делал этот код по этой картинке [смотреть картинку]. Еще раз скажу то, что код работает , но я себе мозг ломаю от этого кода, можно как-нибудь в 10 раз проще его сделать ?
Миниатюры
GPS навигатор в консольном приложении  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.01.2012, 01:05
Ответы с готовыми решениями:

Меню в консольном приложении
Доброго времени суток. Вот необходимо сделать интерфейс в консольном приложении. Я его сделал с помощью Switch case, однако вот ту у меня...

DispatcherTimer в консольном приложении
Можно ли использовать таймер DispatcherTimer в консольном приложении c#? И если можно, то как (пример)?

Ошибка в консольном приложении
Вылетает консольное приложение, не могу понять, что не так, ниже код: namespace ConsoleApplication2 { class Program { ...

4
 Аватар для irineyxxx
151 / 53 / 11
Регистрация: 18.09.2011
Сообщений: 730
05.01.2012, 01:25  [ТС]
*скажу еще на заметку то, что - прошу без LINQ

Добавлено через 18 минут
Люди, давайте вместе разбирать эту тему, ведь многим - она нужна будет - особенно новичкам - очень ценный урок.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
05.01.2012, 01:31
Так зачем вы мучаетесь? Дедушка Дейкстра же давно изобрел для вас решение в виде своего знаменитого алгоритма.
Все что остается - это его реализовать.
1
 Аватар для irineyxxx
151 / 53 / 11
Регистрация: 18.09.2011
Сообщений: 730
05.01.2012, 15:32  [ТС]
kolorotur, Покажите мне ваш код, над моей картинкой, мне очень интересно посмотреть на ваши знания обхода графа. Буду очень признателен Вам, за ваш , именно ваш код и не чей больше!

Добавлено через 7 минут
По предсказанием дедушки, вроде так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
static void Main(string[] args)
        {
            int[,] L ={
                {-1,  5, -1, -1, -1,  3, -1, -1}, 
                { 5, -1,  2, -1, -1, -1,  3, -1}, 
                {-1,  2, -1,  6, -1, -1, -1, 10}, 
                {-1, -1,  6, -1,  3, -1, -1, -1},
                {-1, -1, -1,  3, -1,  8, -1,  5}, 
                { 3, -1, -1, -1,  8, -1,  7, -1}, 
                {-1,  3, -1, -1, -1,  7, -1,  2}, 
                {-1, -1, 10, -1,  5, -1,  2, -1} 
            };
            Dijkstra clss = new Dijkstra((int)Math.Sqrt(L.Length),L);
А нет, хотя ошибаюсь

Добавлено через 1 час 17 минут
Люди помогите

Добавлено через 12 часов 33 минуты
я просто фигею от того, что никто не знает как делать ))0 честно ))0 я просто от стула падаю , когда смотрю свою тему
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
05.01.2012, 15:58
Цитата Сообщение от irineyxxx Посмотреть сообщение
Еще раз скажу то, что код работает
Если добавить или убрать одну из вершин, то ничего работать точно не будет. Вообще надо отвыкать копи-пастить.

Цитата Сообщение от irineyxxx Посмотреть сообщение
скажу еще на заметку то, что - прошу без LINQ
Очень даже зря. Он на порядок облегчает задачу и в нем нет абсолютно ничего сложного.

Цитата Сообщение от irineyxxx Посмотреть сообщение
я просто фигею от того, что никто не знает как делать
Написать код по уже готовому алгоритм - пару часов дело. Не всем эта затея интересна.

Когда-то на этом форуме выкладывал исходники с полной реализацией алгоритма по ссылке выше, который находит длину кратчайшего пути. После, вроде на следующий день, улучшил алгоритм тем, что он еще находит сам путь. Если таких путей много, то это будет один из них, причем какой, зависит от исхода алгоритма.
Сам исходник можно скачать по этой ссылке: Dijkstra.rar.
Комментарии есть, но чтобы понимать как взаимодействуют классы между собой наведу некоторую описательную часть:
Description.cs - класс, который хранит описательную часть вершины для алгоритма: была ли вершина посещена, расстояние до нее от начальной вершины и название вершины, от которой можно попасть к ней.
Node.cs - сама вершина, которая из себя ничего не представляет - абстрактная пустышка. Уникальное название вершины хранится в структуре на уровне выше, а сам этот класс нужен для хранения всех связей с текущей вершиной.
Link.cs - класс, который описывает связи между вершинами. Может показаться немного странным то, что здесь информация только о второй вершине и расстоянии до нее, но информация о первой вершине хранится только один раз уровнем выше.
Graph.cs - реализация одного, из возможных представлений графа. В нем же и есть метод, который реализует алгоритм Дейкстры на основе уже описанных понятий с обильным применением Linq и коллекций. Стоит только заметить, что способ получения самого пути происходит с конечной вершины и потому сразу же происходит реверс.
Могу только добавить то, что некоторые участки кода можно написать еще оптимальнее во вред читабельности. А сам пример для проверки алгоритма взят со статьи ссылкой выше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.01.2012, 15:58
Помогаю со студенческими работами здесь

Таблица в консольном приложении
for (int i = 1; i &lt;= 255; i++) { Console.Write(Convert.ToChar(i)); Console.Write(Convert.ToChar(&quot; &quot;)); ...

Кнопка в консольном приложении
Всем привет! Каким образом можно в C# консольное приложение добавить кнопку?

Чат в консольном приложении
Помогите пожалуйста создать чат в консольном приложении. Вот хотела с подругой початиться. Очень есть интерес. Либо книжку подскажите...

GPS навигатор на планшет windows 8.1 с модулем GPS (DIGMA EVE 8.0)
Здравствуйте. Всех с наступившим годом и рождеством! Прошу помощи, есть планшет с GPS (DIGMA EVE 8.0) - 2015 года выпуска, ищу...

Посоветуйте GPS навигатор до 10т.р.
Привет всем 1) посоветуйте жпс навигатор который вы бы выбрали себе невзирая на цену. ( ну или хотябы до 10 т.р) 2) вот ссылка...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru