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

Как можно сделать программу более компактнее

26.07.2012, 09:29. Показов 1006. Ответов 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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    char otvet = 'n';
    main:
    double a,b,c;
    string kurs;
    if (otvet == 'Y' || otvet == 'y')
    {
    cout << endl;
    goto test;
    }
    else
    {
    test:
    cout << "Выберите валюту:" <<"\n";
    cout << "1. Доллары" <<"\n";
    cout << "2. Гривны" <<"\n";
    cout << "3. Евро" <<"\n";
    }
    cin >> a;
            if (a == 1)
            {
            kurs = "Долларов";
            }
            else if (a == 2)
            {
            kurs = "Гривнов";
            }
            else if (a == 3)
            {
            kurs = "Евро";
            }
            else
            {
                goto lol;
            }
    cout << endl << "Введите кол-во " << kurs<<": ";
    cin >> b;
                if (a == 1)
                {
                c = b * 31;
                cout << endl << c << " " << "Рублей." <<"\n";
                goto povtor;
                }
                else if (a == 2)
                {
                c = b * 4;
                cout << endl << c << " " << "Рублей." <<"\n";
                goto povtor;
                }
                else if (a == 3)
                {
                c = b * 38;
                cout << endl << c << " " << "Рублей." <<"\n";
                goto povtor;
                }
                else
                {
                lol:
                cout << "LOL!?" <<"\n";
                }
        povtor:
                cout << endl <<"Хотите повторить? - (Y/N) :";
                cin >> otvet;
                if (otvet == 'y' || otvet == 'Y')
                {
                    goto main;
                }
                else if (otvet == 'n' || otvet == 'N')
                {
                    cout << endl << "Спасибо за использование программы :)" << endl ;
                }
    return 0;
}
Добавлено через 11 минут
+ выявилась ошибка. программа не можит сразу сделать так 3,3. только после повтора нормально проходит. работает только 3.3
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.07.2012, 09:29
Ответы с готовыми решениями:

Задача про кирпич - как можно написать компактнее программу, чтобы она работала?
Sub Кирпич() a = InputBox(&quot;Ширина кирпича a&quot;) b = InputBox(&quot; Высота кирпича b&quot;) c = InputBox(&quot; Длина кирпича c&quot;) x =...

Как сделать запись кода компактнее?
if (isset($_GET)) { $ref = scandir($_GET); $a = references ($ref, 1, $dir); } else { $ref = scandir('.'); $a =...

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

5
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.07.2012, 09:52
1. Не юзай goto, используй ф-ции.
2. Используй switch/case вместо if()
3. "main:" не очень хорошее имя так как есть еще и int main()
4. Думаю стоит объявить константы вместо магических чисел "c = b * 38;"
2
 Аватар для Intel~lect
137 / 126 / 14
Регистрация: 03.07.2012
Сообщений: 355
26.07.2012, 09:54
KostyaKulakov, Попробуй переписать программу без меток. В этих goto очень трудно разобраться.
1
 Аватар для KostyaKulakov
64 / 52 / 2
Регистрация: 02.07.2012
Сообщений: 391
Записей в блоге: 2
26.07.2012, 10:03  [ТС]
Цитата Сообщение от Intel~lect Посмотреть сообщение
KostyaKulakov, Попробуй переписать программу без меток. В этих goto очень трудно разобраться.
я вот и говарю. прочитал про эти гото в книге. решил попробывать на практике. вроде вышло нечего. но код запутанный получается

Добавлено через 46 секунд
Цитата Сообщение от Avazart Посмотреть сообщение
1. Не юзай goto, используй ф-ции.
2. Используй switch/case вместо if()
3. "main:" не очень хорошее имя так как есть еще и int main()
4. Думаю стоит объявить константы вместо магических чисел "c = b * 38;"
всмысле ф-ции?
0
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
26.07.2012, 10: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
32
33
34
35
36
37
38
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    char ans;
    
    double val;
    const int currencies = 3;
    string names[currencies] = {"dollar", "hryvnia", "euro"};
    double index[currencies] = {31, 4, 38};
    
    do
    {
        int choose;
        cout << "Choose currency:" <<"\n";
        for(int i = 0; i < currencies; ++i)
            std::cout << i + 1 << ". " << names[i] << "\n";
        
        cin >> choose;
 
        if(choose < 1 || choose > 3)
            std::cout << "Wrong choose!\n";
        else
        {
            cout << endl << "Input " << names[choose - 1] <<" amount: ";
            cin >> val;
            std::cout << val * index[choose - 1] << " rubles" << "\n";
        }
        
        std::cout << "\nTry again? - (Y/N): ";
        std::cin >> ans;
    }
    while(ans == 'y');
 
    return 0;
}
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.07.2012, 10:09
всмысле ф-ции?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void test() // ф-ция
 {
    //test:
    cout << "Выберите валюту:" <<"\n";
    cout << "1. Доллары" <<"\n";
    cout << "2. Гривны" <<"\n";
    cout << "3. Евро" <<"\n";
 }
 
//------------------------------------------------------
int main()
{
//....
 if (otvet == 'Y' || otvet == 'y')
  {
     cout << endl;
     //goto test;
     test();
  }
 else  test();
//....
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.07.2012, 10:09
Помогаю со студенческими работами здесь

Как сделать данную программу более эффективной?
public class NestedLoops { public static void main(String args) { for (int i = 2; i&lt;=20; i++){ ...

StrToInt - можно ли быстрее и компактнее
StrToInt: push ebp xor ebx,ebx xor edi,edi mov ebp,1 mov al,...

можно сделать данную программу проще?как можно примитивней
Var F,x: real; Function ArcCos(z:Real):Real; begin if Round(z*10000000)=10000000 then ArcCos:=0 else if...

Оптимизация кода. Или, как сделать более легкую программу?
День добрый товарищи. Имею программу, которая берет из файла текст, ищет в нем определенный кусок текста &quot;g 9999999&quot; и сравнивает...

Написать как можно более эффективную программу, которая подсчитывает суммы отрицательных и положительных элементов
Требуется написать как можно более эффективную программу, которая будет подсчитывать суммы отрицательных и положительных элементов массива...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru