Програма зчитування даних з файлу
Проектування програми на мові програмування Borland С++, яка зчитує із файлу координати центра та радіуси кіл і виводить кола, що лежать в середині один одного. Ті з них, сума площ яких найбільша, програма виділяє іншим кольором. Лістинг вхідних даних.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 14.03.2013 |
Размер файла | 92,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Міністерство освіти і науки України
Вінницький державний технічний університет
КУРСОВА РОБОТА
з дисципліни
" Основи програмування та алгоритмічні мови ”
2002
Зміст
Анотація
Завдання
Опис методу вирішення задачі
Опис класів і їх членів
Лістинг програми
Лістинг вхідних і вихідних даних
Роздруківка графічних результатів роботи
Висновки
Список використаної літератури
Анотація
В даній курсовій роботі написано програму на мові програмування Borland С++, яка зчитує із файлу координати центра та радіуси кіл і виводить кола, що лежать в середині одне одного. Ті з них, сума площ яких найбільша, програма виділяє іншим кольором.
Завдання
У файлі задані центри та радiуси кiл. Вивести на екран кола, що лежать в середині одне одного.
Тi з них, сума площ яких найбільша, виділити окремим кольором.
Опис методу вирішення задачі
Поставлену задачу можна вирішити використовуючи наступний алгоритм:
Згрупуємо кола по групах кіл, які лежать всередині одне одного і не перетинаються між собою. Це можна зробити за наступним алгоритмом :
1. Беремо коло, для якого слід визначити до якої групи слід його віднести.
2. Перебираємо уже сформовані групи і перевіряємо чи дане коло лежить всередині або зовні хоч одного кола із групи і чи не перетинається ні з одним колом з групи.
3. Якщо ці умови виконуються то добавляємо у цю групу дане коло і переходимо на пункт 1.
4. Якщо перебравши усі групи і не знайшовши такої яка б задовольнила умови і в яку можна було б добавити коло, то створюємо нову групу, яка спочатку складається із одного кола і переходимо на пункт 1.
5. Сформувавши групи, виводимо усі групи, які складаються більш ніж із одного кола.
6. Для кожної групи знаходимо суму площ кругів, які входять до групи, і знаходимо групу із максимальною площею. Виводимо кола, що входять до неї іншим кольором.
Найскладнішим і головним моментом є перевірка чи лежать два кола одне всередині іншого і чи перетинаються кола між собою.
Щоб перевірити чи два кола одне всередині іншого слід:
Нехай маємо радіуси кіл r1 та r2. Тоді min - менший радіус, а max - більший радіус. Відстань між центрами кіл знаходимо за формулою :
len=sqrt(pow((k.x-x),2)+pow((k.y-y),2))
Якщо len+min<max то кола лежать одне всередині іншого.
Щоб перевірити чи два кола перетинаються :
Знайдемо відстань між центрами кіл len=sqrt(pow((k.x-x),2)+pow((k.y-y),2)).
Якщо (len<=r1+r2 і len>=r1-r2 і len>=r2-r1) то кола перетинаються.
На основі викладеного легко створюється програма, яка вирішує поставлену перед нами задачу.
Опис класів і їх членів в основій програмі kurs.cpp
Клас my_circle являє собою об'єкт коло із необхідними функціями і змінними які потрібні для вирішення поставленої задачі.class my_circle{
public: int x,y,r;
my_circle(int x1,int y1,int r1);
int peretin(my_circle k
int vsered(my_circle k);
float ploscha();
void paint(int c);
~my_circle();
};
X - координата абсциси центра кола
Y - координата ординати центра кола
R - радіус кола
Конструктор my_circle(int x1,int y1,int r1) ініціалізує об'єкт коло із центром в точці (x1,y1) з радіусом r1
Функція int peretin(my_circle k) - виконує перевірку чи перетинається задане коло із іншим колом K
Функція int vsered(my_circle k) - виконує перевірку чи знаходиться одне коло всередині іншого
Функція float ploscha() - знаходить площу круга, який обмежує дане коло
Функція paint(int c) - малює дане коло, заданим коліром c/
~my_circle() - деструктор
Лістинг програми
Лістинг програми меню menu.cpp
#include<string.h>
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include<process.h>
#include<dos.h>
class Button{
protected:
int x,y,w,h;
char text[20];
int now;
Button *prev;
Button *next;
public:
Button();
~Button();
Button(int x1,int y1,int w1,int h1,char *text1,int now1);
void set_next(Button *b);
void set_prev(Button *b);
void show();
void press();
virtual void run();
};
Button::Button(){
}
Button::~Button(){
}
Button::Button(int x1,int y1,int w1,int h1,char *text1,int now1){
x=x1; y=y1; w=w1; h=h1; strcpy(text,text1); now=now1;
}
void Button::set_next(Button *b){
next=b;
}
void Button::set_prev(Button *b){
prev=b;
}
void Button::show(){
settextstyle(2,0,4);
setcolor(15);
if (now) setfillstyle(1,9); else setfillstyle(1,1);
bar(x,y,x+w,y+h);
rectangle(x,y,x+w,y+h);
settextjustify(1,1);
if (now) setcolor(10); else setcolor(15);
outtextxy(x+w/2,y+h/2-2,text);
}
void Button::run(){}
void Button::press(){
if (!now) return;
char c;
if (kbhit()){
c=getch();
if (c==0) c=getch();
switch (c){
case 77:if (next!=NULL) {now=0;show();next->now=1;next->show();}
break;
case 75:if (prev!=NULL) {now=0;show();prev->now=1;prev->show();}
break;
case 13:run();
}
}
}
class but1:public Button{
public :
void run();
but1(int x1,int y1,int w1,int h1,char *text1,int now1);
};
class but2:public Button{
public :
void run();
but2(int x1,int y1,int w1,int h1,char *text1,int now1);
};
class but3:public Button
{
public :
void run();
but3(int x1,int y1,int w1,int h1,char *text1,int now1);
};
class but4:public Button
{
public :
void run();
but4(int x1,int y1,int w1,int h1,char *text1,int now1);
};
class but5:public Button
{
public :
void run();
but5(int x1,int y1,int w1,int h1,char *text1,int now1);
};
class but6:public Button
{
public :
void run();
but6(int x1,int y1,int w1,int h1,char *text1,int now1);
};
but1::but1(int x1,int y1,int w1,int h1,char *text1,int now1)
{
x=x1; y=y1; w=w1; h=h1; strcpy(text,text1); now=now1;
}
but2::but2(int x1,int y1,int w1,int h1,char *text1,int now1)
{
x=x1; y=y1; w=w1; h=h1; strcpy(text,text1); now=now1;
}
but3::but3(int x1,int y1,int w1,int h1,char *text1,int now1)
{
x=x1; y=y1; w=w1; h=h1; strcpy(text,text1); now=now1;
}
but4::but4(int x1,int y1,int w1,int h1,char *text1,int now1)
{
x=x1; y=y1; w=w1; h=h1; strcpy(text,text1); now=now1;
}
but5::but5(int x1,int y1,int w1,int h1,char *text1,int now1)
{
x=x1; y=y1; w=w1; h=h1; strcpy(text,text1); now=now1;
}
but6::but6(int x1,int y1,int w1,int h1,char *text1,int now1)
{
x=x1; y=y1; w=w1; h=h1; strcpy(text,text1); now=now1;
}
class Menu{
private:
but1 *b1;
but2 *b2;
but3 *b3;
but4 *b4;
but5 *b5;
but6 *b6;
public:
press();
show();
Menu();
~Menu();
};
Menu::Menu(){
b1=new but1(10,10,100,20,"Про програму",1);
b2=new but2(120,10,100,20,"Редагування",0);
b3=new but3(230,10,80,20,"Запуск",0);
b4=new but4(320,10,80,20,"Умова",0);
b5=new but5(410,10,100,20,"Програма",0);
b6=new but6(520,10,100,20,"Вихiд",0);
b1->set_prev(b6);
b1->set_next(b2);
b2->set_prev(b1);
b2->set_next(b3);
b3->set_prev(b2);
b3->set_next(b4);
b4->set_prev(b3);
b4->set_next(b5);
b5->set_prev(b4);
b5->set_next(b6);
b6->set_prev(b5);
b6->set_next(b1);
}
Menu::~Menu(){
delete b1;
delete b2;
delete b3;
delete b4;
delete b5;
delete b6;
}
Menu::show(){
b1->show();
b2->show();
b3->show();
b4->show();
b5->show();
b6->show();
}
Menu::press(){
b1->press();
b2->press();
b3->press();
b4->press();
b5->press();
b6->press();
}
void clear(){
setfillstyle(1,0);
bar(0,35,640,480);
}
void _about(){
clear();
setcolor(14);
settextjustify(1,1);
settextstyle(4,0,5);
outtextxy(320,60,"Курсова робота");
outtextxy(321,60,"Курсова робота");
setcolor(12);
settextstyle(3,0,2);
outtextxy(320,120,"по программуванню");
settextjustify(0,1);
settextstyle(2,0,5);
setcolor(2);
outtextxy(300,220,"Виконав ст.гр. 2КС-01 :");
setcolor(15);
outtextxy(310,240,"Бондарчук В.В.");
setcolor(2);
outtextxy(300,260,"Керiвник : ");
setcolor(15);
outtextxy(310,280,"Черняк О.I.");
setcolor(13);
settextjustify(1,1);
settextstyle(4,0,4);
outtextxy(320,400,"Вiнниця - 2002");
outtextxy(321,400,"Вiнниця - 2002");
}
void my_exec(char *proga,char *param){
closegraph();
clrscr();
int result = spawnlp(P_WAIT, proga,"",param,NULL);
if (result == -1)
{
printf("Помилка запуску %s\n",proga);
printf("Робота з програмою буде завершена пiсля натиску на будь-яку клавiшу");
getch();
exit(1);
}
printf("Press any key to continue...");
getch();
int gdriver = DETECT, gmode, errorcode;
/* initialize graphics mode */
initgraph(&gdriver, &gmode, "");
}
Menu *m;
void but1::run(){
_about();
}
void but2::run(){
my_exec("notepad.exe","dani.dat");
cleardevice();
m->show();
}
void but3::run(){
my_exec("kurs.exe","");
cleardevice();
m->show();
}
void but4::run(){
clear();
FILE *f;
if ((f=fopen("umova.dat","rt"))==NULL) return;
int i=0;
char s[256];
settextjustify(0,2);
settextstyle(2,0,10);
setcolor(15);
outtextxy(80,80,"Умова курсовоъ роботи");
outtextxy(81,80,"Умова курсовоъ роботи");
setcolor(14);
settextstyle(2,0,6);
while (!feof(f)){
fgets(s,256,f);
outtextxy(100,150+i*30,s);
i++;
}
fclose(f);
}
void but5::run(){
my_exec("c:\\bc\\bin\\bc.exe","kurs.cpp");
cleardevice();
m->show();
}
int flag =1;
void but6::run(){
flag=0;
closegraph();
}
void main(){
int gdriver = DETECT, gmode, errorcode;
/* initialize graphics mode */
initgraph(&gdriver, &gmode, "");
m=new Menu();
m->show();
while(flag) m->press();
m->~Menu();
}
Лістинг основної програми kurs.cpp
#include <stdio.h>
#include <string.h>
#include <graphics.h>
#include <conio.h>
#include <math.h>
#include <process.h>
class my_circle{
public:
int x,y,r;
my_circle(int x1,int y1,int r1); //конструктор - iнiцiалiзацiя кола
int peretin(my_circle k); //перевiрка чи перетинаэться з колом K
int vsered(my_circle k); //перевiрка чи знаходяться одне всерединi iншого
float ploscha(); //знаходження площi
void paint(int c); //намалювати коло
~my_circle(); //деструктор
};
////////////////////////////
my_circle::my_circle(int x1,int y1,int r1){
x=x1; y=y1; r=r1;
}
////////////////////////////
float my_circle::ploscha(){
return r*r*M_PI;
}
////////////////////////////
void my_circle::paint(int c){
setcolor(c);
circle(x,y,r);
}
////////////////////////////
int my_circle::peretin(my_circle k){
float len=sqrt(pow((k.x-x),2)+pow((k.y-y),2));
if (len<=k.r+r && len>=k.r-r && len>=r-k.r) return 1; else return 0;
}
////////////////////////////
int my_circle::vsered(my_circle k){
int min,max;
//знаходимо який iз радiусiв менший i бiльший вiдповiдно
if (k.r<r) {min=k.r;max=r;} else {min=r;max=k.r;}
float len=sqrt(pow((k.x-x),2)+pow((k.y-y),2));
return (len+min<max);
}
///////////////////////////
my_circle::~my_circle(){
}
//***********************************************************
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 start(){
int group=0; //кiлькiсть "скупчень" кiл
int count[100]; //кiлькостi у кожному "скупченi"
float ploscha[100]; //площi кiл
my_circle *k[100][100]; //самi кола
int x,y,r;
my_circle *t;
int i,j;
int p_flag, //"флаг" що перетинаються
v_flag, //"флаг" що вписане
flag; //"флаг" знаходження мiсця для кола
char *ss;
char s[255];
FILE *f;
if ((f=fopen("dani.dat","rt"))==NULL){
closegraph();
printf("Файл DANI.DAT не знайдено");
getch();
exit(0);
}
//читаэмо файл поки не кiнець
while (!feof(f)){
//зчитуэмо стрiчку
flag=0;
fgets(s,256,f);
//декодуэмо
ss=decode(s);
sscanf(ss,"%d %d %d",&x,&y,&r);
t=new my_circle(x,y,r);
//шукаемо куди це коло пiдходить
for (i=0;i<group;i++){
p_flag=0;v_flag=0;
//перевiряэмо чи коло перетинаэться з iншими
//колами у "скупченi" i чи лежить всерединi хоча б одного з них
for (j=0;j<count[i] && !p_flag && !v_flag;j++){
if (k[i][j]->vsered(*t)) v_flag=1;
if (k[i][j]->peretin(*t)) p_flag=1;
}
if (!p_flag && v_flag){ //нормально це коло можна добавити до скупчення
k[i][count[i]]=new my_circle(t->x,t->y,t->r);
ploscha[i]+=t->ploscha();
count[i]++;
flag=1; // запоминаэмо що знайшли пiдходящу группу
i=group; // виходимо з циклiв
}
}
if (!flag){ //створюэмо нове скупчення з одного кола
k[group][0]=new my_circle(t->x,t->y,t->r);
ploscha[group]=t->ploscha(); count[group]=1;
group++;
}
}
fclose(f);
//таблиця кiл сформована, виводимо результати
//вiдображаємо групи кiл, одночасно находячи групу з максимальною площею
float max=0,temp;
int num=-1;
for (i=0;i<group;i++)
for (j=0;j<count[i];j++)
{
temp=k[i][j]->ploscha();
if (temp>max){
max=temp;
num=i;
}
if (count[i]>1)
k[i][j]->paint(1);
else k[i][j]->paint(8);
}
//вiдображаемо найдену групу iншим кольором
for (j=0;j<count[num];j++)
k[num][j]->paint(12);
settextstyle(2,0,5);
setfillstyle(1,14);
settextjustify(0,2);
setcolor(15);
fillellipse(20,45,10,8);outtextxy(50,40,"Кола лежать одне всерединi iншого");
setfillstyle(1,8);
fillellipse(20,65,10,8);outtextxy(50,60,"Усi iншi кола");
setfillstyle(1,12);
fillellipse(20,25,10,8);outtextxy(50,20,"Група з максимальною площею");
setfillstyle(1,1);
fillellipse(20,45,10,8);outtextxy(50,40,"Кола лежать одне всерединi iншого");
setcolor(15);
outtextxy(40,465,"Press any key to continue...");
getch();
}
void main(){
int gdriver = DETECT, gmode, errorcode;
/* initialize groupaphics mode */
initgraph(&gdriver, &gmode, "");
start();
Лістинг вхідних і вихідних даних
програмування лістинг файл радіус
Вхідний файл даних dani.dat
x=400 y=350 r=80
x=400 y=300 r=70
x=500 y=100 r=50
x=100 y=310 r=50
x=500 y=410 r=50
x=100 y=300 r=75
x=100 y=300 r=100
x=105 y=320 r=20
x=100 y=320 r=30
x=300 y=100 r=10
x=305 y=105 r=20
x=300 y=100 r=40
x=300 y=160 r=100
x=200 y=400 r=10
x=200 y=400 r=20
x=200 y=400 r=30
Роздруківка графічних результатів роботи
вигляд програми - пункт меню „про програму”
вигляд програми - пункт меню „про програму”
вигляд програми - результати роботи
Висновки
В процесі розв'язання поставленої задачі була проведена аналітична робота з приводу визначення математичної моделі та переведення її в алгоритм розв'язку. Згідно отриманого алгоритму була написана програма, з використанням Borland C++. Програма успішно і коректно працює на будь-якому комп'ютері з монітором, який підтримує графічний режим. Програма має легкий у використані інтерфейс, що забезпечує легкість при роботі з нею. Отже, поставлена задача розв'язана повністю.
Список використаної літератури
1. Страуструп Б. Техніка програмування. Київ. Наука, 1986
2. Шилдт В.К., Зеленський К. Програмування на мові С, Київ, “Вищо школа”, 1986 р.
3. Стенли Б.Липпман. Язык программирования С++. Санкт-Петербург,2001
4. Юров Г.Н. Практикум по вычислительной математике. - М.: Высш. шк., 1990.
5. Таран В, Програмування мовою Паскаль .Київ. Наука, 1985 р.
6. Керніган Рітчі. Розробка алгоритмів та програмування на мові Паскаль. - Х.: ВКП “Парітет” ЛТД, 1995.
Размещено на Allbest.ru
...Подобные документы
Створення програми "Items", яка містить відомості про кінські забіги, на мові Паскаль у компіляторі Delphi 7. Реалізація зчитування з текстового файлу і збереження даних у типізованому файлі. Використання лінійних списків, особливості використання стеку.
курсовая работа [721,6 K], добавлен 24.06.2013Складання блок-схеми і програми обчислення значення функції з заданою точністю та програми табулювання функції з заданим кроком. Обчислення двох значень поліному за допомогою схеми Горнера. Програма введення вхідних даних з клавіатури і з файлу ZAD4.DAT.
контрольная работа [168,6 K], добавлен 29.09.2010Зчитування числової інформації з файлу DATA.txt, аналізування, обробка та виконання графічного відображення. Редагування файлу тексту програми. Метод відображення кнопки з надписом на екрані. Створення нових класів на основі інших, вже створених.
курсовая работа [196,2 K], добавлен 14.03.2013Ведення обліку даних, що поступають на вхід стандартного інтерфейсу RS-232(COM-порт). Програма для графічного відображення вхідних даних у вигляді графіку та збереження отриманих даних. Візуальна об'єктно-орієнтована мова програмування високого рівня.
дипломная работа [292,4 K], добавлен 07.06.2010Розробка програми перевірки логічного мислення людини на мові програмування С++, результатом якої є моделювання координатного переміщення. Визначення структури вхідних та вихідних даних, вибір мови програмування. Розгляд алгоритму рішення задачі.
курсовая работа [55,8 K], добавлен 28.04.2015Розробка програми, яка б дозволяла протестувати знання з дисципліни "Програмування на мові С", виставити оцінку. Опис та обґрунтування методу організації вхідних та вихідних даних, вибору складу технічних та програмних засобів. Проведення лістингу.
курсовая работа [11,0 K], добавлен 08.08.2009Теоретичні відомості про пакет ІЗВП Borland Delphi та СУБД MS Access, оцінка їх функціональних особливостей. Опис структури бази даних. Проектування інтерфейсу програми, опис її логічної структури та функцій. Контроль коректності вхідних, вихідних даних.
курсовая работа [4,5 M], добавлен 03.01.2014Призначення програмного продукту та вимоги до її функціональних можливостей, вхідних та вихідних даних. Інструкція оператора для роботи з програмою. Діаграми класів, прецедентів та станів. Введення даних в документ Excel і Word. Запис та зчитування з Xml.
курсовая работа [6,8 M], добавлен 25.04.2015Розробка інтерфейсу програми "Автоматизована інформаційна система автошколи". Вибір архітектури, характеристика користувача. Генерація, проектування схеми бази даних, детальне програмування. Розробка структури таблиць. Лістинг програми, результат роботи.
курсовая работа [2,7 M], добавлен 11.09.2015Створення файлу з базою даних про учбову та науково-технічну літературу та файлу, що зберігає інформацію виведену в нього в результаті запиту. Стандартні процедури та функцій, що використовуються у програмі. Приклад тестування та результату її роботи.
курсовая работа [1,0 M], добавлен 16.11.2013Створення програми для роботи з файловою системою. Ступінь деталізації файлу. Структура файлової системи. Таблиця розміщення файлів. Розподіл пам'яті в FAT для типового диска MS DOS. Відповідність між FAT й областю файлів даних. Корневий каталог.
дипломная работа [32,6 K], добавлен 24.03.2009Відомості про програму С++ Builder. Програмний код обох складових створюваної бібліотеки користувача: заголовного файлу та файлу реалізації. Програмний код для елементів керування головної форми. Етапи створення та доручення до проекту додаткових форм.
курсовая работа [222,1 K], добавлен 24.10.2012Редагування за допомогою текстового редактора NotePad вхідного файлу даних. Програмна реалізація основного алгоритму з використанням засобів об'єктно-орієнтованого програмування. Об’ява та опис класів і об'єктів. Розробка допоміжних програмних засобів.
курсовая работа [69,4 K], добавлен 14.03.2013Актуальність розробки програми для відновлення помилково вилучених з диску комп'ютера файлів. Програма-аналог програми Dос Undelete на мові програмування ASM-86. Елементи каталогу, що стосуються відновлення стертих файлів. Алгоритм програми та її лістинг.
курсовая работа [33,2 K], добавлен 08.08.2009Задача сортування даних в програмуванні. Алгоритм сортування обміном за критерієм або вибором, деревом, пірамідальне, швидке, сортування Хоара та метод цифрового сортування. Системні вимоги та інструкція для користувача. Алгоритм та лістинг програми.
курсовая работа [20,6 K], добавлен 08.08.2009Програма "Приватка" для збереження та перегляду всієї інформації, що стосується пошуку підприємства. Розробка алгоритму та програмування на мові Turbo Pascal. Формальна та неформальна постановка задачі. Структура зберігаючих даних. Вихідний код програми.
курсовая работа [20,9 K], добавлен 07.10.2010Методика та головні етапи розробки бази даних, що включає в себе інформацію про клієнтів, про товари, послуги, про обліку замовлень та облік витрат. Формування та лістинг програми, що обслуговує дану базу даних. Прайс-лист на послуги, що надаються.
курсовая работа [3,7 M], добавлен 02.01.2014Призначення гри в хрестики-нулики та програмне забезпечення, необхідне для її функціонування. Написання програми в середовищі Borland C++ Builder. Способи виклику програми. Характер вхідних та вихідних даних. Алгоритм та тестування роботи програми.
курсовая работа [321,6 K], добавлен 01.04.2016Побудування інформаційної концептуальної моделі дошкільного навчального закладу. Визначення ідентифікуючого набора атрибутів інформаційної системи. Відомості про структуру програми, мова програмування. Код створення бази даних на мові Transact-SQL.
курсовая работа [433,7 K], добавлен 27.03.2016Інформаційні системи ти засоби їх програмної реалізації. Створення файлу даних на магнітному диску. Опис створення програми. Прийоми проектування і реалізації реляційних баз даних і таблиць в СУБД Visual FoxPro 6.0. Характерна риса файлового підходу.
курсовая работа [4,1 M], добавлен 16.01.2011