Repositório de estudo com pequenos programas independentes sobre algoritmos,
estruturas de dados, ponteiros, alocação dinâmica e entrada/saída. O diretório
também reúne rascunhos que ainda precisam de correções; portanto, o nome
testes não representa uma suíte de testes automatizados.
| Arquivo | Tema | Estado atual |
|---|---|---|
c/conversaoromanos.c |
Conversão gulosa de um inteiro para algarismos romanos | Compila e converte entradas positivas; não valida o intervalo nem informa erro para zero ou negativos |
c/exercicioCredit.c |
Soma de verificação semelhante ao algoritmo de Luhn e identificação inicial de bandeira | Compila com avisos, mas possui alocação insuficiente para a string e não deve ser considerado um validador de cartões pronto |
c/exercicioLista.c |
Lista simplesmente encadeada, inserção no início e remoção de duplicatas | Compila com aviso; as condições usadas para percorrer a lista podem desreferenciar um ponteiro nulo |
c/exercicioSopa.c |
Simulação aleatória de consumo de duas sopas em porções de 25 ml | Compila, mas a leitura interativa é sensível a espaços/quebras de linha e algumas quantidades podem deixar a simulação sem progresso |
c/exercicioTarget.c |
Busca de dois valores que somam um alvo (Two Sum) | Compila e o exemplo fixo retorna os índices 0 e 1; usa busca quadrática |
c/frequenciadeX_v1.c |
Geração de valores aleatórios e tentativa de encontrar o mais frequente | Rascunho: atualmente não compila por identificadores inexistentes, declaração duplicada e chaves inconsistentes |
c/mergesort.c |
Divisão recursiva e intercalação do Merge Sort | Compila, porém o vetor auxiliar é alocado com tamanho incorreto e a execução acessa memória fora do limite |
c/hellowworldem.cpp |
Primeiros passos com saída em C/C++ e std::sort |
Rascunho: atualmente não compila porque std::sort recebe valores em vez de iteradores |
- decomposição recursiva e intercalação no Merge Sort;
- busca por força bruta com dois laços, de complexidade
O(n²), no Two Sum; - lista encadeada com
struct, ponteiro para o próximo nó e ponteiro para ponteiro nas operações que alteram o início da lista; - alocação dinâmica com
malloc, liberação pontual comfreee passagem de vetores por ponteiro; - manipulação de strings, entrada pelo terminal e geração pseudoaleatória;
- uso inicial da biblioteca padrão do C++.
Esses exemplos são úteis para estudo e depuração. Há alocações que não são liberadas, caminhos sem tratamento de erro e acessos inválidos descritos na tabela acima; eles também são oportunidades para praticar gerenciamento de memória.
.
├── README.md
└── c/
├── conversaoromanos.c
├── exercicioCredit.c
├── exercicioLista.c
├── exercicioSopa.c
├── exercicioTarget.c
├── frequenciadeX_v1.c
├── hellowworldem.cpp
└── mergesort.c
Cada arquivo possui sua própria função main e deve ser compilado
separadamente. Apesar do nome do diretório, hellowworldem.cpp é C++.
- um compilador compatível com C11, como Clang ou GCC;
- um compilador compatível com C++17 para o exemplo
.cpp; - terminal compatível com os comandos abaixo.
Execute os comandos a partir da raiz do repositório:
mkdir -p build
cc -std=c11 -Wall -Wextra -pedantic \
c/conversaoromanos.c -o build/conversaoromanos
cc -std=c11 -Wall -Wextra -pedantic \
c/exercicioTarget.c -o build/exercicioTargetExemplos:
printf '1994\n' | ./build/conversaoromanos
# saída: MCMXCIV
./build/exercicioTarget
# saída: Os indices dos numeros que somados resultam no alvo são: 0 e 1Os outros arquivos C que compilam podem ser verificados individualmente trocando o nome da entrada e do executável:
cc -std=c11 -Wall -Wextra -pedantic \
c/exercicioLista.c -o build/exercicioListaCompilar não garante uma execução segura neste repositório. Antes de executar
exercicioCredit, exercicioLista, exercicioSopa ou mergesort, consulte os
problemas conhecidos na tabela de conteúdo. frequenciadeX_v1.c e
hellowworldem.cpp precisam ser corrigidos antes de gerar executáveis.
Não há framework de testes, casos automatizados, sistema de build
(Makefile/CMake) ou integração contínua configurados. O estado documentado
acima foi conferido compilando cada arquivo de forma isolada com avisos
habilitados. Também foi usada instrumentação de memória no Merge Sort, que
detectou escrita fora do vetor auxiliar.
Próximos passos naturais para evoluir o repositório:
- corrigir primeiro os erros de compilação e de acesso à memória;
- separar lógica de negócio de entrada/saída para facilitar testes;
- adicionar casos para entradas válidas, limites e ausência de resultado;
- criar um
Makefilee uma suíte de testes reproduzível; - executar os exemplos com sanitizadores de memória durante o desenvolvimento.
- Os programas foram escritos como exercícios independentes e não formam uma biblioteca ou aplicação única.
- As entradas, os limites e as falhas de alocação ainda não são tratados de maneira uniforme.
- A identificação de bandeira em
exercicioCredit.cusa apenas o primeiro dígito, sem validar os intervalos e comprimentos completos de cada emissor. - O repositório não contém arquivo de licença; consulte o autor antes de reutilizar o código fora do contexto permitido pelo GitHub.
Este repositório funciona como laboratório de exercícios e rascunhos, não como suíte automatizada. Para coleções mais estruturadas, consulte:
algoritmos_e_estrutura_de_dados_em_C: algoritmos e estruturas de dados em C;tbo: projetos de técnicas de busca e ordenação em C++.