![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
SIMarOK |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 25.10.2004 Репутация: нет Всего: нет |
Я не понимаю как начать программу с функциями. может кто подсказать? Спасибо
![]() По данной квадратной матрице построить вектор, элемент которого равен разности между максимальным элементом соответствующего столбца матрицы и элементом этого столбца, лежащем на главной диагонали. Найти произведение ненулевых элементов полученного вектора. Число строк матрицы не более 15. Формат числа ±ц.цц. ![]() |
|||
|
||||
Monomah |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 30.9.2004 Репутация: нет Всего: нет |
А матрица записана в файле или уже есть готовый двумерный массив? Если нада считать из файла, то тут можно использовать fscanf(...). С её помощью ты сможешь считать все числа из строки в заданном формате (точно не знаю, можно ли использовать эту функцию при неизвестном количестве чисел в строке, но это число можно узнать другими способами). Ну а потом, когда все числа записаны в массив, то мне кажется нет трудности вычислить вектор.
ну например так: float max=-99999; // допустим это число меньше всех чисел из матрицы float proiz=1; // здесь будет результирующее произведение чисел вектора float data[n][n]; // массив с уже считанными данными, n - размер матрицы, первый индекс - столбцы, второй - строки float vector[n]; // сюда будем записывать новый вектор for (int i=0;i<n;i++) { for (int j=0;j<n;j++) {if (data[i][j]>max) max=data[i][j]; //нашли максимальный элемент столбца } vector[i]=max- data[i][i] ; max=-99999; } for (i=0;i<n;i++) { if (vector[i]!=0) proiz=proiz*vector[i]; } конец программы если нада на функции разбить, то например можно нахождение максимального числа в столбце вынести в отдельную функцию |
|||
|
||||
SIMarOK |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 25.10.2004 Репутация: нет Всего: нет |
Пасибо за помощь ![]() Пользователь сам заполняет двумерный массив, вводом ![]() А как посчитать "которого равен разности между максимальным элементом соответствующего столбца матрицы и элементом этого столбца, лежащем на главной диагонали" как я понимаю это здесь высчитывается?
|
||||
|
|||||
Adil' |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 6 Всего: 15 |
К чему заботиться о наименьшем допустимом значении - обычно максимальным назначают нулевой элемент массива и начинают поиск с первого. Да и циклы построения вектора и вычисления произведения ненулевых элементов этого вектора можно объединить в один, и массив vector тогда не нужен:
Это сообщение отредактировал(а) Adil' - 11.11.2004, 17:59 -------------------- Удачи |
|||
|
||||
Monomah |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 30.9.2004 Репутация: нет Всего: нет |
Adil', абсолютно согласен, писал не из мысли быстродействия программы
![]() А так может быстрее будет?
|
|||
|
||||
Adil' |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 6 Всего: 15 |
Это абсолютно равнозначно vector!=0, впрочем как и vector!=0. Тут суть в том, что сравнение плавающих чисел происходит побайтно, и если хоть один из бит в байтах не совпадет, то то, числа будут считаться разными. В тоже время, при вычислениях с плавающими числами может набегать погрешность, и, например, 1 станет 1.00000001 - в принципе числа одинаковые, но hex-виде - это 3F800000 и 3F800001. З.Ы. Сам не уверен, что и сравнение с MINFLOAT надежно, лучше наверно вообще с 1e-7 сравнивать, хотя вообще-то это зависит от допустимой точности решения кокретной задачи. -------------------- Удачи |
|||
|
||||
SIMarOK |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 25.10.2004 Репутация: нет Всего: нет |
А как мне представить этот код со стандартными функциями библиотек <conio.h> и <stdio.h>? ![]() |
|||
|
||||
SIMarOK |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 25.10.2004 Репутация: нет Всего: нет |
Посмотрите, добавил заполнение массива. программа работает, но результаты верно выщитывать будет?
пасибо ![]() Это сообщение отредактировал(а) SIMarOK - 11.11.2004, 20:05 |
|||
|
||||
Adil' |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 6 Всего: 15 |
![]() -------------------- Удачи |
|||
|
||||
SIMarOK |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 25.10.2004 Репутация: нет Всего: нет |
он почему-то произведение не выщитывает...постоянно 0...
Это сообщение отредактировал(а) SIMarOK - 12.11.2004, 10:42 |
|||
|
||||
Adil' |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 6 Всего: 15 |
так а зачем ты инициализацию float proiz=1; убрал?
-------------------- Удачи |
|||
|
||||
SIMarOK |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 25.10.2004 Репутация: нет Всего: нет |
Всё работает, спасибо, а как его с функциями переделать можно?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |