Lista de exercícios 05
Assuntos novos: estruturas de dados heterogêneas: struct.
Resumo e exemplos:
Uma estrutura é uma abstração para agregar vários tipos num único modelo. Ela permite criar uma elemento de memória capaz de armazenar valores de vários tipos.
Por exemplo, a estrutura Pauta, a seguir, serve para situações onde há necessidade de trabalhar com a matrícula e a média de um aluno de forma conjunta.
struct Pauta { int matricula; float media; };
Observação importante: Pauta é apenas um modelo (uma estrutura) por isso não tem a capacidade de armazenar dados, mas, tem a capacidade de criar variáveis que tenham as características do modelo.
Por exemplo, a variável de estrutura "aluno" tem a capacidade de armazenar um inteiro para matrícula e um float para média:
struct Pauta aluno;
Outra forma de escrever, de forma mais condensada, é:
struct Pauta { int matricula; float media; } aluno;
Para acessar um campo da estrutura usa-se o operador seleção “.”
Por exemplo, para acessar a média do aluno:
aluno.media
Exemplo de implementação com a estrutura Pauta:
#include <stdio.h> #include <stdlib.h> struct Pauta { int matricula; float media; }; int main() { struct Pauta aluno; printf("Entrada de dados para a variavel de estrutura \"aluno\"\n"); printf("Digite a matricula: "); scanf("%d", &aluno.matricula); printf("Digite a media: "); scanf("%f", &aluno.media); printf("Saida de dados da variável de estrutura \"aluno\"\n"); printf("Matricula = %d\n", aluno.matricula); printf("Media = %.2f \n", aluno.media); printf("\n\n"); system("pause"); return 0; }
Outro exemplo: estrutura para representar os dados referentes ao endereço de uma única pessoa:
struct TipoEndereco { char rua [50]; int numero; char complemento[20]; char bairro[40]; char cidade[40]; char sigla_estado[3]; char CEP[9]; };
struct TipoEndereco endereco;
Um modelo de ficha com os dados pessoais de uma pessoa:
struct FichaPessoal { char nome[50]; char telefone[15]; struct TipoEndereco endereco; };
Fichas para armazenar os dados de três pessoas:
struct FichaPessoal ficha1, ficha2, ficha3;
Fichas para armazenar os dados de trinta pessoas. Neste caso precisamos de um vetor de estruturas do tipo FichaPessoal:
struct FichaPessoal fichas[30];
Acesso ao nome da quinta ficha:
fichas[4].nome;
Acesso a cidade da quinta pessoa:
fichas[4].endereco.cidade;
Exemplo de uso de estruturas: programa para ler os dados de 200 alunos e em seguida exibi-los. Os dados são nome, quantidade de faltas, 5 notas avaliativas e uma indicação se é bolsista ou não.
#include <stdio.h> #include <stdlib.h> #define MAX_ALUNOS 200 struct TipoAluno { char nome[30]; int faltas; float notas[5]; char bolsista; }; int main( ) { struct TipoAluno alunos[MAX_ALUNOS]; int i,n; // entrada dos alunos com os seus dados for(i=0; i<MAX_ALUNOS; i++) { printf("\nAluno %d \nDigite o nome (ENTER sai):", i+1); gets(alunos[i].nome); // verifica se não digitado nome if(strcmp(alunos[i].nome,"")==0) break; printf("Digite a qtde de faltas: "); scanf("%d", &alunos[i].faltas); // entrada das 5 notas for(n=0; n<5; n++) { printf("Digite a %1da nota: ", n+1); scanf("%f", &alunos[i].notas[n]); } fflush(stdin); // é necessário para consumir o salto de linha deixado pela scanf que ficou no buffer printf("Bolsista (s/n): "); scanf("%c", &alunos[i].bolsista); fflush(stdin); // é necessário para consumir o salto de linha que ficou no buffer } int qtdeAlunosCadastrados = i; // exibicao dos dados digitados printf("\n\nExibicao dos dados digitados:\n"); for(i=0; i<qtdeAlunosCadastrados; i++) { printf("Aluno %2d - Nome: %s, faltas: %d, Notas: ", i+1, alunos[i].nome, alunos[i].faltas); for(n=0; n<5; n++) { printf("%5.2f", alunos[i].notas[n]); } printf(" - Bolsista: %c \n", alunos[i].bolsista); } system("PAUSE"); return 0; }
Exercícios:
1. Declare uma estrutura (struct) capaz de criar variáveis para armazenar os seguintes dados: um funcionário composto de:
- nome com no máximo 30 caracteres,
- código de matrícula com exatamente 8 caracteres,
- código do seu cargo profissional com exatamente 2 caracteres,
- número de dependentes,
- salário.
2. Declare estruturas e variáveis capazes de armazenar: uma agenda composta de 50 contatos. Cada contato possui o nome da empresa (máximo de 30 caracteres), o nome da pessoa responsável (máximo de 40 caracteres) e uma lista com até 10 telefones com DDD.
3. Um ponto é formado por duas cordenadas: x e y. Uma figura formada por retas no plano cartesiano (considere apenas o 1º quadrante) possui vários pontos para determinação destas retas. Cada ponto deste deve ter a indicação da ordem em que é desenhado. Sabe-se que cada figura tem entre 2 a 400 pontos. Crie uma modelagem de dados (usando structs e vetores) para armazenar 50 figuras.
4. Implemente um programa para cadastrar as informações para uma variável de estrutura do 1º exercício. Em seguida faça a exibição de todos os dados.
5. Implemente um programa para cadastrar as informações para a agenda da 2ª questão, e em seguida exibir todas elas.
6. Usando a estrutura fornecida, referente a atletas, elabore um programa para ler os dados de 15 atletas de uma equipe, calcular a média das idades e das alturas, e finalmente, exibir os dados lidos e as duas médias calculadas.
struct TipoAtleta{ int matricula; int idade; float altura; };
7. Usando a estrutura TipoAtleta do exercício anterior, crie um vetor para armazenar os dados dos 15 atletas da equipe. Crie também uma estrutura para representar os dados de uma equipe: a relação de 15 atletas, o nome fantasia da equipe, e a data em que ela foi fundada. Para armazenamento da data, crie uma estrutura contendo dia, mês e ano. São ao todo 10 equipes.
Desenvolva um programa para realizar o cadastro e em seguida a exibição destes dados. Use #define para criação de contantes que permitam a modificação do número de atletas das equipes e o número de equipes.
8. Faça um programa para ler o nome e a média de 5 alunos. Ao final exiba o nome do aluno que possui a maior média. Use uma estrutura para representar os dados do aluno.
9. Desenvolva um programa para armazenar os dados de 100 equipamentos elétricos digitados pelo usuário. Cada equipamento é caracterizado pelas seguintes informações: a sua descrição (máximo de 30 caracteres), a sua potência em watts (número real) e a quantidade de fases elétricas necessárias (número inteiro).
Após o cadastro exiba o nome dos equipamentos que usam duas fases.
Obs.: use uma estrutura para o armazenamento dos dados do equipamento elétrico.
10. Elabore um programa para armazenar os dados de 80 pessoas digitadas pelo usuário. Cada pessoa é caracterizada pelas seguintes informações: o seu nome (máximo de 30 caracteres), o seu peso e a sua idade.
Após o cadastro exiba o nome dos adolescentes, ou seja, pessoas com idade de 12 a 17 anos.
Obs.: use uma estrutura para o armazenamento dos dados de cada pessoa.
11. Elabore um programa para armazenar os dados de várias equações do 2º grau. Use uma struct para representar os coeficientes da equação. Após o armazenamento, exiba as equações, formatadas, e as suas raizes ou ainda informe que a equação não possui raizes reais.
Exemplo de formato de uma equação: 5x2 + 3x - 2 = 0