Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2018, 20:01   #11
Bart`s
Пользователь
 
Регистрация: 21.09.2018
Сообщений: 14
По умолчанию

Не мне судить, конечно, но конструкции goto для малого кода очень приятная вещь и не является критичной.

На изучение основ особо времени не надо, в отличии от более серьёзных фундаментальных вещей(классы, списки, множества и др), которые так тяжело понять без хорошего учителя и/или литературы.
Код:
//процедура как сказал товарищ Serge_Bliznykov это генерация расстановки кораблей
private void generate(Label [,] mas,bool visible)
        {
//в общем объявление и присвоением переменным значения 
            int position = 0;
            int[] count_ship = new int[] { 4, 3, 3, 2, 2, 2, 1, 1, 1, 1 };
            Random r = new Random();
//бесконечный цикл
            while (true)
            {
                int random; 
//присвоением начальным координатам x,y рандомные значения от 0 до 10(10 не идет в счет на сколько я помню и по логике морской бой вроде на 10 клеток был)
          loop: x0 = r.Next(0, 10);
                y0 = r.Next(0, 10);
//random от 0 до 2 , которое служит условием для разветления
                random = r.Next(0, 2);
                int k = 0; 
//если random  будет равен 1, то ... (иначе возврат к метке loop ниже по коду)
                if (random == 1)
                {
//если сумма начальной координаты и видимо кол-во кораблей меньше 10 И второе выражение не знаю., то 
                    if (y0 + count_ship[position] <= 10 && (int)mas[x0, y0].Tag==0)
                    {
//проходим в цикле начиная с y0 до суммы y0 + кол-во кораблей
                        for (int j = y0; j < y0 + count_ship[position]; ++j)
                        {
//если ..., то значение k увеличиваем на единицу. Видимо проверка, подсчитываем уже поставленных кораблей
                            if ((int)mas[x0, j].Tag == 0) k++;
                        }
//по завершению цикла, если k будет равен количеству кораблей, то (иначе возврат к метке loop ниже по коду)
                        if (k == count_ship[position])
                        { 
//если visible примет значения истинны, то вызов других функций
                            if(visible) 
                            download_image(mas, count_ship[position],true);
                            buffer_zone(mas, x0 - 1, x0 + 1, y0 - 1, y0 + count_ship[position], -1);
//опять цикл с тем же условием
                            for (int j = y0; j < y0 + count_ship[position]; ++j)
                            {
//если истинна, то присваиваем массиву новые значения
                                if (visible)
                                {
                                    mas[x0, j].Tag = count_ship[position];
                                }
//иначе, 
                                else
                                {
//если position имеет значение 1, то массив заполняется -3
                                    if (position== 1)
                                        mas[x0, j].Tag = -3;
//иначе присваиваем массиву новые значения
                                    else
                                        mas[x0, j].Tag = count_ship[position];
                                }                    
                            }
//увеличивает Position на единицу
                            position++;
//если Position достигнет 10, то выходим из бесконечного цикла
                            if (position == 10) break;
                        }
//иначе возврат к метке loop, это где было присвоение x и y значения
                        else
                            goto loop;
                    }
//иначе возврат к метке loop,
                    else
                        goto loop;
                }
Как то так вижу, и как говорили предыдущие ораторы, так дела не делаются. Никто такой фигнёй из знающих заниматься не будет(да и другие тоже), я это сделал, просто чтобы попрактиковаться в чтении кода, мне самому в пользу как студенту.
Bart`s вне форума Ответить с цитированием
Старый 15.10.2018, 20:06   #12
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Bart`s Посмотреть сообщение
конструкции goto для малого кода очень приятная вещь
И какую роль оно тут выполняет? Что станет менее приятно без нее?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 15.10.2018, 20:08   #13
Bart`s
Пользователь
 
Регистрация: 21.09.2018
Сообщений: 14
По умолчанию

ну конкретно тут никакую, раз все заключено в бесконечный цикл
А вот для алгоритмов шифрования с метками мне было куда удобнее реализовывать.
Bart`s вне форума Ответить с цитированием
Старый 15.10.2018, 20:24   #14
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Я даже больше скажу - если их удалить, то ничего не изменится...

Цитата:
Сообщение от Bart`s Посмотреть сообщение
А вот для алгоритмов шифрования с метками мне было куда удобнее реализовывать
И что ж вы там метили? Вместо циклов использовали чтоль?
p51x вне форума Ответить с цитированием
Старый 15.10.2018, 20:56   #15
Bart`s
Пользователь
 
Регистрация: 21.09.2018
Сообщений: 14
По умолчанию

А вместо чего их ещё можно использовать?
Просто вместо "кучи" циклов, , которые вдобавок не могут пересекаться, а только друг в друга вложенными и с разными выражениями вполне удобнее просто отправить на соответствующую строчку.

Сейчас конкретно уже не воспроизведу что именно и как, но несколько точек где нужно было вернуться обратно. лучше, чем создавать 2 бесконечных цикла или 1 и с реализацией процедуры/функции.
Я же не утверждаю, что метки это хорошее дело в общем случае и если не ошибаюсь, то циклы на их принципе и работают(надо будет погуглить)

p.s. не ругайте за метки, я ими не пользуюсь в си, так немного побаловался когда-то в вба -_-, больше не буду
Bart`s вне форума Ответить с цитированием
Старый 15.10.2018, 21:02   #16
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от Bart`s Посмотреть сообщение
А вместо чего их ещё можно использовать?
Вообще-то у goto есть вполне разумные варианты использования.

Цитата:
Сообщение от Bart`s Посмотреть сообщение
Просто вместо "кучи" циклов, , которые вдобавок не могут пересекаться, а только друг в друга вложенными и с разными выражениями вполне удобнее просто отправить на соответствующую строчку.
А зачем циклы пересекать? Куча это пара? Какой алгоритм то?

