Лабораторные работы по информатике
  • Регистрация
1 1 1 1 1 1 1 1 1 1 Рейтинг 0.00 (0 Голоса)

Кафедра КиВТ.

 

Лабораторная работа №1 «Разработка программных средств автоматизации проектирования ЭВМ»

 

1.  Цель работы: изучить способы хранения информации об ориентированном графе в программах, научиться выполнять простейшие операции над графами.

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

3.  Вариант задания: сформировать список вершин имеющих четное количество исходов.

4.  Текст программы

//---------------------------------------------------------------------------

#include <vcl. h>

#include <dir. h>

#include <dstring. h>

#pragma hdrstop

#include "Max_Lash_Lab1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "CSPIN"

#pragma resource "*.dfm"

TForm1 *Form1;

int fl;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

Kolvo->Value=2;

Matrix->ColCount=3;

Matrix->RowCount=3;

Ver->ColCount=2;

Ver->RowCount=2;

for(int i=1;i<=Kolvo->Value;i++)

for(int j=1;j<=Kolvo->Value;j++)

Matrix->Cells[i][j]=IntToStr(0);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

int sum[50];

int i, j, f;

f=0;

for(int j=1;j<=Kolvo->Value;j++)

for(int i=1;i<=Kolvo->Value;i++)

{

if ((Matrix->Cells[i][j]!=1) & (Matrix->Cells[i][j]!=0))

{

ShowMessage(AnsiString("В ячейке ") +IntToStr(j) + AnsiString(",") + IntToStr(i) + AnsiString(" некорректное значение"));

ShowMessage(AnsiString("В ячейках матрицы могут быть только нули или единицы "));

f++;

break;

}

if (Matrix->Cells[j][j]!=0)

{

ShowMessage(AnsiString("В ячейке ") +IntToStr(j) + AnsiString(",") + IntToStr(j) + AnsiString(" некорректное значение"));

ShowMessage(AnsiString("На главной диагонали должны быть только нули "));

f++;

break;

}

}

if(f==0)

{

for(int j=0;j<=Kolvo->Value;j++)

Ver->Cells[1][j]="";

for(int j=0;j<=Kolvo->Value;j++)

sum[j]=0;

for(int j=1;j<=Kolvo->Value;j++)

for(int i=1;i<=Kolvo->Value;i++)

sum[j-1]=sum[j-1]+StrToInt(Matrix->Cells[i][j]);

for(int j=1;j<=Kolvo->Value;j++)

if ((sum[j-1] % 2==0) & (sum[j-1]!=0))

Ver->Cells[1][j-1]=IntToStr(sum[j-1]);

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Exit1Click(TObject *Sender)

{

Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::New1Click(TObject *Sender)

{

Kolvo->Value=2;

Matrix->ColCount=3;

Matrix->RowCount=3;

Ver->ColCount=2;

Ver->RowCount=2;

for(int j=1;j<=Kolvo->Value;j++)

for(int i=1;i<=Kolvo->Value;i++)

{

Matrix->Cells[j][i]=IntToStr(0);

Matrix->Cells[j][0]=j;

Matrix->Cells[0][i]=i;

Ver->Cells[1][j-1]="";

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::KolvoChange(TObject *Sender)

{

for(int i=1;i<=Kolvo->Value;i++)

{

Matrix->ColCount=Kolvo->Value+1;

Matrix->RowCount=Kolvo->Value+1;

Matrix->Cells[i][0]=i;

Matrix->Cells[0][i]=i;

Ver->RowCount=Kolvo->Value;

Ver->Cells[0][i-1]=i;

}

for(int i=1;i<=Kolvo->Value;i++)

for(int j=1;j<=Kolvo->Value;j++)

Matrix->Cells[i][j]=IntToStr(0);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Open1Click(TObject *Sender)

{

int myFileHandle;

int myFileLength;

int myBytesRead;

char *pszBuffer;

if (OpenDialog1->Execute())

{

Caption = "Lash_Os_Lab № 0" + OpenDialog1->FileName;

myFileHandle = FileOpen(OpenDialog1->FileName, fmOpenRead);

myFileLength = FileSeek(myFileHandle,0,2);

FileSeek(myFileHandle,0,0);

pszBuffer = new char[myFileLength+1];

myBytesRead = FileRead(myFileHandle, pszBuffer, myFileLength);

FileClose(myFileHandle);

Kolvo->Value=StrToInt(pszBuffer[0]);

Matrix->ColCount=Kolvo->Value+1;

Matrix->RowCount=Kolvo->Value+1;

Ver->ColCount=2;

Ver->RowCount=Kolvo->Value;

for (int i=1; i<=Kolvo->Value;i++)

{

Matrix->Cells[i][0]=i;

Matrix->Cells[0][i]=i;

Ver->Cells[0][i-1]=i;

}

int i=1,j=1,k=2;

while (i<=StrToInt(pszBuffer[0]))

{

while(j<=StrToInt(pszBuffer[0]))

{

if (isdigit(pszBuffer[k]))

{

Matrix->Cells[j][i]=StrToInt(pszBuffer[k]);

j++;

}

k++;

}

i++;

j=1;

}

delete [] pszBuffer;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Save1Click(TObject *Sender)

{

char szFileName[MAXFILE+4];

int iFileHandle;

AnsiString s;

s=IntToStr(Kolvo->Value);

if (SaveDialog1->Execute())

{

if (FileExists(SaveDialog1->FileName))

{

fnsplit(SaveDialog1->FileName. c_str(), 0, 0, szFileName, 0);

strcat(szFileName, ".BAK");

RenameFile(SaveDialog1->FileName, szFileName);

}

iFileHandle = FileCreate(SaveDialog1->FileName);

FileWrite(iFileHandle, s. c_str(), s. Length());

FileWrite(iFileHandle, "\n", 2);

for (int i=1;i<Kolvo->Value+1;i++)

{

for (int j=1;j<Kolvo->Value+1;j++)

{

FileWrite(iFileHandle, Matrix->Cells[j][i].c_str(), Matrix->Cells[j][i].Length());

FileWrite(iFileHandle, " ", 1);

}

FileWrite(iFileHandle, "\n", 2);

}

FileClose(iFileHandle);

}

}

//---------------------------------------------------------------------------

5.  Вывод: в ходе лабораторной работы были изучены способы хранения информации об ориентированном графе в программах, выполнены простейшие операции над графами. Была составлена программа, реализующая формирование списка вершин, имеющих четное количество исходов.

Добавить комментарий


Защитный код
Обновить

По темам:

История Украины

Культурология

Высшая математика

Информатика

Охотоведение

Статистика

География

Военная наука

Английский язык

Генетика

Разное

Технологиеские темы

Украинский язык

Филология

Философия

Химия

Экология

Социология

Физическое воспитание

Растениевосдство

Педагогика

История

Психология

Религиоведение

Плодоводство

Экономические темы

Бухгалтерские темы

Маркетинг

Иностранные языки

Ветеринарная медицина

Технические темы

Землеустройство

Медицинские темы

Творчество

Лесное и парковое хозяйство