Ir ao conteúdo
  • Cadastre-se

C Emulador de um player em linguagem C


Posts recomendados

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <locale.h>

struct ListaArtista {
	char musica[50], Cantor [50];
	float duracao;
	ListaArtista* prox;
}; ListaArtista* inicio, * meio, * fim* aux;

void inserirmusica() {
	int c;
	ListaArtista* novo = (struct ListaArtista*) malloc(sizeof(struct ListaArtista));
	printf("\nescolha amusica");
	fgets(novo->musica, 49, stdin);

	printf("nome do Cantor");
	fgets(novo->cantor, 49, stdin);

	printf("tempo total da musica");
	scanf(| "%f", &novo->tempo);


	while ((c = getchar()) != '\n' && c != EOF{} // Retirar buffer teclado 

	novo->prox = NULL;

	if (inicio == NULL)
}
inicio = fim = novo;

}
else {
fim->prox = novo;
fim = novo;
}
}
void LimparLista() {
	char ch;
	if (inicio == NULL) {
		printf("\nLista");
	}
	else {
		printf("s\n");
		ch = gecthar();
		if (ch == 's' || ch == 's') {
			while inicio->prox;
			free(aux);
		}
		printf("\nLista vazia");
	}
}
}
void VizualizarLista() {

	aux = inicio;
	if (inicio == NULL)
}
printf("\n Lista vazia!");
}
else {
while (aux != NULL) {
	printf("musica:%s", aux->musica);
	printf("cantor:%s", aux->cantor);
	printf("tempo: %f \n", aux = > tempo);
	aux = aux->prox;
}
}
print('\n');
}
void BuscarMusica()
{
	aux + inicio;
	if (inicio == NULL)
}
printf("\nLista vazia");
}
else
{
char musica[50];
printf("Digite a faixa:");
scanf("%s", &aux);
while (aux != NULL)
}
if (musica == aux->musica) {
	printf("\n musica %s localizada" aux->musica);
	printf("musica %s", aux->musica);
	printf("cantor: %s", aux->cantor);
	return;
}
else {
	aux = aux->prox;
}
}
if (aux == NULL) {
	printf("\n Sorry \nMusica %s nao localizada!", musica);
}
printf("\n");
int main() {
	setlocale(LC_ALL, "");
	int opc, c;
	do {
		printf("1.Inserir musica\n");
		printf("2.Buscar musica\n");
		printf("3.Ver Lista\n");
		printf("Apagar Lista\n");
		printf("Sair\n");
		printf("Marque a opção");
		scanf_s("%d", &opc);

		while ((c == getchar()) != 'n' && c != EOF) {}
		switch (opc) {
		case 1:
			inserirMisica();
			system("pause");
			break;
		case 2:
			BuscarMusica();
			system("pause");
			break;
		case 3:
			VerLista();
			system("pause");
			break;
		case 4:
			ApagarLista();
			system("pause");
			break;
		case 5:
			exit;
			break;
		defalt:
			printf("Nenhuma opcao selecionada");
			break;
		}
		system("cls");
	} while (opc != 5);
	return 0;
}

Boa Tarde, preciso desenvolver um player em linguagem C e estou com dificuldade na hora de compilar, vários erros. alguém pode me ajudar?

 

meu código! É um trabalho para a faculdade!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Olá!

 

Não é bem um emulador de player, certo? Apenas um gerenciador de playList parece.

 

Sempre escrevo isso, então:

 

Citação

Não misture nunca por razão alguma seus dados com a estrutura. Você será uma pessoa mais feliz se puder, em seu próximo exercício que envolva listas, usar exatamente esse código, sem mudar uma linha...


Do jeito que fez não vai dar. Depois te mostro um exemplo.

 

Vou tentar compilar seu programa...

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

12 minutos atrás, arfneto disse:

Olá!

 

Não é bem um emulador de player, certo? Apenas um gerenciador de playList parece.

 

Sempre escrevo isso, então:

 


Do jeito que fez não vai dar. Depois te mostro um exemplo.

 

Vou tentar compilar seu programa...

 

Eu coloquei como emulador por que no cabeçalho do exercício esta como emulador.

Mas desde já agradeço!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Talvez deva prestar mais atenção ao digitar. Tem erros muito bestas que vão fazer você perder tempo a toa.

 

Veja por exemplo

struct ListaArtista {
	char musica[50], Cantor[50];
	float duracao;
	ListaArtista* prox;
}; ListaArtista* inicio, * meio, * fim* aux;
  • está declarando ListaArtista antes e depois das chaves. Como assim? 
  • E está declarando nada menos que 3 ponteiros para a tal lista? inicio, meio e fim? E aux? Não devia ter uma vírgula antes? E com esses nomes? 

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

40 minutos atrás, Aenderson Gonçalves disse:

não entendi amigo, desculpa! sou iniciante rs

 

Então talvez como iniciante pudesse ter dito que não entendeu e perguntado algo. Aí você me ajudaria a entender a sua dificuldade e te ajudar.

 

Vou te mostrar um exemplo. Espero que pergunte algo se não entender

 

É um roteiro de como pensar antes de começar a escrever o código. E depois escrever o mais importante nesse caso, que é a abstração, a estrutura de dados que vai afinal conter suas músicas.

  • Uma música tem, segundo o enunciado um nome, um autor e a duracao. Não vejo razão para usar um float para identificar a duração da musica. Pense bem: quer que alguém digite que a musica tem 3,652 minutos? Não crie problemas para você mesmo. Faça o cara digitar minutos e segundos e grave os dois valores.
  • Uma playlist é uma lista de músicas. Seria legal saber quantas músicas tem na lista e dar um nominho para ela. Assim pode ter lá no emulador o nome da playlist em execução. Seria razoável. Ou não?
  • A playlist vai ser implementada usando essa tal lista encadeada. Em C.
  • A lista encadeada é uma série de dados do mesmo tipo, onde cada um aponta para o próximo e talvez para o anterior. Quando usar os 2 ponteiros? A escolha é óbvia: se não sabe a música anterior não pode, digamos, voltar para a música anterior... Uma playlist de mão única é algo esquisito, mas a escolha é do autor.


Certo?

 

Então:
 

Proposta para a música:

struct musica
{
	char faixa[50];
	char artista[50];
	int  minutos;
	int  segundos;
};
typedef struct musica Musica;

Só o que tem no enunciado. Mas assim pode escrever

    Musica        umaMusica;

Um exemplo de musica

    // cria uma musica so para ver com escreve
    const char* ex_musica = "Pet Sematery";
    const char* ex_artista = "Ramones";
    Musica        umaMusica;
    strcpy(umaMusica.faixa, ex_musica);
    strcpy(umaMusica.artista, ex_musica);
    umaMusica.minutos = 3;
    umaMusica.segundos = 32;

A lista podia ser assim:

 

struct itemDaLista
{
    Musica* musica;
    struct itemDaLista* proxima;
    struct itemDaLista* anterior;
};
typedef struct itemDaLista Lista;

Sem inventar: cada elemento da lista é... uma música. Só isso. E você pode voltar e avançar as músicas, tipo uma playlist

E se for criar listas de outra coisa é só mudar o ponteiro.
 

E a playlist como podia ser?

 

struct umaPlaylist
{
    int        total;
    char    nome[30];
    Lista*    musicas;
};
typedef struct umaPlaylist Playlist;


 

Sem surpresas: a playlist tem um nome e um certo número de músicas para você poder mostrar na tela.

 

Exemplo acessando musicas, listas e playlist.

 

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

struct musica
{
	char faixa[50];
	char artista[50];
	int  minutos;
	int  segundos;
};
typedef struct musica Musica;

struct itemDaLista
{
	Musica* musica;
	struct itemDaLista* proxima;
	struct itemDaLista* anterior;
};
typedef struct itemDaLista Lista;

struct umaPlaylist
{
	int		total;
	char	nome[30];
	Lista*	musicas;
};
typedef struct umaPlaylist Playlist;

int main(int argc, char** argv)
{
	// cria uma musica so para ver com escreve
	const char* ex_musica = "Pet Sematery";
	const char* ex_artista = "Ramones";
	Musica		umaMusica;
	strcpy(umaMusica.faixa, ex_musica);
	strcpy(umaMusica.artista, ex_musica);
	umaMusica.minutos = 3;
	umaMusica.segundos = 32;

	// como seria uma lista de musicas
	Lista* lista;
	// so vamos usar listas DENTRO da playlist
	// porque e mais esperto

	// umas playlists zeradas

	Playlist* Jazz;
	Playlist* Colecao[10]; // 10 playlists porque nao?

	// grava uma playlist BrainDrain
	// primeiro aloca a memoria para ela
	Playlist* BrainDrain = (Playlist*)malloc(sizeof(Playlist)); 
	strcpy(BrainDrain->nome, "Brain Drain '89"); // nome
	BrainDrain->total = 0;
	BrainDrain->musicas = NULL; // vazia por enquanto

	// so um exemplo mas so pra acostumar
	// no final apaga tudo para nao dar  m.
	free(BrainDrain);

	return 0;
};	// main()

Não faz sentido?

adicionado 11 minutos depois
13 minutos atrás, Aenderson Gonçalves disse:

@arfneto Ah sim, no caso eu poderia ter declarado só na primeira linha? já seria o suficiente? seria isso? 


struct ListaArtista { inicio, * meio, * fim* aux;
	char musica[50], Cantor[50];
	float duracao;
	ListaArtista* prox;
}

 

 

que são essas coisas dentro das chaves? inicio, *meio e tal? Você tem um livro-texto? Uma apostila? Que curso você faz?

 

declare entre as chaves o que está dentro da estrutura.

 

Depois das chaves as variáveis que são desse tipo de estrutura.

E depois do struct o nome da própria. 

 

Leia o programa que te mostrei. Com atenção.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

7 minutos atrás, Aenderson Gonçalves disse:

entendi sua colocação, to quebrando a cabeça, vendo videos mas meu codigo nao funciona

 

Mas eu te mostrei um exemplo com todos os itens. O que você não entendeu? Não perguntou nada e foi "ver vídeos" sobre isso? Uma solução está aí em cima...

 

Poste seu código. Testou o exemplo que te mostrei? Tem quase tudo que precisa...

Link para o comentário
Compartilhar em outros sites

@arfneto Sim.. muito boa sua explicação, fico muito grato em estar disponibilizando do seu tempo pra me ajudar, estava vendo o vídeo por que no enunciado da minha questão pede pra ver, não consegui aplicar seu código com o enunciado do meu exercício só isso.Vou te mostrar o enunciado........

 

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 programa;
Utilize como base o código de listas da AULA PRÁTICA 2 da disciplina.

Link para o comentário
Compartilhar em outros sites

3 minutos atrás, Aenderson Gonçalves disse:

não consegui aplicar seu código com o enunciado do meu exercício só isso.Vou te mostrar o enunciado........

 

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 programa;
Utilize como base o código de listas da AULA PRÁTICA 2 da disciplina

 

Duas coisas:

 

  • Como não conseguiu aplicar o código que faz exatamente o que está escrito lá? Qual foi a dificuldade?

 

  • Pode postar esse código da tal lista de aula prática e podemos te ajudar a escrever um programa assim.

 

Entendeu afinal o que eu disse inicialmente sobre misturar os dados?

 

Em 01/04/2020 às 15:21, arfneto disse:

Sempre escrevo isso, então:

 

Citação

Não misture nunca por razão alguma seus dados com a estrutura. Você será uma pessoa mais feliz se puder, em seu próximo exercício que envolva listas, usar exatamente esse código, sem mudar uma linha...


Do jeito que fez não vai dar. Depois te mostro um exemplo

 

É importante. Ao menos eu acho que é... Enquanto não entender isso vai trabalhar muito mais...

Link para o comentário
Compartilhar em outros sites

@arfneto Na aula pratica dois tem tres tipo de codigos diferentes, mas nenhum deles roda no meu visual studio.

 

sao eles:

Com Lista
  
  #include<stdio.h>
#include<conio.h>
#include<stdlib.h>

struct QUEUE
{
	int dado;
	QUEUE *prox;
}*Head = NULL, *Tail = NULL;

void queue(int valor);
void dequeue();
void display();

int main()
{
	int op, valor, c;

	while (1) {

		system("cls");
		printf("\n****** MENU ******\n");
		printf("1. Colocar na Fila\n2. Remover da Fila\n3. Listar\n4. Sair\n");

		printf("Escolha sua opcao: ");
		scanf_s("%d", &op);
		while ((c = getchar()) != '\n' && c != EOF) {}

		switch (op) {
		case 1:
			printf("Digite um valor para ser inserido: ");
			scanf_s("%d", &valor);
			while ((c = getchar()) != '\n' && c != EOF) {}
			queue(valor); //insere no fim da fila
			break;
		case 2:
			dequeue(); //remove no inicio da fila
			break;
		case 3:
			display();
			break;
		case 4:
			exit(0);
		default:
			printf("\nDigite outra opcao.\n");
		}
	}

	system("pause");
	return 0;

}
void queue(int valor)
{
	QUEUE *NovoElemento;
	NovoElemento = (struct QUEUE*)malloc(sizeof(struct QUEUE));
	NovoElemento->dado = valor;

	NovoElemento->prox = NULL;
	if (Head == NULL)
	{
		Head = NovoElemento;
		Tail = NovoElemento;
	}
	else //insere depois do Head
	{
		Tail->prox = NovoElemento;
		Tail = NovoElemento;
	}
	printf("\nInserido com sucesso.\n");
}
void dequeue()
{
	QUEUE *ElementoVarredura = Head;

	if (Head == NULL)
		printf("\nFila vazia.\n");
	else
	{
		Head = Head->prox;
		printf("\nElemento Deletado: %d\n", ElementoVarredura->dado);
		free(ElementoVarredura);
	}
	system("pause");
}
void display()
{
	QUEUE *ElementoVarredura = Head;

	if (Head == NULL)
		printf("\nFila vazia!!!\n");
	else {

		while (ElementoVarredura->prox != NULL) {
			printf("%d--->", ElementoVarredura->dado);
			ElementoVarredura = ElementoVarredura->prox;
		}
		printf("%d--->NULL", ElementoVarredura->dado);
	}
	printf("\n");
	system("pause");
}

Simples:

#include<stdio.h>							   
#include<stdlib.h>

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;
}

Pilha com Lista
  
  #include<stdio.h>
#include<conio.h>
#include<stdlib.h>

struct STACK
{
	int dado;
	STACK *prox;
}*top = NULL;

void push(int value);
void pop();
void display();

int main()
{
	int op, value, c;

	while (1) {
		system("cls");
		printf("\n****** MENU ******\n");
		printf("1. Empilhar/Push\n2. Desempilhar/Pop\n3. Listar\n4. Sair\n");

		printf("Escolha sua opcao: ");
		scanf_s("%d", &op);
		while ((c = getchar()) != '\n' && c != EOF) {}

		switch (op) {
		case 1:
			printf("Digite um valor para ser inserido: ");
			scanf_s("%d", &value);
			while ((c = getchar()) != '\n' && c != EOF) {}
			push(value); //empilha
			break;
		case 2:
			pop(); //desempilha
			break;
		case 3:
			display();
			break;
		case 4:
			exit(0);
		default:
			printf("\nDigite outra opcao.\n");
		}
	}

	system("pause");
	return 0;

}
void push(int value)
{
	STACK *NovoElemento;
	NovoElemento = (struct STACK*)malloc(sizeof(struct STACK));
	NovoElemento->dado = value;

	if (top == NULL)
		NovoElemento->prox = NULL;
	else
		NovoElemento->prox = top;
	top = NovoElemento;
	printf("\nInserido com sucesso.\n");
}
void pop()
{
	if (top == NULL)
		printf("\nPilha vazia.\n");
	else {
		STACK *temp = top;
		printf("\nElemento Eletado: %d", temp->dado);
		top = temp->prox;
		free(temp);
	}
	printf("\n");
	system("pause");
}
void display()
{
	STACK *ElementoVarredura = top;

	if (top == NULL)
		printf("\nPilha vazia!!!\n");
	else {
		
		while (ElementoVarredura->prox != NULL) 
		{
			printf("%d\n", ElementoVarredura->dado);
			ElementoVarredura = ElementoVarredura->prox;
		}
		printf("%d\n", ElementoVarredura->dado);
	}
	system("pause");
	
}

 

 

Link para o comentário
Compartilhar em outros sites

Postei os tres juntos, a minha dificuldade é que o meu código não compila, sempre aparece erro atras de erro 

adicionado 3 minutos depois
6 minutos atrás, arfneto disse:

Vou ler esse código...

 

E sobre a primeira pergunta? Qual seria a dificuldade?

 código que você me apresentou eu copiei e colei no visual studio ele não rodou, eu tentando encontrar o erro acabei piorando e não conseguir executar de jeito nenhum

Link para o comentário
Compartilhar em outros sites

Estava achando familiar essa diuscussão. Semanas atrás eu postei um código aqui que trata disso.

 

Playlists e listas ligadas, em 

Talvez você devesse ler. Tem as justificativas e um programa que funciona...

 

Li os programas e lamento por ser sua apostila. São bem ruins. Exemplos de código para pilhas e listas e estruturas de dados estão disponíveis por todo lado na internet, e esses de sua apostila são muito ruins. 

 

Até cursos completos de estruturas de dados estão disponíveis de graça online, e você acabar com um material de referência com um código desses é triste.

 

Eis o que posso dizer:

 

Estruturas de dados como essas tais listas são genéricas e se manipulam através de ponteiros, em C. Em outras linguagens isso vem de graça. No tópico acima eu mostro exemplos em java e C++ e mostro um código que trata exatamente uma playlist...

 

Da sua apostila, por exemplo...

 

void push(int value); // +
void pop(); // - 
void display();// peek()

Isso para tratar uma pilha. Não se escreve assim. 

 

Procure um livro ou outra referência.

 

O que está errado?

 

pilha é uma estrutra genérica, uma abstração. Imagine uma pilha de suas músicas.

 

Então push() coloca algo na pilha. No mundo inteiro se declara

 

int push(Pilha*, Dado*);

 

Você pode ter várias pilhas no programa ao mesmo tempo então quando você vai empilhar algo você diz o que vai empilhar e onde. O simples. Você não escreve push(30) como seu professor escreveu.

 

Você escreve

Pilha*	musicas;
Pilha*  pratos;

Musica uma_musica;
Prato	um_prato;
...

if ( push(musicas, &uma_musica) == ok )...

if ( push(pratos, &um_prato) == ok )...

...

 

O mesmo vale claro para pop(), display() e tal...

 

Acho que entendeu... Simplesmente não é assim como está em sua "apostila".

 

Não me surpreende que tenha dificuldade

 

continue escrevendo

 

adicionado 3 minutos depois
17 minutos atrás, Aenderson Gonçalves disse:

código que você me apresentou eu copiei e colei no visual studio ele não rodou, eu tentando encontrar o erro acabei piorando e não conseguir executar de jeito nenhum

 

Hum...

 

 

Não tem nenhum erro lá... Pode me dizer o que fez? O troço tem umas 50 linhas e metade é comentário.....

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

1 minuto atrás, Aenderson Gonçalves disse:

Pois é... aí fica difícil aprender mesmo, esse código foi o professor que deixou

 

Entendo sua dificuldade. 

Não é questão de opinião. Está bem ruim mesmo. Como te disse tem muitos exemplos na internet disso e vai ver que todos seguem a linha que te expliquei.

 

Na verdade você poderia criar seu programa em torno de pilhas, usando lista encadeada para criar as tais pilhas mas seria bobagem. Como já falamos, o simples é uma lista encadeada com ponteiros para frente e para trás, para o cara poder navegar nas músicas. E usando uma estrutura como a que eu te mostrei, onde a playlist tem até um nome e um total de m;úsicas...

 

Sem inventar

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

🤔

Está escrito na tela. Seu ambiente está configurado para rejeitar o uso dessas funções, como strcpy() e scanf() em prol de versões mais seguras, que em geral terminan por '_s' e está também escrito aí. Só que como muitos usam linux ou Mac e ambientes que podem não ter essas funções eu não coloco em um exemplo.

 

Ou você configura o ambiente aí ou acrescenta essa linha em seus programas. como está escrito aí na tela também.

#define _CRT_SECURE_NO_WARNINGS

Mas como conseguiu usar isso até hoje sem saber isso? Nunca tinha usado o compilador da Microsoft para escrever seus programas?

 

 

adicionado 19 minutos depois

O programa que usa playlist do jeito que eu te expliquei está nesse endereço para download já como projeto do visual studio https://github.com/ARFNeto-CH/chc-200402play e tem a ver com o tópico do outro dia. Mas é a mesma coisa. É importante que você entenda isso se quer seguir adiante com essas coisas de desenvolvimento. A estrutura que eu usei está em um lugar separado. Dá pra usar todo dia. Não precisa nem compilar de novo. É pra isso que a gente escreve essas coisas.

 

O programa principal pode ser visto em https://github.com/ARFNeto-CH/chc-200402play e você vai ver que ele sequer tem as funções da lista. Entende como é importante não misturar as coisas? O menu por exemplo está em um arquivo texto que você pode editar pra corrigir e alinhar, sem alterar o programa.

 

É só um exemplo. A estrutura que te mostrei é melhor. Mas deve te ajudar a entender.

 

Veja por exemplo 

Lista*  inserir(void*, Lista*);
int     listar(Lista*);

Inserir na lista e mostrar a lista não tratam do conteúdo. Recomendo muito ler aquele tópico anterior

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Olá!

1- Sobre a pergunta:

“Pessoal estou com um problema no meu código podem me ajudar?”

 

R: O problema de seu código foi resolvido, se ele não executava, como mostrava na linha do console do Visual Studio com símbolos de ‘alerta amarelo’, foi porque eu tinha no compilado  DevC++, e não  no Visual. Era pra esse software compilasse sem problema.

 

Outra coisa que você não prestou a atenção no Enunciado acima foi que Menu principal, as opções a ser atribuídos eram na minha opinião assim:

 

1- inserir nova música -

1.1 - Banda/artistas-

1.2 - Nome da música-

1.3 - Duração-

2- Listas de Bandas e Faixas.

2.1 - Listas das Banda/artistas e músicas com duração -

3- Sair.

Opção.: Exemplo[ 1.1] ou [2.1]

Obs.: Ai e, por exemplo, se seleciona-se a Opção 2.1, o usuário e a cair na lista de: “ 2.1 - Listas das Banda/artistas e músicas com duração - “. Pelo menos é o que parece!

 

Por isso que eu achei muito estranhos, que o Menu principal criado era:

1- Inserir Musica.

-Selecione a artista:

-Selecione a Musica

2- Procurar musica. <- Não deve ter!

3- Limprar lista.       <- Não deve ter!

4- Ver Listas.

5- sair.

Escolha uma Opcao:

 

Sabendo disso, é só você fazer todo passo a passo com algoritmo.

 

 

2- Sobre o segundo problema:

“é o executável está funcional mas ainda sim apresenta o mesmo erro.

A única opção que não funciona de maneira alguma é a Primeira para adicionar a música.”

 

R: Nesse caso era pra que você fizesse todo algorítimo, já que não tinha nada. Então não é possível entregar o programa totalmente pronto por se tratar de trabalhos acadêmicos. Todos apenas pode ajudá-lo a tentar informar com soluções viáveis pra que o desenvolvedor possa fazer. Eu fiz um exemplo de como deveria ficar pra que você Insira o algoritmo na opção de ‘Cadastrar Musicas’. Também a forma que fiz, é só pra que você tenha ideia de como ficaria.

 

#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string>
#include <cctype>
#include <iomanip>
#include <locale>

using namespace std;

int main(int argc, char* argv[])
{
    fstream arq;
    char menu = 's', list = 'a';
    string banda, music, secq, temp;;

    arq.open("PlayList.txt", ios::out | ios::app);
    setlocale(LC_ALL, "Portugueses");

    while (menu == 's')
    {
        cout << "\n" << " Banda | Artista: ";
        getline(cin, banda);
        arq << "Banda | Artista: " << banda << endl;

        do {
            cout << " Nome da Musica: ";
            getline(cin, music);
            arq << "Musica: " << music << endl;

            cout << " Duracao da Musica: ";
            getline(cin, temp);
            arq << "Duracao: " << temp << endl;
           
            cout << "\n======================= Musica cadastrado com Sucesso!!! =====================================";
                       
            cout << "\n "<< "\t\t" << " Deseja adicionar mais musicas? [a'SIM'|n'Nao']: ";
            cin >> list;
            cin.ignore();
        } while (list == 'a');

        cout << "\n" <<"\t\t\t" << " Quer cadastrar uma nova Banda/Artista:? [s/n]: ";
        cin >> menu;
        cin.ignore();
        system("cls");
    }
    cout << "\n================================================================================" << endl;
    arq.close();

    arq.open("PlayList.txt", ios::in);

    cout << "Listas total incluido e existente!: " << "\n\n"<< endl;

    if (arq.is_open())
    {
        while (!arq.eof())
        {
            getline(arq, secq);
            cout << secq << endl;
        }
    }
    else {
        cout << "PlayList.TXT não existe" << endl;
        arq.close();
        return EXIT_FAILURE;
    }
    cout << "\n================================================================================" << endl;
    cout << "Salvo no bloco de nota! " << endl;
    arq.close();

   
    system("PAUSE");
    return EXIT_SUCCESS; 
    return 0;
}

Seu eu fosse você, eu revisava tudo linha por linha!

Outra que não tinha lembrado é: para pegar as informações do PlayList.txt, você criar uma estrutura e usa o " ifstream" pra leitura da play list!!!

 

Espero ter ajudado.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...