Ir ao conteúdo

C exercício de programação c


Ir à solução Resolvido por Annyy,

Posts recomendados

  • Solução
Postado

 Boa tarde gente estou com esse projeto mais tudo que fiz ate agora só da erro  alguém pode mim da uma direção.

RESERVAS DE CINEMA E EXIBIÇÃO DE FILMES

Faça um programa que leia do usuário uma lista de filmes em exibição no Cinema Movies.
A quantidade de filmes deve ser definida pelo usuário.Para cada filme,o programa deve ler:
o nome do filme,o turno de exibição e a quantidade de cadeiras disponíveis na sala onde
o filme será exibido. O nome dos filmes deve ser armazenado em uma matriz de caracteres.
Esse programa deve permitir,ainda,que o usuário faça reservas nas cadeiras de cada sala.
Defina um preço fixo para cada filme,e após a reserva informe quantos irá pago por cada
reserva.O programa deve controlar o número de reservas para que a sala receba até o
número máximo de espectadores.Devem ser lidas 10 reservas.Cada reserva pode comprar até
metade das cadeiras disponíveis em cada sala.

Em seguida, construa funções que:?
Retorne a arrecadação total desse cinema;?
Exiba a quantidade de reservas que houve para cada sala;?
Exiba a taxa de ocupação de cada sala;?
Retorne o nome do filme que arrecadou mais (bilheteria);?
Retorne o nome do filme que teve a sala com mais espectadores;?

Exiba os nomes dos filmes com bilheteria acima da média entre os filmes.*/

 

#include <stdio.h>

#include <string.h>

#define id 0

void *lista_filmes(char filmes[id][50]);

int turno_exibicao(int turno[]);

int quantidade_cadeira_salas(int quantidade[]);

float preco_secao(float *precos[],int reservas_cadeira());

int reservas_cadeira(int reservas[]);

int cadeira_disponivel(int disponivel[]);

int numero_espectadores(int numero[]);

float arrecadacao(float soma);

 

int main()

  printf("\n-------CINEMA MOVIES---------\n");

  int n=0, i;

  printf("\nInforme a quantidade de filmes:");

  scanf("%d", &n);

  char menu_filmes[n][50];

  int horarios[n];

  float valor[n];

int dependencias[n];

int retencao[n];

int filme_escolhido,reserva_atual;


 

  // entrada de dados

  for (i=0; i<n; i++){

  printf("Seja bem Vindo(a)!\nPor favor.\nInforme o nome do filme que deseja assistir: ");

  fflush(stdin);

  n=getc(stdin);

  printf("\nDigite o preco do filme :R$");

  scanf("%f",&valor[n]);

  printf("\nEscolha o horario de exibicao:\t");

  scanf("%d",&horarios[n]);

printf("\nQuantas cadeiras tem disponivel:");//roda o laco para a quantidade da cadeira disponivel

    scanf("%d",&dependencias[n]);

 

  }

// saida

printf("\n Os filmes que esta em cartaz");

printf("\nDigite o numero da primeira reserva (filme):");

    scanf("%d",&filme_escolhido);

    printf("\nDigite quantas cadeiras quer reserva:");

    scanf("%d",&reserva_atual);

  

return 0 ;

}

 

void* lista_filme(char filmes[id][50]){

 

  return 0 ;

    

}

int turno_ex(int turno){

  

  if(turno >=13 && turno <=17 ){

     printf("Vespetino\n");

    }else if(turno>= 18 && turno <=22){

printf("Noturno\n");

    }

  

  return turno;

}

int quant_cadeira_salas(int quantidade[],int sala[]){

  

  return 0;

}

float preco_sec(float *precos,int reservas_cadeira()){

  float res;

//  res=(precos*reservas_cadeira());

  return res;

}

int reservas_cadeira(int reservas[10]){

  int count,atual,anterior;

  for(count=0; count < 10 ; count++){

  anterior=atual>10/2;

  }

  return anterior;

}

int cadeiraDisponivel(int disponivel[]){

  

  return 0;

}

int numeroEspectadores(int numero[]){

  

  return 0;

}

float arrecadacao(float soma){

  

  return 0;

}


 

Postado
10 horas atrás, Annyy disse:

#define id 0

Oi! Que é você? Já no comecinho conclui que codificou um programa particular, ou seja, outras pessoas terão dificuldade para entender

 

Geralmente, se o nome da "coisa" é contraída sobre 1 até 4 letras fica obrigatório em seguida vir um comentário, principalmente se pretende levar a "coisa" ao conhecimento de outros.  

#define NMF  (0x0)   /**< Numero maximo de filmes, é o subscrito comum nos parametros formais
                          tocante ao ponteiro para filmes das funcoes relacionadas a matriz */  

 

 

 

10 horas atrás, Annyy disse:

void *lista_filmes(char filmes[id][50]);

Não é possível determinar qual é a pergunta e a resposta dessa função, pelo menos não a primeira vista. 

 

Suponho que a função recebe um vetor de ‘strings’ e responda com uma lista (endereço de variável de dados abstratos), mas o enunciado não fala nada sobre TAD. Só com o cabeçalho da função não é fácil determinar, em todo caso comente.

/**  @brief Breve descricao da funcao
 *
 *  Descricao mais completa e pode incluir alguns fatos que relaciona
 *  o algoritmo a outras funcoes do codigo, e de que mode estão ligadas quando houver
 *  fique a vontade para escrever.
 *
 *  @bug            - Alerte outros programadores com relação falhas ou mal uso da funcao.
 *  @param filmes   - Explique o parametro formal, mesmo os mais obvios e seja breve.
 *  @return void *  - Fale sobre o tipo de retorno e ao que se destina.             
 */
void *lista_filmes( char filmes[id/* coloque meu nome completo aqui */][50] );

 

 

 

10 horas atrás, Annyy disse:

int turno_exibicao(int turno[]);

Turno exibição? Exibição do turno? Se é exibir turno então a função imprime na tela os valores no vetor.

 

Comente assim também, numa versão mais curtinha.

/**  @brief Exibir turno no prompt. */
int turno_exibicao( int turno[]/**< [in] e o parametro que ... */);

 

 

10 horas atrás, Annyy disse:

int quantidade_cadeira_salas(int quantidade[]);

float preco_secao(float *precos[],int reservas_cadeira());

int reservas_cadeira(int reservas[]);

int cadeira_disponivel(int disponivel[]);

int numero_espectadores(int numero[]);

float arrecadacao(float soma);

Em penso que apresentação do trabalho fica mais bonita quando comentada.

 

 

10 horas atrás, Annyy disse:

fflush(stdin);

Ishh!!!  Melhor evitar discussões e esvaziar a memória desnecessária no buffer de entrada de outras maneiras.

 

 

10 horas atrás, Annyy disse:

for (i=0; i<n; i++){

 ...

 n=getc(stdin);

A variável   n  é o limite do laço/'loop' e com a chamada de  getc   modificaria seu valor rompendo a lógica completamente.

 

O que será que tem mais abaixo?

[:)]

 

Postado

Escreva em torno dos dados, não da linguagem.

 

Não saia programando sem pensar no que está fazendo.

Vai levar uma eternidade e ter um resultado provavelmente inferior.

O problema existe antes do programa em C ou em qualquer linguagem.

 

Crie um modelo, ANTES, e não escreva o programa todo de uma vez. Ninguém vai saber quantos pequenos programas você fez paa chegar à solução.

 

Entenda o que está tentando resolver:

  • Existe um cinema
  • O cinema tem salas, mais de uma 
  • As salas tem cadeiras. Nada se diz sobre fileiras e números, então basta isso: o cliente reserva cadeiras do total disponível.
  • As salas tem uma certa capacidade, possivelmente diferente
  • As salas passam filmes e em turnos. Então tem que ter uma programação. Nada se diz sobre isso então defina algo, como x sessões diárias.
  • Cada sessão passa um filme, pode ser o mesmo em vários turnos, pode ser o mesmo em várias salas
  • Cada filme tem um preço, e deve ter mais de um preço.
  • O sistema vai ler até 10 reservas para as salas e filmes. Podiam ser 10.000 não faz diferença.

E as funções?


São 6 listadas, mas claro que usar outras vai facilitar sua vida.

 

Sobre essas:

  • Retorne a arrecadação total desse cinema
    • Isso quer dizer somar as reservas feitas para todos os turnos em todas as salas e retornar um valor, dinheiro, um int ou um float.
  • Exiba a quantidade de reservas que houve para cada sala
    • Isso quer dizer simplesmente percorrer a lista de salas e mostrar os totais: pode retornar uma lista ou simplesmente mostrar na tela uma sala por linha
  • Exiba a taxa de ocupação de cada sala
    • isso retorna ou mostra uma lista de quocientes claro, o total de reservas dividido pela capacidade da sala em cadeiras
  • Retorne o nome do filme que arrecadou mais (bilheteria)
    • isso retorna um nome, uma string, um char* com o nome do filme. Claro que seria mais bonitinho dizer quanto arrecadou. E para testar é claro que vai ter que ter uma função que lista a arrecadação de todos os filmes...
  • Retorne o nome do filme que teve a sala com mais espectadores
    • isso retorna um char*, o filme. Pode usar a função anterior que dá a taxa de ocupação, claro. A sala mais lotada.
  • Exiba os nomes dos filmes com bilheteria acima da média entre os filmes
    • então precisa saber a média de ocupação de cada sala e retornar uma lista que pode ter um filme só, ou mesmo nenhum se todos tiverem o mesmo público, e vai retornar uma lista possivelmente vazia de filmes.

Esse é o caminho inicial para um problema desses. Nenhuma linha em C. Poste o que tem agora e posso tentar ajudar a colocar nesse contexto.

 

 

  • Curtir 2
Postado

@arfneto ok

#include <stdio.h>
#include <string.h>
#define id 0

void imprime_cabecario(void);
char lista_filmes(char filmes[id][50]);
float turno_exibicao(float turno[id]);
int quantidade_cadeira_salas(int quantidade[id]);
float preco_secao(float precos[id]);
int reservas_cadeira(int reservas[id]);
int cadeira_disponivel(int disponivel[id]);
int numero_espectadores(int numero[id]);
float arrecadacao(float soma[id]);


int main()
{    
    imprime_cabecario(); //chamada da função cabecario
    int n=0, i;
    printf("\nInforme a quantidade de filmes:");
    scanf("%d", &n);
    // variavel da entrada
    char menu_filmes[n][50];
    float valor[n];
    float horarios[n];
    int selecao;
    int dependencias[n];
    //variavel
    int retencao[n];
    int filme_escolhido,reserva_atual;
    // entrada de dados
    for (i=0; i<n; i++){
    printf("\nPor favor.\n\nInforme o nome do filme que deseja assistir: ");
    fflush(stdin);
    scanf("%s",&menu_filmes[n]);
    printf("\nDigite o preco do filme :R$");
    scanf("%f",&valor[n]);
    
    selecao=turno_exibicao(horarios[n]);
    printf("\nEscolha o horario de exibicao:\t",selecao);
    scanf("%f",&horarios[n]);
    printf("\nQuantas cadeiras tem disponivel:");//roda o laco para a quantidade da cadeira disponivel
        scanf("%d",&dependencias[n]);
    }
    printf("\n-----------------------------------");
    char cartaz;
    cartaz=lista_filmes( menu_filmes[n]);
    printf("\n Os filmes que esta em cartaz\n",cartaz);
    printf("\n-----------------------------------\n");
    ///lista de filmes
    for(i=0; i<n; i++){
        printf("%d - %s\n",i+1,menu_filmes[n]);
    }
    // saida de dados
printf("\n----------  Fazendo Reservas-----------------------\n");
  for(i=0;i<10;i++){    
  printf("\nDigite o numero da%d. reserva (filme):");
        scanf("%d",&filme_escolhido);
        printf("\nDigite quantas cadeiras quer reserva:");
        scanf("%d",&reserva_atual);
}
return;
}
// divisão por função
void imprime_cabecario(void){
    printf("\n\t-------CINEMA MOVIES---------\n");
    printf("\n\t------SEJA BEM VINDO(a)!-----\n");
    return;
}
char lista_filmes(char filmes[id][50]){
    int i;
    for(i=0; i<id; i++){
        printf("%d - %s\n",i+1,filmes[id]);
    }
    
    return NULL ;
}
float turno_exibicao(float turno[id]){
    int t;
    for (t=0; t<id; t++){
    if( turno[t] >=13 && turno[t] <=17 ){
         printf("Vespetino\n");
        }else if(turno[t]>= 18 && turno[t] <=22){
         printf("Noturno\n");
        }
    }
    return turno[id];
}

  • Curtir 1
Postado
2 horas atrás, Annyy disse:

@mauro_b  obrigado  estou aqui tentado refazer.

@devair1010  sou iniciante e veio logo um projeto desse , to doida aqui já mais to tentado fazer. obrigado

Também acho que um projeto desse e estrutura de dados abstrato seja demais para iniciantes.

 

Vai dá um nó em sua cabeça.

:)

Postado
2 horas atrás, Annyy disse:

sim, que tem de fazer aos poucos e testando parte por parte

 

E tem a parte sobre escrever em torno dos dados. E não sair nunca programando tudo antes de ter boa ideia do modelo. E a atenção às funções, e o que entra e sai delas, em especial as que tem necessariamente que escrever.

 

Seu programa já está muito grande e complicado. Mas é um começo. Vou te mostrar uma maneira de fazer isso. Não vou dizer que é a melhor, sequer que é boa. No entanto vou escrever em torno dos dados e não da linguagem. Escrevendo em torno dos dados e criando um modelo em geral leva a programas corretos escritos em menos tempo, muitas vezes já na primeira vez, para programas simples.

 

Do enunciado: 

 

Citação

A quantidade de filmes deve ser definida pelo usuário.Para cada filme,o programa deve ler:
o nome do filme,o turno de exibição e a quantidade de cadeiras disponíveis na sala onde
o filme será exibido. O nome dos filmes deve ser armazenado em uma matriz de caracteres.

 

Claro que enquanto o programa não estiver pronto não se vai perder tempo lendo uma lista de filmes e dados para o programa cancelar na nossa cara logo em seguida a digitar linhas e linhas de coisas.

 

Um modelo:

  • Vamos ter 12 filmes
    •   Os filmes serão os 12 de maior bilheteria para não perder tempo inventando isso
       
      Avatar
      Avengers: Endgame
      Titanic
      Star Wars: The Force Awakens
      Avengers: Infinity War
      Jurassic World
      The Lion King
      The Avengers
      Fast & Furious 7
      Frozen II
      Avengers: Age of Ultron
      Black Panther 
  • Serão 4 horários
    • 23, 20, 17 e 14h, porque tanto faz
  • Serão 3 salas
    • Cada sala tem um nome, um filme e uma capacidade.
    • sala 1 com 250 lugares
    • sala 2 com 200
    • sala 3 com 75
    • nomes? signos: gemeos, touro e aquario

Como 12 é múltiplo de 4 e 3 fica fácil. E é só um modelo. Basta ser aplicável. Não precisa ser esperto ou dar lucro.

Então os filmes de maior bilheteria passam nas salas maiores, são 12 filmes, 4 salas, 3 horários: cada filme vai passar uma vez por dia em uma sala. Repito: basta um modelo que faça sentido e escrever as funções e o programa. Ler as reservas, testar os dados e fim.

 

Para começar a testar logo basta isso. Veja um protótipo em 10 minutos
 

#include <stdio.h>

void        acima_da_media(unsigned N, char*filmes[], unsigned mapa[] );
unsigned    arrecadacao(unsigned N, unsigned vendas[], unsigned preco[]);
void        ocupacao(unsigned salas, unsigned mapa[]);
char*       mais_visto(unsigned N, char*filmes[], unsigned mapa[] );
char*       mais_lucrativo(unsigned N, char*filmes[], unsigned mapa[], unsigned preco[] );
void        reservas(unsigned salas, unsigned mapa[]);

int main(void)
 {
     char* filmes[12] = 
     {
          "Avatar",
          "Avengers: Endgame",
          "Titanic",
          "Star Wars: The Force Awakens",
          "Avengers: Infinity War",
          "Jurassic World",
          "The Lion King",
          "The Avengers",
          "Fast & Furious 7",
          "Frozen II",
          "Avengers: Age of Ultron",
          "Black Panther"
     };

     unsigned programa[12][2] = // horario, poltronas por filme
     {
          {1,250}, {2,250}, {3,250}, {4,250},
          {1,200}, {2,200}, {3,200}, {4,200},
          {1, 75}, {2, 75}, {3, 75}, {4, 75}
     };

     // uma reserva corresponde a um filme e a um numero de poltronas
     unsigned reservas[10][2] = 
     {
          {1,12}, // filme 1, 12 lugares
          {1,15}, {3,2}, {12,4}, {11, 2},
          {3,15}, {5,2}, {2,4}, {11, 20},
          {8,5}          
     };

     unsigned   ticket[12] =
     { 
          35,35,35,35,
          35,35,35,35,
          35,35,35,35
     } ; // o preco

     unsigned   mapa[12] = {0}; // a situacao das reservas para cada filme

    return 0;
}

void        acima_da_media(unsigned N, char*filmes[], unsigned mapa[] ){};
unsigned    arrecadacao(unsigned N, unsigned vendas[], unsigned preco[]){ return 0;};
void        ocupacao(unsigned salas, unsigned mapa[]){};
char*       mais_visto(unsigned N, char*filmes[], unsigned mapa[] ){ return NULL; };
char*       mais_lucrativo(unsigned N, char*filmes[], unsigned mapa[],
                           unsigned preco[] ){ return NULL; };
void        reservas(unsigned salas, unsigned mapa[]){};

 

Tem os filmes, salas,  preços, funções... E nem rodou ainda. Mas já serve para escrever e testar as funções. Tem até 10 reservas.

 

Uma vez que isso rode (e ao rodar isso) vai ficar mais clara a estrutura para manter os dados sem passar tantos parâmetros e gerar algo mais legível, mas o que importa é ter algo logo para testar.

 

Sugiro que tente. Só digitei, não pensei muito, mas já compila, tem dados e uma lógica. Pode testar as funções, alterar as reservas, imprimir as coisas e ir concluindo o programa

Postado

