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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2008, 00:38   #1
john350
 
Регистрация: 31.01.2008
Сообщений: 8
По умолчанию задание: матрица 3х3 на С++

Напишите программу на С++, пожалуйста!
Матрица 3х3, нужно найти среднее по величине числа в первом столбце и второй строке и поменять (эти два числа) местами в матрице.
Напишите, пожалуйста!!!
Вот так примерно должно выглядеть
Пример:
1 2 3
4 5 6
7 8 9
В первом столбце 4 и во второй строке 5
Теперь, после того как программа поменяла местами средние по величине числа, должно выглядеть так:
1 2 3
5 4 6
7 8 9

Вот примерно похожая программа, но она ищет максимальное и минимальное число, затем меняет их местами, (по всей матрице):
приобрести?
Код:
#include "stdafx.h"
#include "math.h"
#include <iostream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{int min=0,max=0;
int i=0,j=0;
int imax=0,jmax=0;
int imin=0,jmin=0;
int tem;
int a[3][3];
for (i=0; i<3; i++)
    for(j=0; j<3; j++)
	{
		cin>>a[i][j];
   }
	for (i=0; i<3; i++)
	{
	cout<<a[i][0]<<" "<<a[i][1]<<" "<<a[i][2]<<"\n";
	}
	max=a[0][0];
min=a[0][0];
tem=a[0][0];
for (i=0; i<3; i++)
   for(j=0; j<3; j++)
   {
	   if(max<a[i][j])
	   {
		   max=a[i][j];
		   imax=i;
		   jmax=j;
	   }
   }
for (i=0; i<3; i++)
   for(j=0; j<3; j++)
   {
       if(min>a[i][j])
       {
          min=a[i][j];
          imin=i;
          jmin=j;
       
	   }  
   } 
        tem=a[imin][jmin];
        a[imin][jmin]=a[imax][jmax];
        a[imax][jmax]=tem;
cout<<"Poluchenij rezultat"<<"\n";
       for (i=0; i<3; i++)
		{			
		cout<<a[i][0]<<" "<<a[i][1]<<" "<<a[i][2]<<"\n";
	}		 

	while(true);
	return 0;
}
john350 вне форума Ответить с цитированием
Старый 01.02.2008, 02:15   #2
n@sok
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 46
По умолчанию

Код:
#include "stdafx.h"
#include "math.h"
#include <iostream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{int min=0,max=0;
int i=0,j=0;
int imin=0,imax=0;
int sred1=0,sred2=0;
int tem;
int a[3][3];
for (i=0; i<3; i++)
    for(j=0; j<3; j++)
	{
		cin>>a[i][j];
   }
	for (i=0; i<3; i++)
	{
	cout<<a[i][0]<<" "<<a[i][1]<<" "<<a[i][2]<<"\n";
	}

max=a[0][0];
min=a[0][0];
for (i=0; i<3; i++)  // Ищем среднее в первом столбце
   {
	   if(max<a[i][0])
	   {
		   max=a[i][0];
		   imax=i;
	   }
	   if(min>a[i][0])
	   {
		   min=a[i][0];
		   imin=i;
	   }
   }
sred1=3-imax-imin;

max=a[1][0];
min=a[1][0];
imin=0;imax=0;
for (i=0; i<3; i++) // Ищем среднее во второй строке
   {
       if(max<a[1][i])
       {
         max=a[1][i];
         imax=i;
       }
       if(min>a[1][i])
       {
          min=a[1][i];
          imin=i;
	   }  
   } 
sred2=3-imax-imin;

        tem=a[sred1][0];
        a[sred1][0]=a[1][sred2];
        a[1][sred2]=tem;

cout<<"Poluchenij rezultat"<<"\n";
       for (i=0; i<3; i++)
		{			
		cout<<a[i][0]<<" "<<a[i][1]<<" "<<a[i][2]<<"\n";
	}		 

	while(true);
	return 0;
}
n@sok вне форума Ответить с цитированием
Старый 01.02.2008, 12:18   #3
john350
 
Регистрация: 31.01.2008
Сообщений: 8
По умолчанию

n@sok

ВАМ ОГРОМНОЕ СПАСИБО!!!!!!! Программа работает! Еще раз спасибо!!!!
john350 вне форума Ответить с цитированием
Старый 09.02.2008, 23:10   #4
john350
 
Регистрация: 31.01.2008
Сообщений: 8
По умолчанию

Здравствуйте!!!
У меня проблема с программой, она не доработанная.
Программа: матрица 3х3, нужно найти среднее по величине числа в первом столбце и второй строке и поменять (эти два числа) местами в матрице, если они есть.
Вот так примерно должно выглядеть:
Пример.
1 2 3
4 5 6
7 8 9
В первом столбце 4 и во второй строке 5
Теперь, после того как программа поменяла местами средние по величине числа, должно выглядеть так:
1 2 3
5 4 6
7 8 9
___________________________________ _____________________________

Вот исходный программный код:
Код:
#include "stdafx.h"   
#include "math.h"   
#include <iostream>   
using namespace std;   