Цитата:
Сообщение от Bart`s Посмотреть сообщение
Сейчас конкретно уже не воспроизведу что именно и как, но несколько точек где нужно было вернуться обратно. лучше, чем создавать 2 бесконечных цикла или 1 и с реализацией процедуры/функции.
Может вы про continue не знаете?..
p51x вне форума Ответить с цитированием
Старый 15.10.2018, 21:12   #17
Bart`s
Пользователь
 
Регистрация: 21.09.2018
Сообщений: 14
По умолчанию

циклам не зачем пересекаться, а алгоритмам было, вопроизвести я не могу ибо смысл их сохранять было, это же не серьёзное шифрование.
Про continue немного читал, но не применял, так что да не знаю
Bart`s вне форума Ответить с цитированием
Старый 15.10.2018, 21:14   #18
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от Bart`s Посмотреть сообщение
Просто вместо "кучи" циклов, , которые вдобавок не могут пересекаться
Цитата:
Сообщение от Bart`s Посмотреть сообщение
циклам не зачем пересекаться, а алгоритмам было
Так кто там пересекся?

Цитата:
Сообщение от Bart`s Посмотреть сообщение
вопроизвести я не могу ибо смысл их сохранять было, это же не серьёзное шифрование
Чтобы после набора мудрости посмотреть и переосмыслить? Чтобы потом потренироваться с асмом, кудой, ... ?
p51x вне форума Ответить с цитированием
Старый 15.10.2018, 23:45   #19
Kellerman18
Новичок
Джуниор
 
Регистрация: 14.10.2018
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Bart`s Посмотреть сообщение
Не мне судить, конечно, но конструкции goto для малого кода очень приятная вещь и не является критичной.

На изучение основ особо времени не надо, в отличии от более серьёзных фундаментальных вещей(классы, списки, множества и др), которые так тяжело понять без хорошего учителя и/или литературы.
Код:
//процедура как сказал товарищ Serge_Bliznykov это генерация расстановки кораблей
private void generate(Label [,] mas,bool visible)
        {
//в общем объявление и присвоением переменным значения 
            int position = 0;
            int[] count_ship = new int[] { 4, 3, 3, 2, 2, 2, 1, 1, 1, 1 };
            Random r = new Random();
//бесконечный цикл
            while (true)
            {
                int random; 
//присвоением начальным координатам x,y рандомные значения от 0 до 10(10 не идет в счет на сколько я помню и по логике морской бой вроде на 10 клеток был)
          loop: x0 = r.Next(0, 10);
                y0 = r.Next(0, 10);
//random от 0 до 2 , которое служит условием для разветления
                random = r.Next(0, 2);
                int k = 0; 
//если random  будет равен 1, то ... (иначе возврат к метке loop ниже по коду)
                if (random == 1)
                {
//если сумма начальной координаты и видимо кол-во кораблей меньше 10 И второе выражение не знаю., то 
                    if (y0 + count_ship[position] <= 10 && (int)mas[x0, y0].Tag==0)
                    {
//проходим в цикле начиная с y0 до суммы y0 + кол-во кораблей
                        for (int j = y0; j < y0 + count_ship[position]; ++j)
                        {
//если ..., то значение k увеличиваем на единицу. Видимо проверка, подсчитываем уже поставленных кораблей
                            if ((int)mas[x0, j].Tag == 0) k++;
                        }
//по завершению цикла, если k будет равен количеству кораблей, то (иначе возврат к метке loop ниже по коду)
                        if (k == count_ship[position])
                        { 
//если visible примет значения истинны, то вызов других функций
                            if(visible) 
                            download_image(mas, count_ship[position],true);
                            buffer_zone(mas, x0 - 1, x0 + 1, y0 - 1, y0 + count_ship[position], -1);
//опять цикл с тем же условием
                            for (int j = y0; j < y0 + count_ship[position]; ++j)
                            {
//если истинна, то присваиваем массиву новые значения
                                if (visible)
                                {
                                    mas[x0, j].Tag = count_ship[position];
                                }
//иначе, 
                                else
                                {
//если position имеет значение 1, то массив заполняется -3
                                    if (position== 1)
                                        mas[x0, j].Tag = -3;
//иначе присваиваем массиву новые значения
                                    else
                                        mas[x0, j].Tag = count_ship[position];
                                }                    
                            }
//увеличивает Position на единицу
                            position++;
//если Position достигнет 10, то выходим из бесконечного цикла
                            if (position == 10) break;
                        }
//иначе возврат к метке loop, это где было присвоение x и y значения
                        else
                            goto loop;
                    }
//иначе возврат к метке loop,
                    else
                        goto loop;
                }
Как то так вижу, и как говорили предыдущие ораторы, так дела не делаются. Никто такой фигнёй из знающих заниматься не будет(да и другие тоже), я это сделал, просто чтобы попрактиковаться в чтении кода, мне самому в пользу как студенту.
Большое человеческое спасибо, выручил
Kellerman18 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генерация и расшифровка QR кода Noor Общие вопросы Delphi 6 22.07.2014 14:59
расшифровка кода 1с karol Фриланс 3 02.05.2011 15:40
Расшифровка кода drNabla Общие вопросы Delphi 1 28.11.2010 01:49
Расшифровка кода Rid Помощь студентам 14 19.10.2009 21:46
расшифровка кода IvanVsemogushii Фриланс 2 07.06.2009 11:48