| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Помогите пожалуйста |
| Автор: volnorez 13.3.2008, 21:06 |
| Здравствуйте. Очень нужна помощь в решении задачи на двумерные массивы. Вот условие: Заменить элементы матрицы 0 , ели они больше среднего значения по строке. Заранее спасибо за помощь. |
| Автор: susanin 13.3.2008, 21:41 |
| что значит больше среднего??? больше среднего арифметического строки? или больше элемента который посередине? |
| Автор: Dmi3ev 13.3.2008, 21:46 | ||
вот так можно! по-моему, наглядно
попробуй, напиши!!! |
| Автор: susanin 13.3.2008, 21:53 | ||
| Dmi3ev, одного взгляда достаточно чтобы понять что она не будет работать..=) а return 0; в конце кто писать будет?и массив как то непонятно объявлен... вобщем после небольшой корректировки получается полностью работоспособная версия на VS2005
|
| Автор: volnorez 13.3.2008, 22:04 |
| Да надо обнулить если элементы больше среднего арифметического значения по строке. SUSANIN а можешь объяснить что ты там написал и можно ли вводить матрицу непосредственно с клавиатуры в самой проге а не статически в начале? |
| Автор: susanin 13.3.2008, 22:07 |
| volnorez, конечно можно! нет ничего невозможного! а вот объяснять что я там ..вернее господин Dmi3ev написал могу только вобщем... хотите больше-читайте книги... вобщем происходит следующее... пробегаем двумерный массив по каждой строчке.. вычисляем для каждой строчки среднее арифметической... потом опять пробегаем эту строчку и сравниваем элементы со средним арифметическим..если элемент больше среднего арифметического, то мы обнуляем его... вот и все... так для всех строк... |
| Автор: Dmi3ev 13.3.2008, 22:27 |
| susanin, не обязательно писать return 0! попробуй, получится! у меня работает и у тебя заработает! |
| Автор: susanin 13.3.2008, 22:30 |
| Dmi3ev, не знаю что у вас за компилятор, но int main () требует чтобы функция возвращала целочисленное значение!!! поэтому эта ошибка еще на этапе компиляции вылетает! по крайней на VS 2005!! так же VS 2005 в циклах for() не объявлен тип переменной i ... это тоже ошибка... по крайней мере по стандарту с++... ведь до цикла то переменная i не объявлялась....а те переменный которые объявляются внутри цикла for() дейтсвуют только внутри этого цикла.. |
| Автор: volnorez 13.3.2008, 22:38 |
| А зачем мы везде вот в этом "for (int i=0; i<=4; i++)" пишем <=4 что это за счетчик такой почему именно 4? |
| Автор: susanin 13.3.2008, 22:42 |
| volnorez , потому что массив наш [5][5] (пять на пять) но так как элементы начинаются с нулевого, то получается чтобы пройти по всем элементам надо с 0 до 4 ключительно...можно было в начале объявить размер массива например как const int size=5 а потом в циклах писать for(int i=0; i<size;i++) |
| Автор: Dmi3ev 13.3.2008, 22:47 |
| оператор return нужен, если функция (которая по замыслу ничего возвращать не будет) завершается не естественным порядком (до достижения "}")! а так компилятор спокойно понимает что и как! конечно желательно это писать, но совсем не обязательно! а массив можно и так инициализировать!!! твоя запись, конечно, тоже правильная (это бесспорно), но и в моей ничего плохого нет!!! можно даже в строчку объявлять двумерный массив (только это не очень наглядно)! так что,susanin, не суди меня, сделай скидку на то, что я писал сразу здесь и даже не компилировал! |
| Автор: volnorez 13.3.2008, 22:48 |
| А если мне надо задать массив 10 на 10 и я задаю методм случайных чисел тогда что? #include<iostream.h> #include <iomanip.h> #include <stdlib.h> #include <time.h> #include <conio.h> int main() { clrscr; srand(unsigned(time(NULL))); const size = 10; int A[size][size]={0}; for(int i=0;i<size;i++){ for(int j=0;j<size;j++){ A[i][j] = rand()%100; } } for(i=0;i<size;i++){ for(int j=0;j<size;j++){ cout<<setw(8)<<A[i][j]; |
| Автор: Dmi3ev 13.3.2008, 22:55 |
| кстати на счет переменных в циклах, если я объявляю их каждый раз он выдает "multiple declaration" и я убираю объявления, пока не перестает ругаться))) я компилировал в BORLAND TURBO C++, все пучком))) ладно, susanin, не буду спорить, твои замечания справедливы. суть проблемы не в этом ведь, в самой задаче разногласий нет, так что не будем рассуждать на тему записи, экзешник один х..))) (извините) и вас и у меня работает))) |
| Автор: susanin 13.3.2008, 22:56 |
| volnorez, практически правильный код.... немного поправьте скобки и все будет ок! |
| Автор: bsa 13.3.2008, 22:59 | ||
|
| Автор: susanin 13.3.2008, 22:59 |
| Dmi3ev, согласен, споры не уместны..алгоритм у вас правильный совершенно.. объясню лишь почему у вас все работает и ошибки такие возникают в циклах.. все потому что компилятор 3,1 не соответствует новым стандартам с++... поэтому и получается такая неразбериха... сам учился на 1 курсе..сам писал на таком же борланде... знаокмо все это.. |
| Автор: bsa 13.3.2008, 23:00 | ||
Проблема в нестандартном компиляторе. Рекомендуется обновить на что-то более соответствующее стандарту. |
| Автор: Dmi3ev 13.3.2008, 23:06 | ||
если с клавиатуры
Добавлено через 7 минут и 33 секунды чтобы не открывать новую тему, какой компилятор соответствует стандартам, просто BILDER (например) не нравится открывать, чтобы написать консольное приложение! очень симпотичен синий экран Досовского окошка |
| Автор: bsa 13.3.2008, 23:24 |
| Dmi3ev, на сколько мне известно, comeau. Но, думаю, проще будет с gcc (mingw) работать. |
| Автор: Dmi3ev 13.3.2008, 23:27 |
| bsa, спасибо! посмотрю! |
| Автор: susanin 13.3.2008, 23:31 |
| Dmi3ev, от себя лично скажу, что мне нравится VS2005 и DevC++ ....второй бесплатный... |
| Автор: volnorez 14.3.2008, 00:03 |
| всем спасибо за помощь!!! |