Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 19.11.2021
Сообщений: 37

Подскажите как выполнить оптимизацию программного кода

05.06.2022, 16:29. Показов 1045. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан одномерный массив целых чисел содержащий по крайней мере два нуля. Вывести сумму чисел из данного набора , расположенных между первыми двумя нулями.
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 <locale>
 
using namespace std;
 
int main() {
    
    setlocale (LC_ALL, "rus");
    
    const int N = 10;
    int A[N];
    int summ = 0;
    int zero = 0;
    
    cout << "Введите элементы массива: " << endl;
    for (int i = 0; i < N; i++) {
        cout << "[" << i + 1 << "]" << ": ";
        cin >> A[i];
    }
    cout << endl;
    cout << "Массив:" << endl;
    for (int i = 0; i < N; i++) {
        cout << A[i] << " ";
    }
    
    for (int i = 0; i < N; i++) {
        if (A[i] == 0)
            zero++;
        if (zero == 2) {
            break;
        }   
        if (zero >= 1)
            summ += A[i];
}
    cout << endl << "Сумма чисел между первыми нулями = " << summ;
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.06.2022, 16:29
Ответы с готовыми решениями:

выполнить оптимизацию программного кода (методы выбрать самостоятельно ) на с++
‎ сам код using namespace std; ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ int main()‎ ‎ ‎

Как выполнить оптимизацию данной задачи?
Здравствуйте. Мне необходимо оптимизировать решение некоторой задачи. Вот условие: В двухмерном пространстве x = y = произвольным...

произвести оптимизацию кода
Дело в том, что у нас есть сайт. Расскруткой занимаемся сами. Но вот по технической части, у нас никого нет. Мы столкнулись с проблемой...

20
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
05.06.2022, 17:00
Проверяешь элементы массива на равенство нулю.
Далее, например, два варианта.
Либо запоминаешь первые две позиции нулевых элементов и считаешь сумму элементов между нулевыми (используя те две позиции).
Либо (по мне, этот вариант лучше - нужен лишь один "прогон" по массиву или его части, а не два), когда встречаешь первый нулевой элемент, считаешь сумму всех следующих элементов, пока не встретишь второй нулевой элемент.
0
Злостный нарушитель
 Аватар для Verevkin
10860 / 5805 / 1282
Регистрация: 12.03.2015
Сообщений: 26,810
05.06.2022, 17:02
Цитата Сообщение от maxim_-__ Посмотреть сообщение
Подскажите как выполнить оптимизацию программного кода
А почему ты решил, что этот кот неоптимален?
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,121
05.06.2022, 17:13
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
#include <iostream>
#include <locale>
 
 
int main() {
    using namespace std;
 
    setlocale(LC_ALL, "rus");
const int N = 10;
    int A[N]{}, accom[2]{};
    int summ = 0;
    int zero = 0;
 
    cout << "Введите элементы массива: " << endl;
    for (int i = 0; i < N; i++) {
        cout << "[" << i + 1 << "]" << ": ";
        cin >> A[i];
    }
    
    //-------------------------------
    cout << endl;
    cout << "Массив:" << endl;
    for (int i = 0; i < N; i++) {
        if (A[i] == 0)
        if (zero < 2){ accom[zero] = i; ++zero; }
cout << A[i] << " ";
        }
    
    //-------------------------------
for (int i = accom[0]; i < accom[1]; i++) summ += A[i];
    
cout << endl << "Сумма чисел между первыми нулями = " << summ;
    cin.get(); cin.get();
    return 0;
}
0
0 / 0 / 0
Регистрация: 19.11.2021
Сообщений: 37
05.06.2022, 17:14  [ТС]
Хорошо, спасибо)
0
 Аватар для YUEN HOIFEF
252 / 185 / 47
Регистрация: 31.01.2021
Сообщений: 934
05.06.2022, 17:16
maxim_-__,
В этом коде, очень просто, эту самую сумму, складывать прямо при вводе данных. Тогда можно будет уубрать несколько строк. Как только ввел первый ноль - отсчет пошел. Вобщем ты понял.
0
Злостный нарушитель
 Аватар для Verevkin
