Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2012, 01:33   #1
Саша Степанов
Новичок
Джуниор
 
Регистрация: 23.01.2012
Сообщений: 4
По умолчанию Не меняет местами элементы матрицы, язык C++

код вроде бы правильный, но почему-то вместо того чтобы менять местами элементы B[imin][jmin] и B[3][2], просто заменяет на B[imin][jmin], помогите пожалуйста разобраться в чём дело, практики у меня мало, но раньше в подобных задачах проблем не было, пробовал тремя разными способами менять местами и свапом и без третьей переменной, всё равно только заменяет.

Код:
int main (){
    
double P,B[4][4],min,temp;
int i,j,imin,jmin;

min=1e10;
P=1;
    
for(i=0;i<4;i++)
for(j=0;j<4;j++)    
cin>>B[i][j];

cout<<"\n \n";

for(i=0;i<4;i++){
for(j=0;j<4;j++){    
cout<<B[i][j]<<setw(4);}
cout<<"\n \n";} 

cout<<"\n \n";

for(i=0;i<4;i++){
for(j=0;j<4;j++){
if(i+j<3&&B[i][j]>0){P=P*B[i][j];}  
}}

cout<<"proizvedenie polozhitelnih elementov vishe pobochnoy diagonali="<<P<<"\n \n"; 

for(i=0;i<4;i++){
j=1;
if(B[i][j]<min){
min=B[i][j];
imin=i;
jmin=j;                
}}

cout<<"\n \n";

cout<<"minimalniy element vo vtorom stolbce="<<min<<"\t ego adres=["<<imin+1<<"]["<<jmin+1<<"]";

cout<<"\n \n";

for(i=0;i<4;i++){
for(j=0;j<4;j++){
temp=B[imin][jmin];
B[imin][jmin]=B[3][2];
B[3][2]=temp;                                                                                                     
cout<<B[i][j]<<setw(4);}
cout<<"\n \n";}
 


            getchar();
             getchar();
             
             return 0;

}
Саша Степанов вне форума Ответить с цитированием
Старый 24.01.2012, 07:53   #2
was3110
Форумчанин
 
Аватар для was3110
 
Регистрация: 25.04.2010
Сообщений: 254
По умолчанию

В тех случаях, когда компиляция проходит нормально, а результат не правильный выход один: провести пошаговую отладку (трассировку) с отслеживанием значений переменных на каждом шаге. И увидите из-за чего Ваш В[3,2] не получает значения
помогать студентам - моя вторая профессия
was3110 вне форума Ответить с цитированием
Старый 24.01.2012, 12:03   #3
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Код:
min=1e10;
Оригинально, конечно... Но обычно присваивают значение первого элемента:
Код:
min = B[0][0];
,
и, соответственно, цикл начинают со второго... И, кстати, тут же второй вопрос:
Цитата:
Код:
cout<<"minimalniy element vo vtorom stolbce="
Минимум надо искать только во втором столбце? Тогда ты делаешь много лишних "телодвижений"...
И вообще -- неплохо было бы знать, что именно должна делать программа.

Ну, и главное:
Цитата:
Код:
for(i=0;i<4;i++){
    for(j=0;j<4;j++){
        temp=B[imin][jmin];
        B[imin][jmin]=B[3][2];
        B[3][2]=temp;                                                                                                     
        cout<<B[i][j]<<setw(4);}
    cout<<"\n \n";}
Цикл-то тут зачем? Именно тут?
Ты меняешь значения B[imin][jmin] и B[3][2] 4*4=16 раз!
И выводишь его же вместо самого массива -)
Вынеси выделенную часть за пределы циклов -- до циклов, а не после.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062

Последний раз редактировалось Mandrivnyk; 24.01.2012 в 12:05.
Mandrivnyk вне форума Ответить с цитированием
Старый 24.01.2012, 16:13   #4
Саша Степанов
Новичок
Джуниор
 
Регистрация: 23.01.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Mandrivnyk Посмотреть сообщение
Ну, и главное:

Цикл-то тут зачем? Именно тут?
Ты меняешь значения B[imin][jmin] и B[3][2] 4*4=16 раз!
И выводишь его же вместо самого массива -)
Вынеси выделенную часть за пределы циклов -- до циклов, а не после.
Если вынести эту часть перед циклом,а потом просто вывести цикл, ничего ровным счётом не изменится, выведет начально заданный цикл и всё, хотя ты прав по-этому скорее всего и не меняет, но тогда выхода я не вижу.

Последний раз редактировалось Саша Степанов; 24.01.2012 в 16:17.
Саша Степанов вне форума Ответить с цитированием
Старый 24.01.2012, 17:50   #5
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Внимательно на свой код посмотри.
imin и jmin ты находишь в другом цикле.
В этом, который я выделил, ты просто выводишь массив на экран.
Так вот _перед_ выводом -- должны стоять эти три строчки, которые меняют _уже найденный_ тобой минимум B[imin][jmin] с B[3][2].
Понимаешь?
Первый цикл -- ввод массива;
Второй цикл -- вывод исходного массива;
Третий цикл -- нахождение индексов минимального элемента;
--> Обмен местами минимального элемента с B[3][2];
Четвертый цикл -- вывод полученного массива.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 24.01.2012, 21:23   #6
Саша Степанов
Новичок
Джуниор
 
Регистрация: 23.01.2012
Сообщений: 4
По умолчанию

Mandrivnyk, спасибо, всё работает, но когда я делал это раньше не менялось, может быть что-то с системой было.

Последний раз редактировалось Саша Степанов; 24.01.2012 в 21:26.
Саша Степанов вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не меняет местами элементы массива Саша Степанов Общие вопросы C/C++ 0 23.01.2012 23:15
Поменять местами диагональные элементы матрицы и вектор Элеонор Помощь студентам 1 29.05.2011 08:28
Таймер меняет панели местами, в указанное пользователем время. 1eHuH Общие вопросы Delphi 3 03.02.2011 00:17
функцию которая меняет переменные местами kseshenka Помощь студентам 6 17.10.2010 23:09
КАК менять элементы матрицы местами? RomT24 Паскаль, Turbo Pascal, PascalABC.NET 3 10.01.2009 21:34