Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
#1

оптимизация кода!

29.08.2011, 18:35. Просмотров 932. Ответов 13
Метки нет (Все метки)

Народ я тут написал простенькую программу которая вычесляет x из уровнения вида
a+x=b
x+a=b
a+b=x

Тоесть пишешь например: 245+x=500
а программа выводит: x=500-245
x=255

Но мне кажеться я ее както примитивно написал... можно ли этот код как нить упростить?



Вод листинг:

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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
#include <iostream>            
#include <string>
#include <sstream>
using namespace std;
int main ()
{
    string s(""),zn(""),str1(""),str2("");
    int i,ix,izn,ial,iravno;
    float a,b,x;
    cout<<"vvedi yrovnenie vida a+x=b"<<endl;
    cin>>s;
    
                               //__________________________________________
    for(i=0;i<s.length();i++)    
    {
    if(s[i]=='x')                      
    {
               ix=i;                       //нахождение индекса неизвестного элемента!
               }
               }
               
                               //____________________________________________
        
        
                             //________________________________________________    
    for(i=0;i<s.length();i++)
    {
       if(s[i]=='+')
       {
                    zn+="+";
                    izn=i;
                    break;
                    }
                                                   
        if(s[i]=='-')
       {
                    zn+="-";
                    izn=i;
                    break;
                    }                  //нахождение знака и его индекса!
        if(s[i]=='*')
       {
                    zn+="*";
                    izn=i;
                    break;
                    }                   
         if(s[i]=='/')
       {
                    zn+="/";
                    izn=i;
                    break;
                    }      
                    }
               //____________________________________________________________
         
         
         
 
               //____________________________________________________________
               
         for(i=0;i<s.length();i++)
         {
                    if(s[i]=='=') 
                    {                                 //нахождения индекса знака равенства!!  
                         iravno=i;
                         break;
                         }
                         }            
            ///______________________________________________________________
            
            
            
              
              
               
               //_____________________________________________________________
    if(ix==0)
        {
        ial=1;
        } 
    if(s[ix+1]=='=')
        {
        ial=2;         //нахождение каким из 3 элиментов уровнения является X!
        }
    if(s[ix-1]=='=')
        {
        ial=3;
        }              
               //_____________________________________________________________
               
               
               
               //____________________________________________________________
               
        if(ial==1)
        {
            for(i=izn+1;i<iravno;i++)
            {
                 str1+=s[i];
                 }
             for (i=iravno+1;i<=s.length();i++)
             {
             str2+=s[i];
             }
             }   
             
             
                 
               
           if(ial==2)
        {
            for(i=0;i<izn;i++)
            {
                 str1+=s[i];
                 }
             for (i=iravno+1;i<=s.length();i++)          //Записываем известные
             {                                                     //элементы в str1 и str2
             str2+=s[i];
             }
             }
             
             
                         
           if(ial==3)
        {
            for(i=0;i<izn;i++)
            {
                 str1+=s[i];
                 }
             for (i=izn+1;i<iravno;i++)
             {
             str2+=s[i];
             }
             }            
               //______________________________________________________________________________
               
               
               //____________________________________________________________________________
             istringstream ss1(str1); 
             ss1>>a;                                   //переводим str1 и str2 в float;
             istringstream ss2(str2);
             ss2>>b;  
              //______________________________________________________________________________ 
               
               
               
               
              //__________________________________________________________________________________
               
               if(ial==1)
               {
               if(zn=="+")
               {
                          x=b-a;
                          cout<<"x="<<b<<"-"<<a<<endl;
                          }
             
               if(zn=="-")
               {
                          x=a+b;
                          cout<<"x="<<a<<"+"<<b<<endl;
                          }
             
               if(zn=="*")
               {
                          x=b/a;
                          cout<<"x="<<b<<"/"<<a<<endl;
                          }
             
               if(zn=="/")
               {
                          x=a*b;
                          cout<<"x="<<a<<"*"<<b<<endl;
                          }
                          }
             
               
               //
               
               if(ial==2)
               {
               if(zn=="+")
               {
                          x=b-a;
                          cout<<"x="<<b<<"-"<<a<<endl;
                          }                                                    //Нахожим X!
                   
               if(zn=="-")
               {
                          x=a-b;
                          cout<<"x="<<a<<"-"<<b<<endl;
                          }
             
               if(zn=="*")
               {
                          x=b/a;
                          cout<<"x="<<b<<"/"<<a<<endl;
                          }
             
               if(zn=="/")
               {
                          x=a/b;
                          cout<<"x="<<a<<"/"<<b<<endl;
                          }
                          }
                          
                          
                       //   
                          
                           if(ial==3)
                           {
               if(zn=="+")
               {
                          x=b+a;
                          cout<<"x="<<b<<"+"<<a<<endl;
                          }
             
               if(zn=="-")
               {
                          x=a-b;
                          cout<<"x="<<a<<"-"<<b<<endl;
                          }
             
               if(zn=="*")
               {
                          x=b*a;
                          cout<<"x="<<a<<"*"<<b<<endl;
                          }
             
               if(zn=="/")
               {
                          x=a/b;
                          cout<<"x="<<a<<"/"<<b<<endl;
                          }
                          }
                          //________________________________________________________________________
                          
 cout<<"x="<<
 x<<endl;           
 system("pause");  
    return 0;
}
Добавлено через 33 минуты
нарооод?))

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2011, 18:35
Ответы с готовыми решениями:

Оптимизация кода
Помогите оптимизировать код. суть программы такая, принимает на вход...

Оптимизация кода
main: #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &quot;keyBuffer.h&quot;...

Оптимизация кода
Нужно очень сильно оптимизировать код, даже пусть с использованием потоков,...

Оптимизация кода
Пожалуйста форумчане как можно сократить этот код Особенно от 27 до 90 строки...

Оптимизация кода
Программа ищет одинаковые файлы в папке где сама находится(по маске или...

13
Drum and C++
12 / 14 / 2
Регистрация: 03.08.2011
Сообщений: 213
29.08.2011, 18:49 #2
я даже до конца читать не стал зачем это все
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
double s , a;
cout<<"vvedi yrovnenie vida a+x=b"<<endl;
cin>>s;
cout<<"+x=";
cin>>a;
cout<<"x="<<a<<"-"<<s<<endl;
cout<<"x="<<a-s;
system("PAUSE");
return 0;
}
код для Visual express

Добавлено через 1 минуту
Ferk тебе подходит
0
Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
29.08.2011, 18:56  [ТС] #3
дело в том что сдесь надо чтобы программа в строке сама находила где x где переменные и какой знак!!!!

Добавлено через 5 минут
там не обезательно знак плюс и не обезательно x стоит на позиции второй переменной!
0
Drum and C++
12 / 14 / 2
Регистрация: 03.08.2011
Сообщений: 213
29.08.2011, 18:57 #4
Цитата Сообщение от Ferk Посмотреть сообщение
дело в том что сдесь надо чтобы программа в строке сама находила где x где переменные и какой знак!!!!
так для этого нужны проверки типа если следующий знак в строке + или - или * или / соответственно свой алгорим решения if и for в помощь

Добавлено через 58 секунд
если пока для тебя это очень очень трудно учись дальше
0
Chelioss
181 / 181 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
29.08.2011, 18:59 #5
Цитата Сообщение от Drum and C++ Посмотреть сообщение
так для этого нужны проверки типа если следующий знак в строке + или - или * или / соответственно свой алгорим решения if и for в помощь

Добавлено через 58 секунд
если пока для тебя это очень очень трудно учись дальше
Будьте внимательнее.
Еще раз о чем топик:
Цитата Сообщение от Ferk Посмотреть сообщение
можно ли этот код как нить упростить?
1
Drum and C++
12 / 14 / 2
Регистрация: 03.08.2011
Сообщений: 213
29.08.2011, 19:02 #6
Цитата Сообщение от Chelioss Посмотреть сообщение
Будьте внимательнее.
Еще раз о чем топик:
так я о чем систему поиска переменных и знаков полностью переделать
0
Chelioss
181 / 181 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
29.08.2011, 19:20 #7
Цитата Сообщение от Drum and C++ Посмотреть сообщение
так я о чем систему поиска переменных и знаков полностью переделать
Дык ТС и спрашивает, что можно переделать.
1
Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
29.08.2011, 20:16  [ТС] #8
Цитата Сообщение от Drum and C++ Посмотреть сообщение
так для этого нужны проверки типа если следующий знак в строке + или - или * или / соответственно свой алгорим решения if и for в помощь

Добавлено через 58 секунд
если пока для тебя это очень очень трудно учись дальше

а в моем коде типо не так...

Добавлено через 1 минуту
Цитата Сообщение от Drum and C++ Посмотреть сообщение
так я о чем систему поиска переменных и знаков полностью переделать
так ты скажи че переделать и чем моя система поиска плоха..
0
Paporotnik
383 / 227 / 12
Регистрация: 06.07.2011
Сообщений: 512
29.08.2011, 20:35 #9
первое что попалось... если тебе нужно использовать переменную в качестве "флага", то используй enum. это гораздо информативнее. и, конечно, гораздо экономнее, чем использование int (в случае с ial), а уж тем более string (в случае zn).
и еще первые два цикла можно объединить.
дальше не разбирался.
1
Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
29.08.2011, 20:53  [ТС] #10
а народ давно в голове вертится такой вопрос... можно ли как нить сделать чтобы например после того как программа выполнилась она запросила повторить программу или нет.. вводишь y и она повторяеться! вводишь n и она завершаеться... была мысль всю программу в цикл взять и потом в конце условный оператор if оставить.. но чета у мя ошибак понавылазело))) помогите плиз.... можно ли так сделать и если да то как?
0
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
29.08.2011, 20:59 #11
Ferk,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
    std::string name;
    char ans = 'y';
    while (tolower(ans) != 'n')
    {
        std::cout << "Enter name" << '\n';
        std::getline(std::cin, name);
        std::cout << "Name is: " << name;
        std::cout << "Repeat? (y/n)" << '\n';
        std::cin >> ans;
    }
    return 0;
}
0
Drum and C++
12 / 14 / 2
Регистрация: 03.08.2011
Сообщений: 213
31.08.2011, 16:20 #12
Цитата Сообщение от Ferk Посмотреть сообщение
а народ давно в голове вертится такой вопрос... можно ли как нить сделать чтобы например после того как программа выполнилась она запросила повторить программу или нет.. вводишь y и она повторяеться! вводишь n и она завершаеться... была мысль всю программу в цикл взять и потом в конце условный оператор if оставить.. но чета у мя ошибак понавылазело))) помогите плиз.... можно ли так сделать и если да то как?
тоесть надо написать все в цикле и в самом конце if если например string=="n" break если равно y continue
тупой пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string>
using namespace std;
 
int main(int nNumberofArgs , char* pszArgs)
{
    string repeat;
    cout<<"Repeat Demo\n";
    for(;;)
    {
        cout<<"repeat ?? :";
        cin>>repeat;
        cout<<endl;
        if(repeat=="n" || repeat=="N"){break;}
        if(repeat=="y" || repeat=="Y"){continue;}
    }
    system("PAUSE");
    return 0;
}
Добавлено через 47 секунд
ошибок нет проверял (делал в CodeBlocs)
0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
01.09.2011, 11:36 #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
36
#include <fstream>
#include <string>
 
int resh (const std:: string s)
{
    if (s[0]=='x') 
     {
        if (s[1]=='+') return (s[4]-'0')-(s[2]-'0');
        else return (s[4]-'0')+(s[2]-'0');
     }
     
     else if (s[2]=='x') 
     {
        if (s[1]=='+') return (s[4]-'0')-(s[0]-'0');
        else return (s[0]-'0')-(s[4]-'0');
     }
     
     else
     {
         if (s[1]=='+') return (s[0]-'0')+(s[2]-'0');
         else return (s[0]-'0')-(s[2]-'0');
     }
}
 
int main()
{
    std:: string s;
    int res;
    std:: ifstream ifs ("input.txt");
    ifs >> s;
    ifs.close();
    std:: ofstream ofs ("output.txt");
    ofs << resh (s);
    ofs.close();
    return 0;
}
Всё просто, просто ифы.
0
Ferk
3 / 3 / 1
Регистрация: 28.07.2011
Сообщений: 105
12.09.2011, 10:02  [ТС] #14
Цитата Сообщение от Dani Посмотреть сообщение
Решение задачи:
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
#include <fstream>
#include <string>
 
int resh (const std:: string s)
{
    if (s[0]=='x') 
     {
        if (s[1]=='+') return (s[4]-'0')-(s[2]-'0');
        else return (s[4]-'0')+(s[2]-'0');
     }
     
     else if (s[2]=='x') 
     {
        if (s[1]=='+') return (s[4]-'0')-(s[0]-'0');
        else return (s[0]-'0')-(s[4]-'0');
     }
     
     else
     {
         if (s[1]=='+') return (s[0]-'0')+(s[2]-'0');
         else return (s[0]-'0')-(s[2]-'0');
     }
}
 
int main()
{
    std:: string s;
    int res;
    std:: ifstream ifs ("input.txt");
    ifs >> s;
    ifs.close();
    std:: ofstream ofs ("output.txt");
    ofs << resh (s);
    ofs.close();
    return 0;
}
Всё просто, просто ифы.


Да я когда писал этот код исходил из этой задачи) но там понятно скока длина строки и извесно под каким индексом находятся переменные...
там могут быть тока однозначные числа! А в моем коде хоть 5 значные
0
12.09.2011, 10:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2011, 10:02

Оптимизация кода (C++)
Добрый вечер. У меня есть две функции. Вопрос:&quot;Как оптимизировать этот код,...

Оптимизация кода
Как сравнить 2 строки. Вот как их задавал в ходе программы string h,b; ......

Оптимизация кода
Здравствуйте! у меня есть такая функция, которая очень часто вызывается: int...


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

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

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