Cod sursa(job #1415345)

Utilizator george.tutuianuTutuianu George-Alexandru george.tutuianu Data 4 aprilie 2015 13:20:21
Problema Algoritmul lui Euclid Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.82 kb
#include <iostream>
#include <stdio.h>

class FileStream
{
private: 
	char* inputFileName  = "euclid2.in";
	char* outputFileName = "euclid2.out";

	FILE* inputStream  = NULL;
	FILE* outputStream = NULL;

	 // the number of lines from input file
	 int T = 0;

public:
	FileStream()
	{
		this->inputStream  = fopen(this->inputFileName, "r");
		this->outputStream = fopen(this->outputFileName, "w");

		this->T = this->readNextNumber();
	}

	int getNumberOfLines()
	{
		return this->T;
	}

	int readNextNumber()
	{
		int nextNumber = NULL;
		int readStatus = fscanf(this->inputStream, "%d", &nextNumber);

		return nextNumber;
	}

	void writeLineInFile(int value)
	{
		int writeStatus = fprintf(this->outputStream, "%d\n", value);
	}

	void writeLineOnConsole(int value)
	{
		int writeStatus = printf("%d\n", value);
	}
};

class EuclidAlgorithm
{
private:
	// used in binary algorithm
	int d = 0;

public: 
	int binaryEuclidAlgorithm()
	{

	}

	int repeatedDivisionsEuclidAlgorithm(int a, int b)
	{
		if (a > b) {
			return this->repeatedDivisionsEuclidAlgorithm(a % b, b);
		}
		else if (a < b) {
			return this->repeatedDivisionsEuclidAlgorithm(a, b % a);
		}

		return a;
	}

	int repeatedSubstractionsEuclidAlgorithm(int a, int b)
	{
		if (a > b) {
			return this->repeatedSubstractionsEuclidAlgorithm(a-b, b);
		}
		else if (a < b) {
			return this->repeatedSubstractionsEuclidAlgorithm(a, b-a);
		}

		return a;
	}
};

int main()
{
	FileStream* stream      = new FileStream();
	EuclidAlgorithm* euclid = new EuclidAlgorithm();

	for (int i = 0; i < stream->getNumberOfLines(); i++) {
		int gcd = euclid->repeatedSubstractionsEuclidAlgorithm(stream->readNextNumber(), stream->readNextNumber());
		stream->writeLineInFile(gcd);
		//stream->writeLineOnConsole(gcd);
	}
}