Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для Svid
5 / 5 / 2
Регистрация: 02.03.2011
Сообщений: 40

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

18.03.2011, 21:11. Показов 780. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.03.2011, 21:11
Ответы с готовыми решениями:

Упростить код
Как упростить вот такой код? Спасибо за внимание. #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { ...

Упростить код
#include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; int main() { size_t rowsCount; cout &lt;&lt; &quot;N: &quot;; cin...

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

8
 Аватар для slava_g1
75 / 75 / 32
Регистрация: 06.02.2011
Сообщений: 127
18.03.2011, 23:17
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  [ТС]
Я пока еще не могу оценить по достоинству - до некоторых вещей написанных Вами еще не дошел.

Добавлено через 22 минуты
Все, разобрался с неизвестными мне вещами.
Есть одно но: если таких столбцов не один - в этом вся загвоздка.
Если таких столбов несколько, то надо указать все их номера.
0
41 / 41 / 10
Регистрация: 22.05.2009
Сообщений: 492
19.03.2011, 00:30
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  [ТС]
Но так ведь здесь тоже получится только один столбец какой-то? Или нет (сейчас тоже нет под рукой компилятора)?
Идея такая: вывести номер столбца, а если таких столбцов, скажем пять - то вывести все пять номеров
0
41 / 41 / 10
Регистрация: 22.05.2009
Сообщений: 492
21.03.2011, 20:30
Svid, нет, выведет первый встретившийся столбец с максимальным количеством эл-ов.
Остальные просто не попадут под условие
C++
1
if (max>itog_max)
А если выводить все то тут немного по другому будет, я просто думал что просто максимальный нужен.
0
 Аватар для vitaska
101 / 101 / 15
Регистрация: 04.02.2010
Сообщений: 162
21.03.2011, 22:04
не совсем упростил, но сейчас выводит несколько столбов с одинаковым количеством положительных элементов
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  [ТС]
Спасибо!
Да, наверное, это не совсем упрощение.

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

Но зато появился вопрос, у Вас строчка
C++
1
int arrayIndex[ cols ] = { 0 };
что она делает: инициализирует весь массив или первый его элемент? Просто недавно сталкивался с проблемой инициализировать большой массив нулями...
инициализирует весь массив нулями
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.03.2011, 23:09
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru