Projeto de estruturas de dados em C para gestão de smart cities, implementando grafos, listas ligadas e algoritmos de busca. Originalmente desenvolvido em Visual Studio (Windows) e agora totalmente compatível com macOS e Linux.
- Windows: Visual Studio 2019+ ou GCC
- macOS/Linux: GCC instalado (
gcc --version
)
chmod +x build.sh # Apenas na primeira vez
./build.sh
# Visual Studio
# Abra o arquivo Projeto_EDA.sln e compile (Ctrl+Shift+B)
# Ou via linha de comando
cl *.c /Fe:smartcity.exe
make clean
make
./smartcity
gcc -Wall -Wextra -std=c99 -o smartcity Main.c Cliente.c Gestor.c Transporte.c Localizacao.c Grafo.c
Durante a compilação, você pode ver warnings como:
warning: unknown pragma ignored [-Wunknown-pragmas]
#pragma warning(disable : 4996)
Isso é normal! São pragmas específicos do Windows que são ignorados em outros sistemas.
Execute o programa com:
./smartcity
O programa exibirá uma saída similar a esta:
1
1
1
1
1
---------------- Grafo ----------------
Numero de vertices: 10
Numero de arestas: 30
Matriz de Adjacencia:
0 170 0 0 0 0 0 0 0 0
170 0 350 0 0 0 0 0 0 0
...
Lista de Adjacencias:
Vertice 0 -> (1, peso: 170.0) -> NULL
Vertice 1 -> (2, peso: 350.0) -> (0, peso: 170.0) -> NULL
...
1
1
1 ← Leitura de clientes (cliente.txt) - SUCESSO
1 ← Leitura de gestores (gestor.txt) - SUCESSO
1 ← Leitura de transportes (transporte.txt) - SUCESSO
1 ← Leitura de localizações (local.txt) - SUCESSO
1 ← Criação da matriz do grafo - SUCESSO
Códigos de Retorno:
1
= Operação bem-sucedida2
= Erro no arquivo (não encontrado)3
= Erro de formato (sscanf/sprintf)4
= Lista vazia-1
= Erro geral
Numero de vertices: 10 ← 10 localizações na cidade
Numero de arestas: 30 ← 30 conexões entre localizações
0 170 0 0 0 0 0 0 0 0
170 0 350 0 0 0 0 0 0 0
- Cada linha/coluna representa uma localização (0-9)
- Valores > 0 = distância entre localizações
0
= sem conexão direta- Exemplo: distância do vértice 0 para vértice 1 = 170 unidades
Vertice 0 -> (1, peso: 170.0) -> NULL
- Vértice 0: localização de origem
- (1, peso: 170.0): conectado ao vértice 1 com distância 170
- NULL: fim da lista de conexões
1 ← Endereçamento de locais - SUCESSO
1 ← Mapeamento de transportes - SUCESSO
1 ← Salvamento do grafo - SUCESSO
cliente.txt
- Dados dos clientes do sistemagestor.txt
- Dados dos gestores/administradorestransporte.txt
- Frota de veículos (bicicletas, scooters, etc.)local.txt
- Pontos de interesse da cidadegrafo.bin
- Grafo salvo em formato binário
- Listas Ligadas: Clientes, Gestores, Transportes, Localizações
- Grafos: Representação da rede urbana
- Matriz de Adjacência: Distâncias entre pontos
- Algoritmos: DFS para busca de caminhos (comentado por questões de compatibilidade)
platform.h
- Macros para diferenças entre sistemas operacionaisMakefile
- Sistema de build para Unix-like systemsbuild.sh
- Script automático multiplataforma
- ✅ Windows (Visual Studio 2019+)
- ✅ macOS (GCC/Clang)
- ✅ Linux (GCC)
- ✅ Arquiteturas ARM64 (Apple Silicon)
# Limpe e recompile
make clean
make
Certifique-se de que a pasta Data/
existe com todos os arquivos .txt
.
O projeto foi corrigido para evitar crashes. Se ocorrer, verifique se os arquivos de dados estão no formato correto.
- Linguagem: C (padrão C99)
- Memória: Alocação dinâmica com verificações de segurança
- Algoritmos: Busca em grafos, ordenação, manipulação de listas
- Compatibilidade: Preserva o código original do Windows
O código original foi mantido intacto. As únicas adições foram:
- Arquivos de compatibilidade multiplataforma
- Correções de memory leaks e buffer overflows
- Verificações de ponteiros NULL para maior robustez