@Annyy Você entendeu a diferença de escrever assim em relação a esse início:
 

 imprime_cabecario(); //chamada da função cabecario
    int n=0, i;
    printf("\nInforme a quantidade de filmes:");
    scanf("%d", &n);
    // variavel da entrada
    char menu_filmes[n][50];
    float valor[n];
    float horarios[n];
    int selecao;
    int dependencias[n];
    //variavel
    int retencao[n];
    int filme_escolhido,reserva_atual;
    // entrada de dados
    for (i=0; i<n; i++){
    printf("\nPor favor.\n\nInforme o nome do filme que deseja assistir: ");
    fflush(stdin);
    scanf("%s",&menu_filmes[n]);
    printf("\nDigite o preco do filme :R$");
    scanf("%f",&valor[n]);

 

Do modo como estou te mostrando já tem os dados e as funções, por exemplo

Postado

@arfneto não vai nada

olha como  fiz esse

#include <stdio.h>
#include <string.h>
int main()
{       
    printf("\n\t-------CINEMA MOVIES---------\n");
    printf("\n\t------SEJA BEM VINDO(a)!-----\n");
    int linha, i;
     // definição de quantidade
    printf("\nInforme a quantidade de filmes:");
    scanf("%d", &linha);
    int salas[linha];
    char filme[linha][40];
    int cadeiras[linha];
    int turno[linha];
    int filme_escolhido,reserva_atual;
    float preco[linha], soma_total[linha],soma;
        
    // entrada de dado
    for (i=0; i<linha; i++){
    // roda o laço para usuário
    printf("\nInforme o nome do %d. filme: ", i+1);
    fflush(stdin);    
    gets(filme[i]);        
    // onde o usuário coloca o valor
    printf("\nDigite o preco do filme :R$");
    scanf("%f",&preco[linha]);
    // quantidade da cadeira disponivel
    printf("\nQuantas cadeiras tem disponivel:");
    scanf("%d",&salas[i]);
    //roda o laço do turno
    printf("\nEscolha o horario de exibicao:\t");
    scanf("%d",&turno[i]);
        if( turno[i] >=13 && turno[i] <=17 ){
         printf("Vespetino\n");
        }else if(turno[i]>= 18 && turno[i] <=22){
         printf("Noturno\n");
        }
    }            
    // saída de dados
    printf("\n-----------------------------------");
    printf("\n Os filmes que esta em cartaz");
    printf("\n-----------------------------------\n");
        ///lista de filmes em formato de matriz
    for(i=0; i<linha; i++){
        printf("%d - %s\n",i+1,filme[i]);
    }
    printf("\n----------  Fazendo Reservas-----------------------\n");
    // seleção das reservas digita o numero correspondente
    for(i=0; i<10; i++){
        printf("\nDigite o numero da %d. reserva (filme):");
        scanf("%d",&filme_escolhido);
        // quantidade de cadeira que vai reserva
        printf("\nDigite quantas cadeiras quer reserva:");
        scanf("%d",&reserva_atual);
        // ver a quantidade de cadeira ainda tem na sala
        if(reserva_atual<=salas[filme_escolhido-1]/2){
            salas[filme_escolhido-1]=salas[filme_escolhido-1]-reserva_atual;
            printf("\nFilme %s %d cadeiras disponivel\n",filme[filme_escolhido-1],salas[filme_escolhido-1]);
            printf("\nReserva feita com sucesso(bilhetes)\n");
        }else{
            printf("\nFilme %s %d cadeiras disponivel\n",filme[filme_escolhido-1],salas[filme_escolhido-1]);
            printf("\nReserva nao realizada\n");    
        }
    }    
    printf("\n------------ Valor a pagar-----------------------");
    // será feito o calculo de custo
    for(i=0; i<linha; i++){
        printf("\nvalor do ingresso: R$ %.2f\n\n",preco[linha]);
        soma=preco[linha]*reserva_atual;
        printf("\nTotal a pagar: R$ %.2f\n\n",soma);
    }
    
    printf("\n---- Estatísticas do cinema no final do mes ----\n");
    printf("\nQual a arrecadacao final desse cinema:%.1f\n");
    printf("\nQuantas reservas houver para sala:%d \n");
    printf("\nQual a taxa de ocupacao de cada sala:R$\n" );
    printf("\nQual o nome do filme que arrecadou mais:R$\n");
    printf("\nQual o nome do filme que teve a sala com mais espectadores: \n");
    printf("\nOs nomes dos filmes com bilheteria acima da media entre os filmes:\n");
            
   return 0;
}

 

 

 

@arfneto  não estou conseguido

@arfneto  eu já tentei fazer de varias formas e não vai esse compilou ,mas não esta separado por função e ainda falta as estatísticas.

@arfneto  eu já tentei fazer de varias formas e não vai esse compilou ,mas não esta separado por função e ainda falta as estatísticas.

7 minutos atrás, Annyy disse:

@arfneto não vai nada

olha como  fiz esse

#include <stdio.h>
#include <string.h>
int main()
{       
    printf("\n\t-------CINEMA MOVIES---------\n");
    printf("\n\t------SEJA BEM VINDO(a)!-----\n");
    int linha, i;
     // definição de quantidade
    printf("\nInforme a quantidade de filmes:");
    scanf("%d", &linha);
    int salas[linha];
    char filme[linha][40];
    int cadeiras[linha];
    int turno[linha];
    int filme_escolhido,reserva_atual;
    float preco[linha], soma_total[linha],soma;
        
    // entrada de dado
    for (i=0; i<linha; i++){
    // roda o laço para usuário
    printf("\nInforme o nome do %d. filme: ", i+1);
    fflush(stdin);    
    gets(filme[i]);        
    // onde o usuário coloca o valor
    printf("\nDigite o preco do filme :R$");
    scanf("%f",&preco[linha]);
    // quantidade da cadeira disponivel
    printf("\nQuantas cadeiras tem disponivel:");
    scanf("%d",&salas[i]);
    //roda o laço do turno
    printf("\nEscolha o horario de exibicao:\t");
    scanf("%d",&turno[i]);
        if( turno[i] >=13 && turno[i] <=17 ){
         printf("Vespetino\n");
        }else if(turno[i]>= 18 && turno[i] <=22){
         printf("Noturno\n");
        }
    }            
    // saída de dados
    printf("\n-----------------------------------");
    printf("\n Os filmes que esta em cartaz");
    printf("\n-----------------------------------\n");
        ///lista de filmes em formato de matriz
    for(i=0; i<linha; i++){
        printf("%d - %s\n",i+1,filme[i]);
    }
    printf("\n----------  Fazendo Reservas-----------------------\n");
    // seleção das reservas digita o numero correspondente
    for(i=0; i<10; i++){
        printf("\nDigite o numero da %d. reserva (filme):");
        scanf("%d",&filme_escolhido);
        // quantidade de cadeira que vai reserva
        printf("\nDigite quantas cadeiras quer reserva:");
        scanf("%d",&reserva_atual);
        // ver a quantidade de cadeira ainda tem na sala
        if(reserva_atual<=salas[filme_escolhido-1]/2){
            salas[filme_escolhido-1]=salas[filme_escolhido-1]-reserva_atual;
            printf("\nFilme %s %d cadeiras disponivel\n",filme[filme_escolhido-1],salas[filme_escolhido-1]);
            printf("\nReserva feita com sucesso(bilhetes)\n");
        }else{
            printf("\nFilme %s %d cadeiras disponivel\n",filme[filme_escolhido-1],salas[filme_escolhido-1]);
            printf("\nReserva nao realizada\n");    
        }
    }    
    printf("\n------------ Valor a pagar-----------------------");
    // será feito o calculo de custo
    for(i=0; i<linha; i++){
        printf("\nvalor do ingresso: R$ %.2f\n\n",preco[linha]);
        soma=preco[linha]*reserva_atual;
        printf("\nTotal a pagar: R$ %.2f\n\n",soma);
    }
    
    printf("\n---- Estatísticas do cinema no final do mes ----\n");
    printf("\nQual a arrecadacao final desse cinema:%.1f\n");
    printf("\nQuantas reservas houver para sala:%d \n");
    printf("\nQual a taxa de ocupacao de cada sala:R$\n" );
    printf("\nQual o nome do filme que arrecadou mais:R$\n");
    printf("\nQual o nome do filme que teve a sala com mais espectadores: \n");
    printf("\nOs nomes dos filmes com bilheteria acima da media entre os filmes:\n");
            
   return 0;
}

 

 

 

@arfneto  não estou conseguido

@arfneto  eu já tentei fazer de varias formas e não vai esse compilou ,mas não esta separado por função e ainda falta as estatísticas.

 

 

Postado

Não considerou nada do que eu falei, ao que parece :( 

 

Claro que pode escrever como preferir...

 

1 hora atrás, Annyy disse:

eu já tentei fazer de varias formas e não vai esse compilou ,mas não esta separado por função e ainda falta as estatísticas.

 

O programa que te mostrei ja tinha dados e compilava, por exemplo

 

E tinha as funções já declaradas.

 

E te expliquei as razões.

 

Uma outra tentativa

 

Mudei um pouco o exemplo apenas para colocar zeros no final dos vetores. Assim fica fácil de ir testando as reservas. 

 

E não é que funcionou da primeira vez? Como te expliquei escrevendo os programas assim em torno dos dados é mais seguro e dá mais familiaridade com o problema desde o início das tentativas.

 

E alterei o programa que tinha te mostrado para processar umas reservas, assim quem sabe entenda do que estou falando

 

Eis a saída
 


==> Em cartaz:

        Avatar
        Avengers: Endgame
        Titanic
        Star Wars: The Force Awakens
        Avengers: Infinity War
        Jurassic World
        The Lion King
        The Avengers
        Fast & Furious 7
        Frozen II
        Avengers: Age of Ultron
        Black Panther

==> Processando as reservas
Reserva: 12 lugares para o filme 1 "Avatar"
Reserva: 15 lugares para o filme 1 "Avatar"
Reserva: 2 lugares para o filme 3 "Titanic"
Reserva: 4 lugares para o filme 12 "Black Panther"
Reserva: 2 lugares para o filme 11 "Avengers: Age of Ultron"
Reserva: 15 lugares para o filme 1 "Avatar"
Reserva: 2 lugares para o filme 5 "Avengers: Infinity War"
Reserva: 4 lugares para o filme 2 "Avengers: Endgame"
Reserva: 20 lugares para o filme 12 "Black Panther"
Reserva: 5 lugares para o filme 12 "Black Panther"

==> Mostrando as vendas acumuladas
Sessao  1: vendidos  42 lugares para o filme "Avatar"
Sessao  2: vendidos   4 lugares para o filme "Avengers: Endgame"
Sessao  3: vendidos   2 lugares para o filme "Titanic"
Sessao  4: vendidos   0 lugares para o filme "Star Wars: The Force Awakens"
Sessao  5: vendidos   2 lugares para o filme "Avengers: Infinity War"
Sessao  6: vendidos   0 lugares para o filme "Jurassic World"
Sessao  7: vendidos   0 lugares para o filme "The Lion King"
Sessao  8: vendidos   0 lugares para o filme "The Avengers"
Sessao  9: vendidos   0 lugares para o filme "Fast & Furious 7"
Sessao 10: vendidos   0 lugares para o filme "Frozen II"
Sessao 11: vendidos   2 lugares para o filme "Avengers: Age of Ultron"
Sessao 12: vendidos  29 lugares para o filme "Black Panther"

 

Do programa

 

#include <stdio.h>
//#include "cinema.h"

void        acima_da_media(unsigned N, char* filmes[], unsigned mapa[]);
unsigned    arrecadacao(unsigned N, unsigned vendas[], unsigned preco[]);
void        ocupacao(unsigned salas, unsigned mapa[]);
char*       mais_visto(unsigned N, char* filmes[], unsigned mapa[]);
char*       mais_lucrativo(unsigned N, char* filmes[],
            unsigned mapa[], unsigned preco[]);
void        reservas(unsigned salas, unsigned mapa[]);

int main(void)
{
    char* filme[] =
    {
       "Filmes",
       "Avatar",
       "Avengers: Endgame",
       "Titanic",
       "Star Wars: The Force Awakens",
       "Avengers: Infinity War",
       "Jurassic World",
       "The Lion King",
       "The Avengers",
       "Fast & Furious 7",
       "Frozen II",
       "Avengers: Age of Ultron",
       "Black Panther",
       NULL
    };

    unsigned programa[][2] = // horario, poltronas por filme
    {  // nesse exemplo sao 4 horarios em 3 salas
         {1,250}, {2,250}, {3,250}, {4,250},
         {1,200}, {2,200}, {3,200}, {4,200},
         {1, 75}, {2, 75}, {3, 75}, {4, 75},
         {0, 0}
    };

    // uma reserva corresponde a um filme e a um numero de poltronas
    unsigned reservas[][2] =
    {
        {1,12}, // filme 1, 12 lugares
        {1,15}, {3,2}, {12,4}, {11, 2},
        {1,15}, {5,2}, {2,4}, {12, 20},
        {12,5}, {0,0}
    };

    unsigned   ticket[] =
    {
         35,35,35,35,
         35,35,35,35,
         35,35,35,35,0
    }; // o preco

    unsigned   mapa[13] = { 0 }; // a situacao das reservas para cada filme

   // agora vamos fazer algo: processar as reservas e colocar no mapa
    printf("\n==> Em cartaz:\n\n");
    for (int r = 1; filme[r] != 0; r += 1)
        printf("\t%s\n", filme[r]);


    printf("\n==> Processando as reservas\n");
    for (int r = 0; reservas[r][0] != 0; r += 1)
    {
        int sessao = reservas[r][0];
        int cadeiras = reservas[r][1];
        printf("Reserva: %d lugares para o filme %d \"%s\"\n",
            cadeiras, // lugares,
            sessao, // numero do filme
            filme[sessao]   // nome do filme
        );
        if (programa[r][1] - mapa[sessao] > cadeiras)
        {
            // ok: tem poltronas disponiveis ainda
            mapa[sessao] += cadeiras;
        }
        else
        {
            // lotado
            printf("[Sem lugar para reservar %d poltronas para %s]\n",
                cadeiras, filme[r]);
        }
    };  // for()

    // agora ve a situacao das salas
    printf("\n==> Mostrando as vendas acumuladas\n");
    for (int exib = 1; exib <= 12; exib += 1)
    {
        printf("Sessao %2d: vendidos %3d lugares para o filme \"%s\"\n",
            exib,
            mapa[exib], // numero do filme
            filme[exib]   // nome do filme
        );
    }
    return 0;
}

void        acima_da_media(unsigned N, char* filmes[], unsigned mapa[]) {};
unsigned    arrecadacao(unsigned N, unsigned vendas[], unsigned preco[]) { return 0; };
void        ocupacao(unsigned salas, unsigned mapa[]) {};
char*       mais_visto(unsigned N, char* filmes[], unsigned mapa[]) { return NULL; };
char*       mais_lucrativo(unsigned N, char* filmes[], unsigned mapa[], unsigned preco[]) { return NULL; };
void        reservas(unsigned salas, unsigned mapa[]) {};

 

E qual seria o próximo passo? Escrever as funções e testar os resultados manipulando as reservas. Quando estiver tudo ok criar os vetores para o CinemaMovie :) e colocar a leitura de dados. É muito mais simples assim

Postado
1 hora atrás, Annyy disse:

desculpa na verdade eu tentei mais não foi. tentei coloca os dados e não foi .mais to aqui tentado ainda

 

Não entendo o que significa. Os dados já podem estar no programa, como te mostrei. note que o programa compila, processa as reservas e tem as funções, do modo como te mostrei. Você entendeu a diferença?

 

Que significa "tentei mas não foi"? 

Postado

@arfneto     creio que @Annyy  quis dizer que nao entendeu o que voce falou ,  sobre ecrever em torno dos dados , e eu tambem nao ,  eh logico que entendi do enunciado que vai precisar de uma struct para armazenamento e isso se refere aos dados ,  ou seja eh em torno dos dados ,  e vi que voce inseriu os dados já todos prontos para nao precisar ficar inventando os dados e inserindo eles atraves  teclado , mas a ideia toda ainda nao consegui captar ,  desculpe pela minha inexperiencia  .

  • Curtir 1
Postado

Considere o que eu escrevi @devair1010 ANTES de escrever código

 

image.png.caeb46266e8375c953dc9c32cf27ed29.png

Em 24/05/2021 às 01:56, arfneto disse:

Para começar a testar logo basta isso. Veja um protótipo em 10 minutos

 

E depois 

 

Entenda que ao escrever o protótipo em torno dos dados já pode testar o programa e suas idéias, já com dados de teste significativos, logo no início. No caso aqui em como 15 minutos.

 

2 horas atrás, devair1010 disse:

que nao entendeu o que voce falou ,  sobre ecrever em torno dos dados , e eu tambem nao ,  eh logico que entendi do enunciado que vai precisar de uma struct para armazenamento e isso se refere aos dados

 

É claro que escrever estruturas adequadas é importante. No entanto não precisa de "uma struct para armazenamento" e por certo precisa de um vetor porque está no enunciado.

 

Como os vetores que mostrei tem TODOS os dados é bem provável que possa escrever sem qualquer struct, como eu disse

 

Em 24/05/2021 às 01:56, arfneto disse:

Mas é um começo. Vou te mostrar uma maneira de fazer isso. Não vou dizer que é a melhor, sequer que é boa. No entanto vou escrever em torno dos dados e não da linguagem. Escrevendo em torno dos dados e criando um modelo em geral leva a programas corretos escritos em menos tempo, muitas vezes já na primeira vez, para programas simples

 

E veja o que eu acrescentei, no mesmo tópico #10:
 

Em 24/05/2021 às 01:56, arfneto disse:

Tem os filmes, salas,  preços, funções... E nem rodou ainda. Mas já serve para escrever e testar as funções. Tem até 10 reservas.

 

Uma vez que isso rode (e ao rodar isso) vai ficar mais clara a estrutura para manter os dados sem passar tantos parâmetros e gerar algo mais legível, mas o que importa é ter algo logo para testar.

 

Tinha lido isso? 

 

Talvez eu possa explicar melhor

 

EXEMPLO

 

Em mais uns 15 minutos (mais o tempo para ficar escrevendo isso), aumentei o protótipo para escrever uma das funções. Imagino que se poderia escrever as 6 em seguida. E note que elas já estão lá no programa.

 

Mudei um pouco o código para não ter que usar contadores e simplificar os loops: apenas coloquei uns zeros a mais no final. E ignorei a posição zero dos vetores assim não tem que ficar somando um toda hora.

 

As estruturas são minúsculas afinal.

 

Veja a saída do programa de teste como está agora, e rodou só 3 vezes: na primeira só pra ver como era no geral. Faltaram uns dados. Depois acrescentei o esquema das reservas. E depois implementei uma das funções s;o pra mostrar algo mais da ideia. 

 

Os programas, não por acaso, eram chamados fase0, fase1 e fase2. E ao mesmo tempo tem um arquivo cinema.h onde se vai montando uma representação mais definitiva para os dados, ao mesmo tempo em que você testa o programa e se acostuma com os dados. Não vou postar o cinema.h agora pra não confundir.

 

A saída do programa:
 


==> Em cartaz:

        Avatar
        Avengers: Endgame
        Titanic
        Star Wars: The Force Awakens
        Avengers: Infinity War
        Jurassic World
        The Lion King
        The Avengers
        Fast & Furious 7
        Frozen II
        Avengers: Age of Ultron
        Black Panther

==> Processando as reservas
Reserva: 12 lugares para o filme 1 "Avatar"     (250 disponiveis por reserva)
Reserva: 15 lugares para o filme 1 "Avatar"     (238 disponiveis por reserva)
Reserva: 2 lugares para o filme 3 "Titanic"     (250 disponiveis por reserva)
Reserva: 4 lugares para o filme 12 "Black Panther"      (75 disponiveis por reserva)
Reserva: 2 lugares para o filme 11 "Avengers: Age of Ultron"    (75 disponiveis por reserva)
Reserva: 15 lugares para o filme 1 "Avatar"     (223 disponiveis por reserva)
Reserva: 2 lugares para o filme 5 "Avengers: Infinity War"      (200 disponiveis por reserva)
Reserva: 4 lugares para o filme 2 "Avengers: Endgame"   (250 disponiveis por reserva)
Reserva: 20 lugares para o filme 12 "Black Panther"     (71 disponiveis por reserva)
Reserva: 5 lugares para o filme 12 "Black Panther"      (51 disponiveis por reserva)
Reserva: 75 lugares para o filme 10 "Frozen II" (75 disponiveis por reserva)
[Reserva restrita a 37 poltronas para Frozen II]
Reserva: 37 lugares para o filme 10 "Frozen II" (75 disponiveis por reserva)
Reserva: 16 lugares para o filme 10 "Frozen II" (38 disponiveis por reserva)
Reserva: 16 lugares para o filme 10 "Frozen II" (22 disponiveis por reserva)
[Reserva restrita a 11 poltronas para Frozen II]
Reserva: 11 lugares para o filme 10 "Frozen II" (22 disponiveis por reserva)
Reserva: 5 lugares para o filme 10 "Frozen II"  (11 disponiveis por reserva)
Reserva: 3 lugares para o filme 10 "Frozen II"  (6 disponiveis por reserva)
Reserva: 1 lugares para o filme 10 "Frozen II"  (3 disponiveis por reserva)
Reserva: 1 lugares para o filme 10 "Frozen II"  (2 disponiveis por reserva)
Reserva: 1 lugares para o filme 10 "Frozen II"  (1 disponiveis por reserva)

==> Mostrando as vendas acumuladas
Sessao  1: vendidos  42 lugares para o filme "Avatar"
Sessao  2: vendidos   4 lugares para o filme "Avengers: Endgame"
Sessao  3: vendidos   2 lugares para o filme "Titanic"
Sessao  4: vendidos   0 lugares para o filme "Star Wars: The Force Awakens"
Sessao  5: vendidos   2 lugares para o filme "Avengers: Infinity War"
Sessao  6: vendidos   0 lugares para o filme "Jurassic World"
Sessao  7: vendidos   0 lugares para o filme "The Lion King"
Sessao  8: vendidos   0 lugares para o filme "The Avengers"
Sessao  9: vendidos   0 lugares para o filme "Fast & Furious 7"
Sessao 10: vendidos  75 lugares para o filme "Frozen II"
Sessao 11: vendidos   2 lugares para o filme "Avengers: Age of Ultron"
Sessao 12: vendidos  29 lugares para o filme "Black Panther"

==> Mostrando as taxas de ocupacao das salas

        12 salas:

           1:  16.80% (42/250)
           2:   1.60% (4/250)
           3:   0.80% (2/250)
           4:   0.00% (0/250)
           5:   1.00% (2/200)
           6:   0.00% (0/200)
           7:   0.00% (0/200)
           8:   0.00% (0/200)
           9:   0.00% (0/75)
          10: 100.00% (75/75)
          11:   2.67% (2/75)
          12:  38.67% (29/75)

 

Sem fazer quase nada:

  • o programa já mostra os filmes, que eu copiei de uma lista. 
  • processa uma lista de reservas que dá pra ir alterando para testar as funções
  • mostra as reservas, a capacidade das salas
  • mostra as vendas a partir das reservas
  • mostra as taxas de ocupação de cada sessão, uma das 6 funções obrigatórias
  • e tem as 6 funções obrigatórias lá declaradas
     
  • void        acima_da_media(unsigned N, char* filmes[], unsigned mapa[]);
    
    unsigned    arrecadacao(unsigned N, unsigned vendas[], unsigned preco[]);
    
    void        ocupacao(unsigned,unsigned[13],unsigned[][2]);
    
    char*       mais_visto(unsigned N, char* filmes[], unsigned mapa[]);
    
    char*       mais_lucrativo(unsigned N, char* filmes[],
        unsigned mapa[], unsigned preco[]);
    
    void        reservas(unsigned salas, unsigned mapa[]);

     

Isso é o que eu quero dizer. Seguindo pelo modelo tradicional vai escrever como @Annyy mostrou

  • ainda não tem nada claro
  • não dá pra testar nada
  • não tem nenhuma das funções
  • sequer compila ainda

Escrevendo ocupacao()
 

void        ocupacao( 
    unsigned salas, unsigned mapa[],
    unsigned programa[][2]
)
{
    printf("\n\t%2d salas:\n\n", salas);
    for (unsigned sala = 1; sala <= salas; sala += 1)
        printf("\t  %2d: %6.2f%% (%d/%d)\n",
            sala, (double)(mapa[sala]) / programa[sala][1] * 100.,
            mapa[sala], programa[sala][1]);
    return;
};

 

A saída da função
 


        12 salas:

           1:  16.80% (42/250)
           2:   1.60% (4/250)
           3:   0.80% (2/250)
           4:   0.00% (0/250)
           5:   1.00% (2/200)
           6:   0.00% (0/200)
           7:   0.00% (0/200)
           8:   0.00% (0/200)
           9:   0.00% (0/75)
          10: 100.00% (75/75)
          11:   2.67% (2/75)
          12:  38.67% (29/75)

 

Para essas reservas:
 

    // uma reserva corresponde a uma sessao e a um numero de poltronas
    unsigned reservas[][2] =
    {
        {1,12}, // filme 1, 12 lugares
        {1,15}, {3,2}, {12,4}, {11, 2},
        {1,15}, {5,2}, {2,4}, {12, 20},
        {12,5},
        {10,75},  // para a sessao 10 vai tentar vender tudo
        {10,37}, {10,16}, {10,16},
        {10,11}, // 11 vai exceder o limite de metade das cadeiras
        {10,5}, {10,3},
        {10,1}, {10,1}, {10,1},
        // 37 + 16 + 16 + 5 + 1 + 1 + 1 = 75
        {0,0}
    };

 

E você vê se pode por exemplo testar a parada de não reservar mais que a metade das poltronas: veja como se está tentando lotar a sessão 10 até os 75 lugares pra ver se aparece 100% na ocupação, e com salas vazias para ver se o programa está tratando bem os zeros.

 

E não precisa se preocupar com contadores e nada, porque basta uma reserva {0,0} no final e o loop sempre funciona. Assim pode ir testando qualquer cenário rapidinho.

 

Ao implementar as funções todas e testar tudo você ganha intimidade com o modelo e pode implementar estruturas se precisar de algo mais produtivo e fácil de alterar. E pode acrescentar a leitura dos dados ao invés de usar o que está já no modelo.

 

Só que aí já com o programa pronto, a lógica testada e tal. Essa é a diferença. Se você precisa ser pago logo ou mostrar logo algo é melhor fazer assim, sair na frente e testar desde a primeira hora.

 

O programa, em 1h e 3 versões

 

Spoiler

#include <stdio.h>
//#include "cinema.h"

void        acima_da_media(unsigned N, char* filmes[], unsigned mapa[]);
unsigned    arrecadacao(unsigned N, unsigned vendas[], unsigned preco[]);
void        ocupacao(unsigned,unsigned[13],unsigned[][2]);
char*       mais_visto(unsigned N, char* filmes[], unsigned mapa[]);
char*       mais_lucrativo(unsigned N, char* filmes[],
    unsigned mapa[], unsigned preco[]);
void        reservas(unsigned salas, unsigned mapa[]);

int main(void)
{
    char* filme[] =
    {
       "Filmes",
       "Avatar",
       "Avengers: Endgame",
       "Titanic",
       "Star Wars: The Force Awakens",
       "Avengers: Infinity War",
       "Jurassic World",
       "The Lion King",
       "The Avengers",
       "Fast & Furious 7",
       "Frozen II",
       "Avengers: Age of Ultron",
       "Black Panther",
       NULL
    };

    unsigned programa[][2] = // horario, poltronas por filme
    {  // nesse exemplo sao 4 horarios em 3 salas
        {0,0},
        {1,250}, {2,250}, {3,250}, {4,250},
        {1,200}, {2,200}, {3,200}, {4,200},
        {1, 75}, {2, 75}, {3, 75}, {4, 75},
        {0,0}
    };

    // uma reserva corresponde a uma sessao e a um numero de poltronas
    unsigned reservas[][2] =
    {
        {1,12}, // filme 1, 12 lugares
        {1,15}, {3,2}, {12,4}, {11, 2},
        {1,15}, {5,2}, {2,4}, {12, 20},
        {12,5},
        {10,75},  // para a sessao 10 vai tentar vender tudo
        {10,37}, {10,16}, {10,16},
        {10,11}, // 11 vai exceder o limite de metade das cadeiras
        {10,5}, {10,3},
        {10,1}, {10,1}, {10,1},
        // 37 + 16 + 16 + 5 + 1 + 1 + 1 = 75
        {0,0}
    };

    unsigned   ticket[] =
    {
         35,34,33,32,
         25,24,23,22,
         15,14,12,12,
         0
    }; // o preco

    unsigned   mapa[13] = { 0 }; // a situacao das reservas para cada filme

   // agora vamos fazer algo: processar as reservas e colocar no mapa
    printf("\n==> Em cartaz:\n\n");
    for (int r = 1; filme[r] != 0; r += 1)
        printf("\t%s\n", filme[r]);


    printf("\n==> Processando as reservas\n");
    for (int r = 0; reservas[r][0] != 0; r += 1)
    {
        unsigned sessao = reservas[r][0];
        unsigned cadeiras = reservas[r][1];
        unsigned disponiveis = programa[sessao][1] - mapa[sessao];
        printf("Reserva: %d lugares para o filme %d \"%s\"\
\t(%d disponiveis por reserva)\n",
            cadeiras, // lugares,
            sessao, // numero do filme
            filme[sessao],   // nome do filme
            disponiveis
        );
        if (disponiveis >= cadeiras)
        {   // tem assentos disponiveis
            if (cadeiras == 1)
            {   // sempre aceita reserva para 1 poltrona
                mapa[sessao] += cadeiras;
            }
            else
            {   // para mais de uma so aceita ate a metade das vagas
                if (cadeiras <= disponiveis / 2)
                {   
                    mapa[sessao] += cadeiras;
                }
                else
                    printf("[Reserva restrita a %d poltronas para %s]\n",
                        (disponiveis / 2), filme[sessao]);
            }
        }
        else
        {
            printf("[Reserva restrita a %d poltronas para %s]\n",
                (disponiveis / 2), filme[sessao]);
        };  // if()
    };  // for()

    // agora ve a situacao das salas
    printf("\n==> Mostrando as vendas acumuladas\n");
    for (int exib = 1; exib <= 12; exib += 1)
    {
        printf("Sessao %2d: vendidos %3d lugares para o filme \"%s\"\n",
            exib,
            mapa[exib], // numero do filme
            filme[exib]   // nome do filme
        );
    }

    printf("\n==> Mostrando as taxas de ocupacao das salas\n");
    ocupacao( 12, mapa, programa );
    return 0;
}

void        acima_da_media(unsigned N, char* filmes[],
    unsigned mapa[]) {};
unsigned    arrecadacao(unsigned N, unsigned vendas[],
    unsigned preco[]) { return 0; };


void        ocupacao( 
    unsigned salas, unsigned mapa[13],
    unsigned programa[][2]
)
{
    printf("\n\t%2d salas:\n\n", salas);
    for (unsigned sala = 1; sala <= salas; sala += 1)
        printf("\t  %2d: %6.2f%% (%d/%d)\n",
            sala, (double)(mapa[sala]) / programa[sala][1] * 100.,
            mapa[sala], programa[sala][1]);
    return;
};


char* mais_visto(unsigned N, char* filmes[],
    unsigned mapa[]) { return NULL; };
char* mais_lucrativo(unsigned N, char* filmes[],
    unsigned mapa[], unsigned preco[]) { return NULL; };
void        reservas(unsigned salas, unsigned mapa[]) {};

 

 

Depois escrevo sobre um modelo para representar os dados...

 

E agora?
 

Pois é: o próximo programa :D fase4 :D teria as outras 5 funções. E aí seria talvez a hora de colocar a leitura o modelo bem estruturado dos dados.

 

O que seria um modelo estruturado desse problema? 

 

Provavelemente todas as funções iriam girar em torno de uma estrutura Cinema. E considerando

  • O cinema tem filmes
  • O cinema tem salas
  • filmes e salas são organizados em sessões, que são filmes passando em salas por um preço. Isso é o que estaria no banco de dados hoje. Não se usa arquivos ou estruturas na prática. O tempo passou. Mas sem banco de dados ficamos com essa representação.
  • num programa para iniciantes e sem alocação dinâmica de memória, sem banco de dados e usando apenas estruturas e vetores, Cinema poderia ser simples assim:
     
    typedef struct
    {
        char        nome[MAX_NOME];
        unsigned    n_filmes; // exibicoes em curso
        Filme       filme[MAX_FILMES];
        unsigned    n_salas; // exibicoes em curso
        Sala        sala[MAX_SALAS];
        unsigned    n_sessoes; // exibicoes em curso
        Exibicao    exib[MAX_SESSOES];
    
    }    Cinema;
  • Escrevendo, claro, em torno dos dados. E depois de se acostumar com eles e com os resultados (os cáclulos das funções) fica bem mais fácil de pensar a respeito.

 

  • Curtir 1
Postado
1 hora atrás, arfneto disse:

Escrevendo, claro, em torno dos dados. E depois de se acostumar com eles e com os resultados (os cáclulos das funções) fica bem mais fácil de pensar a respeito.

Oi:

Estou aqui de bico.

Vou copiar tudo para entender o que vocês fizeram.

Vocês manjam muito!!!!!!!:)

  • Curtir 1
Postado
2 horas atrás, Annyy disse:

  isso mesmo

 

E ajudou com tudo que expliquei no post #20, @Annyy

 

Não perguntou nunca nadinha...

 

E como seria continuar? Se leu o que eu escrevi, como seria a fase4 :) ? 

 

Pois é, as tais funções...

 

Você entendeu que até agora nesse programa eu não fiz quase nada, mas o programa já faz boa parte do necessário? E acredite, fora alguma cosia que eu digitei errado e as coisas que faltavam e eu mudei nos parâmetros tudo rodou logo no início, sem stress?

 

Seriam complexas as funções?


Declaradas já estão desde o início porque escrevemos em torno dos dados e o enunciado é o começo de tudo....

 

A ver...

 

Função 1: Retorne a arrecadação total desse cinema?
 

Declarada assim antes

 

 

unsigned    arrecadacao(unsigned N, unsigned vendas[], unsigned preco[]);

 

  • Retorna um valor, um inteiro sem sinal
  • recebe o total de sessões, as vendas/reservas, e os preços 
  • chamar seria algo assim para os dados que temos. Numa execução o usuário vai dizer o total de reservar e depois passar as reservas uma a uma. Claro que para a função não faz diferença. Dados são dados e para isso se escreve uma função: recebe argumentos, retorna um valor
  • o código seria complexo? provavelmente não: tipo um cupom fiscal de N itens

Um exemplo de chamada:

 

    printf("\n==> Mostrando a arrecadacao total\n");
    int total = arrecadacao(12, mapa, ticket); // [1]
    //          ===========
    printf("\n\tBilheteria total = R$ %d.00\n", total);

 

E a saída? estamos escrevendo um programa de estudantes, não se espera nada especial
 

==> Mostrando a arrecadacao total

        Calculando arrecadacao nas 12 salas:

         1:  42 x R$ 35.00 =   1470.00
         2:   4 x R$ 34.00 =    136.00
         3:   2 x R$ 33.00 =     66.00
         4:  25 x R$ 32.00 =    800.00
         5:   2 x R$ 25.00 =     50.00
         6:   0 x R$ 24.00 =      0.00
         7:   0 x R$ 23.00 =      0.00
         8:   0 x R$ 22.00 =      0.00
         9:   0 x R$ 15.00 =      0.00
        10:  75 x R$ 14.00 =   1050.00
        11:   2 x R$ 12.00 =     24.00
        12:  29 x R$ 12.00 =    348.00

        Bilheteria total = R$ 3944.00

 

E o código afinal?

 

Algo como abaixo, uma soma como um cupom fiscal
 

unsigned    arrecadacao(unsigned N, unsigned vendas[],
    unsigned preco[])
{
    printf("\n\tCalculando arrecadacao nas %2d salas:\n\n", N);
    int     total = 0;
    int     total_sala = 0;
    for (unsigned sala = 1; sala <= N; sala += 1)
    {
        total_sala = vendas[sala] * preco[sala];
        total += total_sala;
        printf("\t%2d: %3d x R$%3d.00 = %6d.00\n",
            sala,
            vendas[sala],
            preco[sala],
            total_sala);
    }
    return total;
};


Função 2: Exiba a quantidade de reservas que houve para cada sala;?
 

Declarada assim desde o início

 

void        reservas(unsigned salas, unsigned mapa[])

 

Não retorna nada, apenas exibe as reservas

 

Um exemplo da chamada
 

    reservas(12, mapa); // [6]
//  ========

 

E a saída? 
 


==> Reservas para as 12 sessoes

         1   42
         2    4
         3    2
         4   25
         5    2
         6    0
         7    0
         8    0
         9    0
        10   75
        11    2
        12   29

 

E o código seria complicado?

 

Algo assim
 

void        reservas(unsigned salas, unsigned mapa[])
{
    printf("\n==> Reservas para as %d sessoes\n\n", salas);
    for (int r = 1; r<=salas; r += 1)
        printf("\t%2d  %3d\n", r, mapa[r]);
    return;
};

 

Como nesse modelo as reservas são pares { a,b } terminando por um par { 0,0 } é bem simples testar casos sem perder tempo...


Função 3: Exiba a taxa de ocupação de cada sala;?
 

Declarada assim antes
 

void        ocupacao(
    unsigned salas, unsigned mapa[13],
    unsigned programa[][2]
);

 

Também não retorna nada: apenas mostra as taxas de ocupação para cada sessão

 

Um exemplo de chamada

 

    printf("\n==> Mostrando as taxas de ocupacao das salas\n");
    ocupacao(12, mapa, programa); // [2] 
//  ========

 

E a saída, de um modo compatível com o enunciado e o nível do programa?

 


==> Mostrando as taxas de ocupacao das salas

        12 salas:

           1:  16.80% (42/250)
           2:   1.60% (4/250)
           3:   0.80% (2/250)
           4:  10.00% (25/250)
           5:   1.00% (2/200)
           6:   0.00% (0/200)
           7:   0.00% (0/200)
           8:   0.00% (0/200)
           9:   0.00% (0/75)
          10: 100.00% (75/75)
          11:   2.67% (2/75)
          12:  38.67% (29/75)

 

E o código seria complexo?

 

Bem, trata-se de somar as parcelas e dividir pelo número de parcelas... Um loop?

 

void        ocupacao(
    unsigned salas, unsigned mapa[13],
    unsigned programa[][2]
)
{
    printf("\n\t%2d salas:\n\n", salas);
    for (unsigned sala = 1; sala <= salas; sala += 1)
        printf("\t  %2d: %6.2f%% (%d/%d)\n",
            sala, (double)(mapa[sala]) / programa[sala][1] * 100.,
            mapa[sala], programa[sala][1]);
    return;
};


Função 4: Retorne o nome do filme que arrecadou mais (bilheteria);?

 

Declarada assim 
 

char*       mais_lucrativo(unsigned N, char* filmes[],
    unsigned mapa[], unsigned preco[]);

 

Retorna um char*, a popular string com o nome do filme. É pouca informação e acho que vale apenas como exercício: em geral se quer saber o nome, o quanto arrecadou, quanta gente viu, uma lista dos mais vistos e coisas assim. Mas isso é um exercício de C.

A função recebe o total de filmes, o mapa de reservas e os preços, afinal é o necessário... Nesse caso vai criar uma string na hora com o nome do filme, e o cara que chamou fica dono dela...

 

Um exemplo de chamada

 


    char* blockBuster = mais_lucrativo(12, filme, mapa, ticket); // [4]
    //            ==============
    printf("\t%s\n", blockBuster);
    free(blockBuster);

 

Assim o valor é mostrado e a memória relativa à string é liberada em seguida. É só um exercício afinal...

 

Um exemplo da saída
 

Maior receita para um filme: R$ 1470.00 para a sessao 1
        Avatar

 

A primeira linha é uma mensagem de teste de dentro da função, porque o programa ainda está em teste e é um p0rr3 ficar olhando a tabela pra conferir se o programa tem  os dados todos lá. Na próxima fase não terá isso, claro. Mas por enquanto dá uma certa tranquilidade saber a receita e o número do filme pra conferir...

 

E o código? Seria complicado?

Não creio: um loop pra ver os filmes, salva o número do que arrecadou mais, vai na tabela e vê o tamanho do nominho dele e cria a tal string pra retornar

 

char*       mais_lucrativo(unsigned N, char* filmes[],
    unsigned mapa[], unsigned preco[])
{ 
    int mais = 1;
    unsigned lucro_a = mapa[1] * preco[1];
    unsigned lucro_b = 0;
    for (unsigned f = 2; f <= N; f += 1)
    {
        lucro_b = mapa[f] * preco[f];
        if (lucro_b > lucro_a) mais = f;
    };
    printf("\
Maior receita para um filme: R$ %d.00 para a sessao %d\n",
        mapa[mais] * preco[mais], mais);
    char* title = malloc(1 + strlen(filmes[mais]));
    strcpy(title, filmes[mais]);
    return title;
};

 

Função 5: Retorne o nome do filme que teve a sala com mais espectadores

 

Declarada assim antes:
 

char*       mais_visto(unsigned N, char* filmes[],
    unsigned mapa[]);

 

É igual à função anterior, só muda o critério.

 

Retorna uma string, recebe o número de sessões, a lista dos filmes em cartaz e o mapa de reservas


Um exemplo de chamada
 


    printf("\n==> Identifica o filme mais visto\n");
    char* blockBuster = mais_visto(12, filme, mapa); // [3]
    //                  ==========
    printf("\t%s\n", blockBuster);
    free(blockBuster);

 

Um exemplo da saída
 

Filme mais visto: sessao 10, 75 reservas
        Frozen II

 

A primeira linha é um teste dentro da função, pra apagar depois. A função como pedida só retorna o nome do filme.

 

E o código? Seria complicado?

Não creio: um loop pra ver os filmes, salva o número dele, define o que arrecadou mais, vai na tabela e vê o tamanho do nominho dele e cria a tal string pra retornar

 

Algo assim
 

char*       mais_visto(unsigned N, char* filmes[],
    unsigned mapa[])
{
    int mais = 1;
    for (unsigned f = 2; f <= N; f += 1)
        if (mapa[f] > mapa[mais]) mais = f;
    printf("Filme mais visto: sessao %d, %d reservas\n",
        mais, mapa[mais]);
    char* title = malloc(1 + strlen(filmes[mais]));
    strcpy(title, filmes[mais]);
    return title;
};

 

Função 6: Exiba os nomes dos filmes com bilheteria acima da média entre os filmes.

 

Declarada assim
 

void        acima_da_media(unsigned N, char* filmes[],
    unsigned mapa[], unsigned preco[])

 

Não retorna nada. Apenas mostra o pedido.

 

recebe o total de filmes, a lista dos filmes em cartaz, o mapa das vendas e o preço dos tickets, afinal como fazer sem isso?


Um exemplo de chamada
 


    printf("\
\n==> Identifica os filmes que arrecadaram acima da media\n\n");
    acima_da_media(12, filme, mapa, ticket); // [5]
//  ==============


Um exemplo da saída

 


==> Identifica os filmes que arrecadaram acima da media

        Bilheteria media: R$  328.67

        Avatar                          (R$ 1470.00)
        Star Wars: The Force Awakens    (R$ 800.00)
        Frozen II                       (R$ 1050.00)
        Black Panther                   (R$ 348.00)

 

Note que pode não ter nenhum filme na lista, se considerar o enunciado de um modo formal: se passar 5 filmes e todos arrecadarem o mesmo valor nenhum deles vai ter arrecadação superior à média. Se passar um único filme ele não vai arrecadar mais que ele mesmo.... Mas o enunciado diz ACIMA.

 

E o código? Seria complicado?
 

Bem, tem um loop a mais porque precisa calcular a média antes. Por sorte ela não retorna a lista, isso seria algo novo porque teria que retornar uma lista de strings... Mas são DOIS loops. Algo assim

 

void        acima_da_media(unsigned N, char* filmes[],
    unsigned mapa[], unsigned preco[])
{
    // bilheteria acima da media...
    // qual a media?

    double  media = 0.;
    for (unsigned sala = 1; sala <= N; sala += 1)
        media += mapa[sala] * preco[sala];
    media /= (double) N;
    printf("\tBilheteria media: R$%8.2f\n\n", media);
    for (unsigned sala = 1; sala <= N; sala += 1)
    {
        int valor = mapa[sala] * preco[sala];
        if (valor > media)
            printf("\t%-30s\t(R$ %d.00)\n", filmes[sala], valor);
    };  // for()
    return;
};

 

 

Essas são as funções pedidas. Parecem estar certas, todas rodaram na primeira execução porque foram escritas a partir dos dados e já tinha um modelo de teste com 12 filmes, 3 salas e 4 horários... E as reservas são um vetor e é só ir digitando pra testar novas condições...

 

Eis a saída do programa de teste

 

Boa parte é a saída das funções mas o resto é importante para os testes, que começaram já na fase1. Essa ;e a quarta iteração do programa

 

E demorou MUITO MAIS para escrever isso aqui para explicar para vocês do que para escrever os 4, mesmo porque tem aquele recurso de recortar e colar :) no editor e acrescentei aos poucos as coisas ao programa
 

Spoiler



==> Em cartaz:

        Avatar
        Avengers: Endgame
        Titanic
        Star Wars: The Force Awakens
        Avengers: Infinity War
        Jurassic World
        The Lion King
        The Avengers
        Fast & Furious 7
        Frozen II
        Avengers: Age of Ultron
        Black Panther

==> Processando as reservas
Reserva: 12 lugares para o filme 1 "Avatar"     (250 disponiveis por reserva)
Reserva: 15 lugares para o filme 1 "Avatar"     (238 disponiveis por reserva)
Reserva: 2 lugares para o filme 3 "Titanic"     (250 disponiveis por reserva)
Reserva: 4 lugares para o filme 12 "Black Panther"      (75 disponiveis por reserva)
Reserva: 2 lugares para o filme 11 "Avengers: Age of Ultron"    (75 disponiveis por reserva)
Reserva: 15 lugares para o filme 1 "Avatar"     (223 disponiveis por reserva)
Reserva: 2 lugares para o filme 5 "Avengers: Infinity War"      (200 disponiveis por reserva)
Reserva: 4 lugares para o filme 2 "Avengers: Endgame"   (250 disponiveis por reserva)
Reserva: 20 lugares para o filme 12 "Black Panther"     (71 disponiveis por reserva)
Reserva: 25 lugares para o filme 4 "Star Wars: The Force Awakens"       (250 disponiveis por reserva)
Reserva: 5 lugares para o filme 12 "Black Panther"      (51 disponiveis por reserva)
Reserva: 75 lugares para o filme 10 "Frozen II" (75 disponiveis por reserva)
[Reserva restrita a 37 poltronas para Frozen II]
Reserva: 37 lugares para o filme 10 "Frozen II" (75 disponiveis por reserva)
Reserva: 16 lugares para o filme 10 "Frozen II" (38 disponiveis por reserva)
Reserva: 16 lugares para o filme 10 "Frozen II" (22 disponiveis por reserva)
[Reserva restrita a 11 poltronas para Frozen II]
Reserva: 11 lugares para o filme 10 "Frozen II" (22 disponiveis por reserva)
Reserva: 5 lugares para o filme 10 "Frozen II"  (11 disponiveis por reserva)
Reserva: 3 lugares para o filme 10 "Frozen II"  (6 disponiveis por reserva)
Reserva: 1 lugares para o filme 10 "Frozen II"  (3 disponiveis por reserva)
Reserva: 1 lugares para o filme 10 "Frozen II"  (2 disponiveis por reserva)
Reserva: 1 lugares para o filme 10 "Frozen II"  (1 disponiveis por reserva)

==> Mostrando as vendas acumuladas
Sessao  1: vendidos  42 lugares para o filme "Avatar"
Sessao  2: vendidos   4 lugares para o filme "Avengers: Endgame"
Sessao  3: vendidos   2 lugares para o filme "Titanic"
Sessao  4: vendidos  25 lugares para o filme "Star Wars: The Force Awakens"
Sessao  5: vendidos   2 lugares para o filme "Avengers: Infinity War"
Sessao  6: vendidos   0 lugares para o filme "Jurassic World"
Sessao  7: vendidos   0 lugares para o filme "The Lion King"
Sessao  8: vendidos   0 lugares para o filme "The Avengers"
Sessao  9: vendidos   0 lugares para o filme "Fast & Furious 7"
Sessao 10: vendidos  75 lugares para o filme "Frozen II"
Sessao 11: vendidos   2 lugares para o filme "Avengers: Age of Ultron"
Sessao 12: vendidos  29 lugares para o filme "Black Panther"

==> Mostrando a arrecadacao total

        Calculando arrecadacao nas 12 salas:

         1:  42 x R$ 35.00 =   1470.00
         2:   4 x R$ 34.00 =    136.00
         3:   2 x R$ 33.00 =     66.00
         4:  25 x R$ 32.00 =    800.00
         5:   2 x R$ 25.00 =     50.00
         6:   0 x R$ 24.00 =      0.00
         7:   0 x R$ 23.00 =      0.00
         8:   0 x R$ 22.00 =      0.00
         9:   0 x R$ 15.00 =      0.00
        10:  75 x R$ 14.00 =   1050.00
        11:   2 x R$ 12.00 =     24.00
        12:  29 x R$ 12.00 =    348.00

        Bilheteria total = R$ 3944.00

==> Mostrando as taxas de ocupacao das salas

        12 salas:

           1:  16.80% (42/250)
           2:   1.60% (4/250)
           3:   0.80% (2/250)
           4:  10.00% (25/250)
           5:   1.00% (2/200)
           6:   0.00% (0/200)
           7:   0.00% (0/200)
           8:   0.00% (0/200)
           9:   0.00% (0/75)
          10: 100.00% (75/75)
          11:   2.67% (2/75)
          12:  38.67% (29/75)

==> Identifica o filme mais visto
Filme mais visto: sessao 10, 75 reservas
        Frozen II
Maior receita para um filme: R$ 1470.00 para a sessao 1
        Avatar

==> Identifica os filmes que arrecadaram acima da media

        Bilheteria media: R$  328.67

        Avatar                          (R$ 1470.00)
        Star Wars: The Force Awakens    (R$ 800.00)
        Frozen II                       (R$ 1050.00)
        Black Panther                   (R$ 348.00)

==> Reservas para as 12 sessoes

         1   42
         2    4
         3    2
         4   25
         5    2
         6    0
         7    0
         8    0
         9    0
        10   75
        11    2
        12   29

 

 

Se o usuário tivesse digitado os dados não faria diferença. Ou faria: o usuário seria EU. Ou você, em frente ao terminal digitando incontáveis coisas....

 

Eis o código do teste da "fase 4", a primeira com todas as funções
 

Spoiler


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

void        acima_da_media(unsigned N, char* filmes[], unsigned mapa[], unsigned[]);
unsigned    arrecadacao(unsigned N, unsigned vendas[], unsigned preco[]);
void        ocupacao(unsigned,unsigned[13],unsigned[][2]);
char*       mais_visto(unsigned N, char* filmes[], unsigned mapa[]);
char*       mais_lucrativo(unsigned N, char* filmes[],
    unsigned mapa[], unsigned preco[]);
void        reservas(unsigned salas, unsigned mapa[]);

int main(void)
{
    char* filme[] =
    {
       "Filmes",
       "Avatar",
       "Avengers: Endgame",
       "Titanic",
       "Star Wars: The Force Awakens",
       "Avengers: Infinity War",
       "Jurassic World",
       "The Lion King",
       "The Avengers",
       "Fast & Furious 7",
       "Frozen II",
       "Avengers: Age of Ultron",
       "Black Panther",
       NULL
    };

    unsigned programa[][2] = // horario, poltronas por filme
    {  // nesse exemplo sao 4 horarios em 3 salas
        {0,0},
        {1,250}, {2,250}, {3,250}, {4,250},
        {1,200}, {2,200}, {3,200}, {4,200},
        {1, 75}, {2, 75}, {3, 75}, {4, 75},
        {0,0}
    };

    // uma reserva corresponde a uma sessao e a um numero de poltronas
    unsigned as_reservas[][2] =
    {
        {1,12}, // filme 1, 12 lugares
        {1,15}, {3,2}, {12,4}, {11, 2},
        {1,15}, {5,2}, {2,4}, {12, 20},
        {4,25},
        {12,5},
        {10,75},  // para a sessao 10 vai tentar vender tudo
        {10,37}, {10,16}, {10,16},
        {10,11}, // 11 vai exceder o limite de metade das cadeiras
        {10,5}, {10,3},
        {10,1}, {10,1}, {10,1},
        // 37 + 16 + 16 + 5 + 1 + 1 + 1 = 75
        {0,0}
    };

    unsigned   ticket[] =
    {
         0,
         35,34,33,32,
         25,24,23,22,
         15,14,12,12,
         0
    }; // o preco

    unsigned   mapa[13] = { 0 }; // a situacao das reservas para cada filme

   // agora vamos fazer algo: processar as reservas e colocar no mapa
    printf("\n==> Em cartaz:\n\n");
    for (int r = 1; filme[r] != 0; r += 1)
        printf("\t%s\n", filme[r]);


    printf("\n==> Processando as reservas\n");
    for (int r = 0; as_reservas[r][0] != 0; r += 1)
    {
        unsigned sessao = as_reservas[r][0];
        unsigned cadeiras = as_reservas[r][1];
        unsigned disponiveis = programa[sessao][1] - mapa[sessao];
        printf("Reserva: %d lugares para o filme %d \"%s\"\
\t(%d disponiveis por reserva)\n",
            cadeiras, // lugares,
            sessao, // numero do filme
            filme[sessao],   // nome do filme
            disponiveis
        );
        if (disponiveis >= cadeiras)
        {   // tem assentos disponiveis
            if (cadeiras == 1)
            {   // sempre aceita reserva para 1 poltrona
                mapa[sessao] += cadeiras;
            }
            else
            {   // para mais de uma so aceita ate a metade das vagas
                if (cadeiras <= disponiveis / 2)
                {   
                    mapa[sessao] += cadeiras;
                }
                else
                    printf("[Reserva restrita a %d poltronas para %s]\n",
                        (disponiveis / 2), filme[sessao]);
            }
        }
        else
        {
            printf("[Reserva restrita a %d poltronas para %s]\n",
                (disponiveis / 2), filme[sessao]);
        };  // if()
    };  // for()

    // agora ve a situacao das salas
    // testando as funcoes afinal

    printf("\n==> Mostrando as vendas acumuladas\n");
    for (int exib = 1; exib <= 12; exib += 1)
    {
        printf("Sessao %2d: vendidos %3d lugares para o filme \"%s\"\n",
            exib,
            mapa[exib], // numero do filme
            filme[exib]   // nome do filme
        );
    }
    printf("\n==> Mostrando a arrecadacao total\n");
    int total = arrecadacao(12, mapa, ticket); // [1]
    //          ===========
    printf("\n\tBilheteria total = R$ %d.00\n", total);

    printf("\n==> Mostrando as taxas de ocupacao das salas\n");
    ocupacao(12, mapa, programa); // [2] 
//  ========

    printf("\n==> Identifica o filme mais visto\n");
    char* blockBuster = mais_visto(12, filme, mapa); // [3]
    //                  ==========
    printf("\t%s\n", blockBuster);
    free(blockBuster);

    blockBuster = mais_lucrativo(12, filme, mapa, ticket); // [4]
    //            ==============
    printf("\t%s\n", blockBuster);
    free(blockBuster);

    printf("\
\n==> Identifica os filmes que arrecadaram acima da media\n\n");
    acima_da_media(12, filme, mapa, ticket); // [5]
//  ==============

    reservas(12, mapa); // [6]
//  ========
    return 0;
}

void        acima_da_media(unsigned N, char* filmes[],
    unsigned mapa[], unsigned preco[])
{
    // bilheteria acima da media...
    // qual a media?

    double  media = 0.;
    for (unsigned sala = 1; sala <= N; sala += 1)
        media += mapa[sala] * preco[sala];
    media /= (double) N;
    printf("\tBilheteria media: R$%8.2f\n\n", media);
    for (unsigned sala = 1; sala <= N; sala += 1)
    {
        int valor = mapa[sala] * preco[sala];
        if (valor > media)
            printf("\t%-30s\t(R$ %d.00)\n", filmes[sala], valor);
    };  // for()
    return;
};


unsigned    arrecadacao(unsigned N, unsigned vendas[],
    unsigned preco[])
{
    printf("\n\tCalculando arrecadacao nas %2d salas:\n\n", N);
    int     total = 0;
    int     total_sala = 0;
    for (unsigned sala = 1; sala <= N; sala += 1)
    {
        total_sala = vendas[sala] * preco[sala];
        total += total_sala;
        printf("\t%2d: %3d x R$%3d.00 = %6d.00\n",
            sala,
            vendas[sala],
            preco[sala],
            total_sala);
    }
    return total;
};


char*       mais_lucrativo(unsigned N, char* filmes[],
    unsigned mapa[], unsigned preco[])
{ 
    int mais = 1;
    unsigned lucro_a = mapa[1] * preco[1];
    unsigned lucro_b = 0;
    for (unsigned f = 2; f <= N; f += 1)
    {
        lucro_b = mapa[f] * preco[f];
        if (lucro_b > lucro_a) mais = f;
    };
    printf("\
Maior receita para um filme: R$ %d.00 para a sessao %d\n",
        mapa[mais] * preco[mais], mais);
    char* title = malloc(1 + strlen(filmes[mais]));
    strcpy(title, filmes[mais]);
    return title;
};


char*       mais_visto(unsigned N, char* filmes[],
    unsigned mapa[])
{
    int mais = 1;
    for (unsigned f = 2; f <= N; f += 1)
        if (mapa[f] > mapa[mais]) mais = f;
    printf("Filme mais visto: sessao %d, %d reservas\n",
        mais, mapa[mais]);
    char* title = malloc(1 + strlen(filmes[mais]));
    strcpy(title, filmes[mais]);
    return title;
};


void        ocupacao(
    unsigned salas, unsigned mapa[13],
    unsigned programa[][2]
)
{
    printf("\n\t%2d salas:\n\n", salas);
    for (unsigned sala = 1; sala <= salas; sala += 1)
        printf("\t  %2d: %6.2f%% (%d/%d)\n",
            sala, (double)(mapa[sala]) / programa[sala][1] * 100.,
            mapa[sala], programa[sala][1]);
    return;
};


void        reservas(unsigned salas, unsigned mapa[])
{
    printf("\n==> Reservas para as %d sessoes\n\n", salas);
    for (int r = 1; r<=salas; r += 1)
        printf("\t%2d  %3d\n", r, mapa[r]);
    return;
};

 

 

E agora?

 

Como @devair1010 disse, não temos structs bonitinhas nem uma boa organização dos dados ainda. Mas o programa está quase pronto. :)  

 

Basta ler os dados do usuário e colocar nos vetores. Será difícil? Provavelmente não. Alguns vetores serão por nossa conta: os filmes, os preços, os horários.

 

O total de reservas é fixo e pequenino: 10 apenas.

 

O enunciado nada fala sobre estruturas e composição de dados, encapsulamento ou essas coisas fancy de outros cursos

 

Mas seria claro muito mais simples, agora que se tem mais noção dos dados e tal, escrever uma estrutura que descrevesse o Cinema todo e passar só o endereço dela para TODAS as funções. É muito mais simples.

 

Eu teria começado por isso, mas não é o que quero mostrar aqui: queria mostrar como começar com um mínimo e seguir adiante em torno dos dados...

 

Um modelo Cinema

 

Eu não testei isso mas é provável que esteja certo desde o início, porque foi escrito em torno dos dados e depois de escrever algumas funções e extrair dados deles.

 

Isso foi o que postei antes:

 

typedef struct
{
    char        nome[MAX_NOME];
    unsigned    n_filmes; // exibicoes em curso
    Filme       filme[MAX_FILMES];
    unsigned    n_salas; // exibicoes em curso
    Sala        sala[MAX_SALAS];
    unsigned    n_sessoes; // exibicoes em curso
    Exibicao    exib[MAX_SESSOES];

}    Cinema;

 

Considerando que um cinema nesse modelo é isso: um catálogo de filmes e um conjunto de salas. E nesse conjunto serão criadas sessões.

 

O que é uma Exibicao?
 

typedef struct
{
    Filme* f;
    Sala*  s;
    Turno* t;

}   Exibicao;

 

Algo assim: um filme passando numa certa sala num certo horário. Podia ser apenas um código para cada coisa, mas um ponteiro estará bem, e mais completo.

 

O que é um Turno?

 

typedef struct
{
    char        horario[6];
    char        nome[MAX_NOME];
    unsigned    id; // numero da sessao

}   Turno;

 

Pois é: um horário, um nome --- pode ser o caso de mostrar legendado, dublado, iMax, só para fazer uma graça

 

O que é uma Sala?
 

typedef struct
{
    char        nome[MAX_NOME];
    unsigned    id; // numero da sala
    unsigned    capacidade;
    unsigned    reservas;

}   Sala;

 

Algo assim. A sala tem um nome, porque pode precisar imprimir um ticket, um QRcode, qualquer coisa. A sala tem uma capacidade e num dado momento um certo número de reservar

 

O que é um Filme?
 

typedef struct
{
    char        nome[MAX_NOME];
    unsigned    id; // numero do filme
    unsigned    preco;

}   Filme;

 

O filme tem um nome, o ingresso tem um preço.

 

Pode ser preciso rever algo ou tudo isso, mas o fato é que agora se pode colocar todos os dados DENTRO disso e as funções ficam todas mais simples e eficientes.

 

Não estamos usando alocação dinâmica dentro dessas coisas, é um programa simples. Eis o conjunto todo como seria
 

Spoiler


#pragma once
#pragma once
#define     MAX_FILMES      (25)
#define     MAX_NOME        (30)
#define     MAX_SALAS       (8)
#define     MAX_SESSOES     (4)

#include <stdio.h>

typedef struct
{
    char        nome[MAX_NOME];
    unsigned    id; // numero do filme
    unsigned    preco;

}   Filme;

typedef struct
{
    char        nome[MAX_NOME];
    unsigned    id; // numero da sala
    unsigned    capacidade;
    unsigned    reservas;

}   Sala;

typedef struct
{
    char        horario[6];
    char        nome[MAX_NOME];
    unsigned    id; // numero da sessao

}   Turno;

typedef struct
{
    Filme* f;
    Sala*  s;
    Turno* t;

}   Exibicao;

typedef struct
{
    char        nome[MAX_NOME];
    unsigned    n_filmes; // exibicoes em curso
    Filme       filme[MAX_FILMES];
    unsigned    n_salas; // exibicoes em curso
    Sala        sala[MAX_SALAS];
    unsigned    n_sessoes; // exibicoes em curso
    Exibicao    exib[MAX_SESSOES];

}    Cinema;
// fim de cinema.h

 

 

 

E assim é. Ou poderia ser....

 

 

Entende algo da diferença @Annyy?

 

Entende com dá pra escrever em torno dos dados, começar a testar rapidinho e mesmo sem as estruturas, @devair1010

 

Entendem o que falta para terminar o programa?

 

 

Postado
4 horas atrás, Annyy disse:

ola rodo aqui, obrigado , só a parte de quantidade de cadeira na sala que não to conseguindo

Que significa?

 

Rodou o que aí? Não postou nenhum código. Não respondeu nada do que eu perguntei, não perguntou nada sobre o que eu extensivamente expliquei. Espero que tenha entendido

 

Note que eu te mostrei uma versão de cada função, e elas funcionam... Não consegue usar para o seu programa? Está insistindo naquele caminho original?

 

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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!