1 / 23

CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013

CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013. Capítulo IX Estruturas e Subprogramas sem Parâmetros. Tema do Lab 9: Campeonato de Fórmula 1 Ler as informações sobre o campeonato e montar as seguintes tabelas : Tabela dos locais dos grandes prêmios

dena
Download Presentation

CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CES-10 INTRODUÇÃO À COMPUTAÇÃOAulas Práticas – 2013 Capítulo IX Estruturas e Subprogramas sem Parâmetros

  2. Tema do Lab 9: Campeonato de Fórmula 1 • Ler as informações sobre o campeonato e montar as seguintes tabelas: • Tabela dos locais dos grandes prêmios • Tabela de informações sobre os pilotos: nome, escuderia, classificação em cada grande prêmio e total de pontos, ordenada decrescentemente pelo total de pontos • Tabela de informações sobre as escuderias: nome e total de pontos, ordenada decrescentemente pelo total de pontos

  3. Tema do Lab 9: Campeonato de Fórmula 1 • Os locais dos GP’s, os nomes dos pilotos e suas escuderias devem ser lidos de um arquivo • Os resultados de cada GP devem ser fornecidos pelo operador • O relatório completo do campeonato, com a classificação dos pilotos em cada GP, com a pontuação final e com a classificação final dos pilotos e das escuderias, deve ser escrito num arquivo

  4. ngps Sejam as declarações à esquerda Programa 9.1: Montagem da tabela de locais dos grandes prêmios typedef char cadeia1[16]; struct tabelagps { cadeia1 VetGPs[30]; int ngps; }; typedef struct tabelagpstabelagps; tabelagpsTabGPs; VetGPs Elas implementam a seguinte estrutura: TabGPs

  5. Copiar, salvar e executar o programa à esquerda #include <stdio.h> #include <conio.h> #include <string.h> typedef char cadeia1[16], cadeia2[21]; /* Estrutura para a tabela de locais dos GPs */ struct tabelagps { cadeia1 VetGPs[30]; int ngps; }; typedef struct tabelagpstabelagps; /* Variaveis globais */ tabelagpsTabGPs; FILE *filein, *fileout; Continua no próximo slide

  6. A variável TabGPs é global /* Funcao LerGPs: leitura dos locais dos GPs */ void LerGPs () { int i; char c, d; fscanf (filein, "%d%c", &TabGPs.ngps, &c); for (i = 0; i < TabGPs.ngps; i++) { fgets (TabGPs.VetGPs[i], 16, filein); fscanf (filein, "%c", &c); } } Leitura do <enter> Leitura de no máximo 15 (16-1) caracteres Escrever o seguinte arquivo de entrada, de nome “Formula1Entrada.txt”: 5<enter> Sao Paulo <enter> Londres <enter> Los Angeles <enter> Paris <enter> Tokio <enter> O Borland não completa com espaços em branco até interar 15 caracteres Continua no próximo slide 15

  7. /* Funcao EscreverGPs: escrita dos locais dos GPs */ void EscreverGPs () { int i; fprintf (fileout, “\n\nLocais dos %d GP's:\n", TabGPs.ngps); for (i = 0; i < TabGPs.ngps; i++) fprintf (fileout, "\n%-20s", TabGPs.VetGPs[i]); } Continua no próximo slide

  8. /* funcao main */ void main () { /* Abertura dos arquivos de entrada e de saida */ filein = fopen ("Formula1Entrada.txt", "r"); fileout = fopen ("Formula1Saida", "w"); fprintf (fileout, "CAMPEONATO DE FORMULA 1 - RESULTADOS"); /* Avisos de sobre os arquivos de entrada e saida */ printf ("Processamento das informacoes de um Campeonato de Formula 1\n\n"); printf ("\tArquivo Formula1Entrada: locais, pilotos e escuderias dos GPs\n\n"); printf ("\tArquivo Formula1Saida: Relatorio completo do campeonato\n\n"); /* Processamento das informacoes sobre os GPs */ LerGPs (); EscreverGPs (); /* Fechamento da tela */ printf ("\nDigite algo para encerrar: "); getch (); }

  9. No vídeo: Processamento das informacoes de um Campeonato de Formula 1 Arquivo Formula1Entrada: locais, pilotos e escuderias dos GPs Arquivo Formula1Saida: Relatorio completo do campeonato Digite algo para encerrar: No arquivo Formula1Saida: CAMPEONATO DE FORMULA 1 - RESULTADOS Locais dos 5 GP's: Sao Paulo Londres Los Angeles Paris Tokio Resultado da execução

  10. Sejam as declarações à esquerda Programa 9.2: Montagem da tabela dos pilotos participantes do campeonato de Fórmula 1 struct piloto { cadeia2 NomePiloto; cadeia1 Escuderia; int Classificacao[30], TotalPontos; }; typedef struct piloto piloto; struct tabelapilotos { piloto VetPilotos[30]; int npilotos; }; typedef struct tabelapilotostabelapilotos; tabelapilotosTabPilotos; tipo piloto NomePiloto Escuderia TotalPontos Classificacao Elas implementam a estrutura a seguir

  11. VetPilotos npilotos TabPilotos

  12. Fazer no Programa 9.1 as alterações que se seguem /* Estrutura para a tabela de locais dos GPs */ struct tabelagps {- - - - -}; typedef struct tabelagpstabelagps; /* Estrutura para as informacoes sobre um piloto participante dos GPs */ struct piloto { cadeia2 NomePiloto; cadeia1 Escuderia; int Classificacao[30], TotalPontos; }; typedef struct piloto piloto; /* Estrutura para a tabela de pilotos participantes dos GPs */ struct tabelapilotos { piloto VetPilotos[30]; int npilotos; }; typedef struct tabelapilotostabelapilotos; Continua no próximo slide

  13. /* Variaveis globais */ tabelagpsTabGPs; tabelapilotosTabPilotos; FILE *filein, *fileout; /* Funcao LerGPs: leitura dos locais dos GPs */ void LerGPs () {- - - - -} /* Funcao EscreverGPs: escrita dos locais dos GPs */ void EscreverGPs () {- - - - -} Continua no próximo slide

  14. /* Funcao LerPilotos: leitura dos nomes e das escuderias dos pilotos - Zera a classificacao em todos os GPs e o numero total de pontos */ void LerPilotos () { int i, j; char c; fscanf (filein, "%d%c", &TabPilotos.npilotos, &c); for (i = 0; i < TabPilotos.npilotos; i++) { fgets (TabPilotos.VetPilotos[i].NomePiloto, 21, filein); fgets (TabPilotos.VetPilotos[i].Escuderia, 16, filein); fscanf (filein, "%c", &c); for (j = 0; j < TabPilotos.npilotos; j++) TabPilotos.VetPilotos[i].Classificacao[j] = 0; TabPilotos.VetPilotos[i].TotalPontos = 0; } } O arquivo Formula1Entrada.txt passa a conter os pilotos e as escuderias, conforme o próximo slide

  15. fgets (TabPilotos.VetPilotos[i].NomePiloto, 21, filein); fgets (TabPilotos.VetPilotos[i].Escuderia, 16, filein); 5<enter> Sao Paulo <enter> Londres <enter> Los Angeles <enter> Paris <enter> Tokio<enter> 16<enter> Felipe Massa Ferrari <enter> Fernando Alonso Ferrari <enter> SebastianVettelRed Bull <enter> Mark Webber Red Bull <enter> Jenson Button McLaren <enter> Sergio Perez McLaren <enter> Kimi RaikkonenLotus <enter> RomainGrosjeanLotus <enter> Nico Rosberg Mercedes <enter> Lewis Hamilton Mercedes <enter> Nico HulkenbergSauber <enter> Esteban Gutierrez Sauber <enter> Paul di Resta Force India <enter> Adrian Sutil Force India <enter> Pastor Maldonado Williams <enter> ValtteriBottas Williams <enter> Continua no próximo slide 20 15

  16. /* Funcao EscreverPilotos: escrita das informacoes sobre os pilotos */ void EscreverPilotos () { int i, j; fprintf (fileout, "\n\nInformacoes sobre os %d pilotos:\n", TabPilotos.npilotos); for (i = 0; i < TabPilotos.npilotos; i++) { fprintf (fileout, "\n%-25s", TabPilotos.VetPilotos[i].NomePiloto); fprintf (fileout, "%-20s", TabPilotos.VetPilotos[i].Escuderia); fprintf (fileout, "Classificacoes: "); for (j = 0; j < TabGPs.ngps; j++) fprintf (fileout, "%3d", TabPilotos.VetPilotos[i].Classificacao[j]); fprintf (fileout, " Total de pontos:%4d", TabPilotos.VetPilotos[i].TotalPontos); } }

  17. void main () { /* Abertura dos arquivos de entrada e de saida */ - - - - - /* Avisos de sobre os arquivos de entrada e saida */ - - - - - /* Processamento das informacoes sobre os GPs */ LerGPs (); EscreverGPs (); LerPilotos (); EscreverPilotos (); /* Fechamento da tela */ printf ("\nDigite algo para encerrar: "); getch (); } Copiar, salvar e executar

  18. Exercício 9.1: Leitura e armazenamento dos resultados dos GP’s • Fazer uma função de nome LerResultadosGPs e colocar na função main uma chamada para ela: • Sugere-se para essa leitura a seguinte estratégia: • Para cada GP o programa escreve o seu local e • Pergunta ao operador a classificação de cada um dos pilotos, armazenando a informação em TabPilotos LerGPs (); EscreverGPs (); LerPilotos (); LerResultadosGPs (); EscreverPilotos ();

  19. Exercício 9.2: Cálculo da pontuação total de cada piloto • Fazer uma função de nome CalcularPontuação e colocar na função main uma chamada para ela: • A pontuação total de cada piloto deve ser armazenada em TabPilotos, no campo TotalPontos LerGPs (); EscreverGPs (); LerPilotos (); LerResultadosGPs (); CalcularPontuacao (); EscreverPilotos ();

  20. Exercício 9.2: Cálculo da pontuação total de cada piloto • Como é bem conhecido, recebem pontos num GP os 10 primeiros classificados, segundo a tabela: 1º Lugar: 25 ptos 2º Lugar: 18 ptos 3º Lugar: 15 ptos 4º Lugar: 12 ptos 5º Lugar: 10 ptos 6º Lugar: 08 ptos 7º Lugar: 06 ptos 8º Lugar: 04 ptos 8º Lugar: 02 ptos 10º Lugar: 01 ptos

  21. Exercício 9.3: Ordenação decrescente da TabPilotos pelo total de pontos dos pilotos • Fazer uma função de nome OrdenarTabPilotos e colocar na função main uma chamada para ela: • A ordenação pode usar uma adaptação do método Bubble-Sort, mas pode usar alternativamente algum outro método LerGPs (); EscreverGPs (); LerPilotos (); LerResultadosGPs (); CalcularPontuacao (); OrdenarTabPilotos (); EscreverPilotos ();

  22. Exercício 9.4: Montagem, ordenação e escrita de uma tabela de escuderias • A tabela de escuderias deve usar as seguintes declarações: struct escuderia { cadeia1 NomeEscuderia; int Pontos; }; typedef struct escuderia escuderia; struct tabelaescuderias { escuderia VetEscuderias[30]; int nescuderias; }; typedef struct tabelaescuderiastabelaescuderias; tabelaescuderiasTabEscuderias;

  23. Exercício 9.4: Montagem, ordenação e escrita de uma tabela de escuderias • Fazer três funções de nomes MontarTabEscuderias, OrdenarTabEscuderias e EscreverEscuderias, colocando na função main uma chamada para cada uma delas: LerGPs (); EscreverGPs (); LerPilotos (); LerResultadosGPs (); CalcularPontuacao (); OrdenarTabPilotos (); EscreverPilotos (); MontarTabEscuderias (); OrdenarTabEscuderias (); EscreverEscuderias ();

More Related