Hedson 0 Posted April 9, 2019 Report Share Posted April 9, 2019 Pessoal, saudações.... estou estudando C++ na faculdade e estou com muitos problemas pra conseguir executar um exercício que o professor me passou e que vale 20 % da minha nota... me ajudem, vejam só... eu tenho esse código que desenvolvi na aula e ele me falou que tenho que adaptar ele pra fazer funcionar como um emulador de player de música... desde já agradeço a atenção e dedicação de cada um que me ajudar #include<stdio.h> #include<stdlib.h> /*Com base no seu algoritmo em linguagem C, desenvolva um código que emule as características de um player de músicas sendo executado em modo texto, via prompt de comando. 1. Deve-se criar uma playlist das músicas utilizando uma lista encadeada. A lista encadeada poderá ser simples ou dupla, circular ou não circular. Fica a critério do aluno decidir. 2. Deve-se armazenar o nome de cada música, do artista/banda e a duração da faixa. Para o armazenamento utilize uma estrutura heterogênea de dados. 3. Para inserção dos dados, você pode criar uma leitura dos dados através de um menu na tela ou já deixá-los armazenados em um arquivo texto no seu computador e só carregar este arquivo ao executar o programa. Ou ambas soluções. Decida também como você irá implementar a inserção (no início, no fim ou no meio da lista encadeada); 4. Deve existir um menu na tela. Este menu deve permitir a inserção de novas músicas (caso optado pela inserção manual de dados), deve ter a opção de listar todas as músicas da playlist (listagem de uma lista encadeada) na tela e encerrar o programa; */ int menu(); void InserirInicio(int num); void InserirFim(int num); void InserirMeio(int num, int posicao); int Remover(int num); void Listar(); struct ElementoDaLista_Simples { int dado; struct ElementoDaLista_Simples *prox; } *Head; int main() { int op, num, pos, c; Head = NULL; while (1) { op = menu(); switch (op) { case 1: printf("Digite o numero desejado: "); scanf_s("%d", &num); while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado. InserirInicio(num); break; case 2: printf("Digite o numero desejado: "); scanf_s("%d", &num); while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado. InserirFim(num); break; case 3: printf("Digite o numero desejado: "); scanf_s("%d", &num); while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado. printf("Digite a posicao que deseja inserir: "); scanf_s("%d", &pos); while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado. InserirMeio(num, pos); break; case 4: int res; printf("Digite o numero a ser removido: "); scanf_s("%d", &num); while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado. res = Remover(num); if (res == 1) printf("Numero removido."); else printf("Numero nao encontrado."); break; case 5: Listar(); break; case 6: return 0; default: printf("Invalido\n"); } } return 0; } int menu() { int op, c; system("Cls"); printf("1.Inserir no inicio da lista encadeada simples\n"); printf("2.Inserir no fim da lista encadeada simples\n"); printf("3.Inserir no meio da lista encadeada simples\n"); printf("4.Remover da lista encadeada simples\n"); printf("5.Listar a lista encadeada simples\n"); printf("6.Sair\n"); printf("Digite sua escolha: "); scanf_s("%d", &op); while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado. system("Cls"); return op; } void InserirInicio(int num) { ElementoDaLista_Simples *NovoElemento; NovoElemento = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples)); NovoElemento->dado = num; if (Head == NULL) { Head = NovoElemento; Head->prox = NULL; } else { NovoElemento->prox = Head; Head = NovoElemento; } } void InserirFim(int num) { ElementoDaLista_Simples *NovoElemento; NovoElemento = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples)); ElementoDaLista_Simples *ElementoVarredura; ElementoVarredura = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples)); NovoElemento->dado = num; if (Head == NULL) { Head = NovoElemento; Head->prox = NULL; } else { ElementoVarredura = Head; while (ElementoVarredura->prox != NULL) ElementoVarredura = ElementoVarredura->prox; ElementoVarredura->prox = NovoElemento; NovoElemento->prox = NULL; } } void InserirMeio(int num, int posicao) { ElementoDaLista_Simples *NovoElemento; NovoElemento = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples)); ElementoDaLista_Simples *ElementoVarredura; ElementoVarredura = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples)); ElementoDaLista_Simples *ElementoAuxiliar; ElementoAuxiliar = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples)); NovoElemento->dado = num; if (posicao == 0) { Head = NovoElemento; Head->prox = NULL; } else { ElementoVarredura = Head; for (int i = 0; i < posicao - 1; i++) ElementoVarredura = ElementoVarredura->prox; ElementoAuxiliar = ElementoVarredura->prox; ElementoVarredura->prox = NovoElemento; NovoElemento->prox = ElementoAuxiliar; } } int Remover(int num) { ElementoDaLista_Simples *ElementoVarredura; ElementoVarredura = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples)); ElementoDaLista_Simples *Anterior; Anterior = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples)); ElementoVarredura = Head; while (ElementoVarredura != NULL) { if (ElementoVarredura->dado == num) { if (ElementoVarredura == Head) { Head = ElementoVarredura->prox; free(ElementoVarredura); return 1; } else { Anterior->prox = ElementoVarredura->prox ; free(ElementoVarredura); return 1; } } else { Anterior = ElementoVarredura; ElementoVarredura = ElementoVarredura->prox; } } return 0; } void Listar() { ElementoDaLista_Simples *ElementoVarredura; ElementoVarredura = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples)); ElementoVarredura = Head; if (ElementoVarredura == NULL) { return; } while (ElementoVarredura != NULL) { printf("%d ", ElementoVarredura->dado); ElementoVarredura = ElementoVarredura->prox; } printf("\n"); system("pause"); return; } Link to post Share on other sites
HappyHippyHippo 1,162 Posted April 9, 2019 Report Share Posted April 9, 2019 E a dúvida é? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to post Share on other sites
Hedson 0 Posted April 9, 2019 Author Report Share Posted April 9, 2019 eu preciso transformar ele em um emulador de player de musica.... e não sei como fazer Link to post Share on other sites
M6 149 Posted April 10, 2019 Report Share Posted April 10, 2019 9 hours ago, Hedson said: eu preciso transformar ele em um emulador de player de musica.... e não sei como fazer Tens de colocar as dúvidas de forma clara e concreta. Se necessitas de ajuda mais profunda sem saber o que tens de fazer, vais ter de as esclarecer com o teu professor. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to post Share on other sites
antseq 82 Posted April 10, 2019 Report Share Posted April 10, 2019 Viva, Se "entendeu" na aula o exercício que está acima, o segundo trabalho é bastante mais fácil. * na aula, guarda na "estrutura" apenas "int dado" => no segundo trabalho terá de uma estrutura algo como: nome, artista/banda e duração de cada música * na aula, implementou 3 tipos de inserção (início, meio, fim) => no segundo trabalho fica ao seu critério * na aula, implementou a leitura de dados (inserção) de um "número" => no segundo trabalho terá de pedir nome, artista/banda e duração de cada (estrutura) música * na aula, implementou as opções de eliminar e listar => no segundo trabalho são idênticas * não sei se o fez na aula, mas no segundo trabalho diz que pode ler/armazenar a lista (músicas) em disco * neste ponto já terá seu "player" com músicas e todas as opções de manutenção da lista implementadas (armazenar, listar, inserir no inicio/meio/fim, eliminar) * só lhe fica a faltar simular o "PLAY" e outras opções comuns num "player" (aleatório, repetir, etc). sugestão : como tem a duração da música, enquanto faz "play" mostre os dados da música "nome, banda, duração" e uns "pontos......." a cada X segundos para "simular" que algo está a tocar baseado na tal duração ou qualquer outra animação "básica" que consiga fazer só para dar ideia (simulada) de que algo está a acontecer (barra de progresso). boa programação Link to post Share on other sites
Hedson 0 Posted April 14, 2019 Author Report Share Posted April 14, 2019 Em 10/04/2019 às 13:12, antseq disse: Viva, Se "entendeu" na aula o exercício que está acima, o segundo trabalho é bastante mais fácil. * na aula, guarda na "estrutura" apenas "int dado" => no segundo trabalho terá de uma estrutura algo como: nome, artista/banda e duração de cada música * na aula, implementou 3 tipos de inserção (início, meio, fim) => no segundo trabalho fica ao seu critério * na aula, implementou a leitura de dados (inserção) de um "número" => no segundo trabalho terá de pedir nome, artista/banda e duração de cada (estrutura) música * na aula, implementou as opções de eliminar e listar => no segundo trabalho são idênticas * não sei se o fez na aula, mas no segundo trabalho diz que pode ler/armazenar a lista (músicas) em disco * neste ponto já terá seu "player" com músicas e todas as opções de manutenção da lista implementadas (armazenar, listar, inserir no inicio/meio/fim, eliminar) * só lhe fica a faltar simular o "PLAY" e outras opções comuns num "player" (aleatório, repetir, etc). sugestão : como tem a duração da música, enquanto faz "play" mostre os dados da música "nome, banda, duração" e uns "pontos......." a cada X segundos para "simular" que algo está a tocar baseado na tal duração ou qualquer outra animação "básica" que consiga fazer só para dar ideia (simulada) de que algo está a acontecer (barra de progresso). boa programação meu amigo... veja como estou desenvolvendo, se puder me ajudar eu agradeço #include <stdio.h> #include <stdlib.h> #include <string.h> struct Play_list { char musica[30]; char Artista[30]; float duracao; struct Play_list *proximo; }; struct Play_list * cria(void) { return NULL; } struct Play_list * insere(struct Play_list * l, char * musica, char * Artista, float duracao) { struct Play_list * novo = (struct Play_list *) malloc(sizeof(struct Play_list)); strcpy(novo->musica, musica); strcpy(novo->Artista, Artista); novo->duracao = duracao; novo->proximo = l; return novo; } void imprime(struct Play_list * l) { struct Play_list * p; for(p = l; p != NULL; p = p->proximo) { printf("Musica : %s \n", p->musica); printf("ARTISTA : %s \n", p->Artista); printf("Duracao : %.2f \n", p->duracao); } } int busca(struct Play_list * l, char * musica) { struct Play_list * p; int i = 1; for(p = l; p != NULL; p = p->proximo) { if(strcmp(musica, p->musica) == 0) { printf("Musica: %s %s %s \n", p->musica); return i; } i++; } return 0; } main() { char grupo[30], artista[30]; float duracao; struct Play_list * l; char resp = 's'; char procura[30]; printf(" ************************ \n"); printf("| PLAYER |\n"); printf("| DE |\n"); printf("| MUSICAS |\n"); printf("| |\n"); printf(" ************************ \n"); printf("\n\n"); l = cria(); while(resp != 'n') { printf("Qual eh a Musica? \n"); scanf("%[^\n]", grupo); fflush(stdin); printf("De quem eh a musica? \n"); scanf("%[^\n]", artista); fflush(stdin); printf("Qual eh o duracao? \n"); scanf("%f", &duracao); fflush(stdin); l = insere(l, grupo, artista, duracao); printf("Continua? s/n \n"); scanf("%c", &resp); fflush(stdin); } imprime(l); printf("Qual musica quer ouvir? \n"); scanf("%s", procura); printf("Esta musica esta na posicao %d da play list\n", busca(l, procura)); system("pause"); } Link to post Share on other sites
antseq 82 Posted April 15, 2019 Report Share Posted April 15, 2019 21 horas atrás, Hedson disse: meu amigo... veja como estou desenvolvendo, se puder me ajudar eu agradeço Assim a primeira vista, parece ir no bom caminho continue e desenvolver! sugestões: 1- não afecta o programa em termos de funcionamento: em termos de "convenções", não sei se o seu professor vai AVALIAR mesma, devia seguir sempre o mesmo critério (da linguagem C/C++) OU usar o mesmo indicado/exemplificado pelo professor nas aulas: na aula: estrutura: ElementoDaLista_Simples: CamelCase, Snake_Underscore? funções: InserirFim: CamelCase variáveis: int dado: lowercase no novo exercício: estrutura: Play_list: ? => Sugestão PlayList funções: imprime : lowercase => OK ou fazer como na "aula" Imprime() variáveis: char musica : lowercase => OK variáveis: char Artista : CamelCase => artista variáveis: float duracao : lowercase => OK 2- no "main" é necessário elaborar um pouco mais o "menu de opções" 2.1 : separar o "menu" para uma função própria "menu()" 2.2 : no "menu" : como na "aula" fazer "CLS" 2.3 : no "menu" : como na "aula" mostrar as opções de menu "1. ", "2. ", ... 2.4 : no "menu" : devolver ao "main" a opção seleccionada cps, Link to post Share on other sites
Hedson 0 Posted April 18, 2019 Author Report Share Posted April 18, 2019 meu amigo antseq .... estou com um problema na busca da musica ... tipo depois de inserir as musicas pelo case 1 do menu, quando eu vou utilizar o 2 ele não funciona e já no 3 ele lista normal... pode me ajudar e ver o que poderia ser??? #include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> /*Faça um algoritmo em linguagem C que emule as características de um player de músicas sendo executado em modo texto, via prompt de comando. 1. Deve-se criar uma playlist das músicas utilizando uma lista encadeada. A lista encadeada poderá ser simples ou dupla, circular ou não circular. Fica a critério do aluno decidir. 2. Deve-se armazenar o nome de cada música, do artista/banda e a duração da faixa. Para o armazenamento utilize uma estrutura heterogênea de dados. 3. Para inserção dos dados, você pode criar uma leitura dos dados através de um menu na tela ou já deixá-los armazenados em um arquivo texto no seu computador e só carregar este arquivo ao executar o programa. Ou ambas soluções. Decida também como você irá implementar a inserção (no início, no fim ou no meio da lista encadeada); 4. Deve existir um menu na tela. Este menu deve permitir a inserção de novas músicas (caso optado pela inserção manual de dados), deve ter a opção de listar todas as músicas da playlist (listagem de uma lista encadeada) na tela e encerrar o*/ struct Lista { char musica[40], cantor[40]; float duracao; Lista* prox; }; Lista* inicio, * fim, * aux; void inserirMusica() { int c; Lista* novo = (struct Lista*)malloc(sizeof(struct Lista)); printf("\nQual é a musica? "); fgets(novo->musica, 39, stdin); printf("De quem é a musica? "); fgets(novo->cantor, 39, stdin); printf("qual a duração da musica? "); scanf_s("%f", &novo->duracao); while ((c = getchar()) != '\n' && c != EOF) {} // Limpar buffer do teclado novo->prox = NULL; if (inicio == NULL) //A Fila esta vazia e iremos inserir o primeiro elemento { inicio = fim = novo; } else { fim->prox = novo; fim = novo; } } void esvaziarLista() { char ch; if (inicio == NULL) { printf("\nA fila esta vazia!\n\n"); } else { printf("\nTem certeza que deseja esvaziar toda a lista?(s/n): "); ch = getchar(); if (ch == 's' || ch == 'S') { while (inicio != NULL) { aux = inicio; inicio = inicio->prox; free(aux); // Libera o espaco na memoria } printf("\nA lista foi esvaziada com sucesso!!\n\n"); } else { printf("\nA lista nao foi esvaziada!!\n\n"); } } } void mostrarLista() { aux = inicio; if (inicio == NULL) { printf("\nA lista esta vazia!"); } else { while (aux != NULL) { printf("musica: %s", aux->musica); printf("cantor: %s", aux->cantor); printf("duração: %.2f\n\n", aux->duracao); aux = aux->prox; } } printf("\n\n"); } void localizarMusica() { aux = inicio; if (inicio == NULL) { printf("\nA lista está vazia!!!! :("); } else { char musica[40]; printf("Digite a musica que procura: "); fgets(aux->musica,39, stdin); while (aux != NULL) { if (musica == aux->musica) { printf("\nMúsica %40s localizada!\n\n", aux->musica); printf("música %40s", aux->musica); printf("cantor: %s\n\n", aux->cantor); printf("duração: %.2f\n\n", aux->duracao); return; } else { aux = aux->prox; } } if (aux == NULL) { printf("\nMusica %s nao localizada!\n", musica); } } printf("\n\n"); } int main() { setlocale(LC_ALL, "portuguese"); system("color 0E"); int opt, c; do { printf("*==================================*\n"); printf("| Simulador de Player de Música |\n"); printf("*==================================*\n\n\n\n"); printf("*===========================*\n"); printf("| 1. Inserir Música |\n"); printf("| 2. Pesquisar Músicas |\n"); printf("| 3. listar Músicas |\n"); printf("| 4. Limpar Lista do Player |\n"); printf("| 5. Sair |\n"); printf("*===========================*\n"); printf("Digite sua escolha: "); scanf_s("%d", &opt); while ((c = getchar()) != '\n' && c != EOF) {} // Limpar buffer switch (opt) { case 1: inserirMusica(); printf("\nMusica inserida com sucesso!!\n\n"); system("pause"); break; case 2: localizarMusica(); system("pause"); break; case 3: mostrarLista(); system("pause"); break; case 4: esvaziarLista(); system("pause"); break; case 5: printf("\nO programa foi encerrado com sucesso!!\n\n"); system("pause"); break; default: printf("\nEscolha Invalida!!\n\n"); system("pause"); break; } system("cls"); } while (opt != 5); return 0; } Link to post Share on other sites
antseq 82 Posted April 20, 2019 Report Share Posted April 20, 2019 Em 18/04/2019 às 23:53, Hedson disse: meu amigo antseq .... estou com um problema na busca da musica ... tipo depois de inserir as musicas pelo case 1 do menu, quando eu vou utilizar o 2 ele não funciona e já no 3 ele lista normal... pode me ajudar e ver o que poderia ser??? Viva, Penso que o problema no caso "2" está nesta linha: fgets(aux->musica,39, stdin); Aqui queres ler o "input" (stdin) do utilizador para sua variável local "musica" (char musica[40]) e não para "aux->musica". Depois sim, vais comparar a "musica" (lida) em toda a sua lista "aux-musica". cps, Link to post Share on other sites
Hedson 0 Posted April 21, 2019 Author Report Share Posted April 21, 2019 8 horas atrás, antseq disse: Viva, Penso que o problema no caso "2" está nesta linha: fgets(aux->musica,39, stdin); Aqui queres ler o "input" (stdin) do utilizador para sua variável local "musica" (char musica[40]) e não para "aux->musica". Depois sim, vais comparar a "musica" (lida) em toda a sua lista "aux-musica". cps, Não entendi amigo, desculpe a ignorância... e ficaria como a expressão??? fgets(musica, 39, stdin);??? não funcionou apareceu "música (null) não localizada!" Link to post Share on other sites
antseq 82 Posted April 21, 2019 Report Share Posted April 21, 2019 18 horas atrás, Hedson disse: Não entendi amigo, desculpe a ignorância... e ficaria como a expressão??? fgets(musica, 39, stdin);??? não funcionou apareceu "música (null) não localizada!" Sim é isso, primeiro tem de ler a música que quer procurar para uma variável "musica" e só depois é que vai procurar a mesma na lista. Não entendo como está a fazer o fgets da "musica" e no fim mostra "null" !? Veja este exemplo abaixo. Se o fgets ler a "musica" correctamente, depois mais tarde o printf mostra a "musica" correctamente e NÃO "(null)": int main() { char musica[40]; printf("Digite a musica que procura: "); fgets(musica, 39, stdin); printf("Musica a procurar: %s\n", musica); return 0; } Output: Digite a musica que procura: xpto Musica a procurar: xpto P/f verifique o seu código na leitura (fgets) da "musica"... se necessário coloque um "printf" logo a seguir para ter a certeza que está a ler bem o "input" para a variável "musica". cps, Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now