Формирование графовой модели заданного фрагмента принципиальной электрической схемы

 

Аннотация


В данной пояснительной записке приведено описание алгоритма и исходного кода программы формирования графовой модели заданного фрагмента принципиальной электрической схемы. Разработаны схемы алгоритмов решения задачи. В среде Microsoft Visual Studio 2005 (C++) разработана и отлажена программа, реализующая представленные алгоритмы. Также представлены результаты решения контрольных примеров, выполненные с помощью разработанной программы.

В приложении приведён текст программы.

графовая модель программа

Содержание


1.Описание программы

.1Общие сведения

.2Функциональное назначение

.3Описание логической структуры

.4Cтруктурная схема основной программы

.5Алгоритм функции vvod()

.6 Алгоритм функции int **matr()

.Описание контрольного примера

Приложение


1. Описание программы


.1 Общие сведения


Программа формирования графовой модели заданного фрагмента принципиальной электрической схемы написана в среде Microsoft Visual Studio 2005.

Программа имеет имя «PraktikaDasha».

Программа запускается на выполнение при помощи Visual Studio 2005 C++, в случае же присутствия исполняемого файла можно произвести запуск из операционной системы Windows.


.2 Функциональное назначение


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

Программа выполняет следующие функции:

. Чтение списка по цепям из представленного текстового файла.

. Формирование списка по цепям данного графа (с использованием динамической структуры - линейного списка)

. Формирование и вывод матрицы свяхности.

. Рисование графовой модели (цепь-дерево) заданного фрагмента.


.3 Описание логической структуры


Программа разбита на отдельные функциональные части - подпрограммы, которые распределяются по отдельным уровням иерархии. Каждая из подпрограмм решает только свою небольшую задачу по преобразованию данных, что позволяет упростить процесс написания и отладки программы в целом. Далее приводится описания назначения всех функций.

Функция CepCont *vvod_file (char file_name [ ]) позволяет выбрать файл и исходными данными и сформировать линейный динамический список.

Функция void vivod_spis(CepCont *st, HWND hwndEdit) выводит полученный список по цепям на экран.

Функция int kol_elem(CepCont *st) подсчитывает количество элементов.

Функция void del_matr(int **matr, int k) удаляет динамическую матрицу.

Функция int **memory (int k) выделяет память под динамическую матрицу.

Функция int **form_matr(CepCont *st, int k) преобразовывает список в матрицу.

Функция void vivod_matr (int **matr, int k, HWND hwndEdit) выводит полученную матрицу связности на экран.

Функция void save_matr(char file_name [ ], int **matr, int k) сохраняет матрицу в файл.

Функция void del_spis(CepConrt *BegSpis) удаляет динамический список.

Функция MyDlgProc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) обработка сообщений диалога.


1.4 Cтруктурная схема основной программы


























1.5 Алгоритм функции vvod():






























1.6 Алгоритм функции int **matr()

























2. Описание контрольного примера


Дана схема варианта №12:



Составим входное описание заданной схемы в виде списка по цепям:


3

1

1

3


2

1

2


2

2

1


4

3

2

2

1


2

3

1


3

2

1

5


2

3

2


3

2

3

4

По входному описанию схемы сформируем матрицу связности


1 1 0 0 0 1

0 1 0 0 0 1

1 0 1 1 0 0

0 1 0 0 2 0

0 1 0 0 1 0

0 0 2 1 0 2

1 0 0 0 2 0


Построим граф:



Мы получили верные результаты, что позволяет нам сделать вывод о правильной реализации алгоритма в программе.


Приложение


#include <stdio.h>

#include <windows.h>

#include "resource.h"

#include <direct.h>

#include <cmath>file_name[MAX_PATH+1], customfilter[100];**matr, k, flag;of, sf;CepCont

{ce, kk;

CepCont *adres;

};*BegSpis=NULL;*vvod_file(char file_name[])

{ ce, kk;*f_in;_in=fopen(file_name,"r");(f_in!=NULL)

{*st=NULL;

CepCont *sp=NULL;

while(fscanf(f_in,"%d%d",&ce,&kk)==2)

{=new CepCont;(BegSpis==NULL) BegSpis=st;sp->adres=st;=st;

st->ce=ce;>kk=kk;

}

if(sp!=NULL) sp->adres=NULL;(f_in);

return BegSpis;

}

{

return NULL;

}

}vivod_spis(CepCont *st,HWND hwndEdit)

{n, i;buf[25];(st!=NULL)

{(buf, "Цепь%d\tКонтактов%d", st->ce, st->kk);(hwndEdit,EM_REPLACESEL,0,(LPARAM)buf);(hwndEdit,EM_REPLACESEL,0,(LPARAM)"\r\n");=st->kk;=st->adres;(i=0; i<n; i++)

{(buf, "Элемент%d Контакт%d", st->ce, st->kk);(hwndEdit, EM_REPLACESEL, 0,(LPARAM)buf);(hwndEdit, EM_REPLACESEL, 0,(LPARAM)"\r\n");=st->adres;

}(hwndEdit, EM_REPLACESEL, 0,(LPARAM)"\r\n");

}

}kol_elem(CepCont *st)

{max=0, i, n;(st!=NULL)

{=st->kk;=st->adres;(i=0; i<n; i++)

{(st->ce>max) max=st->ce;=st->adres;

}

}max;

}del_matr(int **matr, int k)

{(int i=0; i<k; i++)[]matr[i];[]matr;

}**memory(int k)

{**matr=new int *[k];(matr==NULL) return NULL;(int i=0; i<k; i++)

{[i]=new int [k];(matr[i]==NULL)

{_matr(matr, i);NULL;

}

}matr;

}**form_matr (CepCont *st, int k)

{i, j, n;**matr=memory(k);*sp;(matr==NULL) return NULL;(i=0; i<k; i++)(j=0; j<k; j++)[i][j]=0;(st!=NULL)

{=st->kk;=st->adres;(n!=0)

{(i=0; i<n-1; i++)

{=st;=st->adres;(sp->ce!=st->ce)

{[sp->ce-1][st->ce-1]++;[st->ce-1][sp->ce-1]++;

}

}=st->adres;

}

}matr;

}vivod_matr(int **matr, int k,HWND hwndEdit)

{buf[256];(int i=0;i<k;i++)

{(int j=0;j<k;j++)

{(buf,"%d ",matr[i][j]);(hwndEdit,EM_REPLACESEL,0,(LPARAM)buf);

}(hwndEdit,EM_REPLACESEL,0,(LPARAM)"\r\n");

}

}save_matr(char file_name[], int **matr, int k)

{*f_out;_out=fopen(file_name,"w");(f_out!=NULL)

{(f_out,"Матрица связности\n");

for(int i=0;i<k;i++)

{(int j=0;j<k;j++)(f_out,"%d ", matr[i][j]);(f_out, "\n");

}(f_out);

}

}del_spis(CepCont *BegSpis)

{*sp=NULL;(BegSpis!=NULL)

{=BegSpis->adres;BegSpis;=sp;

}

}CALLBACK MyDlgProc(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp)

{double pi=3.14159;(msg)

{WM_INITDIALOG:break;WM_COMMAND:(LOWORD(wp))

{IDCANCEL:

{_spis;_matr;EndDialog(hwnd,IDCANCEL);

}IDOPEN:

{initialdir[MAX_PATH+1];(initialdir, MAX_PATH+1);(&of, 0, sizeof(of));.lStructSize=sizeof(of);.lpstrFilter="Текстовые файлы (*.txt)\0*.txt\0" "Все файлы (*.*)\0*.*\0"; .nFilterIndex=1;.lpstrCustomFilter=customfilter;.nMaxCustFilter=100;_name[0]='\0';.lpstrFile=file_name;.nMaxFile=MAX_PATH+1;.lpstrInitialDir=initialdir;.lpstrTitle="Диалог открытия файла";(GetOpenFileName(&of)!=0)

{(GetDlgItem(hwnd,IDC_EDIT1),0);(GetDlgItem(hwnd,IDC_EDIT2),0);(hwnd, 0, 0);(BegSpis!=NULL)

{_spis(BegSpis);=NULL;

}(matr!=NULL)

{_matr(matr, k);=NULL;

}((BegSpis=vvod_file(file_name))==NULL)

{(hwnd, "Файл не существует, или содержит не верные данные", "Ошибка!", 0);

break;

}

};

}IDSPIS:

{(BegSpis!=NULL)

{(GetDlgItem(hwnd,IDC_EDIT1),0);_spis(BegSpis, GetDlgItem(hwnd,IDC_EDIT1));

}

else MessageBox(hwnd, "Не загружены исходные данные", "Ошибка!", 0);

break;

}IDMATRIX:

{(BegSpis!=NULL)

{(matr==NULL)

{=kol_elem(BegSpis);=form_matr(BegSpis, k);_matr(matr , k, GetDlgItem(hwnd,IDC_EDIT2));

}

}MessageBox(hwnd, "Не загружены исходные данные", "Ошибка!", 0);

break;

}IDGRAF:

{ (matr!=NULL)

{=1;rect;.left=150;.top=50;.right=550;.bottom=400;(hwnd,&rect,1);

}MessageBox(hwnd, "Не сформирована матрица", "Ошибка!", 0);;

}IDSAVE:

{initialdir[MAX_PATH+1];(initialdir, MAX_PATH+1);(&of, 0, sizeof(of));.lStructSize=sizeof(of);.lpstrFilter="Текстовые файлы (*.txt)\0*.txt\0" "Все файлы (*.*)\0*.*\0"; .nFilterIndex=1;.lpstrCustomFilter=customfilter;.nMaxCustFilter=100;_name[0]='\0';.lpstrFile=file_name;.nMaxFile=MAX_PATH+1;.lpstrInitialDir=initialdir;.lpstrTitle="Диалог сохранения файла";(GetSaveFileName(&sf)!=0) save_matr(file_name, matr, k);

else MessageBox(hwnd, "Не сформирована матрица", "Ошибка!", 0);

}: return 0;

}WM_PAINT:*xe, *ye, xc, yc, i, j; str[10];f;hdc;hpen,old_pen;hbrush,old_brush;ps;=BeginPaint(hwnd,&ps);((matr!=NULL)&&(flag==1))

{=new int [k];=new int [k];

SetBkMode(hdc,TRANSPARENT);=CreatePen(PS_SOLID,1,RGB(0,0,255));=CreateSolidBrush(RGB(255,0,0));=2*pi/k;(i=0;i<k;i++)

{[i]=150*cos(f*i)+360;[i]=150*sin(f*i)+230;

}_pen=(HPEN)SelectObject(hdc,hpen);_brush=(HBRUSH)SelectObject(hdc,hbrush);(i=0; i<k; i++)(j=0; j<k; j++)

{(matr[i][j]>0)

{(hdc, xe[i], ye[i], 0);(hdc, xe[j], ye[j]);(str, "%d", matr[i][j]);=(xe[i]+xe[j]-10)/2;=(ye[i]+ye[j]-10)/2;(hdc,xc,yc,str,1);

}

}(i=0;i<k;i++)

{(str,"%d",i+1);(hdc,xe[i]-20,ye[i]-20,xe[i]+20,ye[i]+20);(hdc,xe[i]-5,ye[i]-5,str,1);

}(hwnd,&ps);(hpen);(hbrush);[] xe, ye;

}EndPaint(hwnd,&ps);: return 0;

}1;

}WINAPI WinMain

(hInstance,hPrevInstance,lpCmdLine, nCmdShow)

{

DialogBox(0,MAKEINTRESOURCE(IDD_DIALOG),0,MyDlgProc);

}

1.


Аннотация В данной пояснительной записке приведено описание алгоритма и исходного кода программы формирования графовой модели заданного фрагмента принцип

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2018 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