Контакты
Местоположение
Россия, Москва и Московская обл., Москва

Наибольший вклад в теги

Все теги (5)

Лучшие ответы пользователя

Все ответы (17)
  • При цикле while постоянно вылетает Unity. Как исправить?

    by_kapt0xa
    @by_kapt0xa
    Учу кресты катаюсь на велике
    число float хранит двоичные дроби и конечное кол-во цифр.
    например 1/3 в 10-чной записи это 0.3333333333 и так до бесконечности.
    если мы запретим хранить бескочечное кол-во цифр (комп просто так не умеет), то 1/3 будет записана с погрешностью, т.к. в десятичной записи ее невозможно так отобразить
    допустим мы говорим х = 1/3
    давайте будем скдалывать х пока не получим 1
    а мы никогда не получим 1
    мы получим 0.9999999, которая не равна 1 и пойдем дальше
    аналогично с двоичной системой исчисления, 1/5, 1/10 не возможно выразить за 23 цифры, а float хранит только 23 двоичные цифры (double - 53 цифры)
    но даже если у тебя не будет арифметической погрешности, ловить точное равенство это так себе. обычно условие завершения цикла это знак больше или меньше, но не точное равенство.

    ну и еще так по мелочи, я не проводил эксперимент как это на производительности сказывается, но вектор это 3 числа, а х - одно число. зачем прибавлять к вектору другой вектор, если вам достаточно к иксу добавить какую-то величину. может быть 0 прибавляется очень быстро, но даже если мы забудем про производительность, просто к иксу прибавлять число это же наверное код будет изящнее. хотя у вас читаемость кода так себе. что такое gr, что такое WH, совсем неясно. и название controll - это попытка в адекватные названия, но совсем не ясная. controll наверное относиться к управлению, но тут я не вижу никакого управления. подумайте что делает этот скрипт и вычеркните слово controll из своих мыслей. ааа это control 1. значит есть и control 2. это совсем нейминг от бога.

    !!!!! обновил:
    что кстати значит "вылетает"?
    работа программы прекращается с отчетом об ошибке?
    или просто останавливается, зависает на 0 fps
    у тебя скорее всего второе. функция update вызывается на каждом кадре, если в в update делать бесконечный цикл, то программа остановится на этом бесконечном цикле, ошибки не будет просто игра встанет (наверное, я на такие ошибки не напарывался).
    если в update поместить что-то громоздкое, то у тебя fps сильно просядет
    общая рекомендация: тебе вряд ли в скриптах нужны циклы, в юнити есть свои циклы событий.
    Ответ написан
    Комментировать
  • Значение типа нельзя использовать для, инициализации сущности типа linked_list?

    by_kapt0xa
    @by_kapt0xa
    Учу кресты катаюсь на велике
    !!! посмотри конец сообщения

    маллок возращает void*, нужно явно преобразовать в linked_list*
    я бы написал (linked_list*)..., но то ли умные, то ли занудные дяди говорят что надо писать static_cast<linked_list*>(...)
    struct linked_list* list =               malloc(sizeof * list); // подчеркивает красным
    struct linked_list* list = (linked_list*)malloc(sizeof * list); //не подчеркивает красным


    у меня на сегодня исчерпан лимит на ответы, я отвечу ререз редактирование сообщения:
    https://www.youtube.com/watch?v=1i4nVpIQN0U

    если использовать не malloc и free, а new и delete, то тип данных будет не void*, а сразу нужный.
    но new и delete это c++.
    вы скорее всего используете C для заданий в универе, но если вам разрешают пользоваться C++, я бы рекомендовал его, там более приятный синтаксис, хотя мне по началу не было понятно как работает cout, но когда я разобрался, я перешел на сторону c++.
    извиняюсь что быканул за C, я сам новичок на форуме, не уверен что C вынесен в отдельную категорию, просто у вас указан с++
    Ответ написан
    3 комментария
  • Как поменять код, чтобы при заполнении двумерного массива распознавалась переменная int и не запрашивало указатель?

    by_kapt0xa
    @by_kapt0xa
    Учу кресты катаюсь на велике
    #include <random>
    #include <iostream>
    using namespace std;
    
    void zxc(int* arr, const int row, const int col)
    {
    
    	srand(time(NULL));
    	for (int f = 0; f < row; f++)
    	{
    		for (int j = 0; j < col; j++)
    			arr[f* col + j] = rand() % 10;
    	}
    
    }
    
    void qwe(int* arr, const int row, const int col)
    {
    
    	for (int i = 0; i < col; i++) {
    		for (int f = 0; f < row; f++)
    			cout << arr[f * col + i] << "\t";
    		cout << endl;
    	}
    }
    
    //qwe и zxc это самые удачные названия для функции, из названия сразу ясно что эти функции делают.
    
    int main()
    {
    	const int row = 5;
    	const int col = 7;
    	int arr[row * col];
    	zxc(arr, row, col);
    	qwe(arr, row, col);
    }

    программисты C++ таким не занимаются, это больше похоже на C.
    вот как выглядит нормальный код на C++:
    #include <random>
    #include <iostream>
    #include <vector>
    using namespace std;
    
    void zxc(vector<vector<int>>& arr, const int row, const int col)
    {
    	srand(time(NULL));
    	arr.resize(row);
    	for (auto& line : arr)
    	{
    		line.resize(col);
    		for (auto& x: line)
    		{
    			x = rand() % 10;
    		}
    	}
    
    }
    
    void qwe(const vector<vector<int>>& arr, const int row, const int col)
    {
    	for (const auto& line : arr)
    	{
    		for (const auto& x : line)
    		{
    			cout << x << "\t";
    		}
    		cout << endl;
    	}
    }
    
    int main()
    {
    	const int row = 5;
    	const int col = 7;
    	vector<vector<int>> arr;
    	zxc(arr, row, col);
    	qwe(arr, row, col);
    }

    простые массивы имеют массу неприятностей, связанных с НЕгибкостью кода. если вы пишете на плюсах, познакомьтесь с векторами.
    !!!!!!!!!извиняюсь, предыдущая версия была с ошибками, я отредачил
    Ответ написан
    1 комментарий
  • Почему в Unity я хожу на A вправо, на d в лево, на w назад, на s вперед?

    by_kapt0xa
    @by_kapt0xa
    Учу кресты катаюсь на велике
    Vector3 moveDir = -new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical")).normalized;
                      ^ вы уверены что вам нужен тут минус?
    Ответ написан
    Комментировать
  • Как исправить Error C4700: использована неинициализированная локальная переменная "x"?

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

    попробуйте вот так:
    float y = 0, x = 0, t = 0, z = 0, k = 0;//при создании задавайте значение поумолчанию


    или так так:
    float y, x = 0, t = 0, z, k;

    с++ не задает переменным значение по умолчанию, если это не структура или класс с конструктором (я упрощаю)
    в переменной будет записан какой-то мусор, оставшийся от работы компьютера.

    6375b2975432d407708901.png
    Ответ написан
    Комментировать