Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Svid
5 / 5 / 2
Регистрация: 02.03.2011
Сообщений: 40
#1

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

18.03.2011, 21:11. Просмотров 449. Ответов 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<<" ";}
}
есть сильное подозрение, что все можно было сделать проще и изящней...
Кому не лень и не жалко. Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2011, 21:11
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Упростить код (C++):

Упростить код
Добрый день, подскажите, можно ли упростить код (используя уровень знаний как в...

Упростить код
#include&lt;iostream&gt; using namespace std; int main() { int a, b, c, d = 0, g...

Упростить код
Разработать рекурсивную функцию , возвращающую значение : для перевода числа из...

Упростить код
#include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; int main() {...

Упростить код
Создавал раннее тему с таковой задачей:Нужен код для шифрования русскоязычного...

Упростить код
Добрый вечер. Такая задача. Исходные данные: вектор размерностью кратной...

8
slava_g1
72 / 72 / 32
Регистрация: 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);
}
Написал вместе с мейном.Спасибо ниже
1
Svid
5 / 5 / 2
Регистрация: 02.03.2011
Сообщений: 40
18.03.2011, 23:59  [ТС] #3
Я пока еще не могу оценить по достоинству - до некоторых вещей написанных Вами еще не дошел.

Добавлено через 22 минуты
Все, разобрался с неизвестными мне вещами.
Есть одно но: если таких столбцов не один - в этом вся загвоздка.
Если таких столбов несколько, то надо указать все их номера.
0
From_Tula
40 / 40 / 10
Регистрация: 22.05.2009
Сообщений: 485
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;
}
Предупреждаю писал без компилятора, но надеюсь идея будет понятна если что.
1
Svid
5 / 5 / 2
Регистрация: 02.03.2011
Сообщений: 40
19.03.2011, 01:10  [ТС] #5
Но так ведь здесь тоже получится только один столбец какой-то? Или нет (сейчас тоже нет под рукой компилятора)?
Идея такая: вывести номер столбца, а если таких столбцов, скажем пять - то вывести все пять номеров
0
From_Tula
40 / 40 / 10
Регистрация: 22.05.2009
Сообщений: 485
21.03.2011, 20:30 #6
Svid, нет, выведет первый встретившийся столбец с максимальным количеством эл-ов.
Остальные просто не попадут под условие
C++
1
if (max>itog_max)
А если выводить все то тут немного по другому будет, я просто думал что просто максимальный нужен.
0
vitaska
90 / 90 / 15
Регистрация: 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";
}
1
Svid
5 / 5 / 2
Регистрация: 02.03.2011
Сообщений: 40
21.03.2011, 22:52  [ТС] #8
Спасибо!
Да, наверное, это не совсем упрощение.

Но зато появился вопрос, у Вас строчка
C++
1
int arrayIndex[ cols ] = { 0 };
что она делает: инициализирует весь массив или первый его элемент? Просто недавно сталкивался с проблемой инициализировать большой массив нулями...
0
vitaska
90 / 90 / 15
Регистрация: 04.02.2010
Сообщений: 162
21.03.2011, 23:09 #9
Цитата Сообщение от Svid Посмотреть сообщение
Спасибо!
Да, наверное, это не совсем упрощение.

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

Упростить код
Как упростить вот такой код? Спасибо за внимание. #include &lt;iostream&gt;...

Упростить код
доброго времени суток, я совсем новичок в С++ (да и в программировании) сейчас...

Упростить код
Имеется код, как можно сделать что бы подщёт шел не с аа а с 0 // 400.cpp:...

упростить код
есть решена задача, надо упростить, из того перебора в инструкции switch() на...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru