Курсач

Тема в разделе "Общие вопросы по С и С++", создана пользователем DaaGER, 3 июн 2007.

  1. DaaGER

    DaaGER Гость

    У меня всё время вылетает ошибка:

    int gd = DETECT, gm;

    DETECT' undeclared (first use this function)

    Пишу в Dec-C++

    ПОМОГИТЕ!!!

    Вот код:

    Код (Text):
    #include <cstdlib>
    #include <iostream>
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <graphics.h>

    #define N 11
    #define tk 60
    #define t1 30
    #define tn 15
    #define a 50
    #define b 0.07
    #define c 0.2
    #define U1 5
    #define U2 50
    #define U3 50
    #define U4 60
    #define Nmax 300
    using namespace std;



    void inputt(float*,int);
    void inputUvx(float*,float*,int);
    void inputUvix(float*,float*,int);
    void output(int,float*,float*,float*);
    float tabl(void);
    float find_dlitelnost(float*,float*,float*,int);
    void pogreshnost(float *,float *);
    int menu();
    void graf(float*,float*, int);
    void SaveFile(float *, char*, int);
    int main();

    //ââîä ìàññèâà âðåìåíè

    void inputt(float *pmast,int n)
    {

    float dt;
    dt=fabs(tk-tn)/(N-1);
    int i;
    for(i=0;i<N;i++)
    {
    *(pmast+i)=tn+i*dt;
    }
    return;
    }




    //ââîä ìàññèâà âõîäíîãî íàïðÿæåíèÿ

    void inputUvx(float *pmast,float *pmasUvx,int n)
    {
    int i;
    for(i=0;i<N;i++)
    {
    if (*(pmast+i)<t1) *(pmasUvx+i)=a*(1-exp(-b*(*(pmast+i)-tn)));
    else if(*(pmast+i)>=t1) *(pmasUvx+i)=a*(1-exp(-b*(*(pmast+i)-tn)))*exp(-c*(*(pmast+i)-t1));

    }
    return;
    }




    //ââîä ìàññèâà âûõîäíîãî íàïðÿæåíèÿ

    void inputUvix(float *pmasUvx,float *pmasUvix, int n)
    {

    int i;
    for(i=0;i<N;i++)
    {
    if(*(pmasUvx+i)<=0) *(pmasUvix+i)=0;
    else if(*(pmasUvx+i)<U1 && *(pmasUvx+i)<0) *(pmasUvix+i)=(U3/U1)*(*(pmasUvx+i));
    else if(*(pmasUvx+i)>=U1) *(pmasUvix+i)=(*(pmasUvx+i))*((U4-U3)/(U2-U1))+U3-U1*((U4-U3)/(U2-U1));

    }
    return;
    }
    //ñîõðàíåíèå ìàññèâà â ôàéë


    void SaveFile(float *Array, char* fn, int n)
    {
    FILE *f;

    f = fopen(fn,"w+");
    if (f==NULL)
    {
    printf("\n Oshibka zapisi v fail ");
    printf(fn);
    exit(1);
    }

    for(int i =0; i<n; i++)
    {
    fprintf(f,"%f\n",*(Array+i));
    }
    fclose(f);
    return;
    }

    //ìåíþ âûáîðà


    int menu()
    {


    for(i=0,i<7,i++){
    printf("\n");    }
    printf("\t\t MENU:\n\n");
    printf("\t\t\t 1. Tablica\n");
    printf("\t\t\t 2. Zapis' v fail\n");
    printf("\t\t\t 3. 3ii kod\n");
    printf("\t\t\t 4. grafiki\n");
    printf("\t\t\t ESC - Vihod\n");

    int i= getche();

    return i;

    }

    //âûâîä íà ýêðàí çàãîëîâêà òàáëèöû

    float tabl(  )
    {
    printf("|-------|-----------|-----------|------------|\n");
    printf("|  i  | *t   |  *Uvx  |  *Uvix  |\n");
    printf("|-------|-----------|-----------|------------|\n");
    return 0;
    }


    //âûâîä íà ýêðàí òàáëèöû ìàññèâîâ

    void output(int n, float *pmast,float *pmasUvx,float *pmasUvix)
    {
    int i;
    for(i=0;i<N;i++)
    {
    printf("| %2d  |  %6.3f | %6.3f  |  %6.3f |\n",i,*(pmast+i),*(pmasUvx+i),*(pmasUvix+i));
    }
    return;
    }

    //ïîèñê äëèòåëüíîñòè èìïóëüñà
    float find_dlitelnost(float*pmast,float *pmasUvx,float*pmasUvix,int n)
    {
    float Umax=0.0;
    int i;
    inputt(pmast,n);
    inputUvx(pmast,pmasUvx,n);
    inputUvix(pmasUvx,pmasUvix,n);
    for(i=0;i<N;i++)
    {
    if(pmasUvix[i]>Umax) Umax=pmasUvix[i];
    }
    float U01=0.1*Umax;
    float U09=0.9*Umax;
    float dt=fabs(tk-tn)/(N-1),A1, A2,tf, tf1,tf2;
    int k=0;
    for(i=0;i<N;i++)
    {
    A1=*(pmasUvix+i);
    A2=*(pmasUvix+i+1);
    k++;
    if(A2<=U01&&A1<A2) tf1=tn+k*dt;
    }
    k=0;
    for(i=0;i<N;i++)
    {
    A1=*(pmasUvix+i);
    A2=*(pmasUvix+i+1);
    k++;
    if(A2<=U09&&A2>A1) tf2=tn+k*dt;
    }
    tf=fabs(tf2-tf1);
    return(tf2-tf1);

    }





    // ðàñ÷åò ïîãðåøíîñòè è âûâîä íà ýêðàí

    void pogreshnost(float *pmast,float *pmasUvix)
    {
    int n=4,k=0;
    float tf,E = 0.11;
    int Im=20;
    float V=100,W,P=0;
    for(int i=0;i<Im; i++)
    {
    W=n*tf;
    P=fabs(W-V);
    if(P>E)
    {

    k=k+1;
    n=n*2;
    V=W;
    }
    else if(P==0)
    {

    k=k+1;
    n=n*2;
    V=W;
    }
    else break;
    }
    if(P==0)
    {
    printf("\n\n\n\nDlitelnost' impulsa vihodnogo signala: %f\n",W);
    printf("\tTochnost': E = 0.11\n");
    printf("\tDannaya tochnost' NE dostygnuta pri n=%d. \n\tKolichestvo udvoenii k=%d\n",n,k);
    }
    else {
    printf("\n\n\n\nDlitelnost' impulsa vihodnogo signala: %f\n",W);
    printf("\tTochnost': E = 0.11\n");
    printf("\tDannaya tochnost' dostygnuta pri n=%d. \n\tKolichestvo udvoenii k=%d\n",n,k);
    printf("\tPogreshnost' %f\t",P);
    }
    getch();
    return;
    }


    // ãðàôèê
    void graphic(float *pt,float *pU,int n)
    {  
    int Xmax =640 , Ymax = 450, Indx=60,Ind=40;
    int gd = DETECT, gm;
    initgraph(&gd,&gm,"");
    float z,e;
    int Umin=100,masht,Zn=Ymax,Zm=Ymax,dy,Umax=-10000;

    //ïîèñê ìèíèìàëüíîãî è ìàêñèìàëüíîãî çíà÷åíèÿ
    for(int i=0;i<n;i++)
    {
    for(int k=-1000;k<1000;k++)
    if (*(pU+i)>=k&&*(pU+i)<(k+1)&&k>=Umax) Umax=k;
    else if(*(pU+i)>=k&&*(pU+i)<(k+1)&&k<=Umin) Umin=k;
    }
    //îïðåäåëåíèå òî÷íîñòè ãðàôèêà
    if (Umax<=4&&Umin>=-10) {e=0.1;z=10;}
    else if (Umax<=80&&Umax>40&&Umin>=-10){ e=0.2; z=5;}
    else if (Umin>-40){e=0.25; z=4;}
    else if (Umin<=-40){e=1; z=1;}
    for(int i=0;i<1000;i++)
    if ((Ymax-Ind)>=z*(Umax+fabs(Umin))*i&&(Ymax-Ind)<z*(Umax+fabs(Umin))*(i+1)) masht=i;   //ìàñøòàá ïî îñè Ó
    // îòðåçêè ïî âðåìåíè
    int shtx;
    for(int k=0;k<1000;k++)
    if (k*n<=Xmax-Indx&&(k+1)*n>Xmax-Indx) shtx=k;


    for(int i=0;i<=2;i++){
    //çàëèâêà áåëûì öâåòîì
    for (int k=1;k<=Ymax-Ind;k++)
    {
    setlinestyle(SOLID_LINE,0,THICK_WIDTH);
    setcolor(WHITE);
    line(Indx,Ind+k,Xmax,Ind+k );
    }

    //ïîñòðîåíèå ñåòêè
    setlinestyle(SOLID_LINE,0,NORM_WIDTH);
    setcolor(BLUE);

    for(int k=-10;k<=40;k++)
    if(Zm!=Ymax&&Zm+15*k>Ind&&Zm+15*k<Ymax)
    line(Indx,Zm+15*k,Xmax,Zm+15*k);  //ãîðèçîíòàëüíûå

    for(int k=1;k<=n;k++)
    if(Indx+k*2*shtx<Xmax)
    line(Indx+k*2*shtx ,Ind,Indx+k*2*shtx ,Ymax); //âåðòèêàëüíûå



    // ïîñòðîåíèå ãðàôèêà

    setlinestyle(SOLID_LINE,0,THICK_WIDTH);
    setcolor(RED);
    moveto(Indx,Ymax);
    for (int i=0;i<n;i++)
    { float ugr,igr=pU[i];
    int m,j=0;
    if (igr<0&&Umin<0){ ugr=igr-Umin; m=1;}
    for(int k=0;k<=10000;k++)
    {  
    j++;
    if(ugr>=e*k&&ugr<e*(k+1)&&Umin<0){ j--; break;}
    else if(igr>=e*k&&igr<e*(k+1)){ j--; break;}

    }

    if (igr>=Umax&&Umin>=0) Zm=Ymax-j*masht;
    else if (igr<=Umin&&Umin>=0) Zn=Ymax-j*masht;
    else if (igr>=Umax&&Umin<0) Zm=Ymax-(j-Umin)*masht;
    else if (igr<=Umin&&Umin<0) Zn=Ymax-(j-Umin)*masht;  
    if(Umin<0&&igr<0&&m!=1)
    lineto(Indx+i*shtx,Ymax+j*masht+Umin*masht);
    if(Umin<0&&igr<0&&m==1){
    lineto(Indx+i*shtx,Ymax-j*masht);m=0;}
    else if(Umin<0&&igr>=0)
    lineto(Indx+i*shtx,Ymax-j*masht+Umin*masht);
    else lineto(Indx+i*shtx,Ymax-j*masht);

    }


    //ïîñòðîåíèå îñåé
    setlinestyle(SOLID_LINE,0,THICK_WIDTH);
    setcolor(BLUE);
    line(Indx,Ind,Indx,Ymax);
    line(Indx,Ymax+2,Xmax,Ymax+2);

    for(int k=1;k<=n;k++)
    line(Indx+k*2*shtx ,Ymax-1,Indx+k*2*shtx ,Ymax+5);


    //ïîäïèñü çíà÷åíèé

    setbkcolor(BLACK);
    setcolor(WHITE);
    double dT,u;
    char stu[10];
    for ( int k=0;k<10000;k++)
    if(fabs(Zm-Zn)<=(n)*k){ dy=k-1;break;}
    for(int k=-1000;k<1000;k++)          //ïî îñè  Y
    {       if (Umin<0) u=(Ymax+masht*Umin-(Zm+15*k))*e/masht;
    else u=(Ymax-(Zm+15*k))*e/masht;
    sprintf(stu,"%4.1f",u);
    if(Zm+15*k>=Ymax) break;
    else if (Zm+15*k>Ind)
    {
    outtextxy(0,Zm+15*k-10,stu);
    setcolor(BLUE);
    line(Indx-3,Zm+15*k,Indx+3,Zm+15*k);
    setcolor(WHITE);
    }
    }


    dT=fabs(tk-tn)/(n-1);
    for(int k=0;k<n;k++)              // ïî îñè Õ
    {
    u=pt[0]+2*dT*k;
    sprintf(stu,"%4.1f",u);
    if (Indx+k*2*shtx-20>=Xmax ) break;
    outtextxy(Indx+k*2*shtx-20 ,Ymax+6,stu);
    }}

    char eu[20];
    sprintf(eu,"òî÷íîñòü ãðàôèêà  %.2f",e);
    outtextxy(80,8,eu);
    getch();
    closegraph();

    }    


    // îñíîâíîå òåëî ïðîãðàììû

    int main()
    {


    float t[Nmax],Uvx[Nmax],Uvix[Nmax];
    float *pmast=&t[0], *pmasUvx =&Uvx[0], *pmasUvix=&Uvix[0];

    int n,i=1;

    while(i!=0)
    {
    switch(menu())
    {

    case '1':
    n=N;
    inputt(t,N);
    inputUvx(t,Uvx,N);
    inputUvix(Uvx,Uvix,N);
    tabl();
    output(N,t,Uvx,Uvix);
    getche();
    break;

    case '2':
    inputt(t,N);
    inputUvx(t,Uvx,N);
    inputUvix(Uvx,Uvix,N);


    SaveFile(t,"C:\\KURS\\t.txt",N);
    SaveFile(Uvx,"C:\\KURS\\Uvx.txt",N);
    SaveFile(Uvix,"C:\\KURS\\Uvix.txt",N);

    printf("Zapis' v faili proshla uspeshno! USPEH!\n");
    getche();
    break;



    case '3':
    pogreshnost(t,Uvix);
    getche();
    break;

    case '4':
    n=N;
    inputt(pmast,N);
    inputUvx(pmast,Uvx,N);
    inputUvix(pmasUvx,pmasUvix,N);
    graphic(pmast,pmasUvx,N);
    graphic(pmast,pmasUvix,N);
    graphic(pmasUvx,pmasUvix,N);

    getche();
    break;


    case '5':
    i = 0;
    break;   

    }
    }


    getche();

    return 1;
    }
     
  2. Pasha

    Pasha Гость

    Это под броланд C++ 3.1? Зайди Options | Linker | Libraries, включи там Graphics library.
     
  3. DaaGER

    DaaGER Гость

    У меня нет борланда! Я же писал "Пишу в Dec-C++".
     
  4. Pasha

    Pasha Гость

    Пиши на чем хочешь, но DETECT есть только в старых версиях Boland C++.
     
  5. DaaGER

    DaaGER Гость

    а вообще прога работать то будет?Просто мне очень надо!Если она функционирует,то мне этого вполне хватает,просто препод нас учит коряво,смесь функций из разных компиляторов.

    Помогите бедному студенту...
     
  6. Pasha

    Pasha Гость

  7. DaaGER

    DaaGER Гость

    СПАСИБО!!!!!!!!!!
     
Загрузка...
Похожие Темы - Курсач
  1. Fatality93
    Ответов:
    0
    Просмотров:
    1.374
  2. Musah
    Ответов:
    0
    Просмотров:
    970

Поделиться этой страницей