10860 / 5805 / 1282
Регистрация: 12.03.2015
Сообщений: 26,810
05.06.2022, 17:18
C++
1
2
3
4
5
6
7
8
9
// функция вернёт сумму элементов массива 
// между первыми двумя нулевыми элементами.
int foo(int* x, size_t size)
{
  int sum = 0, Z = 0;
  for ( ; Z < 2 && size--; x++)
    Z += !*x, sum += Z ? *x : 0;
  return Z == 2 ? sum : 0;
}
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,121
05.06.2022, 17:54
Verevkin,
Трудно в сие вьехать.
0
Злостный нарушитель
 Аватар для Verevkin
10860 / 5805 / 1282
Регистрация: 12.03.2015
Сообщений: 26,810
05.06.2022, 18:17
Цитата Сообщение от Наталья8 Посмотреть сообщение
Трудно в сие вьехать.
Это не тебе.
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,121
05.06.2022, 18:44
Должно быть где то так. только мозги убежали.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main() {
using namespace std;
    setlocale(LC_ALL, "rus");
    const int N = 10; bool detec(false);
    int A[N]{},
    int summ = 0;
        cout << "Введите элементы массива: " << endl;
    for (int i = 0; i < N; i++) {
        cout << "[" << i + 1 << "]" << ": ";
        cin >> A[i];
    
        if (A[i] == 0 && detec)detec = false;
    if (A[i] == 0 && !detec)detec = true;
if (detec)summ += A[i];
    
printf(" --- %d ,%d --- \n", i, detec);
    }
Добавлено через 20 секунд
Не раб...
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
05.06.2022, 18:44
Можно так сделать:
C++
1
2
3
4
  const N = 10;
  int sum = 0, zeroes = 0, x[N] = {1, 2, 0, 3, 5, 7, 4, 0, 6, 0};
  for (int i = 0; i < N, zeroes < 2; i++)
    sum += (zeroes += x[i] ? 0 : 1) ? x[i] : 0;
0
 Аватар для Storm Screamer
4896 / 1462 / 117
Регистрация: 21.04.2013
Сообщений: 8,776
05.06.2022, 18:51
Цитата Сообщение от maxim_-__ Посмотреть сообщение
как выполнить оптимизацию программного кода
Что в данном случае понимается под "оптимизацией"? Уменьшение объема кода, увеличение производительности каких-то участков, уменьшение времени компиляции?
0
0 / 0 / 0
Регистрация: 19.11.2021
Сообщений: 37
05.06.2022, 18:54  [ТС]
В моем случае "оптимизация" в любом из перечисленного вами.
0
Злостный нарушитель
 Аватар для Verevkin
10860 / 5805 / 1282
Регистрация: 12.03.2015
Сообщений: 26,810
05.06.2022, 19:20
Цитата Сообщение от maxim_-__ Посмотреть сообщение
В моем случае "оптимизация" в любом из перечисленного вами.
Нет, ты определись. Одновременно это всё не может быть оптимальным, всегда есть баланс.
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,121
05.06.2022, 22:26
Вот поймал мозги...

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
#include <iostream>
#include <locale>
 
 
 
int main() {
using namespace std;
    setlocale(LC_ALL, "rus");
    const int N = 10; bool detec(false); int summ = 0;
    int A[N]{};
cout << "Введите элементы массива: " << endl;
    for (int i = 0; i < N; i++) {
    cout << "[" << i + 1 << "]" << ": ";
        cin >> A[i];
        if (!A[i] && !detec && !summ)detec = true;
        else if (A[i] == 0 && detec)detec = false;
    if (detec)summ += A[i];
    //      printf("%d --- %d ,  --- %d --- \n", i, detec, A[i]);// настройка
    }
//------------------------------- ПОКАЗАТЬ
    cout << endl;
    cout << "Массив:" << endl;
    for (int i = 0; i < N; i++)cout << A[i] << " ";
cout << endl << "Сумма чисел между первыми нулями = " << summ;
    cin.get(); cin.get();
    return 0;
}
Добавлено через 3 минуты
Считает во время ввода... Триггер на булевой.

Добавлено через 33 минуты
А вообще. будут ругаться, но я вынужден спросить.
Хрен_ли здесь оптимизировать?
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,121
05.06.2022, 22:31
https://www.cyberforum.ru/atta... 1654457497
Миниатюры
Подскажите как выполнить оптимизацию программного кода  
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
06.06.2022, 05:51
А зачем вообще массив в памяти создавать?
Сразу считать да и всё.
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
int main() {
    int x, sum(0);
    while ((std::cin >> x) && x != 0);
    while ((std::cin >> x) && x != 0) sum += x;
    std::cout << sum;
 
    return 0;
}
Ну или можно воспользоваться циклом for, чтоб уменьшить скоуп видимости переменной х.
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
int main() {
    for (int x; (std::cin >> x) && x != 0;);
    int sum(0);
    for (int x; (std::cin >> x) && x != 0; sum += x);
    std::cout << sum;
 
    return 0;
}
0
 Аватар для YUEN HOIFEF
252 / 185 / 47
Регистрация: 31.01.2021
Сообщений: 934
06.06.2022, 06:33
lemegeton,
В ваших примерах один недостаток - прекращение ввода, при вводе второго нуля.

С эмитацией заполнения массива. Все по уму.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>
 
using namespace std;
 
int main()
 {
int n, i=0;
cout << "Введите количество элементов массива: ";
cin >> n;
 
int sum = 0;
for( int x, j=0; j<n; j++ )
 {
 cin >> x;
 if( x==0 ) ++i;
 else if( i==1 ) sum += x;
 }
if( i!=2 ) sum = 0;
 
cout << " -- " << sum << " -- " << endl;
cin.get();
return 0;
 }
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
06.06.2022, 06:48
Цитата Сообщение от YUEN HOIFEF Посмотреть сообщение
недостаток - прекращение ввода
Но-но-но!
Не недостаток, а оптимизация!

Добавлено через 3 минуты
Цитата Сообщение от YUEN HOIFEF Посмотреть сообщение
cout << "Введите количество элементов массива: ";
В оригинальном коде ввода количества не было.

Правда там был вывод этого массива.
Но его я тоже оптимизировал!

Цитата Сообщение от maxim_-__ Посмотреть сообщение
массив целых чисел содержащий по крайней мере два нуля
Зато было, что два нуля точно есть. )
0
 Аватар для YUEN HOIFEF
252 / 185 / 47
Регистрация: 31.01.2021
Сообщений: 934
06.06.2022, 07:04
lemegeton,
Ввода то не было. Но он подразумевается.
C++
1
st int N = 10;
Я ее посмотрел просто. Все таки ТЗ предполагает массив, в котором( в произаольном месте) есть два(или более) нулей.
Вобщем ваша оптимизация- кастомизация.
Интересно можно ли еще более оптимизировать...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.06.2022, 07:04
Помогаю со студенческими работами здесь

Как установить пароль на открытие программного кода в файле?
Коллеги, доброго времени суток! Помогите, плиз, как а) Установить пароль на открытие программного кода в файле (на Alt-F11) б) Как...

Вопрос про оптимизацию кода
Вот код uses SysUtils; type music=record re:integer; bd:tdatetime; sname:string; kurs:byte;

Как вставить диаграмму в ворд из эксель с использованием программного кода?
Здравствуйте, подскажите пожалуйста как в ворд вставить диаграмму. Диаграмма находится в эксель. Заготовку для открытия и закрытия...

[WPF] Как использовать кисть .xaml разметки из программного кода?
Есть Brushes.xaml с нужной кистью, как в программном коде при динамическом создании лейбла указать свойству background эту кисть? ...

Не работает часть программного кода. Не знаю как исправить его
procedure AddUserInGroup; var nik,imya:string; begin countUser:=0; assign(fu,'D:\Laba\fNU.dat'); reset(fu); ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru