C MVS z DplotJr

0

Witam!
Mam do napisania program, który rysuję wykres kwadratowej w DPlotJr. Na początku pobiera on wcześniej współczynniki, a następnie rysuję wykres. Wszystko się kompiluje, jednak pojawia się błąd windowsowy.

Oto kod programu :

/**

  • \zadanie3.c
  • \Mateusz
  • \11 listopad 2013
    */

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <Windows.h>
#include "dplotlib.h"

double liczenieDelty(double a,double b,double c);
void wykres_dplot(struct Dane_funkcji wspolczynnik);
struct Dane_funkcji pobierz_wspolczynnik();
struct Dane_funkcji liczenie_przedzialow(struct Dane_funkcji wspolczynnik);
struct Dane_funkcji liczenie_interwalu(struct Dane_funkcji wspolczynnik);
struct Dane_funkcji generuj_punkty(struct Dane_funkcji wspolczynnik);
struct Dane_funkcji {
double a,b,c;
double poczatek_przedzialu;
double koniec_przedzialu;
double ilosc; //liczba próbek
double dx; // interwal - odleglosc pomiedzy probkami
double *probki; // wzkaźnik na tablicę dynamiczną przechowujący wspólrzedne y funkcji y = ax^2 + bx + c
double *argumenty;
};
int __stdcall DPlot_Plot8(DPLOT *DPlot, double *array1, double *array2, LPSTR commands);

int main(){
struct Dane_funkcji wspolczynnik;

wspolczynnik=pobierz_wspolczynnik();
liczenie_przedzialow(wspolczynnik);
printf("podaj ilość probek\n");
scanf("%lf",wspolczynnik.ilosc);
liczenie_interwalu(wspolczynnik);							//wywolanie funkcji licząca interwal
printf("dx rowna sie %lf\n", wspolczynnik.dx);
generuj_punkty(wspolczynnik);
free(wspolczynnik.probki);
free(wspolczynnik.argumenty);

system("PAUSE");
return 0;

}
double liczenieDelty(double a,double b,double c){
double delta;
delta=(bb)-(4a*c);
return delta;
}
struct Dane_funkcji pobierz_wspolczynnik(){

struct Dane_funkcji zwroc;

printf("Podaj współczynnik stojący przy x do kwadratu\n");
scanf("%lf",&zwroc.a);
printf("Podaj współczynnik stojący przy x\n");
scanf("%lf",&zwroc.b);
printf("Podaj liczbę wolnostojącą w równaniu\n");
scanf("%lf",&zwroc.c);
return(zwroc);

}
/**
* funkcja ta liczy zakres przedziału próbkowania, nastepnie przekazuje go do zmiennej strukturalnej o nazwie: zakres
* \param pierwiastek1
* pierwiastek 1. rownania kwadratowego
* \param pierwiastek2
* pierwiastek 2. rownania kwadratowego
* \param temp
* umożliwia przesortowanie pierwiastków rownania x1 i x2
* \return w tej funkcji następuje zwrocenie danych poczatek_przedzialu i koniec_przedzialu
*/
struct Dane_funkcji liczenie_przedzialow(struct Dane_funkcji wspolczynnik) //funkcja licząca przedziały
{
double temp;

double delta=liczenieDelty(wspolczynnik.a,wspolczynnik.b,wspolczynnik.c);
double pierwiastek1,pierwiastek2,ekstremum;
struct Dane_funkcji dane;
if(delta>0){
pierwiastek1=((-wspolczynnik.b-(sqrt(delta)))/(2*wspolczynnik.a));
pierwiastek2=((-wspolczynnik.b+(sqrt(delta)))/(2*wspolczynnik.a));

if(pierwiastek2 < pierwiastek1) 
	{
		
		temp = pierwiastek1;
		pierwiastek1 = pierwiastek2;
		pierwiastek2 = temp;
	}	

dane.poczatek_przedzialu=pierwiastek1-(0.2*(pierwiastek2-pierwiastek1));
dane.koniec_przedzialu=pierwiastek2+(0.2*(pierwiastek2-pierwiastek1));
printf("pierwiastek 1 to : %lf\n pierwiastek 2 to : %lf\n",pierwiastek1,pierwiastek2);}

else if(delta==0){
ekstremum=-(wspolczynnik.b)/(2*wspolczynnik.a);
dane.poczatek_przedzialu=ekstremum-10;
dane.koniec_przedzialu=ekstremum+10;}

else {
ekstremum=-(wspolczynnik.b)/(2*wspolczynnik.a);
dane.poczatek_przedzialu=ekstremum-10;
dane.koniec_przedzialu=ekstremum+10;}
printf("poczatek przedzialu to %lf\n, koniec przedzialu to : %lf\n",dane.poczatek_przedzialu,dane.koniec_przedzialu);
return (dane);

}
/**
* Zlicza interał - okres próbkowania
* \param dane wspolczynnik.dx
* \return w tej funkcji następuje zwrocenie wartości interwału i przypisanie jej do zmiennej strukturalnej
/
struct Dane_funkcji liczenie_interwalu(struct Dane_funkcji wspolczynnik){ //funkcja liczaca interwal
wspolczynnik.dx=(wspolczynnik.koniec_przedzialu-wspolczynnik.poczatek_przedzialu)/(wspolczynnik.ilosc);
printf("%lf\n %lf\n %lf\n",wspolczynnik.koniec_przedzialu,wspolczynnik.poczatek_przedzialu,wspolczynnik.ilosc);
return (wspolczynnik); //zwracanie danych do struktury
}
/
*
* Zlicza wpolrzedne x i probki y
* \param wspolrzedne.probki
* wspolrzedna y punktu
*\param wsporzedne.argumenty
*wsporzedna x
* \return w tej funkcji następuje zwrocenie do struktury danych przechowywanych w tablicy - probki i argumenty
*/
struct Dane_funkcji generuj_punkty(struct Dane_funkcji wspolczynnik){

int punkt; 			//zmienna do interowanie w pętli
double x;

wspolczynnik.probki=(double*)malloc(sizeof(double)*wspolczynnik.ilosc);
wspolczynnik.argumenty=(double*)malloc(sizeof(double)*wspolczynnik.ilosc);

for(punkt=0;punkt<wspolczynnik.ilosc;++punkt) {
		x=wspolczynnik.poczatek_przedzialu + punkt*(wspolczynnik.dx);		
		wspolczynnik.probki[punkt]=wspolczynnik.a*x*x+wspolczynnik.b*x+wspolczynnik.c;
		wspolczynnik.argumenty[punkt]=wspolczynnik.poczatek_przedzialu+punkt*(wspolczynnik.dx);
		printf("%.2lf\t %.2lf\n",x,wspolczynnik.probki[punkt]);}
		

return (wspolczynnik);

}
/**
* Wywołuje wykres w programie DPlotJr
* \param wspolrzedne.probki
* wspolrzedna y punktu
*\param wsporzedne.argumenty
*wsporzedna x
*
*/
void wykres_dplot(struct Dane_funkcji wspolczynnik){

DPLOT DPlot;
memset(&DPlot,0,sizeof(DPlot));			//wypełnia obszar pamięci określonym znakiem

DPlot.Version			=DPLOT_DDE_VERSION;
DPlot.DataFormat		=DATA_XYXY;
DPlot.MaxCurves 		=1;
DPlot.MaxPoints			=wspolczynnik.ilosc;
DPlot.NumCurves			=1;
DPlot.Scale				=SCALE_LINEARX_LINEARY;
DPlot.LegendX			=0.05f;
DPlot.LegendY			=0.05f;
DPlot.NP[0]				=wspolczynnik.ilosc;
DPlot.LineType[0]		=LINESTYLE_LONGDASH;
DPlot.SymbolType[0]		=SYMBOLSTYLE_NONE;
strcpy(DPlot.Legend[0],"wykresy");
strcpy(DPlot.Legend[1],"parabola");
strcpy(DPlot.Title[0],"Dane wysłane do DPlot przez DPLOTLIB.DLL");
strcpy(DPlot.Label[0],"ax^2+bx+c");
strcpy(DPlot.XAxis,"x");
strcpy(DPlot.YAxis,"y");

DPlot_Plot8(&DPlot,wspolczynnik.probki,wspolczynnik.argumenty,"[Caption(\"Wykres funkcji kwadratowej\")]");

}

A to jeszcze biblioteka, której używam
/* Structure used to send data to DPLOT via DDE */

#define DPLOT_DDE_VERSION 4
/* Version 2 of the DPLOT structure is obsolete and not recommended for use unless it is
imperative that your program be compatible with DPlot versions older than 1.8.
Version 3 of the DPLOT structure allows up to 100 curves and increases the number of allowable
characters in the legend from 40 to 80 characters each, number of characters in
curve labels from 5 to 40 characters each.
Version 4 of the DPLOT structure adds a 4th title line and increases the number of allowable
characters in the title lines and X, Y axis labels from 80 to 200 characters.
Version 2.1 or later of DPlot or DPlot Jr is required.
*/

#if DPLOT_DDE_VERSION<3

#define MAXC 20

typedef struct tagDPLOT
{
DWORD Version; // Caller must set this to DPLOT_DDE_VERSION
DWORD hwnd; // handle of client application window
// (Use DWORD rather than HWND)
DWORD DataFormat; // XY pairs, DX and Y, etc.
DWORD MaxCurves; // maximum number of curves (must be <= 20)
// = NX for DataFormat = DATA_3D
// ignore for DataFormat = DATA_3DR
DWORD MaxPoints; // maximum number of points/curve
// = NY for DataFormat = DATA_3D
// = 3 * number of points for DATA_3DR
DWORD NumCurves; // actual number of curves, always 1 for
// DATA_3D or DATA_3DR
DWORD Scale; // scaling code (Linear, Log, etc.)
float LegendX; // left coord of legend, expressed as a ratio
// of plot size (0->1)
float LegendY; // top coord of legend
DWORD NP[MAXC]; // actual number of points in each curve;
// cannot exceed MaxPoints.
// For DATA_3DR files, return number of nodes in NP[0]
DWORD LineType[MAXC]; // line types (see codes below)
DWORD SymbolType[MAXC]; // symbol types (see codes below)
DWORD SizeofExtraInfo; // Extra information following X,Y data
char Legend[MAXC+1][40];// Legend[0] is the caption for the legend.
// Legend[n] is the legend for the n'th curve.
char Label[MAXC][5]; // Strings displayed beside the last data point
// in a curve.
char Title[3][80]; // Three title lines.
char XAxis[80]; // X Axis label.
char YAxis[80]; // Y Axis label.
} DPLOT;

#else

#define MAXC 100

#if DPLOT_DDE_VERSION==3

typedef struct tagDPLOT
{
DWORD Version; // Caller must set this to DPLOT_DDE_VERSION
DWORD hwnd; // handle of client application window
// (Use DWORD rather than HWND)
DWORD DataFormat; // XY pairs, DX and Y, etc.
DWORD MaxCurves; // maximum number of curves (must be <= 100)
// = NX for DataFormat = DATA_3D
// ignore for DataFormat = DATA_3DR
DWORD MaxPoints; // maximum number of points/curve
// = NY for DataFormat = DATA_3D
// = 3 * number of points for DATA_3DR
DWORD NumCurves; // actual number of curves, always 1 for
// DATA_3D or DATA_3DR
DWORD Scale; // scaling code (Linear, Log, etc.)
float LegendX; // left coord of legend, expressed as a ratio
// of plot size (0->1)
float LegendY; // top coord of legend
DWORD NP[MAXC]; // actual number of points in each curve;
// cannot exceed MaxPoints.
// For DATA_3DR files, return number of nodes in NP[0]
DWORD LineType[MAXC]; // line types (see codes below)
DWORD SymbolType[MAXC]; // symbol types (see codes below)
DWORD SizeofExtraInfo; // Extra information following X,Y data
char Legend[MAXC+1][80];// Legend[0] is the caption for the legend.
// Legend[n] is the legend for the n'th curve.
char Label[MAXC][40]; // Strings displayed beside the last data point
// in a curve.
char Title[3][80]; // Three title lines.
char XAxis[80]; // X Axis label.
char YAxis[80]; // Y Axis label.
} DPLOT;

#endif
#if DPLOT_DDE_VERSION==4

typedef struct tagDPLOT
{
DWORD Version; // Caller must set this to DPLOT_DDE_VERSION
DWORD hwnd; // handle of client application window
// (Use DWORD rather than HWND)
DWORD DataFormat; // XY pairs, DX and Y, etc.
DWORD MaxCurves; // maximum number of curves (must be <= 100)
// = NX for DataFormat = DATA_3D
// ignore for DataFormat = DATA_3DR
DWORD MaxPoints; // maximum number of points/curve
// = NY for DataFormat = DATA_3D
// = 3 * number of points for DATA_3DR
DWORD NumCurves; // actual number of curves, always 1 for
// DATA_3D or DATA_3DR
DWORD Scale; // scaling code (Linear, Log, etc.)
float LegendX; // left coord of legend, expressed as a ratio
// of plot size (0->1)
float LegendY; // top coord of legend
DWORD NP[MAXC]; // actual number of points in each curve;
// cannot exceed MaxPoints.
// For DATA_3DR files, return number of nodes in NP[0]
DWORD LineType[MAXC]; // line types (see codes below)
DWORD SymbolType[MAXC]; // symbol types (see codes below)
DWORD SizeofExtraInfo; // Extra information following X,Y data
char Legend[MAXC+1][80];// Legend[0] is the caption for the legend.
// Legend[n] is the legend for the n'th curve.
char Label[MAXC][40]; // Strings displayed beside the last data point
// in a curve.
char Title[4][200]; // Four title lines.
char XAxis[200]; // X Axis label.
char YAxis[200]; // Y Axis label.
} DPLOT;
#endif
#endif

// DataFormat graph-type and data organization codes
#define DATA_XYXY 0 // One or more sets of X,Y data
#define DATA_DXY 1 // One or more X,Y curves. Constant spacing in X and same number of points in all curves.
#define DATA_XYYY 2 // One or more X,Y curves. All curves have the same X values.
#define DATA_3D 3 // Z values on a rectangular grid
#define DATA_3DR 4 // Random X,Y,Z values
#define DATA_IMAGE 5 // Used only by DPlot - there's no way to SEND DPlot an image
#define DATA_1D 6 // One or more groups of Y values.
#define DATA_3DS 7 // 3D scatter plot
#define DATA_4D 8 // 4D surface plot
#define DATA_4DS 9 // 4D scatter plot
// Scale codes:
#define SCALE_LINEARX_LINEARY 1
#define SCALE_LINEARX_LOGY 2
#define SCALE_LOGX_LINEARY 3
#define SCALE_LOGX_LOGY 4
#define SCALE_TRIPARTITE 5
#define SCALE_LINEARX_PROBABILITY 6
#define SCALE_GRAINSIZE_DIST 7
#define SCALE_POLAR 8
#define SCALE_BARCHART 9
#define SCALE_LOGX_PROBABILITY 10
#define SCALE_PROBX_LINEARY 11
#define SCALE_PROBX_LOGY 12
#define SCALE_PROBX_PROBY 13
#define SCALE_TRIANGLE_PLOT 14 // X and Y specified, Z inferred from X+Y+Z=100
#define SCALE_N185 15 // N1.85 hydraulic scale
#define SCALE_MERCATOR 16 // Mercator projection
// Unit-specific scaling codes ... combine with above values using OR operator
#define UNITS_DEFAULT 0
#define UNITS_TRIPARTITE_INCHES UNITS_DEFAULT // Velocity (Y) in inches/sec
#define UNITS_TRIPARTITE_FEET 0x00000100L // feet/sec
#define UNITS_TRIPARTITE_MILLIMETERS 0x00000200L // mm/sec
#define UNITS_TRIPARTITE_CENTIMETERS 0x00000300L // cm/sec
#define UNITS_TRIPARTITE_METERS 0x00000400L // meters/sec
#define UNITS_GRAINSIZE_MILLIMETERS UNITS_DEFAULT // Grain sizes (X) in mm
#define UNITS_GRAINSIZE_INCHES 0x00000100L // inches
#define UNITS_POLAR_RADIANS UNITS_DEFAULT // Rotation (X) in radians
#define UNITS_POLAR_DEGREES 0x00000100L // degrees
#define UNITS_USERDEFINED 0x00007F00L
// Line styles:
#define LINESTYLE_NONE 0
#define LINESTYLE_SOLID 1
#define LINESTYLE_LONGDASH 2
#define LINESTYLE_DOTTED 3
#define LINESTYLE_DASHDOT 4
#define LINESTYLE_MEDDASH 5
#define LINESTYLE_DASHDOTDOT 6
#define LINESTYLE_DASHDOTDOTDOT 7
// Symbol styles (search DPLOT.HLP for "SymbolType" for other symbol types)
#define SYMBOLSTYLE_NONE 0
#define SYMBOLSTYLE_DOT 1
#define SYMBOLSTYLE_CROSS 2
#define SYMBOLSTYLE_ASTERISK 3
#define SYMBOLSTYLE_X 4
#define SYMBOLSTYLE_SQUARE 5
#define SYMBOLSTYLE_DIAMOND 6
#define SYMBOLSTYLE_TRIANGLE 7
#define SYMBOLSTYLE_OCTAGON 8
#define SYMBOLSTYLE_ITRIANGLE 9
#define SYMBOLSTYLE_HEXAGON 10
#define SYMBOLSTYLE_PENTAGON 11
#define SYMBOLSTYLE_STAR 12
#define SYMBOLSTYLE_FILL 0x00000100L // May be combined with styles above

Dodam jeszcze, że biblioteki dynamiczna i statyczna od programu DPlot są skopiowane do właściwych folderów.
Proszę o pomoc i z góry dziękuję .

0

A od czego masz znaczniki code?

0

Ta biblioteka została przeze mnie znaleziona w interencie i tylko lekko zmodyfikowana przy parametrach funkcji na samym początku, więc nie wiem co oznaczają poszczególne składnie. Mam nadzieję, że nie przeszkodzi to w uzyskaniu pomocy, ponieważ naprawdę jestem w kropce.
pozdrawiam
Mateusz

1 użytkowników online, w tym zalogowanych: 0, gości: 1