Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Прямоугольный массив


Автор: GotNothing 12.6.2007, 00:04
Дана целочисленная прямоугольная матрица. Определить:
сумму эл-тов в тех строках, которые содержат хотя бы один отрицательный эл-т (оформить в виде функции);
номера строк и столбцов всех седловых точек матрицы (оформить в виде процедуры).
Примечание. Матрица А имеет седловую точку Аij, если Аij является минимальным элементом в i-й строке и максимальным в j-м столбце.

Умоляю сделайте задачку, с сессией жопа((  smile 

Автор: apook 12.6.2007, 08:41
Цитата

  0:: #include "stdio.h"
  1:: #include "stdlib.h"
  2:: 
  3:: #include "conio.h"
  4:: 
  5:: #define N 6 
  6:: #define M 6
  7:: 
  8:: int saddle[ N ][ 2 ];
  9:: 
 10:: void Print( int m_val[][ M ] )
 11:: {
 12:: textattr( '\x0d' );
 13:: 
 14:: for( int i=0, c=0; i<N; i++ )
 15:: {
 16::     for( int j=0; j<M; j++ )
 17::     if( i==saddle[ c ][ 0 ] && j==saddle[ c ][ 1 ] )
 18::     {
 19::         cprintf( "%4d", m_val[ i ][ j ] );
 20::         ++c; 
 21::         }
 22::     else
 23::         printf( "%4d", m_val[ i ][ j ] );
 24::     putc( '\n', stdout );
 25::     }
 26:: putc( '\n', stdout );
 27:: }
 28:: 
 29:: 
 30:: void saddle_node( int m_val[][ M ] )
 31:: {
 32:: int i, j, q=0, c, _saddle=0, min;
 33:: 
 34:: for( i=0; i<M; i++ )
 35:: {
 36::     //найдем элемент ряда соответствующий максимальному элементу столбца
 37::     min=m_val[ 0 ][ i ];
 38::     for( j=0, _saddle=0; j<N; j++ )
 39::     {
 40::         if( min<m_val[ j ][ i ] )
 41::         {
 42::             min=m_val[ j ][ i ];
 43::             _saddle=j;
 44::             }
 45::         }
 46:: 
 47::     //проверим седловой ли он
 48::     for( c=0; c<M; c++ )
 49::         if( m_val[ _saddle ][ c ]<m_val[ _saddle ][ i ] )
 50::             break;
 51:: 
 52::     if( c==M ) //...значит да
 53::     {
 54::         for( j=0; j<q; j++ ) //...прорверим встречался ли этот рядок ранее
 55::            if( saddle[ j ][ 0 ]==_saddle )
 56::                break;
 57::         //запомнить координаты...
 58::         if( j==q )
 59::         {
 60::             saddle[ q ][ 0 ]=_saddle;
 61::             saddle[ q ][ 1 ]=i;
 62::             ++q;
 63::             }
 64::         }
 65::     }
 66:: return;
 67:: }
 68:: 
 69:: void SETS( int m_val[][ M ] )
 70:: {
 71:: int i, j, c, X=0;
 72:: 
 73:: for( i=0; i<N; i++ )
 74::     for( j=0; j<M; j++ )
 75::         if( m_val[ i ][ j ]<0 )
 76::         {
 77::             for( c=0; c<M; c++ )
 78::                 X+=m_val[ i ][ c ];
 79::             printf( "Row %d Summa Elementov = %d", i, X );
 80::             break;
 81::             }  
 82:: return;
 83:: }
 84:: 
 85:: void main()
 86:: {
 87:: int m_val[ N ][ M ]={
 88::     1, 3, 5, 1, 4, 2,
 89::     2, 6, 4, 0, 8, 4, 
 90::     5, 6, 7, 5, 9, 9,
 91::     0, 4, 5,-1, 4, 2,
 92::     4, 9, 6, 0, 2, 8, 
 93::     9, 8, 7, 6, 7, 8 }, i, j;
 94:: 
 95:: for( i=0; i<N; i++ )
 96::     for( j=0; j<2; j++ )
 97::         saddle[ i ][ j ]=-1;
 98:: 
 99:: 
100:: saddle_node( m_val );
101:: Print( m_val );
102:: SETS( m_val );
103:: 
104:: getch();
105:: }

Автор: Dov 12.6.2007, 09:20
Код

#include<iostream>
#include<iomanip>

#define SZ 5

void Print(int matr[][SZ])   
{
    int i, j;

    for(i = 0; i < SZ; i++)
    {
        for(j = 0; j < SZ; j++)           
            cout << setw(4) << matr[i][j];
        cout << endl;
    }    
}

bool isNegative(int* ar)
{
    for(int i = 0; i < SZ; i++)
        if(ar[i] < 0)
            return true;

    return false;
}

int Sum(int* ar)
{
    int i, sum = 0;
    
    for(i = 0; i < SZ; i++)
        sum += ar[i];                
    
    return sum;
}

void Sedlo(int matr[][SZ])
{   
    int  min, max;
    int  i, j, k;
    bool found = false;    
   
    for(i = 0; i < SZ; i++)
    {
        min = matr[i][0];
        for(j = 1; j < SZ; j++)
            if(matr[i][j] < min)
                min = matr[i][j];                                    
        
        for(j = 0; j < SZ; j++)
        {
            if(matr[i][j] == min)
            {
                max = matr[0][j];
                for(k = 1; k < SZ; k++)
                    if(matr[k][j] > max)
                        max = matr[k][j];
                if(min == max)
                {
                    found = true;
                    cout << "\n  Index: [" << i << "][" << j << ']';
                }
            }
        }
    }
    cout << endl;
    if(!found)
       cout << "Sedlovoy tochki net...\n";
}

int main()
{    
    int matr[][SZ] = {
               7, -1,  8, 12,  9, 
              14, 19, 13, 15, 17,
               1, 16,  0, 11, 14,
              13, 21, 13, 22, 16,
              -9,  1, 11,  0,  5  
           };   
   
    cout << "Matrix:\n";
    Print(matr);
        
    cout << "\nSum:\n";
    for(int i = 0; i < SZ; i++)           
        if(isNegative(matr[i]))
            cout << "  line #" << i + 1 << " = " << Sum(matr[i]) << endl;               
    
    cout << "\nSedlo:";
    Sedlo(matr);   
   
    return 0;         
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)