CES-10 INTRODUÇÃO À
COMPUTAÇÃO
Aulas Práticas – 2014
Capítulo VIII
Strings, Estruturas e
Subprogramas sem Parâmetros
Tema do Lab 8: Copa do Mundo de 2014 - 1ª Fase
Ler as informações sobre a primeira fase da copa e fazer um
relatório contendo, para cada um dos 8 grupos:
–
Os resultados dos jogos
–
Uma tabela contendo os nomes das seleções e mais seus
pontos ganhos, seu números de vitórias, de gols
marcados, de gols sofridos e saldos de gols
–
O nome da seleção primeira e segunda colocada
Tema do Lab 8: Copa do Mundo de 2014 - 1ª Fase
Os nomes das 32 seleções devem ser lidos de um arquivo
Os resultados de todos os jogos de cada grupo devem ser
fornecidos pelo operador
O referido relatório deve ser escrito num arquivo
Programa 8.1: Leitura dos nomes das seleções e montagem
da estrutura de todos os grupos e suas informações
typedef char cadeia[26];
Sejam as declarações
à esquerda
typedef struct selecao selecao;
struct selecao {
cadeia nome;
int pontos, vitorias, golspro, golscontra, saldogols;
};
São as informações
sobre uma seleção
tipo selecao
nome
pontos
vitorias golspro golscontra saldogols
typedef struct grupo grupo;
struct grupo {
char nome;
selecao VetorSelecoes[5];
int Resultados[6][2];
cadeia primeiro, segundo;
};
grupo VetorGrupos[9];
Sejam agora as
declarações para um
grupo de seleções
O elemento Sua
zerorepresentação
de VetorSelecoes
não será usado
gráfica
tipo grupo
0
nome
char
primeiro
cadeia
segundo
cadeia
0
VetorSelecoes
0 int
int
0
#######
1 int
int
1
selecao
2 int
int
2
selecao
3 int
int
3
selecao
4 int
int
4
selecao
5 int
int
Resultados
grupo VetorGrupos[9];
O elemento zero de
VetorGrupos não
será usado
VetorGrupos
0
1
2
3
4
5
6
7
8
nome
VetorSelecoes
Resultados
primeiro
segundo
#
#########
########
###
###
A matriz Resultados:
VetorSelecoes
#######
0
selecao
1
selecao
2
selecao
3
selecao
Seleção 1
x
Seleção 2
Seleção 1
4 Seleção
x 3
Seleção
x 3
Seleção 4
Seleção 2
x
Seleção
1
Seleção
x 4
Seleção 4
Seleção 2
x
Seleção 3
0
0
0
int
int
1
int
int
2
int
int
3
int
int
4
int
int
5 int
int
Resultados
1ª Rodada
2ª Rodada
3ª Rodada
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Copiar, salvar e
executar o programa
à esquerda
typedef char cadeia[26];
/* Estrutura para as informacoes sobre cada selecao em seu
grupo */
typedef struct selecao selecao;
struct selecao {
cadeia nome;
int pontos, vitorias, golspro, golscontra, saldogols;
};
Continua no
próximo slide
/* Estrutura para as informacoes de cada grupo
typedef struct grupo grupo;
struct grupo {
char nome;
selecao VetorSelecoes[5];
int Resultados[6][2];
cadeia primeiro, segundo;
};
/* Variaveis globais
*/
FILE *FileIn, *FileOut;
grupo VetorGrupos[9];
*/
O arquivo com os nomes
das 32 seleções é
fornecido pelo professor:
ListaSelecoes.txt (aba de
Códigos da página)
Abrir esse arquivo
Continua no
próximo slide
/* Funcao LerSelecoes: leitura dos nomes das selecoes e colocacao em
seus respectivos grupos */
void LerSelecoes () {
int i, j, lenght; char nomegrupo, c;
for (i = 1, nomegrupo = 'A'; i <= 8; nomegrupo++, i++) {
VetorGrupos[i].nome = nomegrupo;
for (j = 1; j <= 4; j++) {
fgets(VetorGrupos[i].VetorSelecoes[j].nome,31,FileIn);
lenght = strlen (VetorGrupos[i].VetorSelecoes[j].nome);
VetorGrupos[i].VetorSelecoes[j].nome[lenght-1] = '\0';
VetorGrupos[i].VetorSelecoes[j].pontos = 0;
VetorGrupos[i].VetorSelecoes[j].vitorias = 0;
VetorGrupos[i].VetorSelecoes[j].golspro
= 0;
0
1
2
lenght-1 lenght
25
VetorGrupos[i].VetorSelecoes[j].golscontra
= 0;
----------------------------\n \0 -----------------VetorGrupos[i].VetorSelecoes[j].saldogols = 0;
}
}
}
Nenhuma seleção tem mais de 20 caracteres
O <enter> será o último caractere armazenado,
antes do ‘\0’; ele deve ser eliminado
Continua no
próximo slide
/* Funcao EscreverGrupos: escrita das informacoes sobre os grupos */
void EscreverGrupos () {
int i, j;
for (i = 1; i <= 8; i++) {
fprintf (FileOut, "\n\nGRUPO %c: ", VetorGrupos[i].nome);
fprintf (FileOut, "\n\n%-20s|%8s|%8s|%8s|%8s|%8s",
"Selecao", "Pontos", "Vitorias", "GolsPro", "GolsCon",
"SaldGols");
fprintf (FileOut,
"\n--------------------|--------|--------|--------|--------|--------");
for (j = 1; j <= 4; j++)
fprintf (FileOut, "\n%-20s|%8d|%8d|%8d|%8d|%8d",
VetorGrupos[i].VetorSelecoes[j].nome,
VetorGrupos[i].VetorSelecoes[j].pontos,
VetorGrupos[i].VetorSelecoes[j].vitorias,
VetorGrupos[i].VetorSelecoes[j].golspro,
VetorGrupos[i].VetorSelecoes[j].golscontra,
VetorGrupos[i].VetorSelecoes[j].saldogols);
}
}
Continua no
próximo slide
/* Funcao main
*/
int main () {
/* Abertura dos arquivos de entrada e de saida
*/
FileIn = fopen ("ListaSelecoes.txt", "r");
FileOut = fopen ("RelatorioCopa2014.txt", "w");
fprintf (FileOut, "COPA DO MUNDO DE 2014");
/* Avisos de sobre os arquivos de entrada e saida
*/
printf ("Processamento das informacoes da Copa do Mundo de 2014\n\n");
printf ("\tArquivo ListaSelecoes.txt: Contem o nome das 32 selecoes da Copa\n\n");
printf ("\tArquivo RelatorioCopa2014.txt: Relatorio da Copa\n");
/* Processamento das informacoes sobre a Copa */
LerSelecoes ();
EscreverGrupos ();
/* Fechamento da tela */
printf ("\n\n"); system ("pause"); return 0;
}
/*
Fim da funcao main
*/
No vídeo:
Processamento das informacoes da Copa do Mundo de 2014
Arquivo ListaSelecoes.txt: Contem o nome das 32 selecoes da Copa
Arquivo RelatorioCopa2014.txt: Relatorio da Copa
Pressione qualquer tecla para continuar. . .
Resultado
da execução
No arquivo RelatorioCopa2014.txt:
COPA DO MUNDO DE 2014
GRUPO A:
Selecao
| Pontos|Vitorias| GolsPro| GolsCon|SaldGols
--------------------|--------|--------|--------|--------|-------Brasil
|
0|
0|
0|
0|
0
Croacia
|
0|
0|
0|
0|
0
Mexico
|
0|
0|
0|
0|
0
Camaroes
|
0|
0|
0|
0|
0
GRUPO B:
Selecao
| Pontos|Vitorias| GolsPro| GolsCon|SaldGols
--------------------|--------|--------|--------|--------|-------Espanha
|
0|
0|
0|
0|
0
Holanda
|
0|
0|
0|
0|
0
Chile
|
0|
0|
0|
0|
0
Australia
|
0|
0|
0|
0|
0
No arquivo RelatorioCopa2014.txt:
GRUPO C:
Selecao
| Pontos|Vitorias| GolsPro| GolsCon|SaldGols
--------------------|--------|--------|--------|--------|-------Colombia
|
0|
0|
0|
0|
0
Grecia
|
0|
0|
0|
0|
0
Costa do Marfim
|
0|
0|
0|
0|
0
Japao
|
0|
0|
0|
0|
0
GRUPO D:
Selecao
| Pontos|Vitorias| GolsPro| GolsCon|SaldGols
--------------------|--------|--------|--------|--------|-------Uruguai
|
0|
0|
0|
0|
0
Costa Rica
|
0|
0|
0|
0|
0
Inglaterra
|
0|
0|
0|
0|
0
Italia
|
0|
0|
0|
0|
0
No arquivo RelatorioCopa2014.txt:
GRUPO E:
Selecao
| Pontos|Vitorias| GolsPro| GolsCon|SaldGols
--------------------|--------|--------|--------|--------|-------Suica
|
0|
0|
0|
0|
0
Equador
|
0|
0|
0|
0|
0
Franca
|
0|
0|
0|
0|
0
Honduras
|
0|
0|
0|
0|
0
GRUPO F:
Selecao
| Pontos|Vitorias| GolsPro| GolsCon|SaldGols
--------------------|--------|--------|--------|--------|-------Argentina
|
0|
0|
0|
0|
0
Bosnia Herzegovina |
0|
0|
0|
0|
0
Ira
|
0|
0|
0|
0|
0
Nigeria
|
0|
0|
0|
0|
0
No arquivo RelatorioCopa2014.txt:
GRUPO G:
Selecao
| Pontos|Vitorias| GolsPro| GolsCon|SaldGols
--------------------|--------|--------|--------|--------|-------Alemanha
|
0|
0|
0|
0|
0
Portugal
|
0|
0|
0|
0|
0
Gana
|
0|
0|
0|
0|
0
Estados Unidos
|
0|
0|
0|
0|
0
GRUPO H:
Selecao
| Pontos|Vitorias| GolsPro| GolsCon|SaldGols
--------------------|--------|--------|--------|--------|-------Belgica
|
0|
0|
0|
0|
0
Argelia
|
0|
0|
0|
0|
0
Russia
|
0|
0|
0|
0|
0
Coreia do Sul
|
0|
0|
0|
0|
0
Exercício do Lab 8:
1. Leitura e armazenamento dos resultados das três
rodadas da 1ª Fase da Copa
Para cada grupo os resultados devem ser guardados no
campo-matriz Resultados de cada estrutura grupo do vetor
VetorGrupos
0
0
0
int
int
1
int
int
2
int
int
3
int
int
4
int
int
5
int int
Resultados
1ª Rodada
2ª Rodada
3ª Rodada
Exercício do Lab 8:
2. Cálculo dos pontos, do número de vitórias, de gols-pró,
de gols-contra e do saldo de gols de cada seleção de
cada grupo
Esse cálculo deve usar o conteúdo da matriz Resultados de
cada estrutura grupo do vetor VetorGrupos
Os valores calculados devem ser armazenados no campo
VetorSelecoes de cada estrutura grupo de VetorGrupos
tipo selecao
nome
pontos
vitorias golspro golscontra saldogols
Exercício do Lab 8:
3. Determinação das seleções primeira e segunda
colocada de cada grupo
Esse cálculo deve usar o conteúdo do vetor VetorSelecoes
de cada estrutura grupo do vetor VetorGrupos
Os resultados devem ser armazenados nos campos primeiro
e segundo de cada estrutura grupo do vetor VetorGrupos
Critérios de desempate:
1.
2.
3.
4.
5.
Pontuação
Número de vitórias
Saldo de gols
Gols marcados
Ordem alfabética
Exercício do Lab 8:
4. Escrita de todas as informações de VetorGrupos no
arquivo RelatorioCopa2014.txt
Os próximos slides mostram uma possível saída no vídeo e
no arquivo RelatorioCopa2014.txt
No vídeo:
Processamento das informacoes da Copa do Mundo de 2014
Arquivo ListaSelecoes.txt: Contem o nome das 32 selecoes da Copa
Arquivo RelatorioCopa2014.txt: Relatorio da Copa
Digite os resultados da 1a rodada do Grupo A:
Brasil x Croacia: 2 0
Mexico x Camaroes: 3 1
Em amarelo:
Digite os resultados da 1a rodada do Grupo B:
Digitação do operador
Espanha x Holanda: 4 3
Chile x Australia: 3 1
Digite os resultados da 1a rodada do Grupo C:
Colombia x Grecia: 3 2
Costa do Marfim x Japao: 0 4
Digite os resultados da 1a rodada do Grupo D:
Uruguai x Costa Rica: 3 1
Inglaterra x Italia: 0 0
Digite os resultados da 1a rodada do Grupo E:
Suica x Equador: 3 2
Franca x Honduras: 3 0
Digite os resultados da 1a rodada do Grupo F:
Argentina x Bosnia Herzegovina: 3 0
Ira x Nigeria: 2 3
Digite os resultados da 1a rodada do Grupo G:
Alemanha x Portugal: 2 2
Gana x Estados Unidos: 1 3
Digite os resultados da 1a rodada do Grupo H:
Belgica x Argelia: 2 0
Russia x Coreia do Sul: 1 1
Digite os resultados da 2a rodada do Grupo A:
Brasil x Mexico: 1 1
Croacia x Camaroes: 2 3
Digite os resultados da 2a rodada do Grupo B:
Espanha x Chile: 3 2
Holanda x Australia: 3 1
Digite os resultados da 2a rodada do Grupo C:
Colombia x Costa do Marfim: 1 0
Grecia x Japao: 2 0
Digite os resultados da 2a rodada do Grupo D:
Uruguai x Inglaterra: 1 1
Costa Rica x Italia: 1 3
Digite os resultados da 2a rodada do Grupo E:
Suica x Franca: 2 2
Equador x Honduras: 2 0
Digite os resultados da 2a rodada do Grupo F:
Argentina x Ira: 3 3
Bosnia Herzegovina x Nigeria: 2 3
Digite os resultados da 2a rodada do Grupo G:
Alemanha x Gana: 3 1
Portugal x Estados Unidos: 2 1
Digite os resultados da 2a rodada do Grupo H:
Belgica x Russia: 3 2
Argelia x Coreia do Sul: 1 1
Digite os resultados da 3a rodada do Grupo A:
Brasil x Camaroes: 3 1
Croacia x Mexico: 2 4
Digite os resultados da 3a rodada do Grupo B:
Espanha x Australia: 3 0
Holanda x Chile: 2 2
Digite os resultados da 3a rodada do Grupo C:
Colombia x Japao: 1 2
Grecia x Costa do Marfim: 2 0
Digite os resultados da 3a rodada do Grupo D:
Uruguai x Italia: 2 1
Costa Rica x Inglaterra: 0 3
Digite os resultados da 3a rodada do Grupo E:
Suica x Honduras: 2 1
Equador x Franca: 1 3
Digite os resultados da 3a rodada do Grupo F:
Argentina x Nigeria: 2 1
Bosnia Herzegovina x Ira: 2 1
Digite os resultados da 3a rodada do Grupo G:
Alemanha x Estados Unidos: 2 1
Portugal x Gana: 3 1
Digite os resultados da 3a rodada do Grupo H:
Belgica x Coreia do Sul: 2 1
Argelia x Russia: 1 1
Pressione qualquer tecla para continuar. . .
Process returned 0 (0x0)
execution time : 835.480 s
Press any key to continue.
No arquivo RelatorioCopa2014.txt:
COPA DO MUNDO DE 2014
GRUPO A:
Brasil 2 x 0 Croacia
Mexico 3 x 1 Camaroes
Brasil 1 x 1 Mexico
Croacia 2 x 3 Camaroes
Brasil 3 x 1 Camaroes
Croacia 2 x 4 Mexico
Selecao
| Pontos|Vitorias| GolsPro| GolsCon|SaldGols
--------------------|--------|--------|--------|--------|-------Brasil
|
7|
2|
6|
2|
4
Croacia
|
0|
0|
4|
9|
-5
Mexico
|
7|
2|
8|
4|
4
Camaroes
|
3|
1|
5|
8|
-3
Primeiro colocado: Mexico
Segundo colocado: Brasil
GRUPO B:
Espanha
Chile 3
Espanha
Holanda
Espanha
Holanda
4
x
3
3
3
2
x
1
x
x
x
x
3 Holanda
Australia
2 Chile
1 Australia
0 Australia
2 Chile
Selecao
| Pontos|Vitorias| GolsPro| GolsCon|SaldGols
--------------------|--------|--------|--------|--------|-------Espanha
|
9|
3|
10|
5|
5
Holanda
|
4|
1|
8|
7|
1
Chile
|
4|
1|
7|
6|
1
Australia
|
0|
0|
2|
9|
-7
Primeiro colocado: Espanha
Segundo colocado: Holanda
GRUPO C:
Colombia
Costa do
Colombia
Grecia 2
Colombia
Grecia 2
3 x 2 Grecia
Marfim 0 x 4 Japao
1 x 0 Costa do Marfim
x 0 Japao
1 x 2 Japao
x 0 Costa do Marfim
Selecao
| Pontos|Vitorias| GolsPro| GolsCon|SaldGols
--------------------|--------|--------|--------|--------|-------Colombia
|
6|
2|
5|
4|
1
Grecia
|
6|
2|
6|
3|
3
Costa do Marfim
|
0|
0|
0|
7|
-7
Japao
|
6|
2|
6|
3|
3
Primeiro colocado: Grecia
Segundo colocado: Japao
GRUPO D:
Uruguai 3 x 1 Costa Rica
Inglaterra 0 x 0 Italia
Uruguai 1 x 1 Inglaterra
Costa Rica 1 x 3 Italia
Uruguai 2 x 1 Italia
Costa Rica 0 x 3 Inglaterra
Selecao
| Pontos|Vitorias| GolsPro| GolsCon|SaldGols
--------------------|--------|--------|--------|--------|-------Uruguai
|
7|
2|
6|
3|
3
Costa Rica
|
0|
0|
2|
9|
-7
Inglaterra
|
5|
1|
4|
1|
3
Italia
|
4|
1|
4|
3|
1
Primeiro colocado: Uruguai
Segundo colocado: Inglaterra
GRUPO E:
Suica 3 x 2 Equador
Franca 3 x 0 Honduras
Suica 2 x 2 Franca
Equador 2 x 0 Honduras
Suica 2 x 1 Honduras
Equador 1 x 3 Franca
Selecao
| Pontos|Vitorias| GolsPro| GolsCon|SaldGols
--------------------|--------|--------|--------|--------|-------Suica
|
7|
2|
7|
5|
2
Equador
|
3|
1|
5|
6|
-1
Franca
|
7|
2|
8|
3|
5
Honduras
|
0|
0|
1|
7|
-6
Primeiro colocado: Franca
Segundo colocado: Suica
GRUPO F:
Argentina 3 x 0 Bosnia Herzegovina
Ira 2 x 3 Nigeria
Argentina 3 x 3 Ira
Bosnia Herzegovina 2 x 3 Nigeria
Argentina 2 x 1 Nigeria
Bosnia Herzegovina 2 x 1 Ira
Selecao
| Pontos|Vitorias| GolsPro| GolsCon|SaldGols
--------------------|--------|--------|--------|--------|-------Argentina
|
7|
2|
8|
4|
4
Bosnia Herzegovina |
3|
1|
4|
7|
-3
Ira
|
1|
0|
6|
8|
-2
Nigeria
|
6|
2|
7|
6|
1
Primeiro colocado: Argentina
Segundo colocado: Nigeria
GRUPO G:
Alemanha
Gana 1 x
Alemanha
Portugal
Alemanha
Portugal
2
3
3
2
2
3
x 2 Portugal
Estados Unidos
x 1 Gana
x 1 Estados Unidos
x 1 Estados Unidos
x 1 Gana
Selecao
| Pontos|Vitorias| GolsPro| GolsCon|SaldGols
--------------------|--------|--------|--------|--------|-------Alemanha
|
7|
2|
7|
4|
3
Portugal
|
7|
2|
7|
4|
3
Gana
|
0|
0|
3|
9|
-6
Estados Unidos
|
3|
1|
5|
5|
0
Primeiro colocado: Alemanha
Segundo colocado: Portugal
GRUPO H:
Belgica 2 x 0 Argelia
Russia 1 x 1 Coreia do Sul
Belgica 3 x 2 Russia
Argelia 1 x 1 Coreia do Sul
Belgica 2 x 1 Coreia do Sul
Argelia 1 x 1 Russia
Selecao
| Pontos|Vitorias| GolsPro| GolsCon|SaldGols
--------------------|--------|--------|--------|--------|-------Belgica
|
9|
3|
7|
3|
4
Argelia
|
2|
0|
2|
4|
-2
Russia
|
2|
0|
4|
5|
-1
Coreia do Sul
|
2|
0|
3|
4|
-1
Primeiro colocado: Belgica
Segundo colocado: Russia
Usar subprogramas:
A função main não deve ter comandos que atuem
diretamente sobre as struct’s do programa
–
Subprogramas chamados por ela é que devem fazê-lo
Sugestões para a função main e os subprogramas (podem
ou não ser seguidas):
/* Processamento das informacoes sobre a Copa */
LerSelecoes ();
PrimeiraRodada ();
Lê os resultados da 1ª rodada de todos os
grupos e atualiza a tabela de Resultados e
a de Seleções de cada grupo: pontos,
vitorias, golspro, golscontra e saldogols
Idem para a 2ª rodada
SegundaRodada ();
Idem para a 3ª rodada
TerceiraRodada ();
PrimeiroESegundoDosGrupos ();
EscreverGrupos ();
Calcula o primeiro e o segundo
colocados de todos os grupos e
armazena isso nos campos de
cada grupo em VetorGrupos
Deve ser alterada para escrever todas
as informações de VetorGrupos