GVA SUPPORT

Відповідь на запитання № 1553706226
Text:
	ФІО = GVA

 Запитання:/*
	3.	У файлі задано координати вершин прямокутників 
	(кожен прямокутник задано четвіркою чисел, які означають дві пари координат протилежних вершин). 
	Відсортувати у файлі координати по зменшенню площі прямокутників.

	- IN FILE EXAMPLE - - - 
	1 1 2 2
	11 12 13 15
	1 1 3 3
	5 5 10 10
	5 6 7 8
	12 17 -9 -5
	-10 -10 -15 -20
	- - - - - - - - - - - - 
*/

#include "stdafx.h"
#include <string>
#include <iostream>
#include <fstream>
#include <sstream>

using namespace std;

struct MyRectangle{
	long x1;
	long x2;
	long y1;
	long y2;
	long s;
};

void RectSwap(MyRectangle *a, MyRectangle *b)
{
	MyRectangle temp = *a;
	*a = *b;
	*b = temp;
}

long GetSquare(MyRectangle *r)
{
	return ( (r->x2 - r->x1)*(r->y2- r->y1) );
}

void PrintAllRectangles(MyRectangle *r, int count)
{	
	for (int i = 0 ; i < count ; i++)
	{
		cout<<i<<" : ( "<< ((r+i)->x1) <<" ; " << ((r+i)->y1) <<" ) x ("<< ((r+i)->x2) <<" ; " << ((r+i)->y2) <<" ) ; "<< ((r+i)->s) <<endl;
	}
}

void SortRectanglesBySquare(MyRectangle *r, int count)
{	
	for (int i = 0 ; i < count ; i++)
	for (int j = i + 1 ; j < count ; j++)
	{
		if ( (r+i)->s < (r+j)->s )
		{// need swap
			RectSwap(r+i,r+j);
		}
	}
}


int _tmain(int argc, _TCHAR* argv[])
{
	
	string IN_FILE_NAME		= "in.txt";
	string OUT_FILE_NAME	= "out.txt";


	int dataCount = 0;
	int linesCount = 0;
	// открываем файл на вход
	ifstream fin;
	fin.open(IN_FILE_NAME);

	if (fin.is_open())
	{
		cout<<"File opened!"<<endl;
	}
	else
	{
		cout<<"File not found!"<<endl;
		system("pause");
		return 0;
	}

	// узнаем количество строк в файле
	int temp;
	while (!fin.eof())
	{
		fin>>temp;
		dataCount++;
	}
	cout<<"DATA COUNT :  "<<dataCount<<endl;
	linesCount = dataCount / 4; // узнаем количество строк, т.к. знаем что у нас по 4 числа в строке

	fin.clear(); // очищаем буфер
	fin.seekg(0); // перематываем в начало файл

	// создаем масив структур с указаным размером
	MyRectangle *rectangleList = new MyRectangle[linesCount];

	// считываем данные с файла
	for (int i = 0 ; i < linesCount ; i++)
	{
		fin>> (rectangleList+i)->x1;
		fin>> (rectangleList+i)->y1;
		fin>> (rectangleList+i)->x2;
		fin>> (rectangleList+i)->y2;
		// и сразу считаем площадь
		(rectangleList+i)->s = GetSquare(rectangleList+i);
	}
		
	fin.close();

	PrintAllRectangles(rectangleList,linesCount);

	cout<<endl<<"- - - - - - - - - "<<endl<<endl;
	SortRectanglesBySquare(rectangleList,linesCount);
	PrintAllRectangles(rectangleList,linesCount);
	

	// запись в файл результатов
	ofstream fout;
	fout.open(OUT_FILE_NAME);
	for( int i = 0 ; i < linesCount ; i++ )
	{
		fout<<( (rectangleList+i)->x1 )<<" "
			<<( (rectangleList+i)->y1 )<<" "
			<<( (rectangleList+i)->x2 )<<" "
			<<( (rectangleList+i)->y2 )<<endl
			;
	}
	fout.close();

	delete []rectangleList;
	system("pause");
	return 0;
}

====================================	
Ваша відповідь