Created
September 30, 2025 01:57
-
-
Save keinermendoza/8103521c9b50e2e3bab0095393c7e85f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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