int _tmain(int argc, _TCHAR* argv[])   
{int min=0,max=0;  
int i=0,j=0;  
int imin=0,imax=0;  
int sred1=0,sred2=0;  
int tem;  
int a[3][3];  
for (i=0; i<3; i++)  
    for(j=0; j<3; j++)  
    {  
        cin>>a[i][j];  
   }   
    for (i=0; i<3; i++)   
    {  
    cout<<a[i][0]<<" "<<a[i][1]<<" "<<a[i][2]<<"\n";  
    }   
  
max=a[0][0];   
min=a[0][0];   
for (i=0; i<3; i++)  // Ищем среднее в первом столбце   
   {  
       if(max<a[i][0])  
       {  
           max=a[i][0];  
           imax=i;  
       }   
       if(min>a[i][0])   
       {  
           min=a[i][0];  
           imin=i;  
       }   
   }   
sred1=3-imax-imin;   
  
max=a[1][0];   
min=a[1][0];   
imin=0;imax=0;   
for (i=0; i<3; i++) // Ищем среднее во второй строке   
   {  
       if(max<a[1][i])  
       {  
         max=a[1][i];  
         imax=i;  
       }   
       if(min>a[1][i])   
       {  
          min=a[1][i];  
          imin=i;  
       }     
   }    
sred2=3-imax-imin;   
  
        tem=a[sred1][0];   
        a[sred1][0]=a[1][sred2];   
        a[1][sred2]=tem;   
  
cout<<"Poluchenij rezultat"<<"\n";   
       for (i=0; i<3; i++)   
        {             
        cout<<a[i][0]<<" "<<a[i][1]<<" "<<a[i][2]<<"\n";  
    }           
  
    while(true);   
    return 0;   
}
___________________________________ ______________________________

НО!!
Проблема в том, что когда вводишь следующие цифры, программа находит цифры и меняет их местами, которые не являются средними по величине (из трех чисел в первом столбце и трех чисел во второй строке).
"Не правильный пример1":
1 2 3
1 5 5
2 3 4
Выводит:
Poluchenij rezultat
1 2 3
5 5 1
2 3 4
Программа меняет цифры местами (1 и 5) в матрице. НО!, программа не должна менять эти цифры местами, а ДОЛЖНА все оставить, как было, т. к. эти цифры (1 и 5) не являются средними по величине из трех чисел, находящиеся в первом столбце и во второй строке.
Т. е. вот как должна прога выводить на экран:
Правильный пример1:
Poluchenij rezultat
1 2 3
1 5 5
2 3 4

Вот могу еще представить аналогичный "не правильный пример", который на данный момент выполняет эта программа:
1 2 3
1 1 1
2 3 4
"не правильный пример 2" - Выводит:
Poluchenij rezultat
1 2 3
2 1 1
1 3 4
Что соответственно не правильно! Аналогично, как и в первом «неправильном примере».
А должна оставить все как было:
"Правильный пример2" Выводит:
Poluchenij rezultat
1 2 3
1 1 1
2 3 4

Помогите доделать программу, кто может!!!
С уважением JOHN350!
john350 вне форума Ответить с цитированием
Старый 09.02.2008, 23:38   #5
n@sok
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 46
По умолчанию

Что касается первого примера, то это не ошибка, это такая фича. А второй пример это действительно не учтеная мною ошибка в случае если все три элемента матрицы равны между собой. Дописал несколько условий, которые учитывают оба этих фактора.
Код:
#include "stdafx.h"      
#include "math.h"      
#include <iostream>      
using namespace std;      
  
int _tmain(int argc, _TCHAR* argv[])      
{bool swap=true;
int min=0,max=0;    
int i=0,j=0;    
int imin=0,imax=0;    
int sred1=0,sred2=0;    
int tem;    
int a[3][3];    
for (i=0; i<3; i++)    
    for(j=0; j<3; j++)    
    {    
        cin>>a[i][j];    
   }      
    for (i=0; i<3; i++)      
    {    
    cout<<a[i][0]<<" "<<a[i][1]<<" "<<a[i][2]<<"\n";    
    }      
     
max=a[0][0];      
min=a[0][0];      
for (i=0; i<3; i++)  // Ищем среднее в первом столбце      
   {    
       if(max<a[i][0])    
       {    
           max=a[i][0];    
           imax=i;    
       }      
       if(min>a[i][0])      
       {    
           min=a[i][0];    
           imin=i;    
       }      
   }      
sred1=3-imax-imin;  
if(imin==imax||a[sred1][0]==a[imin][0]||a[sred1][0]==a[imax][0])
   swap=false    
     
max=a[1][0];      
min=a[1][0];      
imin=0;imax=0;      
for (i=0; i<3; i++) // Ищем среднее во второй строке      
   {    
       if(max<a[1][i])    
       {    
         max=a[1][i];    
         imax=i;    
       }      
       if(min>a[1][i])      
       {    
          min=a[1][i];    
          imin=i;    
       }        
   }       
sred2=3-imax-imin;      
if(imim==imax||a[1][sred2]==a[1][imin]||a[1][sred2]==a[1][imax])
    swap=false;
     
     if (swap)
     {
        tem=a[sred1][0];      
        a[sred1][0]=a[1][sred2];      
        a[1][sred2]=tem;      
     }
     
cout<<"Poluchenij rezultat"<<"\n";      
       for (i=0; i<3; i++)      
        {               
        cout<<a[i][0]<<" "<<a[i][1]<<" "<<a[i][2]<<"\n";    
    }              
     
    while(true);      
    return 0;      
}
n@sok вне форума Ответить с цитированием
Старый 12.02.2008, 18:05   #6
john350
 
Регистрация: 31.01.2008
Сообщений: 8
По умолчанию

n@sok
Спасибо тебе огромное!!!
У меня есть небольшой вопрос: зачем нужен "math.h", в данный момент в этой программе?
john350 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задание $ user570 Фриланс 3 15.06.2008 22:11
Матрица =( Gwynbleidd Помощь студентам 3 16.12.2007 23:20
Матрица 11111 Помощь студентам 3 31.10.2007 18:20
матрица m4tr1x2222 Общие вопросы C/C++ 3 16.05.2007 08:07