Skip to content

Repositório para o projeto final da disciplina Programação Estruturada da UFABC.

Notifications You must be signed in to change notification settings

gTorrez/projeto_bignumbers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

image

UNIVERSIDADE FEDERAL DO ABC

PROJETO BIG NUMBERS

Programação Estruturada - Prof. Maycon Sambinelli

Bruno Moraes Filoni
Guilherme Carvalho Torres


Instruções

A função main recebe como parâmetro um arquivo de entrada .txt para a realização das operações entre Big Numbers e gera um arquivo de saída (.out.txt) com os resultados das operações, como nos exemplos de instâncias fornecidos. Isso possibilita comparar os resultados com o comando diff. Portanto, para executar o arquivo client.c, basta passar como parâmetro o arquivo de entrada desejado. Exemplo: ./client /documents/regular.in.

Representação do Big Number

Em C++, é possível utilizar a classe std::vector para criar um vetor dinâmico, que nada mais é que um array que pode crescer ou diminuir em tamanho durante a execução do programa. Isso possibilita armazenar um Big Number de forma que o limite de tamanho seja a quantidade de memória da máquina que está rodando o código.

Como em C não há vetor dinâmico de forma nativa, foi implementado um struct que simula o vetor dinâmico, que é composto pelo array de 'signed char', definido como int8 (int de 8 bits), onde cada elemento representa um dígito do Big number, foi utilizado 'signed char', para poupar memória, outro método experimentado foi a concatenação de int's, onde cada int armazenava 9 dígitos do Big number, poupando ainda mais memória e diminuindo a quantidade de operações necessárias. No entanto, o array de int8 possibilitou armazenar os dígitos direto da stream de input, poupando ainda mais tempo e compensando o maior número de operações. A struct também é composta pela variável nelements, que armazena a quantidade de dígitos do Big number; e a variável signal, que armazena o sinal do Big Number ("-" ou "+" representado por -1 e +1). Este struct pode ser visualizado logo abaixo.

typedef signed char int8;
typedef struct {
int8* data;
int nelements;
int signal;
} bignum;

Interface pública

typedef signed char int8;
typedef struct {int8* data; int nelements; int sign;} bignum;
typedef bignum* BigNumber;

BigNumber bignumber(void);
void bignumber_insert(BigNumber A, int8 a);
void bignumber_free(BigNumber A);

void read_input(BigNumber A);
void read_input_file(BigNumber A, FILE* file);

void reverse(BigNumber A);
void filter_left_zero(BigNumber A);
int max(int a, int b);
int compare(BigNumber A, BigNumber B);

void add(BigNumber A, BigNumber B, BigNumber RES); void subtract(BigNumber A, BigNumber B, BigNumber RES); void multiply(BigNumber A, BigNumber B, BigNumber RES);

void bignumber_print(BigNumber A);
void bignumber_print_file(BigNumber A, FILE* out);
int choose_operation(char op, int signal_a, int signal_b);
char* file_name(const char* input);

About

Repositório para o projeto final da disciplina Programação Estruturada da UFABC.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published