Skip to content

Instantly share code, notes, and snippets.

@keinermendoza
Created September 30, 2025 01:40
Show Gist options
  • Select an option

  • Save keinermendoza/509b441a5d100cee7ce032adbf39ca03 to your computer and use it in GitHub Desktop.

Select an option

Save keinermendoza/509b441a5d100cee7ce032adbf39ca03 to your computer and use it in GitHub Desktop.
#include <stdio.h>
// Definição de uma constante para o tamanho da frota de ônibus.
#define TAMANHO 10
// Definição da estrutura para um ônibus.
struct Onibus {
char numero[5]; // Número da linha do ônibus (string).
int tempoEspera; // Tempo de espera ou de chegada (em minutos).
};
int main() {
// Inicialização da frota de ônibus com seus respectivos números.
// O 'tempoEspera' é inicializado como 0 e será solicitado ao usuário.
struct Onibus frota[TAMANHO] = {
{"309", 0},
{"319", 0},
{"410", 0},
{"414", 0},
{"415", 0},
{"513", 0},
{"517", 0},
{"604", 0},
{"710", 0},
{"711", 0},
};
// Contador para percorrer a frota durante a entrada de dados.
int onibus_cont = 0;
// Solicita ao usuário que insira os tempos de chegada.
printf("Por favor, insira os tempos de chegada dos ônibus (em minutos):\n");
// Laço 'do-while' para solicitar o tempo de chegada para cada ônibus.
// Repete até que os tempos de todos os ônibus sejam inseridos.
do {
// Mostra o número do ônibus e o progresso (ex: "Ônibus número 309 (1/10)").
printf("Ônibus número %s (%d/%d): ", frota[onibus_cont].numero, onibus_cont + 1, TAMANHO);
scanf("%d", &frota[onibus_cont].tempoEspera); // Lê o tempo de espera.
// Validação: garante que o tempo de chegada seja positivo.
if (frota[onibus_cont].tempoEspera <= 0) {
printf("Erro: o tempo de chegada do ônibus deve ser maior que 0.\n\n");
// Se houver erro, volta ao topo do laço sem incrementar o contador.
continue;
}
// Incrementa o contador se a entrada for válida.
onibus_cont++;
} while (onibus_cont < TAMANHO);
// Mostra os tempos de chegada originais
printf("\nTempos originais de chegada dos ônibus (em minutos):\n\n");
for (int i = 0; i < TAMANHO; i++) {
printf("Ônibus %s chega em %d minutos\n", frota[i].numero, frota[i].tempoEspera);
}
printf("\n");
// Ordenação crescente (Bubble Sort) com base no tempo de chegada.
for (int i = 0; i < TAMANHO - 1; i++) {
for (int j = 0; j < TAMANHO - i - 1; j++) {
// Compara se o tempo do elemento atual é maior que o do próximo.
if (frota[j].tempoEspera > frota[j + 1].tempoEspera) {
// Troca os elementos (o que garante a ordem crescente).
struct Onibus temp; // Variável temporária para a troca.
temp = frota[j];
frota[j] = frota[j + 1];
frota[j + 1] = temp;
}
}
}
// Mostra os tempos ordenados de forma crescente
printf("Chegadas de ônibus em ordem crescente (do menor para o maior):\n\n");
for (int i = 0; i < TAMANHO; i++) {
printf("Ônibus %s chega em %d minutos\n", frota[i].numero, frota[i].tempoEspera);
}
printf("\n");
// Ordenação decrescente (Bubble Sort) com base no tempo de chegada.
for (int i = 0; i < TAMANHO - 1; i++) {
for (int j = 0; j < TAMANHO - i - 1; j++) {
// Compara se o tempo do elemento atual é menor que o do próximo.
if (frota[j].tempoEspera < frota[j + 1].tempoEspera) {
// Troca os elementos (o que garante a ordem decrescente).
struct Onibus temp = frota[j];
frota[j] = frota[j + 1];
frota[j + 1] = temp;
}
}
}
// Mostra os tempos ordenados de forma decrescente
printf("Chegadas de ônibus em ordem decrescente (do maior para o menor):\n\n");
for (int i = 0; i < TAMANHO; i++) {
printf("Ônibus %s chega em %d minutos\n", frota[i].numero, frota[i].tempoEspera);
}
printf("\n");
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment