Erros código

1. Erros código

Marcelo Wolf
wolfnp

(usa Outra)

Enviado em 23/04/2019 - 17:34h

Olá fiz um código para um trabalho só que as coisas não estão saindo como esperado
Segue código feito:


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

struct Matriz
{
int vlFileira,vlLinha;

int flExecutiva,flEconomica,flSaida_de_Emergencia,flSem_Reclinagem,assento,flTotal;

float prExecutiva,prEconomica,prSaida_de_Emergencia,prSem_Reclinagem;

int MatrizAviao[6][29];
};

struct Matriz matriz;
void clean_stdin()
{
int c;
do
{
c = getchar();
}
while( c != "\n" && c != EOF);
}

void iniciaDados()
{

do
{
printf("\nNumero de assentos Executiva: 30");
printf("\nNumero de assentos Economica: 114");
printf("\nNumero de assentos Sem Reclinagem: 12");
printf("\nNumero de assentos Saida de Emergencia: 12");

printf("\n\n");

printf("\nPreco passagem Executiva: R$");
scanf("%f", &matriz.prExecutiva);
printf("\nPreco passagem Economica: R$");
scanf("%f", &matriz.prEconomica);
printf("\nPreco passagem Sem Reclinagem: R$");
scanf("%f", &matriz.prSem_Reclinagem);
printf("\nPreco passagem Saida de Emergencia: R$");
scanf("%f", &matriz.prSaida_de_Emergencia);

matriz.flTotal = (matriz.flExecutiva + matriz.flEconomica + matriz.flSem_Reclinagem + matriz.flSaida_de_Emergencia);

}

while



((matriz.flExecutiva <0) &&
(matriz.flEconomica <0) &&
(matriz.flSem_Reclinagem <0) &&
(matriz.flSaida_de_Emergencia <0) &&
(matriz.flTotal < 29 && matriz.flTotal > 0) &&
(matriz.assento < 174 && matriz.assento > 0) &&
(matriz.prExecutiva > matriz.prEconomica || matriz.prExecutiva > matriz.prSem_Reclinagem) &&
(matriz.prSem_Reclinagem < matriz.prEconomica || matriz.prEconomica < matriz.prSaida_de_Emergencia) &&
(matriz.prSaida_de_Emergencia < matriz.prExecutiva || matriz.prSem_Reclinagem < matriz.prSaida_de_Emergencia));



system("clear");
}

void iniciaMatriz()
{
int i = 0, y = 0;

for(i = 0; i < matriz.flTotal; i++)
{
for(y = 0; y < matriz.assento; y++)
{
matriz.MatrizAviao[i][y] = "--";
}
printf("\n\n");
}
system("clear");

}

void mostraMatriz()
{
printf("\n /:::::::::::::::::::::| \n\n");
printf("\n /::::::::::::::::::::::| \n\n");
printf("\n /:::::::::::::::::::::::| \n\n");
int i = 0, y = 0;

for(i = 0; i <matriz.assento; i++)
{
if(i >= 0 && i < 30)
printf("0%d", i+1);
else
printf("%d", i+1);
}

printf("\n\n\n");

for(i = 0; i <matriz.flTotal; i++)
{
printf("%c ", i + 29);
for(y = 0; y < matriz.assento; y++)
{
if(matriz.MatrizAviao[i][y] == "--")
printf("\t--");

else
printf("\tX");
}

printf("\n");
}
printf("\n \\:::::::::::::::::::::::| \n\n");
printf("\n \\::::::::::::::::::::::| \n\n");
printf("\n \\:::::::::::::::::::::| \n\n");

clean_stdin();
}


int retornaCategoria(int vlLinha)
{


int valorCategoria = 0;

if(vlLinha < matriz.flExecutiva)
valorCategoria = 86;

else if(vlLinha < (matriz.flExecutiva + matriz.flEconomica))
valorCategoria = 67;

else
valorCategoria = 80;

return valorCategoria;
}

void case1()
{
int vlLinha, vlIdade;
char escolhaInserir, vlFileira;

printf("\nDigite o assento desejado('01-29'): ");
scanf("%d", &vlLinha);
clean_stdin();

printf("\nDigite a fileira desejada('A-F'): ");
scanf("%c", &vlFileira);
clean_stdin();

if((int)vlLinha <= 29 && (int)vlLinha >= 01 && vlFileira >= 65 && vlFileira <= 70 && vlIdade > 0 && vlIdade < 100)
{
if(matriz.MatrizAviao[(int)vlLinha-29][vlFileira] == "--")
{
printf("\nDigite sua idade: ");
scanf("%d", &vlIdade);
clean_stdin();

printf("\nDeseja inserir? (S/N)");
scanf("%c", &escolhaInserir);
clean_stdin();

if(escolhaInserir == 'S')
{
matriz.MatrizAviao[(int)vlLinha-29][vlFileira-70] = vlIdade;
printf("\nValor inserido com Sucesso! \n\n");

}

else if(escolhaInserir == 'N')
{
printf("\nVoce nao confirmou o assento \n\n");
}

else
{
printf("\nValor Invalido. ");
}
}
}

else
printf("\nAssento Indisponivel!\n");
clean_stdin();
}

void case2()
{
char vlLinha;
int vlFileira;

printf("\nDigite a fileira que deseja consultar('0-29'): ");
scanf("%d", &vlFileira);
clean_stdin();

printf("\nDigite o assento que deseja consultar('A-F'): ");
scanf("%c", &vlLinha);
clean_stdin();

if((int)vlLinha <= 29 && (int)vlLinha >= 01 && vlFileira >= 65 && vlFileira < matriz.flTotal)
{
if(matriz.MatrizAviao[(int)vlLinha-29][vlFileira-1] == "--")
{
printf("\nAssento Disponivel!");

if(vlLinha - 65 <= matriz.flExecutiva)
{
printf("\nCategoria: ");
printf("%d", (int)retornaCategoria((int)vlLinha-65));
printf("\nValor Executiva: %2.5f\n\n", matriz.prExecutiva);
clean_stdin();
}

else if( vlLinha - 65 <= (matriz.flExecutiva + matriz.flEconomica))
{
printf("\nCategoria: ");
printf("%d", (int)retornaCategoria((int)vlLinha-65));
printf("\nValor: %0.9f\n\n", matriz.prEconomica);
clean_stdin();
}
else if( vlLinha - 65 <= (matriz.flEconomica + matriz.flSaida_de_Emergencia))
{
printf("\nCategoria: ");
printf("%d", (int)retornaCategoria((int)vlLinha-65));
printf("\nValor: %1.1f\n\n", matriz.prSaida_de_Emergencia);
clean_stdin();
}
else if( vlLinha - 65 <= (matriz.flSaida_de_Emergencia + matriz.flSem_Reclinagem))
{
printf("\nCategoria: ");
printf("%d", (int)retornaCategoria((int)vlLinha-65));
printf("\nValor: %0.8f\n\n", matriz.prSem_Reclinagem);
clean_stdin();
}
}
else
{
printf("\nAssento Indisponível!");

if(matriz.MatrizAviao[(int)vlLinha-65][vlFileira-1] == matriz.flExecutiva)
{
printf("\nCategoria Executiva");
printf("\nValor Executiva: %f\n\n", matriz.prExecutiva);
clean_stdin();
}

else if(matriz.MatrizAviao[(int)vlLinha-65][vlFileira-1] == matriz.flEconomica)
{
printf("\nCategoria Economica");
printf("\nValor: %f\n\n", matriz.prEconomica);
clean_stdin();
}
else if(matriz.MatrizAviao[(int)vlLinha-65][vlFileira-1] == matriz.flSaida_de_Emergencia)
{
printf("\nCategoria Saida de emergencia");
printf("\nValor: %f\n\n", matriz.prSaida_de_Emergencia);
clean_stdin();
}
else if(matriz.MatrizAviao[(int)vlLinha-65][vlFileira-1] == matriz.flSem_Reclinagem)
{
printf("\nCategoria Sem Reclinagem");
printf("\nValor: %f\n\n", matriz.prSem_Reclinagem);
clean_stdin();
}
}
}
else
printf("\nAssento inexistente\n\n");
}

void case3()
{
int vlLinha;

printf("\nDigite o assento que deseja consultar('01-29'): ");
scanf("%d", &vlLinha);
clean_stdin();

if(((int)vlLinha - 65) >= 0 && ((int)vlLinha - 65) < matriz.flTotal)
{
if(vlLinha - 65 <= matriz.flExecutiva)
{
printf("\nCategoria: ");
printf("%d", (int)retornaCategoria((int)vlLinha-65));
printf("\nValor Executiva: %2.5f\n\n", matriz.prExecutiva);
clean_stdin();

}

else if( vlLinha - 65 <= (matriz.flExecutiva + matriz.flEconomica))
{
printf("\nCategoria: ");
printf("%d", (int)retornaCategoria((int)vlLinha-65));
printf("\nValor: %0.9f\n\n", matriz.prEconomica);
clean_stdin();

}
else if( vlLinha - 65 <= (matriz.flEconomica + matriz.flSaida_de_Emergencia))
{
printf("\nCategoria: ");
printf("%d", (int)retornaCategoria((int)vlLinha-65));
printf("\nValor: %1.1f\n\n", matriz.prSaida_de_Emergencia);
clean_stdin();
}
else if( vlLinha - 65 <= (matriz.flSaida_de_Emergencia + matriz.flSem_Reclinagem))
{
printf("\nCategoria: ");
printf("%d", (int)retornaCategoria((int)vlLinha-65));
printf("\nValor: %0.8f\n\n", matriz.prSem_Reclinagem);
clean_stdin();
}
}
else
{
printf("\nFileira n&#259;o encontrada. ");
}
}

void case4A()
{
int i, y, contReservado = 0, contLivre = 0, ttlAssento;
float vlPorcentagemReservado,vlPorcentagemLivre;

ttlAssento = matriz.flTotal * matriz.assento;

for(i = 0; i < matriz.flTotal; i++)
{
for(y = 0; y < matriz.assento; y++)
{
if (matriz.MatrizAviao[i][y] == "--")
contLivre++;
else
contReservado++;
}
}

vlPorcentagemReservado = (ttlAssento/1.0) * ((contReservado)/10);
vlPorcentagemLivre = (ttlAssento/1.0) * ((contLivre)/10);

printf("\n Reservados: \t%d", contReservado);
printf("\t - %0.2f", vlPorcentagemReservado);
printf("\t|");

for(i = 0; i < contReservado; i++)
printf("=");

for(i = 0; i < contLivre; i++)
printf(".");

printf("|");


printf("\n Livres: \t%d", contLivre);
printf("\t - %0.2f", vlPorcentagemLivre);
printf("\t|");

for(i = 0; i < contLivre; i++)
printf("=");

for(i = 0; i < contReservado; i++)
printf(".");

printf("|");

printf("\n\n");

}

void case4B()
{

int contBebes = 0, contCriancas = 0, contAdolescentes = 0, contAdultos = 0, contIdosos = 0, contTotal = 0, contVazio = 0, ttlAssento, i = 0, y = 0;
float vlPorcentagemBebes = 0,vlPorcentagemCriancas = 0, vlPorcentagemAdolescentes = 0, vlPorcentagemAdultos = 0, vlporcentagemIdosos;
ttlAssento = matriz.flTotal * matriz.assento;

for(i = 0; i < matriz.flTotal; i++)
{
for(y = 0; y < matriz.assento; y++)
{
if(matriz.MatrizAviao[i][y] != "--")
{
if (matriz.MatrizAviao[i][y] >= 00 && matriz.MatrizAviao[i][y] <= 02)
contBebes++;

else if(matriz.MatrizAviao[i][y] >= 02 && matriz.MatrizAviao[i][y] <12)
contCriancas++;

else if(matriz.MatrizAviao[i][y] >= 12 && matriz.MatrizAviao[i][y] <= 20)
contAdolescentes++;

else if(matriz.MatrizAviao[i][y] >= 20 && matriz.MatrizAviao[i][y] <= 60)
contAdultos++;

else if(matriz.MatrizAviao[i][y] >= 60 && matriz.MatrizAviao[i][y] <= 99)
contIdosos++;
}

else
contVazio++;

}
}
contTotal = contBebes + contCriancas + contAdolescentes + contAdultos + contIdosos + contVazio;
vlPorcentagemBebes = (ttlAssento/1.0) * ((contBebes)/10);
vlPorcentagemCriancas = (ttlAssento/1.0) * ((contCriancas)/10);
vlPorcentagemAdolescentes = (ttlAssento/1.0) * ((contAdolescentes)/10);
vlPorcentagemAdultos = (ttlAssento/1.0) * ((contAdultos)/10);
vlporcentagemIdosos = (ttlAssento/1.0) * ((contIdosos)/10);

printf("\n00-02: %d", contBebes);
printf(" - %0.2f", vlPorcentagemBebes);
printf("\t|");

for(i = 0; i < contBebes; i++)
printf("=");

for(i = 0; i < (contTotal - contBebes); i++)
printf(".");

printf("|\n");

printf("\n02-12: %d", contCriancas);
printf(" - %0.2f", vlPorcentagemCriancas);
printf("\t|");

for(i = 0; i < contCriancas; i++)
printf("=");

for(i = 0; i < (contTotal - contCriancas); i++)
printf(".");

printf("|\n");

printf("\n12-20: %d", contAdolescentes);
printf(" - %0.2f", vlPorcentagemAdolescentes);
printf("\t|");

for(i = 0; i < contAdolescentes; i++)
printf("=");

for(i = 0; i < (contTotal - contAdolescentes); i++)
printf(".");

printf("|\n");


printf("\n20-60: %d", contAdultos);
printf(" - %0.2f", vlPorcentagemAdultos);
printf("\t|");

for(i = 0; i < contAdultos; i++)
printf("=");

for(i = 0; i < (contTotal - contAdultos); i++)
printf(".");

printf("|\n");

printf("\n60-99: %d", contIdosos);
printf(" - %0.2f", vlporcentagemIdosos);
printf("\t|");

for(i = 0; i < contIdosos; i++)
printf("=");

for(i = 0; i < (contTotal - contIdosos); i++)
printf(".");

printf("|\n");


clean_stdin();

}

void case4E()
{
int contExecutiva = 0, contEconomica = 0, contSaida_de_Emergencia = 0, contSem_Reclinagem = 0, contTotal = 0, contVazio = 0, i = 0, y = 0, ttlAssento;
float vlPorcentagemExecutiva = 0, vlPorcentagemEconomica = 0, vlPorcentagemSaida_de_Emergencia = 0, vlPorcentagemSem_Reclinagem = 0;
ttlAssento = matriz.flTotal * matriz.assento;

for(i = 0; i < matriz.flTotal; i++)
{
for(y = 0; y < matriz.assento; y++)
{
if(matriz.MatrizAviao[i][y] != '*')
{
if(matriz.MatrizAviao[i][y] = matriz.flExecutiva)
{
contExecutiva = contExecutiva + matriz.prExecutiva;
}

else if(matriz.MatrizAviao[i][y] = matriz.flExecutiva + matriz.flEconomica)
{
contEconomica = contEconomica + matriz.prEconomica;
}
else if(matriz.MatrizAviao[i][y] = matriz.flExecutiva + matriz.flEconomica + matriz.flSaida_de_Emergencia)
{
contSaida_de_Emergencia = contSaida_de_Emergencia + matriz.prSaida_de_Emergencia;
}
else if(matriz.MatrizAviao[i][y] = matriz.flExecutiva + matriz.flEconomica + matriz.flSaida_de_Emergencia + matriz.flSem_Reclinagem)
{
contSem_Reclinagem = contSem_Reclinagem + matriz.prSem_Reclinagem;
}
}
else
contVazio++;

}
}
contTotal = matriz.prExecutiva + matriz.prEconomica + matriz.prSaida_de_Emergencia + matriz.prSem_Reclinagem;
printf("Executiva %d", matriz.flEconomica);
vlPorcentagemExecutiva = (contTotal/1.0) * ((contExecutiva)/10);
vlPorcentagemEconomica = (contTotal/1.0) * ((contEconomica)/10);
vlPorcentagemSaida_de_Emergencia = (contTotal/1.0) * ((contSaida_de_Emergencia)/10);
vlPorcentagemSem_Reclinagem = (contTotal/1.0) * ((contSem_Reclinagem)/10);

printf("\nValor Executivo Arrecadado: R$ %d", contExecutiva);
printf(" - %0.2f %", vlPorcentagemExecutiva);
printf("\t|");

for(i = 0; i < contExecutiva; i++)
printf("=");

for(i = 0; i < (contTotal - contEconomica - contSaida_de_Emergencia - contSem_Reclinagem); i++)
printf(".");

printf("|\n");

printf("\nValor Economica Arrecadado: R$ %d", contEconomica);
printf(" - %0.2f %", vlPorcentagemEconomica);
printf("\t|");

for(i = 0; i < contEconomica; i++)
printf("=");

for(i = 0; i < (contTotal - contExecutiva - contSaida_de_Emergencia - contSem_Reclinagem); i++)
printf(".");

printf("|\n");

printf("\nValor Saida de Emergencia Arrecadado: R$ %d", contSaida_de_Emergencia);
printf(" - %0.2f %", vlPorcentagemSaida_de_Emergencia);
printf("\t|");

for(i = 0; i < contSaida_de_Emergencia; i++)
printf("=");

for(i = 0; i < (contTotal - contExecutiva - contEconomica - contSem_Reclinagem); i++)
printf(".");

printf("|\n");

printf("\nValor Sem Reclinagem Arrecadado: R$ %d", contSem_Reclinagem);
printf(" - %0.2f %", vlPorcentagemSem_Reclinagem);
printf("\t|");

for(i = 0; i < contSem_Reclinagem; i++)
printf("=");

for(i = 0; i < (contTotal - contExecutiva - contEconomica - contSaida_de_Emergencia); i++)
printf(".");

printf("|\n");


}

void case4_Options()
{
int option;

do
{
printf("\n1 - Porcentagem de Assentos Liberados e Reservados");
printf("\n2 - Porcentagem de Assentos Reservados por corredor");
printf("\n3 - Porcentagem da Faixa de Idade");
printf("\n4 - Porcentagem do Valor Arrecadado por Categoria de Assento");
printf("\n5 - Sair");
printf("\n\n\n");
scanf("%d", &option);
clean_stdin();

switch(option)
{
case 1:
case4A();
break;
case 2:
case4B();
break;
case 4:
break;
case 5:
case4E();
break;

}
}
while(option != 6);
clean_stdin();
}

int main()
{
printf( "\n==================================================================================\n\n");
printf( "\n\t AVIAO UNISINOS \n\n");
printf( "\n==================================================================================\n\n");

iniciaDados();
iniciaMatriz();

int opcao = 0;

while(1)
{
printf( "\n===============================================================================\n");
printf( "\n\t Menu Aviao ");
printf( "\n===============================================================================\n");
printf( "\n1- Reserva de um assento......................................................");
printf( "\n2- Consultar situacao de um assento...........................................");
printf( "\n3- Consultar disponibilidade de assentos totais e consecutivos em uma fileira.");
printf( "\n4- Relatorios.................................................................");
printf( "\n===============================================================================\n");

printf("\nEscolha uma opcao: ");
scanf("%d", &opcao);

system("clear");

switch(opcao)
{
case 1:
mostraMatriz();
case1();
system("sleep");
system("clear");
break;
case 2:
mostraMatriz();
case2();
system("sleep");
system("clear");
break;
case 3:
mostraMatriz();
case3();
system("sleep");
system("clear");
break;
case 4:
mostraMatriz();
case4_Options();
system("sleep");
system("clear");
break;
}
}
}



  


2. Re: Erros código

Marcelo Wolf
wolfnp

(usa Outra)

Enviado em 23/04/2019 - 17:37h

Retificando, não anunciei o que preciso fazer.
Segue:

desenvolver um sistema para o gerenciamento de reservas de assentos em
um avião. O avião possui as seguintes categorias de assento: Executiva, Econômica, Saída de Emergência e
Sem Reclinagem

Ao iniciar o programa, será solicitado ao usuário informar o valor base da passagem. Esse valor é usado como
referência para o cálculo dos valores específicos de cada categoria e em relação à idade do passageiro.
Conforme definido na tabela abaixo, o preço final da passagem deve ser ajustado aplicando o fator de cada
categoria sobre o valor base, e em seguida, aplicando o fator relativo à idade, nessa ordem.
Categoria Fileiras Fator 0 a < 2 anos 2 a < 12 anos
Executiva 01 a 06 2.5 - 20% - 10%
Econômica 07 a 10 e 14 a 28 0.9 - 50% - 30%
Saída de Emergência 12 e 13 1.1 - 30% - 20%
Sem Reclinagem 11 e 29 0.8 - 70% - 50%
Por exemplo, se o valor base da passagem for R$200,00, um passageiro adulto da classe executiva vai pagar
R$200,00 * 2.5 = R$500,00. Na mesma classe executiva, uma criança de 5 anos vai pagar R$200,00 * 2.5 - 10%
= R$450,00. Já um bebê de 1 ano de idade na categoria econômica vai pagar R$200,00 * 0.9 - 50% = R$90,00.
O programa deve sempre mostrar um mapa de ocupação dos assentos, conforme o modelo a seguir. Os
assentos livres devem ser exibidos como “--” e os assentos ocupados devem exibir a idade da pessoa que o
ocupa, formatado com dois dígitos. Logo abaixo do mapa de assentos, deve ser exibido um menu com diversas
opções.


Modelo do mapa de ocupação dos assentos do avião
/:::::::::::::::::::::|
/::::::::::::::::::::::|
/:::::::::::::::::::::::|
01 02 03 04 05 06 | 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
--------------------------------------------------------------------------------------------
F|-- 33 -- -- -- -- | 62 -- -- -- -- 23 -- -- -- -- -- -- -- -- -- -- 17 -- -- -- -- -- -- |F
E|-- -- 39 -- -- -- | -- -- -- -- -- -- 71 -- -- -- -- -- -- -- -- -- 19 -- -- -- -- -- -- |E
D|-- -- 42 -- -- -- | -- -- -- -- -- -- 68 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |D
C|27 -- -- -- -- -- | 55 -- -- -- -- 46 -- -- -- -- -- -- -- 11 -- -- -- -- -- -- -- -- -- |C
B|30 -- -- -- -- -- | -- -- -- 22 -- -- -- -- -- -- -- -- -- 01 -- -- -- -- -- -- -- -- -- |B
A|08 -- -- -- -- -- | -- -- -- 12 -- -- 40 -- -- -- -- -- -- 34 -- -- -- -- -- -- -- -- -- |A
--------------------------------------------------------------------------------------------
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
\:::::::::::::::::::::::|
\::::::::::::::::::::::|
\:::::::::::::::::::::|
Menu:
1. Listar preços: mostra toda a tabela de preços conforme idades e categorias.
2. Reserva de um assento: o usuário informa um assento (ex: A1, D15, etc) e o programa verifica se esse
assento existe e está disponível. Caso negativo, mostra uma mensagem e retorna para o menu principal.
Caso afirmativo, solicita a idade do ocupante (obrigatoriamente entre 0 e 99) e o programa informa o
preço do assento, conforme tabela de preços e categorias. Após, o programa pergunta se o usuário quer
confirmar a reserva, que deve ser respondida com ‘S’ ou ‘N’. Processar a resposta do usuário.
3. Liberação de um assento: o usuário informa um assento (ex: A1, D15, etc) e o programa verifica se esse
assento existe e está reservado. Caso negativo, mostra uma mensagem e retorna para o menu principal.
Caso afirmativo, o programa pergunta se o usuário quer confirmar a liberação da reserva, que deve ser
respondida com ‘S’ ou ‘N’. Processar a resposta do usuário.
4. Consultar situação de um assento: o usuário informa o assento (ex: C10) e o programa retorna se está
liberado ou reservado, a categoria, a idade do passageiro (caso esteja reservado) e o preço. Caso o assento
esteja liberado, deve ser mostrado o preço para todas as idades, conforme a categoria.
5. Consultar disponibilidade de assentos consecutivos: o usuário deve informar a quantidade de assentos
que ele deseja e o programa deve indicar a primeira ocorrência de assentos disponíveis por categoria.
Observação: pode não haver assento disponível em uma categoria.
6. Relatórios: o programa deve imprimir as seguintes estatísticas (mostrando a quantidade/valor,
percentual e um gráfico de barras para cada item)



Agradeço






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts