Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Svid
 Аватар для Svid
5 / 5 / 1
Регистрация: 02.03.2011
Сообщений: 40
#1

Упростить код - C++

18.03.2011, 21:11. Просмотров 420. Ответов 8
Метки нет (Все метки)

Добрый вечер!
Есть задача: дан вещественный массив, определить номер столбца с наибольшим количеством положительных элементов.
После долгих родов получилось это (привожу только саму функцию поиска столба):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void resh ( float x[I][J])
{
    int i,j,z;
        int k[J]={0,0,0,0,0};
        for (i=0;i<I;i++)
        
            for (j=0; j<J; j++)
    {if (x[i][j]>=0)k[j]+=1;}
 
            int max=0,max1=0;
            int nom[J]={0,0,0,0,0};
for (z=0;z<J;z++)
{
    if (k[z]>max) 
    {
        max=k[z];
        max1=z;
    }
}
cout<<"Это столбец (ы):";
for (int g=J;g>=0;g--)
{if (k[g]==max)
cout <<g<<" ";}
}
есть сильное подозрение, что все можно было сделать проще и изящней...
Кому не лень и не жалко. Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2011, 21:11     Упростить код
Посмотрите здесь:

Помогите упростить код? C++
C++ Упростить код
упростить код C++
C++ Упростить код
C++ Упростить код
C++ Как упростить код
Упростить код C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
slava_g1
 Аватар для slava_g1
71 / 71 / 8
Регистрация: 06.02.2011
Сообщений: 127
18.03.2011, 23:17     Упростить код #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include<iostream>
#include<ctime>
using namespace std;
const int size=10;
const int size1=10;
void resh (int arr[size][size1])
{
    int count=0,max=0,i1;
    for(int i=0;i<size;i++){
        count=0;
        for(int j=0;j<size1;j++){
            if(arr[j][i]>=0)
                count++;
        }
        if(max<count){
            max=count;
            i1=i;
        }
    }
    cout<<"Max : "<<max<<" in "<<i1<<"row"<<endl;
}
void main(){
    srand(time(0));
    int arr[size][size1];
    for(int i=0;i<size;i++){
        for(int j=0;j<size1;j++){
            arr[i][j]=rand()%15-10;
        }
    }
    for(int i=0;i<size;i++){
        for(int j=0;j<size1;j++){
            cout<<arr[i][j]<<"\t";
        }
        cout<<endl;
    }
    resh(arr);
}
Написал вместе с мейном.Спасибо ниже
Svid
 Аватар для Svid
5 / 5 / 1
Регистрация: 02.03.2011
Сообщений: 40
18.03.2011, 23:59  [ТС]     Упростить код #3
Я пока еще не могу оценить по достоинству - до некоторых вещей написанных Вами еще не дошел.

Добавлено через 22 минуты
Все, разобрался с неизвестными мне вещами.
Есть одно но: если таких столбцов не один - в этом вся загвоздка.
Если таких столбов несколько, то надо указать все их номера.
From_Tula
40 / 40 / 2
Регистрация: 22.05.2009
Сообщений: 472
19.03.2011, 00:30     Упростить код #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int poisk(float x[10][10], int n, int m)
{
n;//кол-во строк матрицы
m;//кол-во столбцов матрицы
int max=0,itog_max=0,i,j,num_stolb=0;
 
for(i=0;i<n;i++)
   {
   for(j=0;j<m;j++)
       {
         if(x[j][i]>=0)
             max++;
        }
    if (max>itog_max)
     {
      itog_max=max;
      num_stolb=i;
     }
 
    max=0;
    }
  return num_stolb;
}
Предупреждаю писал без компилятора, но надеюсь идея будет понятна если что.
Svid
 Аватар для Svid
5 / 5 / 1
Регистрация: 02.03.2011
Сообщений: 40
19.03.2011, 01:10  [ТС]     Упростить код #5
Но так ведь здесь тоже получится только один столбец какой-то? Или нет (сейчас тоже нет под рукой компилятора)?
Идея такая: вывести номер столбца, а если таких столбцов, скажем пять - то вывести все пять номеров
From_Tula
40 / 40 / 2
Регистрация: 22.05.2009
Сообщений: 472
21.03.2011, 20:30     Упростить код #6
Svid, нет, выведет первый встретившийся столбец с максимальным количеством эл-ов.
Остальные просто не попадут под условие
C++
1
if (max>itog_max)
А если выводить все то тут немного по другому будет, я просто думал что просто максимальный нужен.
vitaska
 Аватар для vitaska
83 / 83 / 2
Регистрация: 04.02.2010
Сообщений: 162
21.03.2011, 22:04     Упростить код #7
не совсем упростил, но сейчас выводит несколько столбов с одинаковым количеством положительных элементов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
void resh ( float arr[][17], int rows )
{
    const int cols = 17;
    int arrayIndex[ cols ] = { 0 };
    for ( int j = 0, iCount = 0; j < cols; j++ ) { 
        iCount = 0;
        for ( int i = 0; i < rows; i++ ) { 
            if ( arr[i][j] >= 0 ) 
                iCount++;           
        } 
        arrayIndex[ j ] = iCount;       
    } 
    int iMax = arrayIndex[ 0 ];
    for ( int i = 1; i < cols; i++ ) { 
        if ( arrayIndex[ i ] > iMax ) {
            for ( int j = 0; j < i; j++ ) {
                if ( arrayIndex[ j ] < arrayIndex[ i ]) 
                    arrayIndex[ j ] = 0;
            } 
            iMax = arrayIndex[ i ];
        }
        else if ( arrayIndex[ i ] < iMax  )
            arrayIndex [ i ] = 0;
    } 
    cout << "Наибольшее количество положительных элементов в(о): ";
    for ( int i = 0; i < cols; i++ ) { 
        if ( arrayIndex[ i ] ) 
            cout << i + 1 << " ";
    } 
    cout << "столбце(ах)\n\n";
}
Svid
 Аватар для Svid
5 / 5 / 1
Регистрация: 02.03.2011
Сообщений: 40
21.03.2011, 22:52  [ТС]     Упростить код #8
Спасибо!
Да, наверное, это не совсем упрощение.

Но зато появился вопрос, у Вас строчка
C++
1
int arrayIndex[ cols ] = { 0 };
что она делает: инициализирует весь массив или первый его элемент? Просто недавно сталкивался с проблемой инициализировать большой массив нулями...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2011, 23:09     Упростить код
Еще ссылки по теме:

C++ Упростить код
Упростить код C++
Упростить код C++
Упростить код C++
C++ Упростить код

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
vitaska
 Аватар для vitaska
83 / 83 / 2
Регистрация: 04.02.2010
Сообщений: 162
21.03.2011, 23:09     Упростить код #9
Цитата Сообщение от Svid Посмотреть сообщение
Спасибо!
Да, наверное, это не совсем упрощение.

Но зато появился вопрос, у Вас строчка
C++
1
int arrayIndex[ cols ] = { 0 };
что она делает: инициализирует весь массив или первый его элемент? Просто недавно сталкивался с проблемой инициализировать большой массив нулями...
инициализирует весь массив нулями
Yandex
Объявления
21.03.2011, 23:09     Упростить код
Ответ Создать тему
Опции темы

Текущее время: 04:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru