Pesquiza e Ordenação 0.0.1
Projeto estuda pesquisa: sequencial e binária; ordenação: selectsort e quicksort.
Macros | Funções | Variáveis

Referência ao ficheiro sortui.c

Módulo da interface com usuário. Mais...

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <strings.h>
#include <poll.h>
#include <unistd.h>
#include <errno.h>
#include <term.h>
#include <curses.h>
#include <math.h>
#include "mydebug.h"
#include "sortui.h"
#include "log.h"
#include "buscaseq.h"
#include "buscabinaria.h"
#include "selectsort.h"

Macros

#define TOTAL   48
#define SIZE_TAB   8
#define TOTAL   42
#define MAX_ELEMENT_PER_LINE   16
#define BUFF_SIZE   6

Funções

int main (void)
int read_input (char *pbuff, int size)
bool MoreInput (void)
void EmptyStdIn (void)
 Consome dados da entrada padrão. Isto fará com que os dados a mais que o usuário entrou sejam ignorados. A leitura byte a byte faz-se necessária, pois o programa pode estar trabalhando com um arquivo de entrada, assim podemos identificar cada final de entrada com LF '
'.
void Greeting (void)
void PrintMenu (void)
enum eOptMenu ParseOption (const char *pOpt, enum eOptMenu opt)
void get_AverageAndStdDeviation (struct SEARCH_REPORT *s_rpt, struct SORT_REPORT *ss_rpt, struct SORT_REPORT *qks_rpt, int nsize)
void WaitReturn (void)
 Imprime na tela espere e aguarda pela tecla enter.
void GenerateRndArray (int arr[], int size)
void PrintArray (int arr[], int size)
int get_element (void)
void ReportSearch (int element, bool f_seq, bool f_bin, const struct SEARCH_REPORT *sr)
void ReportSort (const struct SORT_REPORT *sel_rpt, const struct SORT_REPORT *qk_rpt)
void ReportAverage (const struct SEARCH_REPORT *s_rpt, const struct SORT_REPORT *ss_rpt, const struct SORT_REPORT *qks_rpt)

Variáveis

bool g_bStdinConnectedTotty
int g_ncols = DEFAULT_COLS
int g_nlines = DEFAULT_LINES
bool g_bCleanSrc = TRUE

Descrição detalhada

Módulo da interface com usuário.

Data:
02-05-2012 16:36:35
Versão:
0.0.1
Autor:
Alessandro Elias, ae11@inf.ufpr.br
Ruanito Diego Santos, rds@inf.ufpr.br

Este módulo possui todas as funcões que interagem com o usuário, o TUI (text user interface).


Documentação das funções

void EmptyStdIn ( void  )

Consome dados da entrada padrão. Isto fará com que os dados a mais que o usuário entrou sejam ignorados. A leitura byte a byte faz-se necessária, pois o programa pode estar trabalhando com um arquivo de entrada, assim podemos identificar cada final de entrada com LF '
'.

Observações:
Note que esta função só é útil quando o programa esta interagindo com o usuário. Nesta condição podemos fazer o programa ignorar a entrada que excede algum buffer.
void GenerateRndArray ( int  arr[],
int  size 
)

Gera vetor com nsize elementos aleatório. O elemento máximo foi defino pela macro MAX_ELEMENT.

Parâmetros:
[out]arr[]- vetor onde será armazenado os valores aleatórios.
[in]size- tamanho de arr[].
Observações:
Observe que 0 foi reservado para busca com sentinela, então ignoramos esta posição do vetor.
Veja também:
MAX_ELEMENT
void get_AverageAndStdDeviation ( struct SEARCH_REPORT s_rpt,
struct SORT_REPORT ss_rpt,
struct SORT_REPORT qks_rpt,
int  nsize 
)

Calula Média e desvio padrão das comparações dos algoritmos busca sequencial, busca binária, ordenação select sort, quick sort.

Parâmetros:
[out]s_rpt- ponteiro para a estrutura pesquisa, com os dados a ser gerado um relatório.
[out]ss_rpt- ponteiro para a estrutura select sort, com os dados a ser gerado um relatório.
[out]qks_rpt- ponteiro para a estrutura quick sort, com os dados a ser gerado um relatório.
[in]nsize- número de casos a serem analizados.
Observações:
O cálculo da variância requer a média das comparações, então não podemos acumular o quadrado da diferença de x iésimo elemento to vetor com MA (média aritimética), pois não temos a média, porém podemos acumular o número de comparções de cada algoritmo para efeito do cálculo da média. Então é necessário armazenar o número de comparações e depois subtrair da média e elevar ao quadrado para o cálculo da variância. Consequentemente temos o desvio padrão.
Veja também:
GenerateRndArray, busca_seq, selectsort, binary_search, quick_sort
int get_element ( void  )

Obtem um elemento. Este elemento é obtido de duas maneiras: 1. aleatóriamente (entre 0 e MAX_ELEMENT) entrando uma string vazia. 2. através da entrada padrão. Neste caso o usuário pode entrar no máximo 9999, qualquer entrada adicional será ignorado.

Veja também:
LogMessage, read_input
void Greeting ( void  )

Imprime título do programa.

int main ( void  )

Ponto de inicialização do program.

Retorna:
0 em caso o programa foi executado com sucesso, caso contrário código do erro ocorrido.
Veja também:
GenerateRndArray, read_input, Greeting, PrintMenu, MoreInput, OpenLog, CloseLog, LogMessage, WaitReturn, ParseOption
bool MoreInput ( void  )

função verifica se há mais dados a serem lidos da entrada padrão.

Retorna:
True há mais dados a serem lidos da entrada padrão, False caos contrário.
Observações:
Esta decisão de implementação fez-se necessária, uma vez que decidimos que o usuário é livre para dar entrada ao programa sem filtrar o que o usuário entrou. O comportamento de read() em caso a entrada do usuário é maior que o buffer passado a ela, é de: na subsequente chamada a ela, irá retornar o restante da entrada do usuário, até que possa ser lido toda entrada do usuário, uma vez todo o buffer foi consumido, subsequente chamada irá entrar em modo de espera até que seja dada uma outra entrada, em outras palavras, quando tem mais dados no buffer do stdin, as chamadas ao read() retornara imediatamente, até que não reste mais nada no stdin.
enum eOptMenu ParseOption ( const char *  pOpt,
enum eOptMenu  opt 
)

Processa opções do usuário.

Parâmetros:
[in]pOpt- ponteiro para string com a entrada do usuário.
[in]opt- opção do usuário na forma enum optMenu.
Retorna:
Uma opção do menu passado como comando.
oNone (não faça nada) em caso nenhum comando foi encontrado.
Observações:
pOpt tera uma string truncada em caso usuario inseriu uma entrada maior que o buffer.
Aviso:
A opção de entrar o comando em qualquer parte da execução do programa foi removido.
Veja também:
GenerateRndArray, get_element, busca_seq, selectsort, binary_search, ReportSearch, WaitReturn, quick_sort, ReportSort, get_AverageAndStdDeviation, ReportAverage, PrintArray
void PrintArray ( int  arr[],
int  size 
)

Imprime na tela em forma de uma matriz, numerando linhas e colunas, facilitando a identificação de um elemento no vetor.

Parâmetros:
[in]arr[]- vetor com os elementos a serem impressos no terminal.
[in]size- número de elementos do vetor arr[].
Veja também:
LogMessage
void PrintMenu ( void  )

Imprime opções do menu.

int read_input ( char *  pbuff,
int  size 
)

Le dados da entrada padrão.

Parâmetros:
[out]pbuff- ponteiro que receberá o buffer com dados entrado pelo usuário.
[in]size- número de caracteres que deve ser lido da entrada padrão, incluindo null.
Retorna:
Número de caracteres lidos da entrada padrão, exceto null.
void ReportAverage ( const struct SEARCH_REPORT s_rpt,
const struct SORT_REPORT ss_rpt,
const struct SORT_REPORT qks_rpt 
)

Impreme relatório das médias e desvio padrão, na saída padrão.

Parâmetros:
[in]s_rpt- ponteiro para os dados da pesquisa sequencial e binária a serem relatadas.
[in]ss_rpt- ponteiro para os dados da ordenação selectsort.
[in]qks_rpt- ponteiro para os dados da ordenação quicksort.
Veja também:
LogMessage
void ReportSearch ( int  element,
bool  f_seq,
bool  f_bin,
const struct SEARCH_REPORT sr 
)

Impreme relatório da pesquisa na saída padrão.

Parâmetros:
[in]element- elemento que foi pesquisado.
[in]f_seq- True se o elemento foi encontrado pela busca sequencial, False caso contrário.
[in]f_bin- True se o elemento foi encontrado pela busca binária, False caso contrário.
[in]sr- ponteiro para a estrutura com os dados da pesquisa sequencial e binária.
Veja também:
LogMessage
void ReportSort ( const struct SORT_REPORT sel_rpt,
const struct SORT_REPORT qk_rpt 
)

Impreme relatório de ordenação na saída padrão.

Parâmetros:
[in]sel_rpt- ponteiro para a estrutura com os dados da pesquisa do algoritmo selectsort.
[in]qk_rpt- ponteiro para a estrutura com os dados da pesquisa do algoritmo quicksort.
Veja também:
LogMessage
void WaitReturn ( void  )

Imprime na tela espere e aguarda pela tecla enter.

Observações:
Esta função só executara as linhas abaixo em caso a variável global g_bStdinConnectedTotty = TRUE, entrada padrão esta conectada ao terminal do usuário. Se o usuário entrar qualquer dado antes de enter ele(s) serão ignorados.
Veja também:
MoreInput, EmptyStdIn

Documentação das variáveis

bool g_bCleanSrc = TRUE

Não implementado. Daria opção ao usuário de pressionar 'q' e não limpar a tela, enter limparia o terminal.

Variável blobal, recebe valor da função isatty().

isatty() retorna 1 quando file descriptor esta conectado a um terminal, 0 caso contrário.

int g_ncols = DEFAULT_COLS

Variável global, armazena número de colunas do terminal do usuário.

int g_nlines = DEFAULT_LINES

Variável global, armazena número de linhas do terminal do usuário.

 Tudo Estruturas de dados Ficheiros Funções Variáveis Definições de tipos Enumerações Valores da enumeração Macros