Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Переставить строку в матрице 
:(
    Опции темы
xxxDiablo
Дата 17.2.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 23.1.2007

Репутация: нет
Всего: нет



Задана квадратная матрица.
Переставить строку с максимальным элементом на главной диагонали со строкой с заданным номером --m.


m-это введенное с клавы число
Нужно сделать в Borland C++ Console Wizard, желательно простейшими операторами
PM MAIL   Вверх
Strannik
Дата 17.2.2007, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 25.1.2007

Репутация: 1
Всего: 2



Код

max=0;
mn=0;
for(int i=0;i<n;i++)
 if (a[i,i]>max){
     max=a[i,j];
     mn=i;
 }
for(int i=0;i<n;i++){
   c=a[mn,i];
   a[mn,i]=a[m,i];
   a[m,i]=c;
 }

n - размер матрицы.

Если где-то проскользнул паскалевский оператор - извините, привычка однако...
PM MAIL   Вверх
apook
Дата 18.2.2007, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 10
Всего: 23



держинский
Код

#include <iostream.h>
#include <iomanip.h>

#define N 5

void main(void)
{
int A[N][N]={
    {   1,  3,  -4,  0,   0 },
    { -14,  3,  -7,  0, -20 },
    {  10,  21,  9,  1,   3 },
    {   0,  0,  -2,  0,   1 },
    {  -3,  0,  -6,  0,   1 } 
    }, c, i, j, max=0, row=0, rowto=0;

for( i=0; i <N; ++i )
    if( A[i][i] >max )
    {
        max =A[i][i];
        row=i;
        } // нашли строку с максимальным элементом на главной диагонали

for( i=0; i <N; ++i )
{
    for( j=0; j <N; ++j )
        cout << setw(4) << A[i][j] << " "; // выведем на экран!
    cout << endl;
    }

cout << "-------------------------------------------------------\n"
     << "Enter Nomber of Row by replacement operation\n"
     <<"(!excepting " << (row+1) << " Row as Non effect!)(1 .. 5): ";
cin >> rowto;
cout << "-------------------------------------------------------\n";
--rowto;

for( i=0; i <N; ++i )
{
    c=A[row][i];
    A[row][i]=A[rowto][i];
    A[rowto][i]=c;
    }

// выведем то что получилось!
for( i=0; i <N; ++i )
{
    for( j=0; j <N; ++j )
        cout << setw(4) << A[i][j] << " ";
    if( i==row || i==rowto )  cout << "!";
    cout << endl;
    }
return;
}



Это сообщение отредактировал(а) Kuvaldis - 18.2.2007, 11:32


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Kuvaldis
Дата 18.2.2007, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 32
Всего: 61



Strannik, 
Цитата

max=0;    
mn=0;

Неверная инициализация. Если ты запомнил первый диагональный элемент как max, то и нужно написать
Код

max = a[0][0];
mn = 0;

А дальше проверять не с 0, а с 1:
Код

for(int i = 1; i < n; i++)
...

У тебя стояло строгое неравенство. Программа работает верно, но код не совсем прозрачный (для новичка)  smile 

Это сообщение отредактировал(а) Kuvaldis - 18.2.2007, 11:36


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
volvo877
Дата 18.2.2007, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 34
Всего: 116



Цитата(Kuvaldis @  18.2.2007,  10:31 Найти цитируемый пост)
Программа работает верно
... за исключением случая, когда на главной диагонали все элементы отрицательны ...
PM MAIL   Вверх
Strannik
Дата 18.2.2007, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 25.1.2007

Репутация: 1
Всего: 2



Блииин.... с инициализацией запороться... позор. max=a[1][1] mn=1
PM MAIL   Вверх
Kuvaldis
Дата 18.2.2007, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 32
Всего: 61



Strannik, 
Цитата

max=a[1][1] mn=1

Это НЕ Pascal smile В С/С++ индексация массивов начинается с нуля
Нужно так:
Код

max=a[0][0] 
mn=0

 smile 

Это сообщение отредактировал(а) Kuvaldis - 18.2.2007, 13:58


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
xxxDiablo
Дата 19.2.2007, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 23.1.2007

Репутация: нет
Всего: нет



Цитата(apook @ 18.2.2007,  09:45)
держинский
Код

#include <iostream.h>
#include <iomanip.h>

#define N 5

void main(void)
{
int A[N][N]={
    {   1,  3,  -4,  0,   0 },
    { -14,  3,  -7,  0, -20 },
    {  10,  21,  9,  1,   3 },
    {   0,  0,  -2,  0,   1 },
    {  -3,  0,  -6,  0,   1 } 
    }, c, i, j, max=0, row=0, rowto=0;

for( i=0; i <N; ++i )
    if( A[i][i] >max )
    {
        max =A[i][i];
        row=i;
        } // нашли строку с максимальным элементом на главной диагонали

for( i=0; i <N; ++i )
{
    for( j=0; j <N; ++j )
        cout << setw(4) << A[i][j] << " "; // выведем на экран!
    cout << endl;
    }

cout << "-------------------------------------------------------\n"
     << "Enter Nomber of Row by replacement operation\n"
     <<"(!excepting " << (row+1) << " Row as Non effect!)(1 .. 5): ";
cin >> rowto;
cout << "-------------------------------------------------------\n";
--rowto;

for( i=0; i <N; ++i )
{
    c=A[row][i];
    A[row][i]=A[rowto][i];
    A[rowto][i]=c;
    }

// выведем то что получилось!
for( i=0; i <N; ++i )
{
    for( j=0; j <N; ++j )
        cout << setw(4) << A[i][j] << " ";
    if( i==row || i==rowto )  cout << "!";
    cout << endl;
    }
return;
}


Не мог бы ты переделать код, используя операторы printf и scanf  smile 
PM MAIL   Вверх
Oleg_Ci
Дата 20.2.2007, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



 smile 
Код

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define len 5 // размер матрицы

////////////// MAIN ////////////////////
int main(int argc, char* argv[])
{
    srand((unsigned int)time(NULL));
    int val[len][len]; // массив
    int row, rows, i, j, max = 100, min=0;
    for( i=0; i<len; i++ ){
        //printf("%d)\t", i);
        for( j=0; j<len; j++ ){
            val[i][j]=rand()%max-min; // генерим случайные числа
            printf("%5d", val[i][j] ); // вывод на консоль
        }
        puts(""); // перевод строки
    }
    // поиск максимального элемента на главной диагонали
    for( i=0; i<len; i++ )
        if( val[i][i] > min ){
            min = val[i][i];
            row = i;
        }
    printf("\nmax = %d\nrow = %d\n", val[row][row], row );
    printf("Enter number swap row: "); // "введите номер строки"
    scanf("%d", &rows ); // считвание номера
    // перестановка
    for( i=0; i<len; i++ ){
        j = val[rows][i];
        val[rows][i] = val[row][i];
        val[row][i] = j;
    }
    // вывод на консоль значений массива
    puts("\n\n\nRes:");
    for( i=0; i<len; i++ ){
        for( j=0; j<len; j++ )
            printf("%5d", val[i][j] ); // вывод на консоль
        puts(""); // перевод строки
    }
    getchar();
    getchar(); // пауза
    return 0;
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0548 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.