Você está na página 1de 8

UFES - CEUNES - Engenharia de Computao Programao II - 2 perodo Professor: Henrique Monteiro Cristovo Documento cooperativo 05 para apoio aprendizagem

m de Programao II - Estruturas - struct


Regras para utilizao deste documento: 1. Num primeiro momento, use-o para acessar o enunciado dos exerccios e no as respostas. S veja as respostas depois que voc tiver desenvolvido a sua soluo, ento, compare e analise. Contribua a vontade com mensagens em caso de discordncia, para enfatizar algum ponto, para chamar ateno de algo confuso ou que voc no tenha entendido. Mas, em qualquer caso, identifique-se. Envie mensagem de dvida para a lista de discusso da disciplina: programacao_ufes@googlegroups.com 2. Se ficar responsvel pela resoluo de algum exerccio, faa-o o mais rpido possvel. Fique atento para responder as demandas dos colegas relativas a este exerccio. 3. Publique usando o servio: www.pastebin.com Copie e cole o link para o espao destinado as respostas. 4. Exercite a sua aprendizagem atravs da cooperao contribuindo com a aprendizagem dos colegas mesmo naquelas atividades que voc no ficou responsvel. Faa sempre de forma responsvel, h um histrico automtico com registro de autoria de todas as atualizaes realizadas.

Lembrete: a nica forma de aprender algoritmos fazendo muitos exerccios. Voc ir observar que a sua competncia em escrever programas para solucionar os problemas ir evoluir gradualmente na medida em que for investindo tempo de estudo. Resumo e exemplos: Uma estrutura uma abstrao para agregar vrios tipos num nico modelo. Ela permite criar uma elemento de memria capaz de armazenar valores de vrios tipos. Por exemplo, a estrutura Pauta, a seguir, serve para situaes onde h necessidade de trabalhar com a matrcula e a mdia de um aluno de forma conjunta.

struct Pauta { int matricula; float media; };


Observao importante: Pauta apenas um modelo (uma estrutura) por isso no tem a capacidade de armazenar dados, mas, tem a capacidade de criar variveis naquele modelo. Por exemplo a varivel de estrutura aluno

tem a capacidade de armazenar um inteiro para matrcula e um float para mdia.

struct Pauta aluno;


Outra forma de escrever de forma mais condensada seria:

struct Pauta { int matricula; float media; } aluno;


Para acessar um campo da estrutura usa-se o operador seleo . Por exemplo, para cessar a mdia do aluno:

aluno.media
Exemplo de implementao 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 varivel de estrutura \"aluno\"\n"); printf("Matricula = %d\n", aluno.matricula); printf("Media = %.2f \n", aluno.media); printf("\n\n"); system("pause"); } Outro exemplo: estrutura para representar os dados referentes ao endereo 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 trs 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 so nome, quantidade de faltas, 5 notas avaliativas e uma indicao se bolsista ou no.

#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 no 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); // necessrio para consumir o salto de linha que ficou no buffer printf("Bolsista (s/n): "); scanf("%c", &alunos[i].bolsista); fflush(stdin); // necessrio 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<4; n++) { printf("%5.2f", alunos[i].notas[n]); } printf(" - Bolsista: %c \n", alunos[i].bolsista); } system("PAUSE"); return 0; }

Exerccios:

1. Declare uma estrutura capaz de criar variveis para armazenar os seguintes dados: um funcionrio composto de nome com no mximo 30 caracteres, o seu cdigo de matrcula com exatamente 8 caracteres, o cdigo de seu cargo com exatamente 2 caracteres, o nmero de dependentes e o seu salrio. 2. Declare estruturas e variveis capazes de armazenar: uma agenda composta de 50 contatos. Cada contato possui o nome da empresa (mximo de 30 caracteres), o nome da pessoa responsvel (mximo 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 vrios pontos para determinao destas retas. Cada ponto deste deve ter a indicao 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 informaes para uma varivel de estrutura do 1 exerccio. Em seguida faa a exibio de todos os dados. Juan Oliveira Epaminondas Aguiar - OK! Mas a leitura da matricula e cargo poderiam ser feitas com um do-while, para facilitar o entendimento do cdigo. (monitor Fernando) Bianca - No testa se as informaes de matricula e codigo foram digitados corretamente (monitor Fernando) Andr Vitor (Soluo) - No testa se as informaes de matricula e codigo foram digitados corretamente (monitor Fernando) Icaro - Ok (monitor Fernando) Ricardo R. de Alcntara 5. Implemente um programa para cadastrar as informaes para a agenda da 2 questo, e em seguida exibir todas elas. Juan Oliveira Epaminondas Aguiar - Um problema na impresso dos telefones, caso a quantidade de telefones da primeira empresa seja maior do que a segunda. Bianca - Ok! (monitor Fernando) Andr Vitor (Soluo) - Ok! (monitor Fernando) Icaro - Ok! Um problema na verificao de telefones, deveria ter sido feito em um loop (do-while de preferencia). (monitor Fernando) Ricardo R. de Alcntara (com algum problema na exibio de telefones) 6. Usando a estrutura fornecida, referente a atletas, elabore um programa para ler os dados de 15 atletas de uma equipe, calcular a mdia das idades e das alturas, e finalmente, exibir os dados lidos e as duas mdias calculadas. structTipoAtleta{ intmatricula; intidade; floataltura; }; Epaminondas - Ok! (monitor Fernando) Bianca - Ok! (monitor Fernando) by Calebe - Ok! (monitor Fernando) Icaro - Ok! Mas tentar no declarar variveis no meio do cdigo. (monitor Fernando) Andr Vitor (Soluo) - Ok! Ricardo R. de Alcntara

7. Usando a estrutura TipoAtleta do exerccio anterior, crie um vetor para armazenar os dados dos 15 atletas da equipe. Crie tambm uma estrutura para representar os dados de uma equipe: a relao 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, ms e ano. So ao todo 10 equipes. Desenvolva um programa para realizar o cadastro e em seguida a exibio destes dados. Use #define para criao de contantes que permitam a modificao do nmero de atletas das equipes e o nmero de equipes. Caio Neves - Ok! (monitor Fernando) by Calebe - Ok! (monitor Fernando) Icaro - O loop para receber uma equipe deve englobar o loop para receber atletas. (monitor Fernando) Andr Vitor(Soluo) - No usou uma estrutura data como pedido. (monitor Fernando) Ricardo R. de Alcntara

8. Faa um programa para ler o nome e a mdia de 5 alunos. Ao final exiba o nome do aluno que possui a maior mdia. Use uma estrutura para representar os dados do aluno. Epaminondas Aguiar - Ok! (monitor Fernando) by Calebe - Ok! (monitor Fernando) Icaro - Ok! (monitor Fernando) Andr Vitor(Soluo) - Ok! (monitor Fernando) Ricardo R. de Alcntara (falta s exibir o nome final) 9. Desenvolva um programa para armazenar os dados de 100 equipamentos eltricos digitados pelo usurio. Cada equipamento caracterizado pelas seguintes informaes: a sua descrio (mximo de 30 caracteres), a sua potncia em watts (nmero real) e a quantidade de fases eltricas necessrias (nmero inteiro). Aps o cadastro exiba o nome dos equipamentos que usam duas fases. Obs.: use uma estrutura para o armazenamento dos dados do equipamento eltrico. by Calebe - Ok! (monitor Fernando) Epaminondas Aguiar - Era para ser impresso somente o equipamento cujo nmero de fases fosse igual 2. A verificao das fases fica melhor com um do-while. (monitor Fernando) Icaro - Ok! Mas o uso da varivel quantFases desnecesrio, poderia ter sido utilizado o prprio i do loop. (monitor Fernando) Andr Vitor(Soluo) - Ok! (monitor Fernando)

10. Elabore um programa para armazenar os dados de 80 pessoas digitadas pelo usurio. Cada pessoa caracterizada pelas seguintes informaes: o seu nome (mximo de 30 caracteres), o seu peso e a sua idade. Aps 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. Icaro - Ok! Mas o uso da varivel idadeAdolescente desnecessrio. (monitor Fernando) Epaminondas Aguiar - Ok! (monitor Fernando) by Calebe - Ok! (monitor Fernando) Andr Vitor(Soluo) - Ok! (monitor Fernando) Ricardo R. de Alcntara