Replies: 17 comments 17 replies
-
Busca de String com Busca Binária
3.Verifique se o sistema está fazendo o uso do que foi visto em sala (Alocação dinâmica, TADS, arquivos)
|
Beta Was this translation helpful? Give feedback.
-
InsertionSort
Uma condição que compara se a parâmetro da struct(nome) é maior do que o outro nome um índice a frente ( i + 1), caso seja verdade acontece: Uma variável do tipo funcionario para auxiliar e receber o outro funcionario no indice a frente do auxiliar que no caso é i + 1. A variável funcionario[ i + 1 ] recebe funcionario[ i ] ou seja, na posição anterior. A variável funcionario[ i ] recebe o auxiliar. Então o que ele faz é: caso a condição seja verdadeira a variável auxiliar recebe o índice a frente, o índice a frente recebe o índice a baixo do que ele (porque ele é maior do que o índice que estava na frente, por isso eles estão trocando de posição) e o índice que está atrás( que só recebe ( i ) como índice ) recebe a variável auxiliar. Agora há uma variável que recebe o índice anterior para checar os itens menores e maiores para fazer a troca. Dentro do while ( em que j (variável) tem que ser >= 0 ) há uma condição para checar se o nome que o auxiliar aponta é menor do que o nome no índice j que o ponteiro de ponteiro funcionario aponta para o nome. Caso a condição seja verdadeira, o valor menor do item anterior fará a troca o valor maior. A variável funcionario na posição a frente ( j + 1) receberá funcionario no índice anterior ( j) e a variável no índice ( j ) receberá o auxiliar. Caso a condição não seja verdadeira, o loop será encerrado. COMPLEXIDADE c1 T(n) = (c3 + c4 + c5 + c6 + c7 + c8)n - 1 + (c9 + c10 + c11 + c12 + c13 )n² + c1 + c2 ============================================================
Sobre a Struct, ela é declarada no ( .c ) e o protótipo dela no ( .h ) podendo renomear no ( . h ). A compilação será usada a ( gcc -o main main.c ) onde não precisa compilar os arquivos separadamente. ============================================================
===========================================================
===========================================================
=========================================================== |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
1°Questão: A Busca de string com busca binaria é bastante eficiente na busca de de elementos em uma lista já organizada, dividindo o processo pela metade buscando o elemento na lista com base no seu valor, se for um valor mais baixo, ele descarta as opções de valores mais altos e começa uma varredura pelos valores mais inferiores da lista até encontrar com o mesmo selecionado, o mesmo pare valores elevados. quando se busca a um elemento que se encontra pelo meio da lista, o processor chega a ser mais rápido pois ele parte do meio da lista verificando uma quantidade bem menor de elementos, ao invés de percorrer pela lista toda. 2°Questão: Este código está estruturado em três partes Funcionário.c, Funcionário.h e main.c. onde a funcionários.c estão todas as funções do código incluindo a struct para abrir um vetor onde será armazenado os dados dos funcionários, uma função de manipulação de arquivos que abre uma pasta .txt em append para preencher com as informações do funcionários, e outra para abrir um arquivo de leitura de texco com os dados que foram implementados nele. e o tad para separar as funções em um modulo, tornando mais fácil a manipulação e correção de bugs. 3°Questão: O código faz uso de todas as funções vistas em sala de aula como na linha 59 onde ele faz uso da alocação dinâmica para adicionar novos funcionários a lista, as TADS é visível na formatação e a criação de arquivos nas linhas 95 e 124 do modulo funcionario.c arquivo = fopen("funcionarios.txt", "rt"); void registraFuncionario(Funcionario *funcionario, FILE *arquivo, char *nome, char *cargo, char *documento) 4°Questão: Para o que foi pedido, ela atende bem, de forma simples e interativa, avalio com uma nota 4. 5°Questão: é possível implementar funções de reorganização de nomes compostos com letras maiúsculas, e também é possível mover todas as bibliotecas usadas no código para a funcionario.h, deixando o código mais limpo adicionando somente a seguinte biblioteca #include"funcionario.h" na main.c e na funcionario.c. |
Beta Was this translation helpful? Give feedback.
-
exemplo de função: /converte string para maiusculo/ |
Beta Was this translation helpful? Give feedback.
-
Análise do código do Projeto "QuickSortEmployee":
O Quick sort é um algoritmo de ordenação que divide os dados em subgrupos, para aumentar sua eficiência. Essa divisão é feita a partir de um pivô, ordena os subgrupos, e depois os combina, obtendo uma lista ordenada, portanto, a forma de escolha do pivô é fundamental para o bom funcionamento do algoritmo. Seu funcionamento é dividido em três etapas:
Sua complexidade de tempo depende do pivô escolhido.
A compilação é do "main.c" deve ser feita junto do arquivo "funcionario.c".
|
Beta Was this translation helpful? Give feedback.
-
Questão 1. def insertion_sort(funcionarios): Com isso a complexidade de tempo do algoritmo é quadrática O(n²) no pior caso, que é quando a lista não esta ordenada. Questão 2. Questão 3. Questão 4. Questão 5. Questão 6. |
Beta Was this translation helpful? Give feedback.
-
o selection sort é um algoritmo de ordenação onde pode se ordenar tanto em ordem crescente como decrescente, ele analisa o menor valor e o coloca na primeira posição do vetor, depois ele faz a analisa do próximo valor e se esse valor for maior que o primeiro e menor do os outros valores do vetor esse valor será colocado em segundo, essa analise será feita até ter todos os elementos do vetor ordenados ou em ordem crescente ou decrescente.
} O big O dele será T(n) = O n^2 e o melhor e o pior caso será n^2. O código está estruturado em três partes: funcionario.c, funcionario.h e main.c. funcionario.h.
|
Beta Was this translation helpful? Give feedback.
-
COMPLEXIDADE: Após a análise, tem-se o resultado de que o Big O seria T(n)=O(n²).
|
Beta Was this translation helpful? Give feedback.
-
Questão 1. O algoritmo de busca Bubble Sort recebe como parâmetros o vetor e o seu tamanho. Dentro do corpo da função as primeiras instruções são as declarações de duas variáveis para servirem de contadores e outra variável do tipo dos dados a serem ordenados no vetor. Em seguida entra-se dentro de laço de repetição for em que a condição é o primeiro contador ser menor do que o tamanho do vetor, e dentro deste for vem outro laço de repetição for com a condição do segundo contador ser menor do que o tamanho do vetor menos 1. Dentro do segundo laço de repetição existe uma instrução de comparação if onde a comparação a ser feita é se o valor do vetor é maior do que o valor do vetor no índice a frente, se não for então estão ordenados, já caso não seja a variável auxiliar recebe o valor do vetor que é maior e no índice deste valor é colocado valor que é menor, e para finalizar o índice do menor valor recebe o conteúdo da variável auxiliar. A complixade do algoritmo Bubble Sort é calculada da seguinte forma: T(n) = c1+c2+c3+c4*(n)+c5*(n)(n-1)+c6(n)(n-1)+c7(n)(n-1)+c8(n)(n-1)+c9(n)(n-1) = T(n) = a+b(n)+c5*(n²-n)+c6*(n²-n)+c7*(n²-n)+c8*(n²-n)+c9*(n²-n) = T(n) = a+bn+c*(n²-n) = T(n) = a+bn+cn²-cn = T(n) = bn+cn²-cn = T(n) = cn² = T(n) = n². Na notação Big-o a complexidade de tempo é O(n) = n². Questão 2. O sistema está estruturada com a seguinte divisão de arquivos: README.md , funcionario.c, funcionario.h e main.c. Em relação a compilação, não existe instruções de como o sistema deve ser compilado. E em ralação a TAD e a struct, existe a TAD funcionario com a struct contendo os seguintes seguintes campos: nome, cargo e documento. e existem funções para criar um novo funcionário, ordenar o vetor, exibir o menu de opções, formatar string, limpar o buffer. Questão 3. Arquivo main.c: ponteiro para ponteiro na linha 7, abertura de arquivo na linha 10 e 30, alocação dinâmica na linha 63 . Arquivo funcionario.c: declaração de struct na linha 3, alocação dinâmica na linha 10, leitura de arquivo na linha 89, alocação dinâmica na linha 103 e 134, ponteiro para ponteiro a linha 119 e escrita em arquivo na linha 160. Questão 4. Sim, a documentação é suficiente. Minha avaliação é 4. Porque falta descrever como executar o sistema, falta terminar de comentar as funções no arquivo funcionario.h e no arquivo funcionario.c falta terminar a implementação de uma função e a pela presença de um arquivo main. Questão 5. classroom-ufersa/BubbleSortEmployee#44 |
Beta Was this translation helpful? Give feedback.
-
1- busca sequencial com strings é um algoritmo que funciona da seguinte forma, é percorrido cada elemento de um vetor onde está sendo armazenado os dados dos funcionários fazendo comparações até encontrar o nome desejado pelo usuário. Sua complexidade de tempo é O(n) no melhor melhor caso pois, só contem um laço simples de repetição portando é linear. 2- está sendo divido em três partes funcionario.h, funcionario.c e a main. Na funcionario.h está contendo todas as funções utilizadas do código com o seus paramentos, Funcionario.c é aonde está sendo feita a implementações das funções contendo uma struct tendo nome, cargo e numero do documento, na main está sendo feito um menu com 4 opções para o usuario cadastrar,buscar por nome, documento e encerrar o programa, também tem as chamadas das funções criadas tudo isso dentro de um do while com switch case. O código não está sendo compilado apresenta alguns erros na função atualizarArquivo. 3-o algoritmo está sim fazendo uso do que foi visto em sala, alocando dinamicamente na função cria funcionário também com as TADS e fazendo uso da manipulação de arquivo nas funções funcionario_salva, lerarquivo, atualizarArquivo. 4-Está bem claro, explica bem como a Busca sequencial com strings funciona, porém, faltou algo que ilustrasse melhor, daria um 4. 5-classroom-ufersa/BuscaSequencialFuncionarios#4 |
Beta Was this translation helpful? Give feedback.
-
funcionario.h: É onde estão as definições de estrutura e os protótipos das funções utilizados no funcionario.c main.c: É onde esta função main, o menu principal e as operações do programa.
5.Melhorias no programa
int verificaString(char nome[21]) |
Beta Was this translation helpful? Give feedback.
-
T(n) = c1 + c2n + c3n + c4n + c5
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
1 - A função Bubble Sort funciona da seguinte maneira: Ela percorre todos os elementos de um vetor da esquerda para a direita comparando todas as strings, caso o primeiro vetor da comparação seja maior que o segundo, a função faz a troca de posições. Esse processo ocorre N vezes até que o vetor esteja completamente ordenado. A complexidade de tempo é n^2 devido a utilização de 2 laços em cascata, onde no primeiro for ele percorre o vetor e no segundo faz a comparação dos elementos. 2- O programa está dividido em 3 arquivos que devem estar juntos para que o programa obtenha sucesso na hora da execução. Estes arquivos são: main.c Arquivo onde temos a função principal e dentro dela chamamos as demais funções presentes no arquivo funcionario.c. funcionario.c: Nele temos a criação da estrutura das funções.
funcionario.hcontém as definições de estrutura e protótipos de função utilizados em funcionario.c. 3- Arquivos Alocação dinâmica: 4 - Sobre a documentação a nota que sugiro é 3, ela explica bem sobre a função mas deixa a desejar sobre outro itens do código como por explicação de funcionamento do programa e das funções 5 - Sugestão de melhoria: Apagar todo o conteúdo que está comentado no texto para ter uma melhor organização, outra sugestão é que na linha 14 função salvar dados está errada e acaba quebrando a execução inicial do programa, outra coisa que percebi é que ao ler os dados funcionário os dados estão sendo armazenados em uma variável ao invés de serem armazenados na struct. Infelizmente pela falta de tempo não é possível fazer o código rodar perfeitamente |
Beta Was this translation helpful? Give feedback.
-
void bubbleSort(int *vetor, int tamanho) {
} A função mostrada anteriormente recebe como parâmetros um vetor de ponteiros do tipo inteiro e um tamanho também do tipo inteiro. São declaradas as varáveis que serão utilizadas nos dois laços de repetição e uma variável auxiliar, todas do tipo inteiro. O primeiro laço inicia em zero e vai até o tamanho passado com parâmetro. O segundo laço está contido no primeiro laço e vai de zero até o tamanho passado como parâmetro menos um, isso ocorre que ele percorre a sequencia uma vez a menos que o primeiro laço. Dentro do segundo laço a uma condição que verifica se o elemento que vem depois do elemento que esta na variável j é menor do que esta na posição da variável j. Se for ele armazena o elemento da posição j na variável auxiliar e o vetor da posição j recebe o elemento que está logo após o elemento da posição j. Assim como o elemento que está na posição j+1 recebe o que estava na variável auxiliar o elemento da posição j, finalizando a função. Caso não entre na condição quer dizer que os elementos estão na ordem correta. A complexidade de tempo tanto no melhor caso quanto no pior irá resultar em T(n) = O(n²), pela justificativa de que se tem dois laços de repetição onde um está contido no outro..
7.https://github.com/diegonascimento2023/BubbleSortEmployee/blob/main/main.c |
Beta Was this translation helpful? Give feedback.
-
Análise o código e explique o algoritmo de busca/ordenação que estar sendo utilizado e como ele funciona e sua complexidade de tempo.
Explique como o código/sistema estar estruturado (divisão de arquivos, compilação, TADs e structs.)
Verifique se o sistema está fazendo o uso do que foi visto em sala (Alocação dinâmica, TADS, arquivos)
Avalie a documentação fornecidade. Ela é suficiente? Avalie em uma escalda de 0-5. Justifique.
Propor melhorias no código (abrindo ISSUES).
Implemente as melhorias propostas.
Beta Was this translation helpful? Give feedback.
All reactions