Премини към съдържанието
От 1-ви септември 2021 г., вход във форумите ще е възможен само с имейл адрес вместо потребителско име. Ако не помните имейла с който сте се регистрирали, вижте го в настройките на профила си. ×
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

Курсова работа


majestric

Препоръчан отговор


Добър вечер,

колеги, искам да ви помоля за малко помощ по една задачка стигна до някъде но после позациклих малко.

Тя задачата я има като коментар най-горе в кода, но все пак да поясна, че зациклих на Шел сорт-а и записа и/или четенето от файл. Търсих в нета примери но така и не успях да ги приведа към моята задача (noob?).

 

П.П. Използвам MS Visual C++ 2010 Express.

//Курсова Работа по "Програмни езици" Задача 29.
//Да се създаде клас, описващ окръжност.Класът да съдържа метод за площта на областта.Да се съсдаде масив от окръжности.Да се сортира масива 
//по размер на окръжностите като се използва метода на Шел. Данните да се съхраняват във файлове.Да се визуализират сортираните окръжности.

#include "stdafx.h"
#include <iostream>
using namespace std;

class circle
{
protected:
	double radius;
public:
	void inrad();
	void outrad();
	double area();
	double draw();
};
void circle::inrad()
{
	cin>>radius;
}
void circle::outrad()
{
	cout<<"Radius= "<<radius<<"\n";
}
double circle::area()
{
	double p;
	const double PI=3.14159;
	p=radius*radius*PI;
	return p;
}
double circle::draw()
{
    double ratio=1.5;
    double a=ratio*radius;
    double b=radius;
		for (double y=-radius; y<=radius; y++)
	{
        for (double x=-ratio*radius; x<=ratio*radius; x++)
        {
            double d=(x/a)*(x/a)+(y/b)*(y/b);
            if (d>0.90 && d<1.05) 
			{
				cout<<"*"; 
			}
            else 
			{
				cout<<" ";
			}
        }
        cout<<endl;
    }
	return 0;
}

int main()
{
	int i=0;
	double area,draw;
	const int count=3;
	circle c[count];

	for(int i=0;i<count;i++)
	{	
		cout<<"=======================\n";
		cout<<"Circle ["<<i+1<<"] Radius = ";
		c[i].inrad();
		area=c[i].area();
		cout<<"Circle ["<<i+1<<"] Area = "<<area<<"\n";
		draw=c[i].draw();
	}
	cout<<"=======================\n\n";
	return 0;	
}
Линк към коментара
Сподели в други сайтове

Кое му е сложното на сортирането:

void shellsort(int arr[], int n) {
    int Gap=n;
    do {
       Gap=Gap*5/11; 
       if (Gap==0) Gap=1;
       for (int i=Gap; i<n; i++) {
          int j, t=arr[i];
          for (j=i; j>=Gap && arr[j-Gap]>t; j-=Gap)
              arr[j]=arr[j-Gap];
          arr[j]=t;
       }
    } while(Gap>1);
}
Само трябва да му промениш типа на масива и на променливата t от int на double.
Линк към коментара
Сподели в други сайтове

Нямаш нито една функция която да ти връща стойността на радиуса -

това ще ти спъва сортирането и записа във файлове.

 

примерно ако имаше функция

 

double circle::rad() {

    return radius;

}

 

щеше да можеш да сравняваш две окръжности в сортирането просто като напишеш 

     if (c.rad() >c[i-1].rad()) ....


Линк към коментара
Сподели в други сайтове

Оправих го сортирането. :)

 

Сега само записът във файл остана, но незнам дали може и лицето на кръговете и визуализацията в един файл да се запаметяват?

Линк към коментара
Сподели в други сайтове

Доста ми е странен начина на визуализация на окръжностите, при положение че има сортиране си мислех за нещо като хистограми за радиусите.

нещо от рода на:

Number Circles : 30
Circle	Radius: 	Area: 
1	502.328		792728
2	111.492		39051.3
3	223.23		156550
4	175.328		96572
5	352.803		391034
6	523.557		861149
7	54.5246		9339.73
8	514.344		831108
9	400.623		504221
10	330		342119
11	484.295		736834
12	43.7869		6023.34
13	406.148		518224
14	306.672		295460
15	357.262		400981
16	55.918		9823.21
17	59.1311		10984.5
18	85.7541		23102.5
19	106.689		35759
20	455.705		652404
21	59.377		11076.1
22	352.59		390562
23	334.377		351255
24	327.689		337343
25	214.656		144755
26	24.2459		1846.83
27	404.295		513507
28	73.5738		17005.7
29	347.361		379062
30	43.0984		5835.41

Circle	Radius
1	*******************************************************************
2	***************
3	******************************
4	***********************
5	***********************************************
6	**********************************************************************
7	*******
8	*********************************************************************
9	******************************************************
10	********************************************
11	*****************************************************************
12	******
13	******************************************************
14	*****************************************
15	************************************************
16	*******
17	********
18	***********
19	**************
20	*************************************************************
21	********
22	***********************************************
23	*********************************************
24	********************************************
25	*****************************
26	***
27	******************************************************
28	**********
29	**********************************************
30	******

Shell Sort..
Circle	Radius: 	Area: 
1	24.2459		1846.83
2	43.0984		5835.41
3	43.7869		6023.34
4	54.5246		9339.73
5	55.918		9823.21
6	59.1311		10984.5
7	59.377		11076.1
8	73.5738		17005.7
9	85.7541		23102.5
10	106.689		35759
11	111.492		39051.3
12	175.328		96572
13	214.656		144755
14	223.23		156550
15	306.672		295460
16	327.689		337343
17	330		342119
18	334.377		351255
19	347.361		379062
20	352.59		390562
21	352.803		391034
22	357.262		400981
23	400.623		504221
24	404.295		513507
25	406.148		518224
26	455.705		652404
27	484.295		736834
28	502.328		792728
29	514.344		831108
30	523.557		861149

Circle	Radius
1	***
2	******
3	******
4	*******
5	*******
6	********
7	********
8	**********
9	***********
10	**************
11	***************
12	***********************
13	*****************************
14	******************************
15	*****************************************
16	********************************************
17	********************************************
18	*********************************************
19	**********************************************
20	***********************************************
21	***********************************************
22	************************************************
23	******************************************************
24	******************************************************
25	******************************************************
26	*************************************************************
27	*****************************************************************
28	*******************************************************************
29	*********************************************************************
30	**********************************************************************

Линк към коментара
Сподели в други сайтове

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване