Usando os conhecimentos ensinados em nossa apostila de C, sobre:
- declaração, inicialização e acesso de structs
- criação de tipos com typedef
- como passar structs para funções
- uso do operador -> em estruturas
- Download do curso: Apostila C Progressivo
Resolva as seguintes questões:
00. Defina uma estrutura que irá representar bandas de música.
Essa estrutura deve ter o nome da banda, que tipo de música ela toca, o número de integrantes e em que posição do ranking essa banda está dentre as suas 5 bandas favoritas.
01. Crie um looping para preencher as 5 estruturas de bandas criadas no exemplo passado.
Após criar e preencher, exiba todas as informações das bandas/estruturas.
Não se esqueça de usar o operador -> para preencher os membros das structs.
02. Crie uma função que peça ao usuário um número de 1 até 5.
Em seguida, seu programa deve exibir informações da banda cuja posição no seu ranking é a que foi solicitada pelo usuário.
03. Crie uma função em C que peça ao usuário um tipo de música e exiba as bandas com esse tipo de música no seu ranking. Que função da string.h você usaria para comparar as strings que representam o tipo de banda?
04. Crie uma função que peça o nome de uma banda ao usuário e diga se ela está entre suas bandas favoritas ou não.
05. Agora junte tudo e crie uma mega aplicação em que exibe um menu com as opções de preencher as estruturas e todas as opções das questões passadas.
16 comentários:
o melhor site sobre programação
Vocês poderiam colocar um gabarito com os exercícios resolvidos, pra a gente tirar dúvida, corrigir erros e tal... mas o conteúdo do site é excelente!
Bom dia a todos!
este é o exercício final de structs
quem quiser implementar mais alguma função faça e poste pra gente.como esperado ficou um pouco extenso.
#include
#include
#include
typedef struct banda
{
char nome_banda[20];
char estilo_musical[15];
int n_integrantes;
int position_ranking;
}banda;
void limpaBuffer(void)
{
char c;
while(c=getchar()!='\n' && c !=EOF);
}
void preferencia(banda *pt)
{
int i;
int cont;
for(cont=0;cont<3;cont++)
{
fflush(stdin);
do{
system("cls");
printf("\nNome da banda: ");
gets(pt[cont].nome_banda);
i=strlen(pt[cont].nome_banda);
if(i>19)
pt==(NULL);
}while(i>19);
printf("\nEstilo musical: ");
gets(pt[cont].estilo_musical);
fflush(stdin);
printf("\nNumero de integrantes: ");
scanf("%d",&pt[cont].n_integrantes);
printf("\nPosicao no ranking: ");
scanf("%d",&pt[cont].position_ranking);
}
}
void exibe_preferencia(banda *exib)
{
int cont;
for(cont=0;cont<3;cont++)
{
printf("\n\nBanda: %s",exib[cont].nome_banda);
printf("\nEstilo: %s",exib[cont].estilo_musical);
printf("\nIntegrantes: %d",exib[cont].n_integrantes);
printf("\nPosicao: %d",exib[cont].position_ranking);
}
}
void procura(banda *busca)
{
fflush(stdin);
char musica2[50];
int compara=0,cont;
printf("\nInforme seu tipo de musica: ");
gets(musica2);
fflush(stdin);
for(cont=0;cont<100;cont++)
{
if(strcmp(busca[cont].estilo_musical,musica2)==0){
compara=1;
printf("\nBanda: %s",busca[cont].nome_banda);
}
if(busca[cont].nome_banda=='\0')
break;
}
if(compara==1)
printf("\nencontrado");
else
printf("\nausente");
}
main()
{
banda p[3];//variavel do tipo banda.
char musica[15];
preferencia(p);
procura(p);
exibe_preferencia(p);
getch();
return 0;
}
1) Elabora o programa 'nº-TesteM6' com as seguintes condições:
a) Define uma estrutura que irá representar bandas de música. Essa estrutura deve ter o nome da
2 valores banda, o ano de constituição, a idade média dos músicos e tipo de música que tocam.
b) Cria uma função para preencher os dados relativos a cinco bandas.
3 valores
c) Cria uma função que mostre toda a informação relativa às cinco bandas.
3 valores
d) Cria uma função que peça ao utilizador um número de 1 até 5. Em seguida, o programa deve
3 valores exibir informações da banda dessa posição.
e) Crie uma função em que peça ao utilizador um tipo de música e de seguida mostre as bandas que
5 valores tocam esse tipo de música.
Olá Ricardo,
E aí, já fez seu exercício?
Alguma dúvida em específico?
Se quiser falar, ao invés de só copiar e colar sua questão, pode também, sem problemas ;)
Boa tarde, eu tenho um exercicio que esta complicado para mim e tenho que telo resolvido ate amanha:
com:
typedef struct
{ char nome_autor [30];
int idade_autor,
char *nome_co_autor;
}DADOS_AUTOR
typedef struct
{ char titulo_livro [30];
char editora [15];
int ISBN,qtd_livros;
DADOS_AUTOR dados_autor;
}DADOS_LIVRO;
1. pede para fazer um tratamento de um array da estrutura acima, que para tal
a)fazer uma funcao que faxa a leitura do array de estruturas (sem limitacoes na quantidade de estruturas a ler), a funacao ou procedimento deve ir perguntando se pretende inserir mais elementos, ate que se responda um nao. ha que usar alocaxao dinamica de memoria, e nao deve prencher o campo nome_co_autor.
b)outra funxao que faxa escrita de todos os elementos lidos. as estruturas cujo o campo nome_autor contenham a palavra sil nao devem ser apresentadas
c) um procedimento q faxa a escrita no monitor de todas estruturas cujo o campo ISBN termine com a sequencia 776. considerando que ISBN eh um numero composto por 10 digitos.
d)uma funxao ou procedimento que percora todos elementos do vector e actualize o campo nome_co_autor com nome do autor da estrutura anterior. na primeira estrutura, devera ser inicializado a NULL
e) funxao que devolva um ponteiro para elemento do vector com o nome_autor composto por menos palavras
estou tendo grandes dificuldades de resolve-lo.
Almedino
Boa tarde, eu tenho um exercicio que esta complicado para mim e tenho que telo resolvido ate amanha:
com:
typedef struct
{ char nome_autor [30];
int idade_autor,
char *nome_co_autor;
}DADOS_AUTOR
typedef struct
{ char titulo_livro [30];
char editora [15];
int ISBN,qtd_livros;
DADOS_AUTOR dados_autor;
}DADOS_LIVRO;
1. pede para fazer um tratamento de um array da estrutura acima, que para tal
a)fazer uma funcao que faxa a leitura do array de estruturas (sem limitacoes na quantidade de estruturas a ler), a funacao ou procedimento deve ir perguntando se pretende inserir mais elementos, ate que se responda um nao. ha que usar alocaxao dinamica de memoria, e nao deve prencher o campo nome_co_autor.
b)outra funxao que faxa escrita de todos os elementos lidos. as estruturas cujo o campo nome_autor contenham a palavra sil nao devem ser apresentadas
c) um procedimento q faxa a escrita no monitor de todas estruturas cujo o campo ISBN termine com a sequencia 776. considerando que ISBN eh um numero composto por 10 digitos.
d)uma funxao ou procedimento que percora todos elementos do vector e actualize o campo nome_co_autor com nome do autor da estrutura anterior. na primeira estrutura, devera ser inicializado a NULL
e) funxao que devolva um ponteiro para elemento do vector com o nome_autor composto por menos palavras
estou tendo grandes dificuldades de resolve-lo.
Almedino
Alguém tem a solução completa?
00-typedef struct{
char nome[100];
char tipoMusic[50];
int numInt;
int rankPos;
}Bandas;
01-
int main(){
Bandas preferidas[5];
Bandas * banda= &preferidas;
int i;
for(i=0;i<5;i++){
fflush(stdin);
printf("Banda n: %d\n", i+1);
printf("Introduza o nome:\n");
scanf("%s",banda->nome);
printf("Introduza o tipo:\n");
scanf("%s",banda->tipoMusic);
printf("Intro numInte:\n");
scanf("%d",&banda->numInt);
printf("Intro rank position:\n");
scanf("%d",&banda->rankPos);
}
for(i=0;i<5;i++){
printf("Banda n: %d\n", i+1);
printf("Nome:%s\n",banda->nome);
printf("tipo:%s\n",banda->tipoMusic);
printf("numIntegrantes:%d\n",banda->numInt);
printf("Rank position:%d\n",banda->rankPos);
}
02-
Num1a5(&preferidas);
}
void Num1a5(Bandas *rank){
int num;
printf("Introduza numeros 1 a 5:\n");
scanf("%d",&num);
if(num==rank->rankPos){
printf("Nome:%s\n",rank->nome);
printf("tipo:%s\n",rank->tipoMusic);
printf("numIntegrantes:%d\n",rank->numInt);
printf("Rank position:%d\n",rank->rankPos);
}else{
printf("Nao encontrei nenhum rank\n");
}
}
Resolvi até aqui... no 3 usaria o strcmp...
O meu programa nem inicia quando digito a opção de cadastrar bandas ele fecha.
#include "stdio.h"
#include "conio.h"
#include "string.h"
typedef struct cadastro {
char nome[50], tipo_mus[50];
int num_integr;
int ranking;
}cadastro;
void cadastrar(cadastro bandas[6]){
int i,n;
printf ("Quantas bandas deseja cadastar?\n");
scanf ("%d", &n);
while (n < 1 || n > 6){
printf ("Numero invalido, digite novamente:\n");
scanf ("%d", &n);
}
for (i=0; i 6){
printf ("Numero invalido digite novamente:\n");
scanf ("%d", &rank);
}
}
main(){
cadastro bandas[6];
int op;
do{
printf ("Digite a opcao desejada:\n");
puts ("1- Inserir banda");
puts ("2- Buscar banda");
scanf ("%d", op);
if (op == 1){
cadastrar(bandas);
}
else if (op == 2){
buscar(bandas);
}
}while (op < 6);
}
Tenho uma dúvida sobre essa questão :
A fct pretende informatizar o processo de submissão de requerimentos. Sabemos que cada requerimento possui um id(inteiro), assunto(pedido de notas, cancelamento de matricula, outros), o estudante que remeteu (nome do estudante, sexo, codigo), a data de submissão, e estado(pendente, resolvido).
A) fazer fazer programa que resolva o problema usando ponteiros e alocação de memorias.
Estou com dificuldade de usar o operador -> onde tenho que trabalhar em vetores.
Por favor, alguem ajude. Como que eu faço pra passar VETORES de STRUCT por referência? Já tentei aqui e sempre da erro. Tentei fazer da mesma forma que se passa vetores por referencias. Estou tentando usar isso no primeiro exercicio.
No Exercício 3 quando peço para o usuário pesquisar pelo ranking acaba passando o indice do vetor: o que será que pode ser?
segue o meu código;
#include
#include
typedef struct{
char nome[20];
char estilo[20];
int ranking;
}Banda;
void exibir(Banda show[5]){
for(int i = 0 ; i < 5 ; i++){
printf("\nNome da Banda: %s",show[i].nome);
printf("\nEstilo musical: %s",show[i].estilo);
printf("\nRanking: %dº lugar",show[i].ranking);
}
}
void pesquisa(Banda pesquisa[5]){
int rank;
printf("De acordo com o ranking que banda deseja cotratar?\nDigite o nº do Ranking:\n");
scanf("%d",&rank);
for(int i = 0 ; i < 5 ; i++){
if(i==rank){
printf("\nNome da Banda: %s",pesquisa[i-1].nome);
printf("\nEstilo musical: %s",pesquisa[i-1].estilo);
printf("\nRanking: %dº lugar",pesquisa[i-1].ranking);
}
}
}
int main(){
setlocale(LC_CTYPE,"");
Banda banda[5];
int escolha;
int quant;
do{
printf("\n\n1 - Cadastrar Bandas:\n");
printf("2 - Exibir Bandas:\n");
printf("3 - Pesquisar Bandas:\n");
printf("4 - Sair.\n");
scanf("%d",&escolha);
switch(escolha){
case(1):{
printf("Quantas bandas quer cadastrar?");
scanf("%d",&quant);
for(int i = 0 ; i < quant ; i++){
printf("\nDigite o nome da banda: ");
scanf(" %[A-Za-z 0-9]s",banda[i].nome);
printf("\nQual o estilo da banda: ");
scanf(" %[A-Za-z 0-9]s",banda[i].estilo);
printf("\nDigite a posição que esta banda ocupa no ranking das melhores bandas: ");
scanf("%d",&banda[i].ranking);
}
break;
}
case(2):{
exibir(banda);
break;
}
case(3):{
pesquisa(banda);
break;
}
}
}while(escolha!=4);
return 0;
}
#include
#include
#include
#include
typedef struct cadastro{
char nome[30];
char genero[30];
int posFav;
int numIntegrantes;
}usuario;
int procuraBanda(usuario *play, char bandaProcurada[]);
int procuraFav(usuario *play, int x);
int procurarGenero(usuario *play,char gener[]);
void imprime(usuario *play);
void recebe(usuario *play);
int main(int argc, char **argv)
{
struct cadastro cliente[3];
char banda[30];
char genero[30];
int num;
int menu_option = 0;
int menu_continues = 0;
bool iniciarBuscas = false;
printf(" Seja Bem vindo ao programa !!!\n");
while(menu_continues==0)
{
system("color b");
printf("\n\n");
printf("\tMenu principal\n");
printf("###########################################\n");
printf("#1. Entrar com as bandas.\t\t #\n");
printf("#2. Imprimir as bandas.\t\t\t #\n");
printf("#3. Procurar genero.\t\t\t #\n");
printf("#4. Procurar favorito.\t\t\t #\n");
printf("#5. Procurar banda.\t\t\t #\n");
printf("#6. Sair do programa.\t\t\t #\n");
printf("###########################################\n\n");
printf("Porfavor entre com uma opcao do menu: ");
scanf("%d",&menu_option);
switch (menu_option)
{
case 1:
//entrada de dados
system("color 3");
for (int i = 0; i < 3; i++)
{
printf("\n\n[%d]",i+1);
recebe(&cliente[i]);
}
iniciarBuscas = true;
break;
case 2:
//saida de dados
if(iniciarBuscas == true )
{
system("color 3");
for (int i = 0; i < 3; i++)
{
printf("\n\n[%d]",i+1);
imprime(&cliente[i]);
}
}else
{
printf("\nPrimeiro insira as informacoes!");
}
break;
case 3:
//buscar genero
if(iniciarBuscas == true )
{
system("color 3");
int naoEncontrado1 = 0;
int k = 0 ;
char c ;
printf("\nInforme um genero para eu buscar:");
getchar();
while((c=getchar())!='\n')
{
genero[k]=c;
k++;
}
genero[k]='\0';
for (int i = 0; i < 3; i++)
{
naoEncontrado1 += procurarGenero(&cliente[i],genero);
if(naoEncontrado1 == 2){
printf("\nGenero nao encontrado!");
}
}
}else
{
printf("\nPrimeiro insira as informacoes!");
}
break;
case 4:
//buscarFavorito
if(iniciarBuscas == true )
{
system("color 3");
int naoEncontrado2 = 0 ;
printf("\nInforme o numero do favorito para eu buscar:");
scanf("%d",&num);
for (int i = 0; i < 3; i++)
{
naoEncontrado2 = procuraFav(&cliente[i],num);
}
if(naoEncontrado2 == 2)
{
printf("\nFavorito nao encontrado!");
}
}else
{
printf("\nPrimeiro insira as informacoes!");
}
break;
case 5:
//buscar banda
if(iniciarBuscas == true )
{
system("color 3");
printf("\nInforme uma banda para eu buscar:");
int k1=0;
char c1;
getchar();
while((c1=getchar())!='\n')
{
banda[k1]=c1;
k1++;
}
banda[k1]='\0';
puts(banda);
int naoEncontrado = 0 ;
for (int i = 0; i < 3; i++)
{
naoEncontrado += procuraBanda(&cliente[i],banda);
if(naoEncontrado == 2){
printf("\nBanda nao encontrada!");
break;
}
}
}else
{
printf("\nPrimeiro insira as informacoes!");
}
break;
case 6:
printf("saindo...");
menu_continues = 1;
break;
default:
printf("Escolha incorreta\n");
break;
}
}
return 0;
}
void recebe(usuario *play)
{
char c;
int k3=0;
int k4=0;
printf("\n\ninforme o nome da banda:");
getchar();
while((c=getchar())!='\n')
{
play->nome[k3]=c;
k3++;
}
play->nome[k3]='\0';
printf("\nInforme o genero da banda:");
while((c=getchar())!='\n')
{
play->genero[k4]=c;
k4++;
}
play->genero[k4]='\0';
printf("\nInforme a posicao de favoritos:");
scanf("%d",&play->posFav);
printf("\nInforme a quantidade de integrantes:");
scanf("%d",&play->numIntegrantes);
}
void imprime(usuario *play)
{
printf("\n");
printf("Nome da banda: %s",play->nome);
printf("\nGenero da banda: %s",play->genero);
printf("\nPosicao de favoritos da banda: %d",play->posFav);
printf("\nQuantidade de integrantes da banda: %d",play->numIntegrantes);
}
int procurarGenero(usuario *play,char gener[])
{
int aux;
char auxchar[30];
int cont2 = 1 ;
strcpy(auxchar,play->genero);
aux = strcmp(auxchar,gener);
if(aux == 0)
{
printf("\nBanda : %s , possui o mesmo genero!",play->nome);
}
else
{
return cont2;
}
}
int procuraFav(usuario *play, int x)
{
int cont1 = 1;
if(play->posFav == x ){
printf("\nBanda na posicao %d : %s",x,play->nome);
}else
{
return cont1;
}
}
int procuraBanda(usuario *play, char bandaProcurada[])
{
int aux2;
char auxchar2[30];
int cont = 1;
strcpy(auxchar2,play->nome);
aux2 = strcmp(auxchar2,bandaProcurada);
if(aux2==0){
printf("\nBanda encontrada!");
}else
{
return cont;
}
}
Postar um comentário