В otv походу сохранаются индексы элементов X, хз зачем. 1) если система имеет вид Ax=0, то нужно привести матрицу A к треугольному виду (диагональные элементы не обязательно должны быть не равны нулю- можно применить м.Гаусса с ведущим столбцом [+ точность вычислений будет выше]); если ранг получившейся матрицы будет меньше размерности A, то решений бесконечно много и вряд ли стоит искать ФСР. Иначе обратным ходом все иксы вытаскиваются по порядку, начиная с последнего 2) если система имеет вид Ax=B, то все нужно проворачивать с расширенной матрицей [A|B] и в после приведения A к треугольному виду дополнительно исследовать систему на совместность.
Если интересует- могу скинуть кусок курсовой с подробным описанием алгоритма и примером решения со всеми промежуточными вычислениями.
Member
Статус: Не в сети Регистрация: 20.03.2009 Откуда: Санкт-Петербург
Приветствую. Есть консольная прога на С++, но надо её сделать с помощью MFC. Уже умею создавать окно, менюшки, диалоговые окна. Но возникла проблема: я просто не понимаю, как интегрировать туда мою ранее написанную программу. Ведь вся теперяшняя прога состоит из кучи классов+она запускается объявлением класса, производного от CWinApp. Тут же даже ф-ии main нет, как теперь работать с указателями??? В общем, подскажите, где про это хорошо написано. Пожалуйста. Уже крыша едет...
_________________ Задачи бывают простыми и очень простыми...
Member
Статус: Не в сети Регистрация: 30.03.2009 Откуда: Екатеринбург
помогите найти ошибку:
"Скриншот"
#77
ругается на: 1>c:\users\admin\desktop\gmod_dll\rawio\gmluamodule.h(37): warning C4996: 'vsprintf': This function or variable may be unsafe. Consider using vsprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
Вот 371 строка этой библиотеки: c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(371): __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_ARGLIST(int, __RETURN_POLICY_SAME, _CRTIMP, sprintf, vsprintf, _Pre_notnull_ _Post_z_, char, _Dest, _In_z_ _Printf_format_string_ const char *, _Format)
XTracer Это не ошибка, а предупреждение: vsprintf/sprintf могут быть не безопасны. Юзай sprintf_s или макрос поставь, чтоб предупреждений не выдавала студия.
Member
Статус: Не в сети Регистрация: 09.01.2009 Откуда: Москва
Начал изучать C++. Не могу понять, что делает оператор return.
Цитата:
Оператор return используется для выхода из функции. Отнесение его к категории операторов перехода обусловлено тем, что он заставляет программу перейти в точку вызова функции.
Вот пример:
Код:
#include <iostream> #include <conio.h> using namespace std;
Как я понял: Программа доходит до X(R,I); и вызывает функцию, потом сюда же возвращается. Если убрать return, то дальнейшее выполнение программы не возможно. Убрал return, но программа все равно работает. Туплю сильно. Можете объяснить человеческим языком что делает return?))
Member
Статус: Не в сети Регистрация: 20.03.2009 Откуда: Санкт-Петербург
test'~3 У тебя есть функция X. Она возвращает переменную типа float. Если функция что-то возвращает, то с помощью return пишется, что она возвращает. Операторов return может быть несколько. Вот пример
Код:
bool check(int a, int b) { if (a>b) return true; else return false; }
Добавлено спустя 5 минут 51 секунду: На вид как-то странно у тебя) Хотя я тоже не всё знаю. Но у тебя в main нет никакой переменной X, но как тогда cout понимает, что X-функция) Добавь в майн float c; потом c=X(R,I); и выведи c. Без return работать не должно.
_________________ Задачи бывают простыми и очень простыми...
Последний раз редактировалось Danmerpro 20.09.2010 18:56, всего редактировалось 1 раз.
Насчет return: есть у тебя тело функции: { float X; X=R/I; return 0; } в первой строчке создается переменная, во второй вычисляется значение, в третьей - функция завершается. Т.е. даже если бы после return был еще какой-то код, то он бы не исполнялся. { float X; X=R/I; return 0; // код ниже никогда не выполнится float X1=X+1.0; }
return также возвращает какое-то значение, в зависимости от типа функции. Должно быть так: float X(float R, float I) { float X; X=R/I; return X; // полученное значение X можно будет использовать в месте, откуда вызывалась функция } Дальше, main: { float R,I; cout << "Vvedite R, I: "; cin >> R >>I; float x = X(R,I); // x будет равно значению, что вернет функция cout << x; getch(); }
сделать переменную типа short и для каждой из цифр проверять тот бит, который соответствует этой цифре. если 0 - то пометить, если 1 - то такая цифра уже есть. удобно для этого сдвиги использовать
Member
Статус: Не в сети Регистрация: 09.01.2009 Откуда: Москва
ToSHiC писал(а):
сделать переменную типа short и для каждой из цифр проверять тот бит, который соответствует этой цифре. если 0 - то пометить, если 1 - то такая цифра уже есть. удобно для этого сдвиги использовать
test'~3 Я думаю примерно так: #77 Если критична скорость, можно изменить метод получения цифр числа. У меня получилось добавлением 1 строчки увеличить скорость на 20%, уверен что есть еще более быстрые методы разбиения числа на цифры. Можно еще поиграться с битовыми операциями, напр. заменить выражение с "&" на другое выражение с "|" и высчитывать "used | flag" заранее и 1 раз. Но это уже мелочи.
Кстати, а что значит "коротким кодом"? Если понимать буквально, то можно например так: #77 Это то же самое, что и 1-ый метод, только рекурсией и в 1 строку . Медленнее примерно на 20%.
А если не критична скорость и не охота заморачиваться, то можно и так: #77 Медленнее первого варианта в 10 раз. Это на C# (впрочем вышеуказанный код тоже, но там я думаю переносится на C++ без изменений.), так что для C++ нужен будет метод расширения Distinct для перечислений, думаю из названия понятно что он делает. Не помню правда, если ли в C++ перечисления и методы расширения... Наверное в каком-нибудь boost'е есть что-нибудь подходящее.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения