Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*!
- * Trabalho de Programação Estruturada
- * Integrantes:
- * - Anderson Fraga
- * - Teu Solano
- * - Thiago Garcia
- *
- * Data: 30/05/2008 - Professora Beatriz Lux
- */
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <windows.h>
- #define MAX 35 //Define qual é o número máximo de alunos
- // Definição da estrutura que receberá os dados dos alunos
- struct alunos {
- int matricula;
- char datanasc[10];
- float altura;
- char nome[50];
- };
- // Definição das funções e seus argumentos
- void listagem_alunos(struct alunos turma[MAX], int qtd);
- float media_idades(struct alunos turma[MAX], int qtd, char data_atual[]);
- float media_alturas(struct alunos turma[MAX], int qtd);
- void lista_shell(struct alunos _turma[MAX], int qtd);
- int pesquisa_matricula(int busca, struct alunos turma[MAX]);
- main() {
- int busca, op = 9, qtd = 0, m = 1, res = 0;
- char data_atual[10];
- // Define a variável que receberá a estrutura de alunos
- struct alunos turma[MAX];
- system("color 17");
- // Menu base
- puts("Trabalho 1 de Programacao Estruturada");
- puts("Integrantes:");
- puts("- Anderson Fraga");
- puts("- Teu Solano");
- puts("- Thiago Garcia");
- printf("\n\n");
- // Para calcular a idade média dos alunos, precisamos saber qual é a data atual
- // Tentamos implementar as funções da biblioteca time.h, mas não obtivemos sucesso :'(
- puts("Por favor, insira a data atual (dd/mm/aaaa):");
- scanf(" %s", &data_atual);
- // Enquanto o valor do menu for diferente de zero, gera o menu
- while( op != 0 ) {
- puts("Escolha alguma opcao a seguir:");
- puts("1 - Inserir dados da turma de alunos");
- puts("2 - Mostrar informacoes dos alunos da turma");
- puts("3 - Media de altura dos alunos");
- puts("4 - Media de idade da turma");
- puts("5 - Listar alunos em ordem decrescente da altura");
- puts("6 - Buscar aluno por matricula");
- puts("0 - Sair");
- scanf(" %d", &op);
- // Escolhe a opção do menu conforme solicitado pelo usuário
- switch(op) {
- case 1:
- while(m != 0) {
- for(int x = qtd; x < MAX && m != 0; x++) {
- puts("Para finalizar a insercao de dados, digite 0 para a matricula");
- puts("Informe a matricula:");
- scanf(" %i", &m);
- if(m != 0) {
- turma[x].matricula = m;
- puts("Informe o nome:");
- scanf(" %s", &turma[x].nome);
- puts("Informe a altura (x.xx):");
- scanf(" %f", &turma[x].altura);
- puts("Informe a data de nascimento (dd/mm/aaaa):");
- scanf(" %s", &turma[x].datanasc);
- qtd = x+1;
- }
- }
- }
- m = 1;
- break;
- case 2:
- if( qtd == 0 )
- puts("Nao ha dados para calculo");
- else
- listagem_alunos(turma, qtd);
- break;
- case 3:
- if( qtd == 0 )
- puts("Nao ha dados para calculo");
- else
- printf("A altura media dos alunos da turma e' de %3.2f m \n\n", media_alturas(turma, qtd));
- break;
- case 4:
- if( qtd == 0 )
- puts("Nao ha dados para calculo");
- else
- printf("A media de idade da turma e' de %4.2f anos\n", media_idades(turma, qtd, data_atual));
- break;
- case 5:
- lista_shell(turma, qtd);
- break;
- case 6:
- if( qtd == 0 )
- puts("Nao ha dados para calculo");
- else {
- puts("Digite a matricula que deseja localizar");
- scanf(" %i", &busca);
- res = pesquisa_matricula(busca, turma);
- if( res > 0 ) {
- printf("A matricula %i se encontra na posicao %i do vetor\n", busca, res);
- }
- else {
- puts("A matricula solicitada nao esta cadastrada\n");
- }
- }
- break;
- }
- }
- getch();
- }
- // Faz a listagem dos alunos, mostrando os seus dados
- void listagem_alunos(struct alunos turma[MAX], int qtd) {
- printf("Atualmente ha %i alunos cadastrados:\n", qtd);
- for(int x = 0; x < qtd && x < MAX; x++) {
- printf("Aluno %i: \n - Matricula: %i \n - Nome: %s \n - Altura: %3.2f \n - Data de Nascimento: %s \n\n", x+1, turma[x].matricula, turma[x].nome, turma[x].altura, turma[x].datanasc);
- }
- }
- // Calcula a média das alturas dos alunos, o retorno é de um dado float
- float media_alturas(struct alunos turma[MAX], int qtd) {
- float media = 0;
- for(int x = 0; x < qtd; x++) {
- media += turma[x].altura;
- }
- return media/qtd;
- }
- // Calcula a idade média dos alunos da turma, retorna float.
- // Como falado anteriormente, tentamos diversas vezes implementar as funções da LIB time.h, como time, ctime, mktime, asctime dentre outras, infelizmente sem sucesso
- float media_idades(struct alunos turma[MAX], int qtd, char data[]) {
- char ano[4], _data[4];
- int _ano, soma = 0, res;
- for(int x = 0; x < qtd && x < MAX; x++) {
- sprintf(ano, "%c%c%c%c", turma[x].datanasc[6], turma[x].datanasc[7], turma[x].datanasc[8], turma[x].datanasc[9]);
- _ano = atoi(ano); // atoi transforma uma string em um valor inteiro. Biblioteca stdio
- soma += _ano;
- }
- res = soma/qtd;
- sprintf(_data, "%c%c%c%c", data[6], data[7], data[8], data[9]);
- return atoi(_data) - res;
- }
- // Faz a ordenação dos dados através do método Shell
- void lista_shell(struct alunos _turma[MAX], int qtd) {
- int i, j, gap, k, a[5];
- alunos x;
- a[0]=9; a[1]=5; a[2]=3; a[3]=2; a[4]=1;
- for(k = 0; k < 5; k++) {
- gap = a[k];
- for(i = gap; i < qtd; ++i) {
- x = _turma[i];
- for(j = i-gap; x.altura < _turma[j].altura && j >= 0; j = j-gap)
- _turma[j+gap] = _turma[j];
- _turma[j+gap] = x;
- }
- }
- // Imprime estrutura ordenada
- for(int x = 0; x < qtd; x++) {
- printf("Aluno %i - %3.2f \n", _turma[x].matricula, _turma[x].altura);
- }
- }
- // Faz a pesquisa da matrícula pelo método de pesquisa binária
- int pesquisa_matricula(int busca, struct alunos _turma[MAX]) {
- int comeco = 0, meio, fim;
- fim = MAX - 1;
- int x,y;
- alunos aux;
- // Para correta busca, é necessário a estrutura estar ordenada.
- // Abaixo, método bolha foi utilizado
- for(int x = 0; x < MAX-1; x++) {
- for(int y = x+1; y < MAX; y++) {
- if(_turma[x].matricula > _turma[y].matricula) {
- aux = _turma[x];
- _turma[x] = _turma[y];
- _turma[y] = aux;
- }
- }
- }
- // Inicio do processo de busca do valor
- while (comeco <= fim) {
- meio = (comeco + fim)/2;
- if(busca == _turma[meio].matricula) {
- return(meio); // Valor encontrado
- }
- else {
- if(busca < _turma[meio].matricula) {
- fim = meio-1;
- }
- else {
- comeco = meio + 1;
- }
- }
- }
- return(-1); // Caso não foi encontrado a matricula na estrutura, retorna -1
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement