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

Оптимизация программы на С++ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ оптимизация, медленный доступ к трехмерному массиву http://www.cyberforum.ru/cpp-beginners/thread815355.html
Здравствуйте, публикуюсь здесь потому что нет доступа к разделу экспертов. Требуется перевести буфер из одного формата в другой по определенной формуле с плавающей точкой, а именно из формата yuyv в...
C++ Разработать программу «Заработная плата» 3) Разработать программу «Заработная плата», позволяющую определить размер месячного вознаграждения работника, состоящего из суммы должностного оклада, премии, надбавки, в зависимости от должности,... http://www.cyberforum.ru/cpp-beginners/thread815348.html
Разработать программу «Стоимость компьютера», позволяющую вычислять стоимость комплекта для АРМ различных специалистов C++
2)Разработать программу «Стоимость компьютера», позволяющую вычислять стоимость комплекта для АРМ различных специалистов (бухгалтера, инженера, программиста, и т.п.);
C++ Разработать программу «Площадь поверхности многогранника», позволяющую вычислять объем площади поверхности простейших многогранников;
Разработать программу «Площадь поверхности многогранника», позволяющую вычислять объем площади поверхности простейших многогранников;
C++ Разработать программу «Стоимость компьютера», позволяющую вычислять стоимость комплекта для АРМ различных специалистов http://www.cyberforum.ru/cpp-beginners/thread815308.html
Разработать программу «Стоимость компьютера», позволяющую вычислять стоимость комплекта для АРМ различных специалистов (бухгалтера, инженера, программиста, и т.п.);
C++ Задача по методам оптимизации Всем доброго времени суток! Необходимо запрограммировать метод тяжелого шарика. Заранее спасибо! подробнее

Показать сообщение отдельно
programka311
0 / 0 / 0
Регистрация: 22.03.2013
Сообщений: 9

Оптимизация программы на С++ - C++

22.03.2013, 10:38. Просмотров 722. Ответов 16
Метки (Все метки)

Помогите оптимизировать программу на С++, я не представляю, что в ней можно изменить. Хотя бы намек на функцию, в которой нужна оптимизация Очень надо!!!
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
#include <iostream.h>
//прототипы функций
void vvod (long &,int &);
void conversion(long,int,int *&,int &);
int polin(int *&,int);
void vivod(int *&,int);
void summa(int *, int , int , int & , int * , int * &, int);
void vichitanie(int *,int , int *,int ,int *&,int &,int);
void main()
{
    //инициализация переменных
    long j,con_dip;
    int *a,na,osn,*min,*max,nmin,nmax,l=0,*s,ns,*v,nv;
    //вызов функции ввода
    vvod(con_dip,osn);
    cout<<"Osnovanie sistemi="<<osn<<endl;
    //цикл по всему диапазону чисел
    for(j=100;j<con_dip;j++)
    {
        //вызов функции перевода из 10 в заданную системы счисления и наоборот
        conversion(j,osn,a,na);
        conversion(j,10,b,nb);
        //вызов функции нахождения палиндрома и запись результат в переменную
        int voz1= polin(a,na);
        int voz2=polin(b,nb);
        //сравниваем результаты функции нахождения палиндромав
        if(voz1==1 && voz2==1)
            {
                //запоминаем 1 палиндром
                if(l==0)
                    {
                    min=a;
                        nmin=na;
                        l=1;
                    }
                //вывод палиндромов
                vivod(a,na);
                //запоминаем последний палиндром
                max=a;
                nmax=na;
            }
   }
   //вывод минимума
   cout<<"**********MIN**********"<<endl;
   vivod(min,nmin);
      //вывод максимума
   cout<<"**********MAX**********"<<endl;
   vivod(max,nmax);
      //расчет и вывод суммы
   cout<<"**********SUMMA**********"<<endl;
   summa(min,nmin,nmax,ns,max,s,osn);
   vivod(s,ns);
      //расчет и вывод разности
   cout<<"**********RAZNOST**********"<<endl;
   vichitanie(min,nmin,max,nmax,v,nv,osn);
   vivod(v,nv);
      //задержка 
   cin >>na;
}
//функция ввода
void vvod(long &con_dip,int &osn)
{
    do
    {
        cout<<"Vvedite chislo:"<<endl;
        cin>>con_dip;
    }
   while(con_dip<100 );//ввод основания системы счисления от 100
   do
    {
        cout<<"Vvedite osnovanie sistemi:"<<endl;
        cin>>osn;
    }
   while(osn<2 || osn>16);//ввод основания системы счисления от 2 до 16
}
//функция перевода числа из 10-ой в заданную систему счисления
void conversion(long j, int osn, int *&x, int &n)
{
    int i;
    //заносим число из диапазона в переменную s, чтобы само число не менять для дальнейшей работы с ним
    long s=j;
    //определяем размер массива для палиндрома
    for(n=1;s>=osn;n++)
        {
            s=s/osn;
        }
        //выделение памяти для массива битов числа
    x=new int[n];
    //перевод числа в заданную систему счисления
    for(i=n-1;i>=0;i--)
        {
            //остаток от делание на основание системы счисления
            x[i]=j%osn;
            //уменьшение числа для дальнейшего деления с остатком
            j=j/osn;
        }
}
//функция нахождения палиндромов
int polin(int *&x, int n)
{
    int i; 
    //определяем палиндром или нет
    for(i=0;i<=n/2;i++)
        {
            if(x[i]!=x[n-i-1])
            //если не палиндром
            return 0;
        }
        //если палиндром
    return 1;
}
//функция вывода
void vivod(int *&x, int n)
{
    int i;
    for(i=0;i<n;i++)
        {
            ////Если значения в ячейке больше 9, то заменяем их буквами, для 16 системы счисления
            if(x[i]==10)
                cout << 'A';
            else
            if(x[i]==11)
                cout<<'B';
            else
            if(x[i]==12)
                cout<<'C';
            else
            if(x[i]==13)
                cout<<'D';
            else
            if(x[i]==14)
                cout<<'E';
            else
            if(x[i]==15)
                cout<<'F';
            else
                cout<<x[i];//вывод для остальных систем счисления
        }
    cout<<endl;
}
//функция нахождения суммы максимального и минимального палиндромов
void summa(int * min, int nmin, int nmax, int & n, int * max, int * & x, int osn)
{
    int d=0;
    //выделение памяти под массив суммы
    n = nmax+1;
    x = new int [n];
    for (int i=nmin-1,k=nmax-1; i>=0; i--, k--)
        {
            //сумма заносится по разрядно в массив суммы
            x[k+1]=(max[k]+min[i]+d)%osn; 
            //установка переполнения
                                 d=(max[k]+min[i]+d)/osn;
        }
        
    //снос оставшихся битов с переполнением
    for (int i=nmax-nmin; i>0; i--)
        {
            x[i]=(max[i-1]+d)%osn;
            d=(max[i-1]+d)/osn;
        }
    x[0]=d;
}
//функция нахождения разности между максимальным и минимальным 
void vichitanie(int *min,int nmin,int *max,int nmax,int *&x,int &n,int osn)
{
    n=nmax;
    //Выделение памяти для результирующего массива разности
    x=new int [nmax]; 
    long t = 0;
    
    //цикл, пока не начало массива максимального палиндрома
    for(int i=nmax-1, k=nmin-1; i>=0; i--, k--) 
        {
             //Если минимальный палиндром закончился
            if(k<0)
            //От текущего элемента массива максимального палиндрома отнимается "займ"
                x[i]=max[i]-t; 
            //От текущего элемента массива максимального палиндрома отнимается соответствующий минимальный и отнимается "займ"
            x[i]=max[i]-min[k]-t; 
             //Если вычитание отрицательно
            if(x[i]<0)
            {
                //Добавление основания системы к результату вычитания
                x[i]=x[i]+osn;
                //Установка необходимости займа
                t=1;    
            }
            else
            t=0; 
        }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru