Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
_RoleX_
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 12
1

Как сделать компактный код ?

31.03.2014, 15:00. Просмотров 788. Ответов 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
38
39
40
41
42
43
44
#include <iostream>
#include <cstdlib>
using namespace std;
void pluss(int number1, int number2);
void minuss(int number1, int number2);
int main(int argc, char* argv[])
{
        setlocale(LC_ALL, "Russian");
        int fNumber_1;
        int fNumber_2;
        int nSelect;
 
        do{
        cout << "Введите число № 1\n";
        cin >> fNumber_1;
        cout << "Введите число № 2\n";
        cin >> fNumber_2;
        cout << "Какое действие хотите сделать?\n";
        cout << "1.Сложить\n";
        cout << "2.Вычесть\n";
        cin >> nSelect;
        switch(nSelect)
        {
        case 1 :
            pluss(fNumber_1, fNumber_2);
            break;
        case 2 : 
            minuss(fNumber_1, fNumber_2);
            break;
        }
        }while(nSelect);
        system("PAUSE");
        return 0;
}
void pluss(int number1, int number2)
{
cout << "Ответ : " << number1 + number2 << '\n';
}
 
 
void minuss(int number1, int number2)
{
cout << "Ответ : " << number1 - number2 << '\n';
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2014, 15:00
Ответы с готовыми решениями:

более компактный код
нужна замыниты вес то что я написал в функции void n() на более компактный код...

Как сделать код абстрактным
pojalusta pomagite u menya est cod dlya igri tetrisa no ya ne mogu ...

Как сделать код меньше
Здравствуйте, вообще меня интересует вопрос как можно уменшить этот код...

break или как сделать лучше код
Вообщем делал задание &quot;НАйти первый и последний нулевой элемент&quot;,так вот ,дан...

Как сделать данный код более логичным и читаемым?
Здравствуйте. Есть код, который, очевидно, выглядит не совсем логично. Полагаю,...

20
IrineK
31.03.2014, 15:04
  #2

Не по теме:

В английском plus / minus с одной s - вот уже компактнее ))

0
Progers
New to C++
83 / 44 / 10
Регистрация: 14.01.2013
Сообщений: 258
31.03.2014, 15:05 3
C++
1
2
cout << "Введите число № 1\n"; cin >> fNumber_1;
+ Можно добавить комментарии, в ограниченном количестве.
0
_RoleX_
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 12
31.03.2014, 15:06  [ТС] 4
Цитата Сообщение от IrineK Посмотреть сообщение
В английском plus / minus с одной s - вот уже компактнее ))
Да я знаю, но Dev не желает комплимилировать с одной "s" ...
0
Тамика
Котовчанин
919 / 463 / 195
Регистрация: 16.02.2010
Сообщений: 3,267
Записей в блоге: 32
31.03.2014, 15:09 5
Код хорош, но я б еще так сделала.
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
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <cstdlib>
 
void pluss(int& number1, int& number2);
void minuss(int& number1, int& number2);
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Russian");
    int fNumber_1;
    int fNumber_2;
    int nSelect;
 
    do
    {
        std::cout << "Введите число № 1\n";
        std::cin >> fNumber_1;
        std::cout << "Введите число № 2\n";
        std::cin >> fNumber_2;
        std::cout << "Какое действие хотите сделать?\n";
        std::cout << "1.Сложить\n";
        std::cout << "2.Вычесть\n";
        std::cout << "3.Выход\n";
        std::cin >> nSelect;
        switch(nSelect)
        {
        case 1 :
            pluss(fNumber_1, fNumber_2);
            break;
        case 2 : 
            minuss(fNumber_1, fNumber_2);
            break;
        default:
            std::cout << "Введите операцию!(1 или 2)";
            break;
        }
    }
    while(nSelect);
    system("PAUSE>>NULL");
    return 0;
}
void pluss(int& number1, int& number2)
{
    std::cout << "Ответ : " << number1 + number2 << '\n';
}
 
void minuss(int& number1, int& number2)
{
    std::cout << "Ответ : " << number1 - number2 << '\n';
}
Если есть вопросы - спрашивайте.
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
31.03.2014, 15:14 6
Цитата Сообщение от _RoleX_ Посмотреть сообщение
Вот пример моего стиля программирования :
Вполне приемлимый стиль. Форматирование немного улучшить (сделать отступы в теле циклов и функций).
0
_RoleX_
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 12
31.03.2014, 15:16  [ТС] 7
Цитата Сообщение от Тамика Посмотреть сообщение
Код хорош, но я б еще так сделала.
А что это конкретно даст? почему бы не использовать using namespace std; ?
Объясни
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
31.03.2014, 15:19 8
Цитата Сообщение от _RoleX_ Посмотреть сообщение
почему бы не использовать using namespace std; ?
Вопрос этот спорный. В больших проектах не рекомендуется из-за возможного конфликта имён. В данном коде, по моему мнению, вполне допустимо.

Добавлено через 1 минуту
http://www.cyberforum.ru/blogs/34326/blog275.html
fatal error LNK1169: one or more multiply defined symbols found
0
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
31.03.2014, 15:30 9
Цитата Сообщение от Тамика Посмотреть сообщение
void pluss(int& number1, int& number2)
не вижу смысла юзать ссылки

Добавлено через 5 минут
даже если ссылку передали, тогда конст где? шоб не было соблазна изменить вх.параметр
0
DrOffset
8127 / 4711 / 1150
Регистрация: 30.01.2014
Сообщений: 7,675
31.03.2014, 15:37 10
Цитата Сообщение от alsav22 Посмотреть сообщение
В данном коде, по моему мнению, вполне допустимо.
Как раз в данном коде это и явилось причиной костыля в виде удвоения буквы s на конце функций plus и minus. А все потому, что в std:: уже есь такие сущности. Налицо конфликт имен!

Добавлено через 2 минуты
Цитата Сообщение от _RoleX_ Посмотреть сообщение
Да я знаю, но Dev не желает комплимилировать с одной "s"
Нужно всегда разбираться в причинах того, что не получается. Именно так, когда не разобравшись, фиксишь проблему методом тыка, появляются самые устойчивые мифы в головых разработчиков.
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
31.03.2014, 15:41 11
Убрать прототипы, а реализацию +/- перенести до main()
0
Тамика
Котовчанин
919 / 463 / 195
Регистрация: 16.02.2010
Сообщений: 3,267
Записей в блоге: 32
31.03.2014, 15:46 12
Цитата Сообщение от _RoleX_ Посмотреть сообщение
А что это конкретно даст? почему бы не использовать using namespace std; ?
Объясни
Если на пальцах - так вы говорите компилятору, что будете использовать все методы std. А так просто вытягиваете тот метод, который нужен и всё.

Добавлено через 39 секунд
Цитата Сообщение от aLarman Посмотреть сообщение
не вижу смысла юзать ссылки
А я вижу смысл.
0
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
31.03.2014, 15:48 13
Цитата Сообщение от Тамика Посмотреть сообщение
А я вижу смысл.
аргументируйте
0
SatanaXIII
Супер-модератор
Эксперт С++
5773 / 2772 / 376
Регистрация: 01.11.2011
Сообщений: 6,744
Завершенные тесты: 1
31.03.2014, 15:52 14
_RoleX_, чисто рекомендации, без претензий:
1) Заменить '\n' на endl;
2) После while перевод строки добавить. Чтобы выделить блок do-while. Да и вообще отступов добавть;
3) Убрать русский язык вообще.

Добавлено через 1 минуту
Цитата Сообщение от Тамика Посмотреть сообщение
А так просто вытягиваете тот метод, который нужен и всё.
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
using std::cin;
 
int main(int argc, char* argv[])
{
//cout << "hell"; // Заругается
cin.ignore();
return 0;
}
0
MicM
824 / 483 / 324
Регистрация: 29.12.2009
Сообщений: 1,106
Завершенные тесты: 1
31.03.2014, 15:55 15
Я бы так сделал.
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
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <cstdlib>
using namespace std;
 
void pluss(int a, int b)
{
    cout << "Ответ : " << a + b << '\n';
}
 
 
void minuss(int a, int b)
{
    cout << "Ответ : " << a - b << '\n';
}
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Russian");
    int nSelect;
    do
    {
        int fNumber_1, fNumber_2;
        cout << "Введите число № 1\n";
        cin >> fNumber_1;
        cout << "Введите число № 2\n";
        cin >> fNumber_2;
        cout << "Какое действие хотите сделать?\n";
        cout << "1.Сложить\n";
        cout << "2.Вычесть\n";
        cin >> nSelect;
        switch(nSelect)
        {
        case 1:
            {
                pluss(fNumber_1, fNumber_2);
                break;
            }
        case 2:
            {
                minuss(fNumber_1, fNumber_2);
                break;
            }
        }
    }
    while(nSelect);
    system("PAUSE");
    return 0;
}
Только функции лучше переделать. Сделать так, чтобы они возвращали сумму/разность.
0
Тамика
Котовчанин
919 / 463 / 195
Регистрация: 16.02.2010
Сообщений: 3,267
Записей в блоге: 32
31.03.2014, 15:57 16
Цитата Сообщение от SatanaXIII Посмотреть сообщение
А так просто вытягиваете тот метод, который нужен и всё.
Я про то, как написанно в моём коде.

Добавлено через 44 секунды
Цитата Сообщение от aLarman Посмотреть сообщение
аргументируйте
Экономия памяти. Вместо создания копий, туда придет именно переменная, которую передали в функцию.
0
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
31.03.2014, 16:15 17
Цитата Сообщение от Тамика Посмотреть сообщение
туда придет именно переменная, которую передали в функцию.
а то что ссылка скопируется это не в счет да
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
31.03.2014, 16:16 18
Цитата Сообщение от Тамика Посмотреть сообщение
Экономия памяти.
вот почитайте http://stackoverflow.com/questions/3...versus-copying
1
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
31.03.2014, 16:19 19
цитата оттуда "Integers are usually the size of the processor's native word and can pass easily into a registers. From this perspective, there is no difference between passing by value or passing by constant reference. "
0
DrOffset
8127 / 4711 / 1150
Регистрация: 30.01.2014
Сообщений: 7,675
31.03.2014, 16:28 20
Цитата Сообщение от Тамика Посмотреть сообщение
Экономия памяти. Вместо создания копий, туда придет именно переменная, которую передали в функцию.
Вот именно про такие мифы я и говорил.
Ведь никакой экономии здесь не будет. Возможно будет даже расход!
Давай разбираться. sizeof(int) на 32-битной x86 в win равен 4, sizeof(int*) тоже равен 4. Экономии нет. Зато добавляется (возможное) разыменование.
Однако на x64 - sizeof(int *) == 8, а sizeof(int) все еще 4. а вот и расход.
Но это все теория. А теперь к практике:
Рассмотрим такие варианты:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int test1(int a, int b)
{
    return a + b;
}
 
int test2(int const & a, int const & b)
{
    return a + b;
}
 
int main()
{
    test1(1, 2);
    test2(1, 2);
    return 0;
}
А вот что получилось:
Assembler
1
2
3
4
5
6
7
8
9
10
test1:
    mov eax, DWORD PTR [esp+8]
    add eax, DWORD PTR [esp+4]
    ret
test2:
    mov eax, DWORD PTR [esp+4]
    mov edx, DWORD PTR [esp+8]
    mov eax, DWORD PTR [eax]
    add eax, DWORD PTR [edx]
    ret
Что-то не очень похоже на экономию, правда? Ссылки имеют место только для сложных и тяжелых типов.

Добавлено через 6 минут
Добавлю еще, что я специально написал пример так, что запретить компилятору встраивать функции. Если бы он это сделал, то оба варианты были бы абсолютно одинаковы.
2
31.03.2014, 16:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2014, 16:28

Как переделать код?. Нужно сделать через функции пользователя
#include &lt;string.h&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; using...

Как сделать, чтобы весь код повторялся пока не выйдешь?
собственно вопрос

Плохой калькулятор: как его сделать нормальным? (улучшить код)
Как его сделать нормальным ? :cry: #include &lt;functional&gt; #include...


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

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

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