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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2014, 01:43   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Си, переставить столбцы местами

Здарвствуйте! Помогите решить задание, не могу понять где ошибка :D.. в общем пытался переделать код BDA, смысл задачи такой:

поменять местами столбцы с максимальным и минимальным количеством четных элементов. Вывести начальный и конечный вариант матрицы на экран.


Код:
#include <QCoreApplication>
#include <ctime>
#include <qmath.h>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    
    int array[3][4];
    srand(time(NULL));
    
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<4;j++)
        {
            array[i][j]=rand()%150;
            printf("%d\t",array[i][j]);
        }
        printf("\n");
    }
    printf("-----------------------------------------\n");
    
    
    int max_ind = 0, min_ind = 0,max_s = 0, min_s, tmp;
    for (int i = 0; i < 3; i++)
        max_s += (array[i][0]%2==0); //максимальная сумма четных элементов первого столбца
    min_s = max_s;
    
    
    for (int i = 1; i < 3; i++)
    {
        
        for (int j = 0; j < 4; j++)
            
        {
            tmp = 0;
            tmp += (array[i][j]%2==0);
            
            
            if (tmp > max_s)
            {
                max_ind = j;
                max_s = tmp;
            }
            else
                if (tmp < min_s)
                {
                    min_ind = j;
                    min_s = tmp;
                }
            
        }
    }
    
    
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<4;j++)
        {
            
            printf("%d\t",array[i][j]);
        }
        printf("\n");
    }
    
    
    
    return a.exec();
}
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 17.12.2014, 02:09   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Код:
for (int j = 1; j < 4; j++) {
    tmp = 0;
    for (int i = 0; i < 3; i++)
        tmp += (array[i][j] % 2 == 0); 
    if (tmp > max_s) {
        max_ind = j;
        max_s = tmp;
    } else if (tmp < min_s) {
        min_ind = j;
        min_s = tmp;
    }
}
Не проверял.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 17.12.2014, 02:19   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Не работает, пробовал при разном наборе данных, например на этом, думал из-за того, что три столбца с 0-нечетных выпало, заполнил вручную, в первом 4 2 1 0, 1 и 4 столбцы местами не поменялись
Изображения
Тип файла: jpg Безымянный.jpg (15.1 Кб, 137 просмотров)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 17.12.2014, 02:24   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Так это только исправленная часть по поиску индексов. Перестановки тут и нету.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 17.12.2014, 02:34   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Теперь все переставилось, но почему-то вылезла ошибка

Код:
#include <QCoreApplication>
#include <ctime>
#include <qmath.h>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int array[3][4];
    srand(time(NULL));

    for(int i=0;i<3;i++)
    {
        for(int j=0;j<4;j++)
        {
            array[i][j]=rand()%150;
            printf("%d\t",array[i][j]);
        }
        printf("\n");
    }
    printf("-----------------------------------------\n");


    int max_ind = 0, min_ind = 0,max_s = 0, min_s, tmp;
    for (int i = 0; i < 3; i++)
        max_s += (array[i][0]%2==0); //максимальная сумма четных элементов первого столбца
    min_s = max_s;


    for (int j = 1; j < 4; j++) {
        tmp = 0;
        for (int i = 0; i < 3; i++)
            tmp += (array[i][j] % 2 == 0);
        if (tmp > max_s) {
            max_ind = j;
            max_s = tmp;
        } else if (tmp < min_s) {
            min_ind = j;
            min_s = tmp;
        }
    }


    for (int j = 0; j < 4; j++)
    {
        tmp = array[j][max_ind];
        array[j][max_ind] = array[j][min_ind];
        array[j][min_ind] = tmp;
    }


    for(int i=0;i<3;i++)
    {
        for(int j=0;j<4;j++)
        {

            printf("%d\t",array[i][j]);
        }
        printf("\n");
    }



    return a.exec();
}
Изображения
Тип файла: jpg Безымянный.jpg (25.6 Кб, 129 просмотров)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 17.12.2014, 02:58   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Код:
for (int i = 0; i < 3; ++i) {
    tmp = array[i][max_ind];
    array[i][max_ind] = array[i][min_ind];
    array[i][min_ind] = tmp;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 17.12.2014, 03:20   #7
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Спасибо, но опять та же ошибка, массив динамический.

з.ы. Размерность 5х7, на размерностях 3х3 и т.п.-нормально работает

Код:
#include <QCoreApplication>
#include <ctime>
#include <qmath.h>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
int n,m;
printf("BBedite NxM...Press Enter...\n");
scanf("%dx%d",&n,&m);
system("cls");
system("color 02");

    int array[n][m];
    srand(time(NULL));

    for(int i=0;i<m;i++)
    {
        for(int j=0;j<m;j++)
        {
            array[i][j]=rand()%150;
            printf("%d\t",array[i][j]);
        }
        printf("\n");
    }
    printf("-----------------------------------------\n");


    int max_ind = 0, min_ind = 0,max_s = 0, min_s, tmp;
    for (int i = 0; i < n; ++i)
        max_s += (array[i][0]%2==0); //максимальная сумма четных элементов первого столбца
    min_s = max_s;


    for (int j = 1; j < m; ++j) {
        tmp = 0;
        for (int i = 0; i < n; ++i)
            tmp += (array[i][j] % 2 == 0);
        if (tmp > max_s) {
            max_ind = j;
            max_s = tmp;
        } else if (tmp < min_s) {
            min_ind = j;
            min_s = tmp;
        }
    }

    for (int i = 0; i < m; ++i)
    {
        tmp = array[i][max_ind];
        array[i][max_ind] = array[i][min_ind];
        array[i][min_ind] = tmp;
    }


    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)

            printf("%d\t",array[i][j]);

        printf("\n");
    }



    return a.exec();
}
Изображения
Тип файла: jpg Безымянный.jpg (36.3 Кб, 125 просмотров)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 17.12.2014, 03:25   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Ну так опять не до того индекса цикл . Нужно до n.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 17.12.2014, 04:08   #9
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Точно, спасибо! У меня завтра зачет, вот сижу три последние задачи решаю.
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 17.12.2014, 04:21   #10
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

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

2 3 2 1 2 3 1

программа поменяла 4 и 6 столбцы местами

Код:
#include <QCoreApplication>
#include <ctime>
#include <qmath.h>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    int n,m;
    printf("BBedite NxM...Press Enter...\n");
    scanf("%dx%d",&n,&m);
    system("cls");
    system("color 02");

    int array[n][m];
    srand(time(NULL));

    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            array[i][j]=rand()%150;
            printf("%d\t",array[i][j]);
        }
        printf("\n");
    }
    printf("-----------------------------------------\n");


    int max_ind = 0, min_ind = 0,max_s = 0, min_s, tmp;
    for (int i = 0; i < n; ++i)
        max_s += (array[i][0]%2==0); //максимальная сумма четных элементов первого столбца
    min_s = max_s;


    for (int j = 1; j < m; ++j) {
        tmp = 0;
        for (int i = 0; i < n; ++i)
            tmp += (array[i][j] % 2 == 0);
        if (tmp > max_s) {
            max_ind = j;
            max_s = tmp;
        } else if (tmp < min_s) {
            min_ind = j;
            min_s = tmp;
        }
    }

    for (int i = 0; i < n; ++i)
    {
        tmp = array[i][max_ind];
        array[i][max_ind] = array[i][min_ind];
        array[i][min_ind] = tmp;
    }


    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)

            printf("%d\t",array[i][j]);

        printf("\n");
    }



    return a.exec();
}
з.ы.: надеюсь больше нигде не накосячил :D
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переставить столбцы матрицы Маша906 Помощь студентам 1 14.07.2014 10:51
Переставить в обратном порядке столбцы mimit Помощь студентам 1 30.11.2012 00:06
Нужно переставить столбцы массива в Visual Basic vital22222 Помощь студентам 0 09.12.2010 21:37
Переставить местами разряды valerij Microsoft Office Excel 2 23.03.2009 00:55