Програма зчитування даних з файлу

Розробка програми, яка зчитує із файлу координати вершин чотирикутників на мові програмування Borland C++. Вивід даних на екран: вершин та чотирикутників, у яких відстань між точками перетину їх діагоналей мінімальна та максимальна. Лістинг програми.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 14.03.2013
Размер файла 45,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Міністерство освіти і науки України

Вінницький державний технічний університет

КУРСОВА РОБОТА

з дисципліни

" Основи програмування та алгоритмічні мови ”

2002

Зміст

Анотація

Завдання

Опис методу вирішення задачі

Опис класів і їх членів

Лістинг програми

Лістинг вхідних і вихідних даних

Роздруківка графічних результатів роботи

Висновки

Список використаної літератури

Анотація

В даній курсовій роботі написано програму на мові програмування Borland C++. Ця програма читає із файлу координати вершин чотирикутників. Програма виводить їх на екран, а також виводить їхні діагоналі. Окремим кольором виводяться чотирикутники у яких відстань між точками перетину їх діагоналей мінімальна та максимальна. Потім використовуючи ці відстані програма будує кола з центрами в точці перетину діагоналей, і використовуючи ці відстані як радіуси. Також програма визначає чи ці кола перетинаються.

Написана програма має просте у використанні меню програма, а самі результати роботи відображаються в графічному режимі дисплея.

Завдання

У файлі задані координати вершин чотирикутників. Вивести на екран цi чотирикутники і їх дiагоналi. Окремим кольором вивести чотирикутники, У яких вiдстань мiж точками перетину їх діагоналей мiнiмальна та максимальна. Використовуючи цi вiдстанi як радiуси побудувати кола, беручи за центр точки перетину дiагоналей. Визначити чи кола перетинаються.

Опис методу вирішення задачі

Алгоритм вирішення задачі можна коротко записати так :

1. По черзі зчитуємо із файлу нас чотирикутники, і знаходимо відстань від центра, зчитаного до центрів інших.

2. Відображаємо чотирикутник із його діагоналями.

3. Якщо ця відстань являється більше max то змінюємо max на неї, і запам'ятовуємо у змінних max1, max2 номера чотирикутників між якими відстань „найбільша”

4. Аналогічно будемо знаходити і мінімальну відстань. Якщо відстань являється менше min то змінюємо min на неї, і запам'ятовуємо у змінних min1, min2 номера чотирикутників між якими відстань „мінімальна”.

5. Відображаємо знайдені чотирикутники іншим кольором.

6. Будуємо кола згідно умови і визначаємо чи вони перетинаються, про що виводимо відповідне повідомлення.

Зупинимось більш детально на методі знаходження точки перетину діагоналей, що є важливим моментом при розв'язанні задачі курсової роботи.

Рівняння прямої через дві точки, які задані координатами таке :

(x-x1)/(x2-x1)=(y-y1)/(y2-y1);

Виконавши прості перетворення, отримаємо :

Y=(x(y2-y1)-x1(y2-y1)+y1(x2-x1))/(x2-x1)

Позначимо через K, вираз (y2-y1)/(x2-x1); а через

b -- -x1(y2-y1)/(x2-x1)+y1.

Тоді вираз рівняння прямої прийме до стандартного вигляду :

Y=kx+b

Склавши два рівняння прямих на основі написаного, які проходять через діагоналі чотирикутника отримаємо координати центра чотирикутника:

X=(b2-b1)/(k1-k2);

Підставивши отримане значення в одне із рівнянь прямої отримаємо координату Y центра чотирикутника.

Відстань між двома точками знаходиться за формулою

Len=sqrt(pow(x2-x1,2)+pow(y2-y1,2));

Опис класів і їх членів

Клас chotir - описує об'єкт „чотирикутник” і має методи, які потрібні для вирішення поставленої задачі.

class chotir{

public:

int x1,y1,x2,y2,x3,y3,x4,y4;

chotir(int x11,int y11,int x22,int y22,int x33,int y33,int x44,int y44);

~chotir();

void draw(int c);

void centr(float *x,float *y);

float length(chotir b);

void spoluch(chotir b,int c);

};

int x1, y1, x2, y2, x3, y3, x4, y4 - координати вершин чотирикутників

chotir(int x11,int y11,int x22,int y22,int x33,int y33,int x44,int y44) - конструктор класу, задає координати вершин чотирикутника

~chotir() - деструктор

void draw(int c) - відображає чотирикутник на екрані

void centr(float *x,float *y) - знаходить центр чотирикутника

float length(chotir b) - знаходить відстань між центрами чотирикутників

void spoluch(chotir b,int c) - сполучає центри двох чотирикутників

Клас TCircle - описує об'єкт „коло” і має методи, які потрібні для вирішення поставленої задачі.

class TCircle{

public:

int x,y,r;

TCircle(int x1,int y1,int r1);

int peretin(TCircle k);

void draw(int c);

~TCircle();

};

int x,y,r - координати центра та радіус кола

TCircle(int x1,int y1,int r1) - конструктор, задає параметри кола

int peretin(TCircle k) - визначає чи два кола перетинаються між собою

void draw(int c) - відображає коло заданим кольором

~TCircle() - деструктор

Лістинг програми

Лістинг основної програми kurs.cpp

#include <stdio.h>

#include <graphics.h>

#include <conio.h>

#include <math.h>

#include <string.h>

#include <process.h>

class chotir{

public:

int x1,y1,x2,y2,x3,y3,x4,y4;

chotir(int x11,int y11,int x22,int y22,int x33,int y33,int x44,int y44);

~chotir();

void draw(int c);

void centr(float *x,float *y);

float length(chotir b);

void spoluch(chotir b,int c);

};

chotir::chotir(int x11,int y11,int x22,int y22,

int x33,int y33,int x44,int y44)

{

x1=x11;y1=y11; x2=x22;y2=y22;

x3=x33;y3=y33; x4=x44;y4=y44;

}

chotir::~chotir(){

}

void chotir::centr(float *x,float *y)

{

float k1,b1,

k2,b2;

k1=(y3-y1)*1.0/(x3-x1);

k2=(y4-y2)*1.0/(x4-x2);

b1=-x1*k1+y1;

b2=-x2*k2+y2;

*x=(b2-b1)/(k1-k2);

*y=k1*(*x)+b1;

}

float chotir::length(chotir b){

float x1,y1,x2,y2;

centr(&x1,&y1);

b.centr(&x2,&y2);

return sqrt(pow(x2-x1,2)+pow(y2-y1,2));

}

void chotir::spoluch(chotir b,int c){

float x1,y1,x2,y2;

centr(&x1,&y1);

setcolor(c);

b.centr(&x2,&y2);

line(x1,y1,x2,y2);

}

void chotir::draw(int c){

setcolor(c);

line(x1,y1,x2,y2);

line(x2,y2,x3,y3);

line(x3,y3,x4,y4);

line(x4,y4,x1,y1);

setcolor(8);

line(x1,y1,x3,y3);

line(x2,y2,x4,y4);

}

class TCircle{

public:

int x,y,r;

TCircle(int x1,int y1,int r1);

int peretin(TCircle k);

void draw(int c);

~TCircle();

};

TCircle::TCircle(int x1,int y1,int r1){

x=x1;

y=y1;

r=r1;

}

void TCircle::draw(int c){

setcolor(c);

circle(x,y,r);

}

int TCircle::peretin(TCircle k){

float vid=sqrt(pow((k.x-x),2)+pow((k.y-y),2));

if (vid<=k.r+r && vid>=k.r-r && vid>=r-k.r) return 1; else

return 0;

}

TCircle::~TCircle(){

}

//робить iз стрiчки вигляду x1=100 y1=200 x3=100:100 200 100

char *decode(char *s){

int flag=0;

int i;

char ss[2]=" \0";

char s1[255]="";

for (i=0;i<strlen(s);i++)

{

ss[0]=s[i];

if (flag) strcat(s1,ss);

if (s[i]=='=') flag=!flag;

if (s[i]==' ') flag=0;

}

return s1;

}

void run(){

setfillstyle(0,0);

bar(0,0,640,480);

FILE *f;

if ((f=fopen("chotir.dat","rt"))==NULL){

exit(0);

}

int x1,y1,x2,y2,x3,y3,x4,y4;

chotir *a[100];

int i=0;

float min=-1,max=-1;

int min1,min2,max1,max2;

int j;

char s[200];

char *ss;

while (!feof(f)){

fgets(s,256,f);

ss=decode(s);

sscanf(ss,"%d %d %d %d %d %d %d %d",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);

a[i]=new chotir(x1,y1,x2,y2,x3,y3,x4,y4);

a[i]->draw(1);

for (j=0;j<i;j++){

if (a[i]->length(*a[j])<min || min==-1) {min1=i;min2=j;min=a[i]->length(*a[j]);}

if (a[i]->length(*a[j])>max || max==-1) {max1=i;max2=j;max=a[i]->length(*a[j]);}

}

i++;

}

fclose(f);

a[min1]->draw(2);

a[min2]->draw(2);

a[max1]->draw(2);

a[max2]->draw(2);

a[min1]->spoluch(*a[min2],15);

a[max1]->spoluch(*a[max2],12);

TCircle *k1,

*k2,

*k3,

*k4;

float x,y,r;

a[min1]->centr(&x,&y);

r=min;

k1=new TCircle(x,y,r);

k1->draw(7);

a[min2]->centr(&x,&y);

r=min;

k2=new TCircle(x,y,r);

k2->draw(7);

a[max1]->centr(&x,&y);

r=max;

k3=new TCircle(x,y,r);

k3->draw(14);

a[max2]->centr(&x,&y);

r=max;

k4=new TCircle(x,y,r);

k4->draw(14);

settextjustify(0,2);

if (k1->peretin(*k3) || k1->peretin(*k4) ||

k2->peretin(*k3) || k2->peretin(*k4)){

settextstyle(2,0,6);

outtextxy(200,470,"Кола перетинаються");

}

setcolor(15);

outtextxy(500,470,"Press any key....");

rectangle(0,0,639,479);

getch();

}

void main(){

/* request auto detection */

int gdriver = DETECT, gmode, errorcode;

/* initialize graphics mode */

initgraph(&gdriver, &gmode, "");

run();

closegraph();

}

Лістинг програми меню - menu.cpp

#include<stdio.h>

#include <conio.h>

#include <process.h>

#include <string.h>

#define LEFT 75

#define RIGHT 77

#define DOWN 13

class Knopka

{

int x1;

int y1;

int x2;

int y2;

char str[80];

public:

void setparam (int xx1 , int yy1, int xx2,int yy2,char *sstr) ;

void show(int Lcolor, int bcolor);

virtual void run(void)=0;

};

class knopka1:public Knopka

{

public:

void run(void);

};

class knopka2:public Knopka

{

public:

void run(void) ;

};

class knopka3 : public Knopka

{

public:

void run (void) ;

};

class knopka4: public Knopka

{

public:

void run(void);

};

class knopka5: public Knopka

{

public:

void run(void) ;

};

class Menu

{

knopka1 kn1;

knopka2 kn2;

knopka3 kn3;

knopka4 kn4;

knopka5 kn5;

Knopka *maskn[5];

int x;

int y;

int nomAct;

int actTextCol;

int actBgCol;

int pasTextCol;

int pasBgCol;

void show(void);

void onLeft(void) ;

void onRight(void) ;

void onDown(void) ;

public:

Menu(int xx,int yy);

void getmessage(int msg);

};

void main()

{

textbackground(0);

clrscr();

Menu mnu(15,1);

while(1) mnu.getmessage(getch());

}

void Knopka::setparam(int xx1,int yy1,int xx2,int yy2,char *sstr)

{

x1=xx1;

y1=yy1;

x2=xx2;

y2=yy2;

strcpy(str,sstr);

};

void Knopka::show(int tcolor,int bcolor)

{

textcolor(tcolor);

textbackground(bcolor);

window(x1,y1,x2,y2);

clrscr();

gotoxy (1,1);

printf("%s",str);

}

void knopka1::run(void)

{

char str[80] ;

FILE* fin=fopen("about.txt","r") ;

textcolor(15);

textbackground(1) ;

window(2,7,78,22) ;

clrscr() ;

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

{

fgets(str,80,fin) ;

gotoxy(1,1+i) ;

cputs(str);

}

textbackground(0) ;

getch() ;

clrscr() ;

}

void knopka2::run(void)

{

spawnlp (P_WAIT,"notepad.exe","","chotir.dat",NULL) ;

}

void knopka3::run(void)

{

spawnlp(P_WAIT,"c:\\bc\\bin\\bc.exe","","kurs.cpp",NULL);

}

void knopka4::run(void)

{

spawnlp(P_WAIT,"kurs.exe",NULL);

}

void knopka5::run (void)

{

exit(0);

}

void Menu::onLeft(void)

{

nomAct=(nomAct==0)?4:(nomAct-=1);

}

void Menu::onRight(void)

{

nomAct=(nomAct==4) ?0 : (nomAct+=1);

}

void Menu::onDown(void)

{

maskn[nomAct]->run() ;

}

void Menu::show(void)

{

_setcursortype(_NOCURSOR) ;

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

if (i==nomAct)

maskn[i]->show (actTextCol, actBgCol) ;

else

maskn [i]->show (pasTextCol, pasBgCol) ;

}

void Menu :: getmessage ( int msg)

{

switch(msg)

{

case LEFT:

onLeft() ;

show() ;

break;

case RIGHT:

onRight() ;

show() ;

break;

case DOWN:

onDown() ;

show();

}

}

Menu::Menu(int xx,int yy)

{

x=xx;

y=yy;

nomAct=0;

maskn[0]=&kn1;

maskn [1]=&kn2;

maskn[2]=&kn3;

maskn [3]=&kn4;

maskn[4]=&kn5;

actTextCol=15;

actBgCol=1;

pasTextCol=0;

pasBgCol=2;

FILE* fin=fopen("menus.txt","r") ;

char str[80];

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

{

fgets(str,80,fin) ;

maskn[i]->setparam(x,y,x+strlen(str)-2,y,str);

x=x+strlen(str);

}

fclose(fin) ;

show() ;

}

Лістинг вхідних і вихідних даних

програма лістинг чотирикутник файл

Файл chotir.dat

x=38 y=113 x=40 y=232 x=147 y=179 x=164 y=73

x=185 y=126 x=183 y=87 x=241 y=68 x=245 y=119

x=593 y=467 x=609 y=426 x=571 y=322 x=444 y=452

x=414 y=102 x=526 y=233 x=600 y=106 x=544 y=15

x=126 y=422 x=158 y=298 x=271 y=301 x=288 y=445

Роздруківка графічних результатів роботи

Висновки

В результаті роботи над даною курсовою роботою було проведено аналітичну роботу, в результаті якої було складено алгоритм вирішення даної задачі, згідно якого було написано програму.

Написана програма працює на будь-якому комп'ютері з монітором, має просте меню, і знаходить розв'язок задачі для будь-яких вірних вхідних даних, отже завдання курсової роботи виконане вірно.

Список використаної літератури

1. Страуструп Б. Техніка програмування. Київ. Наука, 1986

2. Шилдт В.К., Зеленський К. Програмування на мові С, Київ, “Вищо школа”, 1986 р.

3. Стенли Б.Липпман. Язык программирования С++. Санкт-Петербург,2001

4. Юров Г.Н. Практикум по вычислительной математике. - М.: Высш. шк., 1990.

5. Таран В, Програмування мовою Паскаль. Київ. Наука, 1985 р.

6. Керніган Рітчі. Розробка алгоритмів та програмування на мові Паскаль. - Х.: ВКП “Парітет” ЛТД, 1995.

Размещено на Allbest.ru


Подобные документы

  • Зчитування числової інформації з файлу DATA.txt, аналізування, обробка та виконання графічного відображення. Редагування файлу тексту програми. Метод відображення кнопки з надписом на екрані. Створення нових класів на основі інших, вже створених.

    курсовая работа [196,2 K], добавлен 14.03.2013

  • Створення програми "Items", яка містить відомості про кінські забіги, на мові Паскаль у компіляторі Delphi 7. Реалізація зчитування з текстового файлу і збереження даних у типізованому файлі. Використання лінійних списків, особливості використання стеку.

    курсовая работа [721,6 K], добавлен 24.06.2013

  • Редагування за допомогою текстового редактора NotePad вхідного файлу даних. Програмна реалізація основного алгоритму з використанням засобів об'єктно-орієнтованого програмування. Об’ява та опис класів і об'єктів. Розробка допоміжних програмних засобів.

    курсовая работа [69,4 K], добавлен 14.03.2013

  • Створення спеціалізованої програми на мові програмування Турбо Паскаль для обробки інформації, що вноситься в бази даних по приватних підприємствах. Постановка задачі і структура зберігаючих даних. Розробка алгоритмів основної програми та процедури Is.

    курсовая работа [27,0 K], добавлен 07.10.2010

  • Розробка інтерфейсу програми "Автоматизована інформаційна система автошколи". Вибір архітектури, характеристика користувача. Генерація, проектування схеми бази даних, детальне програмування. Розробка структури таблиць. Лістинг програми, результат роботи.

    курсовая работа [2,7 M], добавлен 11.09.2015

  • Програми, які виводять на екран характеристики комп'ютера. Розробка програми "Монітор використання ресурсів комп’ютера" на мові програмування ASM-86. Алгоритм програми та її реалізація. Системні вимоги, інструкція для користувача, лістинг програми.

    курсовая работа [22,2 K], добавлен 08.08.2009

  • Складання блок-схеми і програми обчислення значення функції з заданою точністю та програми табулювання функції з заданим кроком. Обчислення двох значень поліному за допомогою схеми Горнера. Програма введення вхідних даних з клавіатури і з файлу ZAD4.DAT.

    контрольная работа [168,6 K], добавлен 29.09.2010

  • Розробка програми на мові програмування С++ з використанням об’єктно-орієнтованого програмування, яка включає в себе роботу з файлами, класами, обробку числової інформації і роботу з графікою. Структура класів і об’єктів. Лістинг та алгоритм програми.

    курсовая работа [104,4 K], добавлен 14.03.2013

  • Розробка програми, яка б дозволяла протестувати знання з дисципліни "Програмування на мові С", виставити оцінку. Опис та обґрунтування методу організації вхідних та вихідних даних, вибору складу технічних та програмних засобів. Проведення лістингу.

    курсовая работа [11,0 K], добавлен 08.08.2009

  • Програма "Приватка" для збереження та перегляду всієї інформації, що стосується пошуку підприємства. Розробка алгоритму та програмування на мові Turbo Pascal. Формальна та неформальна постановка задачі. Структура зберігаючих даних. Вихідний код програми.

    курсовая работа [20,9 K], добавлен 07.10.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.