| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Двумерные массивы с функциями |
| Автор: SIMarOK 10.11.2004, 22:10 |
| Я не понимаю как начать программу с функциями. может кто подсказать? Спасибо По данной квадратной матрице построить вектор, элемент которого равен разности между максимальным элементом соответствующего столбца матрицы и элементом этого столбца, лежащем на главной диагонали. Найти произведение ненулевых элементов полученного вектора. Число строк матрицы не более 15. Формат числа ±ц.цц. |
| Автор: Monomah 11.11.2004, 10:50 |
| А матрица записана в файле или уже есть готовый двумерный массив? Если нада считать из файла, то тут можно использовать 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 11.11.2004, 17:27 | ||||
Пасибо за помощь Пользователь сам заполняет двумерный массив, вводом А как посчитать "которого равен разности между максимальным элементом соответствующего столбца матрицы и элементом этого столбца, лежащем на главной диагонали" как я понимаю это здесь высчитывается?
|
| Автор: Adil' 11.11.2004, 17:58 | ||
К чему заботиться о наименьшем допустимом значении - обычно максимальным назначают нулевой элемент массива и начинают поиск с первого. Да и циклы построения вектора и вычисления произведения ненулевых элементов этого вектора можно объединить в один, и массив vector тогда не нужен:
|
| Автор: Monomah 11.11.2004, 18:24 | ||
| Adil', абсолютно согласен, писал не из мысли быстродействия программы А так может быстрее будет?
|
| Автор: Adil' 11.11.2004, 18:51 | ||
Это абсолютно равнозначно vector!=0, впрочем как и vector!=0. Тут суть в том, что сравнение плавающих чисел происходит побайтно, и если хоть один из бит в байтах не совпадет, то то, числа будут считаться разными. В тоже время, при вычислениях с плавающими числами может набегать погрешность, и, например, 1 станет 1.00000001 - в принципе числа одинаковые, но hex-виде - это 3F800000 и 3F800001. З.Ы. Сам не уверен, что и сравнение с MINFLOAT надежно, лучше наверно вообще с 1e-7 сравнивать, хотя вообще-то это зависит от допустимой точности решения кокретной задачи. |
| Автор: SIMarOK 11.11.2004, 19:52 | ||
А как мне представить этот код со стандартными функциями библиотек <conio.h> и <stdio.h>? |
| Автор: SIMarOK 11.11.2004, 20:02 | ||
Посмотрите, добавил заполнение массива. программа работает, но результаты верно выщитывать будет?
пасибо |
| Автор: Adil' 12.11.2004, 09:42 | ||
|
| Автор: SIMarOK 12.11.2004, 10:42 |
| он почему-то произведение не выщитывает...постоянно 0... |
| Автор: Adil' 12.11.2004, 15:17 |
| так а зачем ты инициализацию float proiz=1; убрал? |
| Автор: SIMarOK 21.11.2004, 15:25 |
| Всё работает, спасибо, а как его с функциями переделать можно? |