Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 23.11.2014
Сообщений: 18
1

Оптимизировать и минимализировать код

24.11.2014, 17:31. Показов 1131. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Cделал легкую прогу. Понимаю логики 0 в коде. Можете помочь оптимизировать код? А заодно и сделать код более минималистичным.
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
#include <iostream>
#include <windows.h>
 
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int a;
    int z = 33;
    int x = 0;
    cout << "Угадай число" << endl;
    while(x == 0) {
        cin >> a;
 
        if (a > z)
            cout << "Много" << endl;
 
        else if (a < z)
            cout << "Мало" << endl;
 
        else {
            cout << "Ты выиграл" << endl;
            x = 1;
    }
}
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2014, 17:31
Ответы с готовыми решениями:

Оптимизировать код
Первое число входного потока - количество чисел Дальше идут те самые числа Надо найти кол-во пар...

Оптимизировать код
Для решения задачи : &quot;Note: Write a solution that only iterates over the string once and uses...

Оптимизировать код
Доброго времени суток, как можно оптимизировать код что бы он быстрее работал ? Дана...

Оптимизировать код
Для решения задачи : &quot;Given an array a that contains only numbers in the range from 1 to a.length,...

13
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
24.11.2014, 17:39 2
Цитата Сообщение от justgamermax Посмотреть сообщение
оптимизировать
Цитата Сообщение от justgamermax Посмотреть сообщение
минималистичным
Зачем?
0
0 / 0 / 0
Регистрация: 23.11.2014
Сообщений: 18
24.11.2014, 17:49  [ТС] 3
Препод сказал. А сам я не вижу как это оптимизировать и сделать минималистичным.

Добавлено через 6 минут
Никто не поможет?
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
24.11.2014, 18:00 4
C++
1
2
#include <iostream>
using namespace std;int main(){int a=0;int z=33;cout<<"Enter val:";while(a!=z){cin>>a;cout<<(a>z?"Less\n":a<z?"Greater\n":"You win\n");}}
0
Заблокирован
24.11.2014, 18:04 5
justgamermax,
C++
    int a;
    int z = 33;
    int x = 0;
Можно записать одной строкой:
C++
    int a, z = 33, x = 0;
Добавлено через 3 минуты
justgamermax, еще можете убрать строку:
C++
using namespace std;
Но тогда вам нужно писать std:: перед cout и endl
C++
std::cout << "Угадай число" << std::endl;
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
24.11.2014, 18:07 6
Цитата Сообщение от maritux Посмотреть сообщение
Можно записать одной строкой:
Точно!
C++
1
2
#include <iostream>
int main(){int a=0,z=33;printf("Enter val:");while(a!=z){std::cin>>a;printf(a>z?"Less\n":a<z?"Greater\n":"You win\n");}}
0
0 / 0 / 0
Регистрация: 23.11.2014
Сообщений: 18
24.11.2014, 18:08  [ТС] 7
MrGluck, можете написать этот же код не в одну строчку?...Читать адски тяжело.
0
Заблокирован
24.11.2014, 18:22 8
Цитата Сообщение от justgamermax Посмотреть сообщение
SetConsoleCP(1251); SetConsoleOutputCP(1251);
На моей винде такие команды не поддерживаются, русский язык у меня включается так:
C++
// #include <windows.h> // не нужно!
 
setlocale(0, "Russian");
Минус один инклуде и минус одна команда.

Добавлено через 9 минут
justgamermax, еще можете убрать int a и int x в main() чтобы съэкономить немножко места в самом майне:
C++
int main(int a, int x) {
// ...
}
0
15 / 15 / 8
Регистрация: 30.03.2014
Сообщений: 75
24.11.2014, 18:22 9
Удалить переменную х и изменить цикл
C++
1
2
3
4
while (cin >> a)
{
   ...
}
0
Заблокирован
24.11.2014, 18:27 10
justgamermax, функция int main() всегда должна возвращать целое число типа int, например:
C++
1
2
3
int main() {
    return 0;
}
justgamermax, и вообще, лучше не пользоваться STL, от него EXE распухает, а пользоваться старыми функциями:
C++
#include <stdio.h>
#include <locale.h>
 
int main(int a)
{
    setlocale(0, "Russian");
 
    int z = 33;
 
    printf( "Угадай число:\n" );
 
    while ( 1 ) {
        scanf("%d", &a);
        if      (a > z) { printf( "Много\n" ); }
        else if (a < z) { printf( "Мало\n" ); }
        else            { printf( "Ты выиграл\n" ); break; }
    }
    return 0;
}
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
24.11.2014, 18:35 11
Цитата Сообщение от maritux Посмотреть сообщение
функция int main() всегда должна возвращать целое число типа int, например:
Неизвестно знал ли ТС об этом или нет, но написание main в таком виде как у него является корректным с точки зрения спецификации языка. Специально для main существует отдельное правило, которое подразумевает return 0; при отсутствии оператора return в конце main, см. 3.6.1/5.
If control reaches the end of main without encountering a return statement, the effect is that of executing
return 0;
0
Заблокирован
24.11.2014, 18:45 12
justgamermax, чтобы еще сократить, можно заменить while на for, всеравно после цикла ваши переменные нигде не используются:
C++
#include <stdio.h>
#include <locale.h>
 
int main()
{
    setlocale(0, "Russian");
 
    printf( "Угадай число:\n" );
 
    for ( int z = 33, a = 0; a != z; ) {
        scanf("%d", &a);
        if      (a > z) { printf( "Много\n" ); }
        else if (a < z) { printf( "Мало\n" ); }
        else            { printf( "Ты выиграл\n" ); }
    }
    return 0;
}
Добавлено через 6 минут

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
If control reaches the end of main without encountering a return statement, the effect is that of executing
return 0;
Наверно это зависит от компилятора.

0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
24.11.2014, 19:23 13
Лучший ответ Сообщение было отмечено justgamermax как решение

Решение

Не по теме:

Цитата Сообщение от maritux Посмотреть сообщение
Наверно это зависит от компилятора.
Нет, это не зависит от компилятора. Это распространяется на все компиляторы, которые претендуют на поддержку С++.



Добавлено через 34 минуты
justgamermax,
Вот такой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <clocale>
#include <iostream>
 
int main()
{
    int a;
    int z = 33;
    std::setlocale(LC_ALL, "Rus"); // или Russian, в зависимости от твоей среды
 
    std::cout << "Угадай число" << std::endl;
    while(std::cin >> a, a != z)
    {
        std::cout << (a > z ? "Много" : "Мало") << std::endl;
    }
    std::cout << "Ты выиграл" << std::endl;
}
Или такой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <cstdio>
#include <clocale>
int main()
{
    int a;
    int z = 33;
    std::setlocale(LC_ALL, "Rus"); // или Russian, в зависимости от твоей среды
 
    std::printf("Угадай число\n");
    while(std::scanf("%d", &a), a != z)
    {
        std::printf("%s\n", a > z ? "Много" : "Мало");
    }
    std::printf("Ты выиграл\n");
}
В этом варианте на одну итерацию в худшем случае 2 сравнения, вместо трех в твоем коде.
В случая совпадения, будет одно сравнение. В твоем варианте 3 сравнения, если мы угадали.
Твой алгоритм лучше себя ведет только в случае, если мы всегда выбираем больше, чем нужно, однако всегда присутствует проверка в цикле, что снижает этот эффект до нуля.
Примерно в этом направлении (алгоритмической оптимизации) и надо двигаться в первую очередь.

PS. Экономить строчки, переносить переменные туда-сюда не нужно. Это ничего не даст в практическом смысле.
PS2. Скорее всего, нормальный компилятор даже первоначальный вариант смог бы оптимизировать в более быстрый.
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.11.2014, 20:46 14
Цитата Сообщение от justgamermax Посмотреть сообщение
можете написать этот же код не в одну строчку?...Читать адски тяжело.
Максимально соответствует идиотскому требованию препода. У вас вполне нормальный код в шапке темы. Ваш препод объяснил как пользоваться инструментами для профилирования? Нет? Тогда о какой оптимизации может идти речь, если замерить время выполнения нечем? Вполне вероятно, что код в первом посте компилятор сможет легче оптимизировать чем тот, который у меня или авторов ниже.

Сокращать буквы - бессмысленно в вашем коде, вас учат не тому.
0
27.11.2014, 20:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2014, 20:46
Помогаю со студенческими работами здесь

Как оптимизировать код?
Как оптимизировать код, чтобы работала программа быстрее #include &lt;iostream&gt; #include &lt;fstream&gt;...

Исправить и оптимизировать код
нужна помощь по исправлению ошибок Написал программу она работает все отлично но препод сказал...

Нужно оптимизировать код
Вобщем код не принемает сайт, немного нагружает и по времени не проходит задание Август и...

Как оптимизировать код?
мне нужно чтобы значения угла перебирались от начального до конечного в зависимости от времени,...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru