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


Автор: xxxDiablo 23.1.2007, 20:37
нуно сделать на Borland C++ в Console Wizard 
Задача:
Элемент матрицы назовем седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце или, наоборот, является наибольшим в своей строке и наименьшим в своем столбце. Для заданной целой матрицы размером NxM напечатать индексы всех ее седловых точек

Автор: Rockie 23.1.2007, 21:27
xxxDiablo, тема уже была, юзай http://forum.vingrad.ru/act-Search/CODE/show/searchid-6d139fe0c63d3e30af8fefb5b7075d64/search_in-posts/result_type/topics/flag/search/highlite/%25F1%25E5%25E4%25EB%25EE%25E2%25E0%25FF+and+%25F2%25EE%25F7%25EA%25E0/index.html


Автор: Dov 23.1.2007, 21:28
xxxDiablo, ты глазки вниз опусти, там и найдёшь ответ на свой вопрос.  smile 

Автор: xxxDiablo 23.1.2007, 21:40
Цитата(Dov @ 23.1.2007,  21:28)
xxxDiablo, ты глазки вниз опусти, там и найдёшь ответ на свой вопрос.  smile

я знаю там похожая задача, но у меня немного другая, там матрица 10х15, а у меня вводимая с клавы, подскажите как это сделать

Автор: Dov 23.1.2007, 22:59
Цитата(xxxDiablo @  23.1.2007,  20:40 Найти цитируемый пост)
я знаю там похожая задача, но у меня немного другая, там матрица 10х15, а у меня вводимая с клавы, подскажите как это сделать

А тебе какую надо матрицу? Статическую или динамическую? И какого размера? 

Автор: xxxDiablo 23.1.2007, 23:04
Цитата(Dov @ 23.1.2007,  22:59)
Цитата(xxxDiablo @  23.1.2007,  20:40 Найти цитируемый пост)
я знаю там похожая задача, но у меня немного другая, там матрица 10х15, а у меня вводимая с клавы, подскажите как это сделать

А тебе какую надо матрицу? Статическую или динамическую? И какого размера?

Мне нужна обычная матрица, размеры матрицы вводятся с клавы и сама матрица тоже с клавы

Автор: Dov 23.1.2007, 23:11
Цитата(xxxDiablo @  23.1.2007,  22:04 Найти цитируемый пост)
Мне нужна обычная матрица, размеры матрицы вводятся с клавы и сама матрица тоже с клавы

Ну, дела. Ладно. Максимально допустимые размеры какие? 

Автор: xxxDiablo 23.1.2007, 23:21
Цитата(Dov @ 23.1.2007,  23:11)
Цитата(xxxDiablo @  23.1.2007,  22:04 Найти цитируемый пост)
Мне нужна обычная матрица, размеры матрицы вводятся с клавы и сама матрица тоже с клавы

Ну, дела. Ладно. Максимально допустимые размеры какие?

50, я думаю, или 100

Автор: Dov 23.1.2007, 23:31
xxxDiablo, ты себе представляешь матрицу 50 х 50 или 100 х 100 вручную вводить, это от 2 500 до 10 000 значений. И как ты её потом на экран выведешь?  smile 

Автор: xxxDiablo 23.1.2007, 23:35
Цитата(Dov @ 23.1.2007,  23:31)
xxxDiablo, ты себе представляешь матрицу 50 х 50 или 100 х 100 вручную вводить, это от 2 500 до 10 000 значений. И как ты её потом на экран выведешь?  smile

это максимальные размеры, не факт что они такие будут, ведь размеры нада будет вводить в самой готовой проге и саму матрицу тоже

Автор: Dov 24.1.2007, 00:07
20 х 20 тоже хватит, я так думаю.
Код
#include <iostream.h>
#include <iomanip.h>

#define MAX_ROWS 20
#define MAX_COLS 20

int main()
{
    int  matr[MAX_ROWS][MAX_COLS];
    int  rows;
    int  cols;
    int  min;
    int  max;
    int  i, j, k;
    bool found = false;

    // запрашиваем у пользователя кол-во строк и столбцов
    cout << "Vvedite kol-vo strok(ne bolee " << MAX_ROWS << ')' << "   : ";
    cin  >> rows;
    cout << "Vvedite kol-vo stolbcov(ne bolee " << MAX_COLS << ')' << ": ";
    cin  >> cols;
    cout << endl;

    if(rows > MAX_ROWS)
        rows = MAX_ROWS;
    if(cols > MAX_COLS)
        cols = MAX_COLS;

    // инициализируем матрицу
    for(i = 0; i < rows; i++)
    {
        for(j = 0; j < cols; j++)
        { 
            cout << "Vvedite matr[" << i << "][" << j << "] = ";
            cin >> matr[i][j];
        }
    }

    // вывод на экран
    for(i = 0; i < rows; i++)
    {
        for(j = 0; j < cols; j++)
            cout << setw(4) << matr[i][j];
        cout << endl;
    }
    
    // обработка матрицы
    for(i = 0; i < rows; i++)
    {
        min = matr[i][0];
        for(j = 1; j < cols; j++)
            if(matr[i][j] < min)
                min = matr[i][j];                                    
        
        for(j = 0; j < cols; j++)
        {
            if(matr[i][j] == min)
            {
                max = matr[0][j];
                for(k = 1; k < rows; k++)
                    if(matr[k][j] > max)
                        max = matr[k][j];
                if(min == max)
                {
                    found = true;
                    cout << "\nIndex: [" << i << ']' << '[' << j << ']';
                }
            }
        }
    }

    if(!found)
       cout << "\nSedlovoy tochki net\n";

    cout << "\n\nPress any key to quit...\n";
    cin.get();
    
    return 0;    
}

Автор: xxxDiablo 24.1.2007, 00:17
Цитата(Dov @ 24.1.2007,  00:07)
20 х 20 тоже хватит, я так думаю.
Код
#include <iostream.h>
#include <iomanip.h>

#define MAX_ROWS 20
#define MAX_COLS 20

int main()
{
    int  matr[MAX_ROWS][MAX_COLS];
    int  rows;
    int  cols;
    int  min;
    int  max;
    int  i, j, k;
    bool found = false;

    // запрашиваем у пользователя кол-во строк и столбцов
    cout << "Vvedite kol-vo strok(ne bolee " << MAX_ROWS << ')' << "   : ";
    cin  >> rows;
    cout << "Vvedite kol-vo stolbcov(ne bolee " << MAX_COLS << ')' << ": ";
    cin  >> cols;
    cout << endl;

    if(rows > MAX_ROWS)
        rows = MAX_ROWS;
    if(cols > MAX_COLS)
        cols = MAX_COLS;

    // инициализируем матрицу
    for(i = 0; i < rows; i++)
    {
        for(j = 0; j < cols; j++)
        { 
            cout << "Vvedite matr[" << i << "][" << j << "] = ";
            cin >> matr[i][j];
        }
    }

    // вывод на экран
    for(i = 0; i < rows; i++)
    {
        for(j = 0; j < cols; j++)
            cout << setw(4) << matr[i][j];
        cout << endl;
    }
    
    // обработка матрицы
    for(i = 0; i < rows; i++)
    {
        min = matr[i][0];
        for(j = 1; j < cols; j++)
            if(matr[i][j] < min)
                min = matr[i][j];                                    
        
        for(j = 0; j < cols; j++)
        {
            if(matr[i][j] == min)
            {
                max = matr[0][j];
                for(k = 1; k < rows; k++)
                    if(matr[k][j] > max)
                        max = matr[k][j];
                if(min == max)
                {
                    found = true;
                    cout << "\nIndex: [" << i << ']' << '[' << j << ']';
                }
            }
        }
    }

    if(!found)
       cout << "\nSedlovoy tochki net\n";

    cout << "\n\nPress any key to quit...\n";
    cin.get();
    
    return 0;    
}

Ты на чем делаешь-то? мне на Borland C++ Console Wizard надо, обязательно, иначе препод пошлет   smile 
Я вот сделал,тока размер матрицы и саму матрицу уже задал в проге, а как сделать чтобы с клавы вводить хз
Код

#include <stdio.h>
#include <conio.h>
#define N 4
#define M 5
void main()
{
int array[N][M]= { 9, 8, 7, 6, 5,
                    24,73,42,17,42,
                    3, 4, 5, 6,  7,
                    90,80,90,90,85 } ; //  80 наибольший в столбце и наименьш. в строке
int j,x,y,i,k,max,min;
     for( j=0;j<M;j++)        // для каждого столбца ищем максимальный элемент 
      {
          max = array[0][j];  // за максимум берем значение из первой строки
          x=0, y=j;           // и текущего столбца

         for(i=1;i<N;i++)
         {                       // и сравниваем с остальными элементами в столбце
             if(max<array[i][j])
             {
                 max=array[i][j], x = i, y = j;
             }
         }

        // теперь в max лежит наибольшее значение, в x и y - его координаты.
         // Остается проверить, если этот эл-т - минимальный в строке.
         // Пробегаемся по строке и смотрим, вдруг какой-то эл-т в строке меньше нашего.
         min = array[x][0];
         for(k=1;k<M;k++)
             if(array[x][k]<min) min = array[x][k];

      // если меньших элементов в строке нет, то это седловая точка
         if(min == max) printf("array[%d][%d] = %d\n",x,y,min);

     }

    getchar();
}

Автор: Dov 24.1.2007, 00:27
xxxDiablo, у меня VC++ 6.0
А в чём проблемы?

Автор: Rockie 24.1.2007, 10:02
Цитата(xxxDiablo @  23.1.2007,  23:21 Найти цитируемый пост)
50, я думаю, или 100

даешь тыщу! smile
Цитата(Dov @  24.1.2007,  00:27 Найти цитируемый пост)
А в чём проблемы?

похоже у него pure C


Автор: xxxDiablo 24.1.2007, 18:24
Цитата(Dov @ 24.1.2007,  00:27)
xxxDiablo, у меня VC++ 6.0
А в чём проблемы?

Проблема в том, что препод не поймет или скажет откуда ты VC++ 6.0 знаешь  smile 

Автор: Dov 24.1.2007, 19:11
Цитата(xxxDiablo @  24.1.2007,  17:24 Найти цитируемый пост)
Проблема в том, что препод не поймет или скажет откуда ты VC++ 6.0 знаешь  

Так ты ему и скажешь, что выучил VC++ 6.0 только за то, что им разговаривал трупСтрауса.

Автор: xxxDiablo 24.1.2007, 19:17
Цитата(Dov @ 24.1.2007,  19:11)
Цитата(xxxDiablo @  24.1.2007,  17:24 Найти цитируемый пост)
Проблема в том, что препод не поймет или скажет откуда ты VC++ 6.0 знаешь  

Так ты ему и скажешь, что выучил VC++ 6.0 только за то, что им разговаривал трупСтрауса.

Да нет это бесполезно  smile 

Автор: Dov 24.1.2007, 20:04
xxxDiablo, у тебя что, компилятора под рукой нет? Если есть, то какие ошибки выдаёт? Если ты ничего не будешь говорить, то тебе никто не поможет, здесь нет людей, читающих чужие мысли на расстоянии. Давай, не спи. Работать и ещё раз работать.  smile 

Автор: xxxDiablo 25.1.2007, 18:12
Всем спасибо за помощь. Остальное долелал сам  smile 

Автор: Dov 25.1.2007, 18:29
Цитата(xxxDiablo @  25.1.2007,  17:12 Найти цитируемый пост)
Остальное долелал сам

Молодец!!! Хвалю!!! smile 

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