Skip to content

Instantly share code, notes, and snippets.

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

  • Save keinermendoza/8103521c9b50e2e3bab0095393c7e85f to your computer and use it in GitHub Desktop.

Select an option

Save keinermendoza/8103521c9b50e2e3bab0095393c7e85f to your computer and use it in GitHub Desktop.
#include <stdio.h>
// Define o número total de músicas na lista.
#define NUM_MUSICAS 10
// Estrutura que representa uma música.
typedef struct {
char nome[30]; // Nome da música (título).
int audiencia; // Quantidade de reproduções (audiência).
} Musica;
// Protótipos das funções:
void imprimirArray(Musica arr[], int n);
void bubbleSortMusica(Musica arr[], int n);
void bubbleSortMusicaReverso(Musica arr[], int n);
void apresentar_programa(void);
int main(void) {
// Inicialização do vetor de músicas com títulos pré-definidos.
// O campo 'audiencia' é inicializado em 0 e será preenchido pelo usuário.
Musica lista_musicas[NUM_MUSICAS] = {
{"Shape of You", 0},
{"Blinding Lights", 0},
{"Despacito", 0},
{"Bohemian Rhapsody", 0},
{"Hotel California", 0},
{"Billie Jean", 0},
{"Smells Like Teen Spirit", 0},
{"Rolling in the Deep", 0},
{"Uptown Funk", 0},
{"Imagine", 0},
};
// Contador para percorrer o vetor.
int i = 0;
// Variável temporária para armazenar a audiência lida.
int temp_audiencia;
// Exibe a mensagem de boas-vindas do programa.
apresentar_programa();
// Inicia a leitura da audiência (reproduções) de cada música.
printf("Por favor, insira a quantidade de reproduções para cada música:\n");
// Laço de repetição para solicitar as reproduções de todas as músicas.
do {
// Formata a exibição do índice (ex: "01/10" ou "10/10").
if (i + 1 < 10) printf("0");
printf("%d/%d - %s: ", i + 1, NUM_MUSICAS, lista_musicas[i].nome);
scanf("%d", &temp_audiencia);
// Validação de entrada: garante que a audiência seja não negativa.
if (temp_audiencia < 0) {
printf("❌ ERRO: Reproduções não podem ser negativas. Digite novamente.\n");
continue; // Repete a iteração atual.
}
// Armazena a audiência lida no campo da estrutura.
lista_musicas[i].audiencia = temp_audiencia;
i++;
} while(i < NUM_MUSICAS);
printf("\n");
// Exibe a lista de músicas com os dados brutos (antes da ordenação).
printf("Audiência inicial das músicas:\n\n");
imprimirArray(lista_musicas, NUM_MUSICAS);
printf("\n");
// Ordena o vetor usando o algoritmo Bubble Sort (menor audiência para a maior).
bubbleSortMusica(lista_musicas, NUM_MUSICAS);
printf("RANKING: Ordenado por Audiência Crescente (do menor para o maior):\n\n");
imprimirArray(lista_musicas, NUM_MUSICAS);
printf("\n");
// Ordena o vetor usando o algoritmo Bubble Sort Reverso (maior audiência para a menor).
bubbleSortMusicaReverso(lista_musicas, NUM_MUSICAS);
printf("TOP 10: Ordenado por Audiência Decrescente (do maior para o menor):\n\n");
imprimirArray(lista_musicas, NUM_MUSICAS);
printf("\n✅ Processamento concluído. Obrigado por usar o nosso programa! 🎶\n");
return 0;
}
// Implementação da função para imprimir o vetor de músicas.
// Exibe o número da posição, o nome e o total de reproduções.
void imprimirArray(Musica arr[], int n) {
for (int i = 0; i < n; i++) {
// Formata o número da posição (ex: "01.-" ou "10.-").
if (i + 1 < 10) printf("0");
printf("%d.- %s: %d reproduções\n", i + 1, arr[i].nome, arr[i].audiencia);
}
}
// Implementação do Bubble Sort para ordem crescente.
// Ordena o vetor: menos reproduções -> mais reproduções.
void bubbleSortMusica(Musica arr[], int n) {
int ordenada; // Flag para otimização (verifica se já está ordenado).
for (int i = 0; i < n; i++) {
ordenada = 1;
for (int j = 0; j < n - i - 1; j++) {
// Se o elemento atual for MAIOR que o próximo, eles são trocados.
if (arr[j].audiencia > arr[j + 1].audiencia) {
ordenada = 0;
// Troca das estruturas Musica inteiras.
Musica temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
// Se nenhuma troca ocorreu nesta passagem, o array está ordenado.
if (ordenada) break;
}
}
// Implementação do Bubble Sort para ordem decrescente.
// Ordena o vetor: mais reproduções -> menos reproduções (ranking).
void bubbleSortMusicaReverso(Musica arr[], int n) {
int ordenada; // Flag para otimização.
for (int i = 0; i < n; i++) {
ordenada = 1;
for (int j = 0; j < n - i - 1; j++) {
// Se o elemento atual for MENOR que o próximo, eles são trocados.
if (arr[j].audiencia < arr[j + 1].audiencia) {
ordenada = 0;
// Troca das estruturas Musica inteiras.
Musica temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
// Se nenhuma troca ocorreu nesta passagem, o array está ordenado.
if (ordenada) break;
}
}
// Exibe a tela de apresentação do programa.
void apresentar_programa(void) {
printf(" 🎶 Bem-vindo ao Programa de Ranking Musical 🎶 \n");
printf(" Insira as reproduções das músicas para gerar o TOP! \n");
printf("\n");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment