Форум программистов, компьютерный форум CyberForum.ru

Оцените и скажите как оптимизировать? - C++

Восстановить пароль Регистрация
 
Chayn1k
 Аватар для Chayn1k
0 / 0 / 0
Регистрация: 28.06.2016
Сообщений: 10
05.08.2016, 18:45     Оцените и скажите как оптимизировать? #1
Это моя первая более мение обьемная и продуктивная программа. Написал для знакомых школьников, чтобы подтянули математику (люблю её (математику))). Какие будут советы по оптимизации, очень волнует этот вопрос.

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
#include<iostream>
#include<conio.h>
#include<math.h>
#include <stdlib.h>
#include<ctime>
#include<fstream>
using namespace std;
 
int main()
{
setlocale(0, "");
ofstream output("D://Otvet.txt", ios::app);
int a, b, s=0, p=0, np=0;
double k, o;
char x[4]={'*','-','+','/'};
int t2[10]={2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
int t3[10]={3, 6, 9, 12, 15, 18, 21, 24, 27, 30};
int t4[10]={4, 8, 12, 16, 20, 24, 28, 32, 36, 40};
int t5[10]={5, 10, 15, 20, 25, 30, 35, 40, 45, 50};
int t6[10]={6, 12, 18, 24, 30, 36, 42, 48, 54, 60};
int t7[10]={7, 14, 21, 28, 35, 42, 49, 56, 63, 70};
int t8[10]={8, 16, 24, 32, 40, 48, 56, 64, 72, 80};
int t9[10]={9, 18, 27, 36, 45, 54, 63, 72, 81, 90};
char c;
srand(time(NULL));
while(s!=50)
{
    c=x[rand()%4];
 
switch(c)
{
    case '*': a=rand()%10;
          b=rand()%10;
          break;
    case '-':   b=rand()%51;
            a=rand()%51+b;
            break;
    case '+': a=rand()%101;
          b=rand()%101;
          break;
    case '/': b=rand()%10 + 2;
              if(b==2){a=t2[rand()%10];}
              if(b==3){a=t3[rand()%10];}
              if(b==4){a=t4[rand()%10];}
              if(b==5){a=t5[rand()%10];}
              if(b==6){a=t6[rand()%10];}
              if(b==7){a=t7[rand()%10];}
              if(b==8){a=t8[rand()%10];}
              if(b==9){a=t9[rand()%10];}
          break;
}
 
 
cout<<a<<' '<<c<<' '<<b<<"\nВаш ответ:";
if(c=='*'){k=a*b;}
if(c=='/'){k=a/b;}
if(c=='-'){k=a-b;}
if(c=='+'){k=a+b;}
cin>>o;
if(o==k)
{   const string stars(16,'*');
    cout<<stars<<"\n";
    cout<<"* Правильно!!! *"<<endl; p++;
    cout<<stars<<endl;
}
if(o!=k){ cout<<"Ты ошиблась"<<"\n"<<"Правельно:"<<k<<endl; np++;
}
s++;
}
cout<<"Правильных ответов:"<<p<<endl;
cout<<"Не правильных ответов:"<<np;
output<<"правильных ответов:"<<p<<"   "<<"Неправельных ответов:"<<np<<endl;
output.close();
getch(); 
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.08.2016, 18:45     Оцените и скажите как оптимизировать?
Посмотрите здесь:

C++ Как оптимизировать эту фцию:
Так, норм задачка, гляньте, скажите что да как C++
Скажите пожалуйста как отсортировать массив C++
C++ Как оптимизировать код?
скажите как записать C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kylroma
Одессит
 Аватар для kylroma
44 / 44 / 18
Регистрация: 30.12.2013
Сообщений: 203
Записей в блоге: 1
Завершенные тесты: 1
05.08.2016, 18:58     Оцените и скажите как оптимизировать? #2
Что программа делает?
Ну нельзя называть переменные такими именами. Ничего же не понятно.
Doctor123
21 / 21 / 5
Регистрация: 03.12.2013
Сообщений: 101
05.08.2016, 19:32     Оцените и скажите как оптимизировать? #3
А в чём компилировали?
И какой вес экзешника получился?
Я предлагаю в моём проекте такое делать( del ).
Можем вместе перенести - я помогу.
Заодно оптимизируем - у меня тоже есть кого учить арифметике.
Получится компактно, просто и сразу оконное приложение (без использования консоли).
Doctor123
21 / 21 / 5
Регистрация: 03.12.2013
Сообщений: 101
05.08.2016, 22:14     Оцените и скажите как оптимизировать? #4
Пока вот так оптимизировал, без использования своего проекта.
В рамках консольного приложения для MSVC 6.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
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
#include "stdafx.h"
#include<conio.h>
#include<ctime>
#include<fstream>
#include<iostream>
using namespace std;
 
int main()
{
 
setlocale(0, "");
ofstream output("D://Otvet.txt", ios::app);
int a, b, s=0, p=0, np=0;
double k, o;
char x[4]={'*','-','+','/'};
char c;
srand(time(NULL));
while(s!=50)
{
    c=x[rand()%4];
 
    switch(c)
    {
        case '*': a=rand()%10;
                  b=rand()%10;
                  break;
 
        case '-': b=rand()%51;
                  a=rand()%51+b;
                  break;
 
        case '+': a=rand()%101;
                  b=rand()%101;
                  break;
 
        case '/': b=rand()%10 + 2;
                  k = rand()%10;
                  a = k * b;
                  break;
    }
    cout<<a<<' '<<c<<' '<<b<<"\nYour answer: ";
    if(c=='*'){k=a*b;}
    if(c=='-'){k=a-b;}
    if(c=='+'){k=a+b;}
    cin>>o;
    if(o==k)
    {  
        char stars[] = "*******************";
        cout<<stars<< "\n"; 
        cout<<"* It is right !!! *"<<endl; p++;
        cout<<stars<<endl;
    }
    if(o!=k){ cout<<"This is not true"<<"\n"<<"Right:"<<k<<endl; np++;
    }
    s++;
}
cout<<"Правильных ответов:"<<p<<endl;
cout<<"Неправильных ответов:"<<np;
output<<"правильных ответов:"<<p<<"   "<<"Неправильных ответов:"<<np<<endl;
output.close();
getch(); 
return 0;
}
Прикрепляю проект для MSVC 6.0 и экзешник там же в папке релиз.
Весит 220Kb - это очень много!

P.S. Моё предложение по переносу Вашей программы в мой проект по прежнему в силе...
Вложения
Тип файла: rar Plus_Minus.rar (89.6 Кб, 4 просмотров)
DevAlone
71 / 71 / 21
Регистрация: 02.08.2016
Сообщений: 298
Завершенные тесты: 2
05.08.2016, 22:46     Оцените и скажите как оптимизировать? #5
Тут переписывать надо, а не оптимизировать...
Doctor123
21 / 21 / 5
Регистрация: 03.12.2013
Сообщений: 101
07.08.2016, 12:57     Оцените и скажите как оптимизировать? #6
Перенёс в свой проект и оптимизировал. Проще и нагляднее уже, наверное, не сделать.
Вся логика находится на вкладке main.cpp
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
int           op_1,                                                                                 //  Первый операнд
              op_2,                                                                                 //  Второй операнд
              res_;                                                                         //  Результат (правильный)
              
char     Operati_n,
      x[] = "*-+/";
 
#include "Init.h"
 
void INIT() 
{ 
    //  Knopka_2 = 1;                 // В самом начале кнопку "Restart"    считаем нажатой для печати первого задания                             
}
 
void START()
{       
     if(Knopka_2)                                                                //  Если кнопку "Restart" нажали, то..
     {  
        Knopka_2 = 0;   
        srand(Timer_CLK);   
        SetWindowText(hwndEdit,"");                                                    // Стираем содержимое поля ввода         
        Operati_n = x[rand()%4];
        switch(Operati_n)
        {
            case '*': op_1 = rand()%10;
                      op_2 = rand()%10;
                      res_ = op_1 * op_2;
                      break;
    
            case '-': op_2 = rand()%51;
                      op_1 = rand()%51 + op_2;
                      res_ = op_1 - op_2;
                      break;
    
            case '+': op_1 = rand()%101;
                      op_2 = rand()%101;
                      res_ = op_1 + op_2;
                      break;
    
            case '/': op_2 = rand()%10 + 2;
                      res_ = rand()%10;
                      op_1 = res_ * op_2;
                      break;
        }       
        wsprintf(str, "%d %c %d = ", op_1, Operati_n, op_2);
        Print(250, 102,     str);        
        Print(76,  300, "     ");                                                           //  Стираем старые строки
        Print(76,  320, "     ");                                                           //  Стираем старые строки
        Print(76,  340, "     ");                                                           //  Стираем старые строки
     }
     
     if(Knopka_3)                                                                 //  Если кнопку  "OK"  нажали, то..
     {
        Knopka_3 = 0;                                                              //  Обнулим запись о нажатии кнопки
        
        if(Transit[2][17] == res_)                                          //  Если ответ равен результату....
        { 
            Print(76,  300, "Совершенно верно !!!"); 
            
            Print(76,  320, "Результатом будет: ", res_); 
            
            Print(76,  340, "     "); 
        } 
        else                                                                                //  Если ответ НЕправильный
        {
            Print(76,  300, "Этого не может быть, Вы опять ошиблись..."); 
            
            Print(76,  320, "Ваш ответ: ", Transit[2][17]); 
            
            Print(76,  340, "А правильный ответ = ", res_);     
        }
     }      
}
Вся обвязка убрана из поля зрения и доступ к ней очень простой ( на случай внесения правок ).
Фильтр цифр и их прокрутка скроллом в поле ввода.
Вес экзешника без иконки 25Kb (+dllBridge 77Kb).

Хотел ещё изменить фон в поле ввода (белый сильно контрастирует), но не знаю как - подскажите...
Миниатюры
Оцените и скажите как оптимизировать?   Оцените и скажите как оптимизировать?  
Chayn1k
 Аватар для Chayn1k
0 / 0 / 0
Регистрация: 28.06.2016
Сообщений: 10
08.08.2016, 20:31  [ТС]     Оцените и скажите как оптимизировать? #7
Doctor123, я скопировал код в dev-cpp и он материться на строку <cpp>include<Init.h></cpp>
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2016, 21:04     Оцените и скажите как оптимизировать?
Еще ссылки по теме:

скажите как записать C++
C++ Как оптимизировать код, со множеством операторов if?
Как оптимизировать функцию рисования отрезка C++

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

Или воспользуйтесь поиском по форуму:
Doctor123
21 / 21 / 5
Регистрация: 03.12.2013
Сообщений: 101
09.08.2016, 21:04     Оцените и скажите как оптимизировать? #8
Вам нужно будет скачать весь проект.. только, что обновил его
А текст уроков копируется на вкладку main.cpp

Добавлено через 22 часа 27 минут
Дал поиграть ребёнку 6ти лет с программой. Нашлось несколько "детских" решений для накрутки положительного результата. Ребёнок готовится к школе ( с него требуют). В общем, у него был стимул хитрить.
На данном этапе считаю, что оптимизировано всё, что можно. Дальше только увеличение функционала.
Посмотреть, что получилось здесь.[cut]
Конструктивным вопросам буду рад...
PS Счёт ограничил примерно до 30-40.
Yandex
Объявления
09.08.2016, 21:04     Оцените и скажите как оптимизировать?
Ответ Создать тему
Опции темы

Текущее время: 20:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru