Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 30.05.2017
Сообщений: 4
1

Как в C++ Builder из кода сделать "процедуру" для дальнейшего использования этого кода?

30.05.2017, 00:56. Показов 625. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть код C++ Builder в котором его часть дальше будет неоднократно использоваться. Как правильно нужно преобразовать, чтобы дальше не прописывать одно и то же, а просто обратиться к этой части кода?

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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
 
 
#include<conio.h>
#include<math.h>
#include<stdio.h>
#include<iostream.h>
#include<io.h>
 
int a, b, i=0, j=0, k, Nin, Nout, Nf, nomer[4], topol[4][2];
int N, Ncomp;
float w, fn, fv, f, param[7];
char obozn[7];
FILE*Z;
 
void main()
{ clrscr();
 //             1. Data Input
  Z=fopen("cx1.txt","r");
  fscanf(Z,"%i %i %i %i %f %f",&N,&Nin,&Nout,&Nf, &fn,&fv);
  printf("\nN=%i; Nin=%i; Nout=%i; Nf=%i;  fn=%f;  fv=%f", N, Nin, Nout, Nf, fn, fv);
     i=0;
  while (!feof(Z))
    { fscanf(Z,"\n %c %i", &obozn[i],    &nomer[i]);
      fscanf(Z,"%i %i %f", &topol[i][0], &topol[i][1], &param[i]);
      printf("\n %c%i (%i-%i)=%9.6f ",
       obozn[i],nomer[i],topol[i][0],topol[i][1],param[i]);
      if(obozn[i]=='R') printf(" kOm");
           else printf(" mkF");
      i++;
    }
  fclose(Z);
  Ncomp=i; cout<<endl;
//              2. AFC  calculation
  float  Kdb, fi, Yr[4][7],Yi[4][7],yr, yi,z,Ur[4], Ui[4], Kmod, detr, deti,detr1, deti1, yr1, yi1;
  float df=exp( (log(fv)-log(fn) )/(Nf-1) );
  f=fn;
  for(int m=0;m<Nf;m++)
    { w=2*3.14159*f;
      for(i=0;i<=N;i++) for(j=0;j<=2*N;j++){Yr[i][j]=0; Yi[i][j]=0;}
      for(i=1;i<=N;i++) Yr[i][i+N]=1;
      for(i=0;i<Ncomp;i++)
        { a=topol[i][0]; b=topol[i][1];
          if(obozn[i]=='R')
            {yr=1/param[i]; yi=0;
            } else
            { yr=0; yi=w*param[i];
            }
          Yr[a][a]+=yr;  Yi[a][a]+=yi;
          Yr[a][b]-=yr;  Yi[a][b]-=yi;
          Yr[b][a]-=yr;  Yi[b][a]-=yi;
          Yr[b][b]+=yr;  Yi[b][b]+=yi;
        }
 
// Jordane     // Эту часть кода нужно сделать "процедурой" к которой можно потом обратиться вместо того, чтобы повторно писать этот же код
    
    {
      detr=1; deti=0;
      for(k=1;k<=N;k++)
         { detr1=detr*Yr[k][k]-deti*Yi[k][k];
           deti1=detr*Yi[k][k]+deti*Yr[k][k];
           detr=detr1; deti=deti1;
                           //normuv
           z=Yr[k][k]*Yr[k][k]+Yi[k][k]*Yi[k][k];
           yr=Yr[k][k]/z;
           yi=Yi[k][k]/z;
           for (j=k; j<=2*N; j++)
              { yr1=(Yr[k][j]*yr+Yi[k][j]*yi);
                yi1=(Yi[k][j]*yr-Yr[k][j]*yi);
                Yr[k][j]=yr1;
                Yi[k][j]=yi1;
              }
 
       for(i=1;i<=N;i++)
          {if (i!=k)
                {  yr=Yr[i][k];
                   yi=Yi[i][k];
                   for (j=k;j<=2*N; j++)
                    { Yr[i][j]-=(yr*Yr[k][j]-yi*Yi[k][j]);
                      Yi[i][j]-=(yi*Yr[k][j]+yr*Yi[k][j]);
                    }
    }
                }
              }
         }
 
        Kmod=sqrt( (pow(Yr[Nout][Nin+N],2)+pow(Yi[Nout][Nin+N],2) )/(pow(Yr[Nin][Nin+N],2)+pow(Yi[Nin][Nin+N],2) ));
      Kdb=20*log10(Kmod);
      printf("\n f=%8.3f;  Kmod=%.3f  Kdb=%3.0f",
         f,        Kmod,      Kdb);
 
 
 
 
 
 
      f*=df;
    }
  getch();
  }
 
//---------------------------------------------------------------------------
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2017, 00:56
Ответы с готовыми решениями:

Если счет не был открыт, то с boolean сделать возможность использования дальнейшего кода недействительным
Здравствуйте! Столкнулся с очередной проблемой, которую уже который час не могу решить. Написал...

Как сделать комплексное число глобальным, для дальнейшего использования?
Мне нужно чтобы а1, а2, а3 можно было использовать дальше, return a1,a2,a3; почему то не помогает...

Как сделать вывод этого кода?
Вот что-то получилось но не пойму как сделать что-бы этот код за работал. Нужно как-то загрузить...

Как сделать выполнение этого кода в отдельном потоке?
При формировании отчета зависает программа, как сделать чтобы код выполнялся в отедльном потоке, и...

6
38 / 36 / 25
Регистрация: 25.01.2017
Сообщений: 151
Записей в блоге: 2
30.05.2017, 02:45 2
Примерно так:
Кликните здесь для просмотра всего текста
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
void Jordane(void);
{
      detr=1; deti=0;
      for(k=1;k<=N;k++)
      { detr1=detr*Yr[k][k]-deti*Yi[k][k];
           deti1=detr*Yi[k][k]+deti*Yr[k][k];
           detr=detr1; deti=deti1;
                           //normuv
           z=Yr[k][k]*Yr[k][k]+Yi[k][k]*Yi[k][k];
           yr=Yr[k][k]/z;
           yi=Yi[k][k]/z;
           for (j=k; j<=2*N; j++)
              { yr1=(Yr[k][j]*yr+Yi[k][j]*yi);
                yi1=(Yi[k][j]*yr-Yr[k][j]*yi);
                Yr[k][j]=yr1;
                Yi[k][j]=yi1;
              }
 
       for(i=1;i<=N;i++)
          {if (i!=k)
                {  yr=Yr[i][k];
                   yi=Yi[i][k];
                   for (j=k;j<=2*N; j++)
                    { Yr[i][j]-=(yr*Yr[k][j]-yi*Yi[k][j]);
                      Yi[i][j]-=(yi*Yr[k][j]+yr*Yi[k][j]);
                    }
                }
          }
       }
    }

Учитывая, что у Вас много глобальных переменных, может и заработает. При вызове просто:
C++
1
Jordane();
Большие и маленькие буковки имеют значения. Функция ничего не принимает и ничего не возвращает (на мой взгляд это плохо в данном случае). Слово "процедура" из паскаля или делфи, в СИ вроде функциями называются, но это не важно в целом.

Это всё надо вставить на 22 строчку Вашего кода, после FILE*Z;

Добавлено через 15 минут
Неа не заработает совсем

Добавлено через 5 минут
А что это такое страшное? Мне просто интересно.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,432
Записей в блоге: 8
30.05.2017, 09:33 3
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
// тут инклуды
 
int a, b, i=0, j=0, k, Nin, Nout, Nf, nomer[4], topol[4][2];
int N, Ncomp;
float w, fn, fv, f, param[7];
char obozn[7];
FILE*Z;
 
float Yr[4][7],Yi[4][7],yr, yi,Kmod,Kdb;
 
// вот процедура
 
void Jordane()
{
    float  fi,z,Ur[4], Ui[4], detr, deti,detr1, deti1, yr1, yi1;
    detr=1;
    deti=0;
    for(k=1; k<=N; k++)
    {
        detr1=detr*Yr[k][k]-deti*Yi[k][k];
        deti1=detr*Yi[k][k]+deti*Yr[k][k];
        detr=detr1;
        deti=deti1;
        //normuv
        z=Yr[k][k]*Yr[k][k]+Yi[k][k]*Yi[k][k];
        yr=Yr[k][k]/z;
        yi=Yi[k][k]/z;
        for (j=k; j<=2*N; j++)
        {
            yr1=(Yr[k][j]*yr+Yi[k][j]*yi);
            yi1=(Yi[k][j]*yr-Yr[k][j]*yi);
            Yr[k][j]=yr1;
            Yi[k][j]=yi1;
        }
 
        for(i=1; i<=N; i++)
        {
            if (i!=k)
            {
                yr=Yr[i][k];
                yi=Yi[i][k];
                for (j=k; j<=2*N; j++)
                {
                    Yr[i][j]-=(yr*Yr[k][j]-yi*Yi[k][j]);
                    Yi[i][j]-=(yi*Yr[k][j]+yr*Yi[k][j]);
                }
            }
        }
    }
}
int main()
{
    clrscr();
//             1. Data Input
    Z=fopen("cx1.txt","r");
    fscanf(Z,"%i %i %i %i %f %f",&N,&Nin,&Nout,&Nf, &fn,&fv);
    printf("\nN=%i; Nin=%i; Nout=%i; Nf=%i;  fn=%f;  fv=%f", N, Nin, Nout, Nf, fn, fv);
    i=0;
    while (!feof(Z))
    {
        fscanf(Z,"\n %c %i", &obozn[i],    &nomer[i]);
        fscanf(Z,"%i %i %f", &topol[i][0], &topol[i][1], &param[i]);
        printf("\n %c%i (%i-%i)=%9.6f ",
               obozn[i],nomer[i],topol[i][0],topol[i][1],param[i]);
        if(obozn[i]=='R') printf(" kOm");
        else printf(" mkF");
        i++;
    }
    fclose(Z);
    Ncomp=i;
    cout<<endl;
//              2. AFC  calculation
    // float  Kdb, fi, Yr[4][7],Yi[4][7],/*yr, yi,*/z,Ur[4], Ui[4], Kmod, /*detr, deti,detr1, deti1,*/ yr1, yi1;
    float df=exp( (log(fv)-log(fn) )/(Nf-1) );
    f=fn;
    for(int m=0; m<Nf; m++)
    {
        w=2*3.14159*f;
        for(i=0; i<=N; i++) for(j=0; j<=2*N; j++)
            {
                Yr[i][j]=0;
                Yi[i][j]=0;
            }
        for(i=1; i<=N; i++) Yr[i][i+N]=1;
        for(i=0; i<Ncomp; i++)
        {
            a=topol[i][0];
            b=topol[i][1];
            if(obozn[i]=='R')
            {
                yr=1/param[i];
                yi=0;
            }
            else
            {
                yr=0;
                yi=w*param[i];
            }
            Yr[a][a]+=yr;
            Yi[a][a]+=yi;
            Yr[a][b]-=yr;
            Yi[a][b]-=yi;
            Yr[b][a]-=yr;
            Yi[b][a]-=yi;
            Yr[b][b]+=yr;
            Yi[b][b]+=yi;
        }
 
        Jordane();
 
        Kmod=sqrt( (pow(Yr[Nout][Nin+N],2)+pow(Yi[Nout][Nin+N],2) )/(pow(Yr[Nin][Nin+N],2)+pow(Yi[Nin][Nin+N],2) ));
        Kdb=20*log10(Kmod);
        printf("\n f=%8.3f;  Kmod=%.3f  Kdb=%3.0f",
               f,        Kmod,      Kdb);
 
 
 
 
 
 
        f*=df;
    }
    getch();
}
вполне себе должно сработать (Билдера под рукой нет, проверял в GCC, компилируется нормально)
1
0 / 0 / 0
Регистрация: 30.05.2017
Сообщений: 4
30.05.2017, 11:00  [ТС] 4
это программа, которая находит коэффициент передачи в зависимости от частоты для определенной схемной функции, параметры которой задаются отдельно в txt файле (в данном коде это cx1.txt)
0
0 / 0 / 0
Регистрация: 30.05.2017
Сообщений: 4
30.05.2017, 12:06  [ТС] 5
Цитата Сообщение от volvo Посмотреть сообщение
вполне себе должно сработать (Билдера под рукой нет, проверял в GCC, компилируется нормально)
при компиляции выдает ошибку о недопустимом символе
Миниатюры
Как в C++ Builder из кода сделать "процедуру" для дальнейшего использования этого кода?  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,432
Записей в блоге: 8
30.05.2017, 12:14 6
Ну значит сначала открой этот текст в обычном Notepad-е, и сохрани его в кодировке Win1251, потому что я не собираюсь еще и кодировку менять себе. У меня выставлено все в UTF8, с которым эта динозаврическая версия Билдера работать не умеет.
0
0 / 0 / 0
Регистрация: 30.05.2017
Сообщений: 4
30.05.2017, 13:38  [ТС] 7
хаха, спасибо.

Добавлено через 1 час 21 минуту
Спасибо! работает!)
0
30.05.2017, 13:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2017, 13:38
Помогаю со студенческими работами здесь

Компиляцию кода MAtlab в C++Builder и использование преобразованного кода .м в C++Builder
Компиляцию кода MAtlab в C++Builder и использование преобразованного кода .м в C++Builder -Как...

Как сделать нумерацию строк в php с использованием этого кода?
Доброго времени суток! Можете помочь Он должен нумеровать новости от 1 до бесконечности, с...

Подскажите пожалуйста: как сделать с этого кода сайт адаптивным ?
&lt;!DOCTYPE html&gt; &lt;html lang=&quot;ru&quot;&gt; &lt;head&gt; &lt;meta charset=&quot;UTF-8&quot;&gt; &lt;meta...

Вытащить из строки числа и сделать их переменными для дальнейшего использования
def draw_skeleton_data(pSkelton, index, positions, width = 4): start =...

Как остановить рандом для этого кода?
Пытаюсь писать маджонг на с++ ( с исп. SFML), у меня есть файл с костями вместе, я его разбиваю на...

Как создать блок схему для этого кода
Сам код #define _USE_MATH_DEFINES #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace...

Как построить блок схему для этого кода?
Как построить блок схему для этого кода? int i, Pins = {2,3,4,5,6,7,8,9,10,11,12}; void setup()...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru