Universidade Federal da Grande Dourados

Sistemas de Informação

Laboratório de Programação II

Programa de Monitoria

Respostas Lista 2 - Struct

1.

#include <math.h>

struct Ponto {
    float x;
    float y;
};

float distancia(struct Ponto a, struct Ponto b) {
    return sqrt(pow(b.x - a.x, 2) + pow(b.y - a.y, 2));
}

2.

#include <stdio.h>
#include <math.h>

struct Ponto {
    float x;
    float y;
};

float distancia(struct Ponto a, struct Ponto b) {
    return sqrt(pow(b.x - a.x, 2) + pow(b.y - a.y, 2));
}

int main(void) {
    struct Ponto pi;   // Ponto inicial
    struct Ponto pa;   // Ponto atual
    struct Ponto aux;  // Ponto auxiliar

    float perimetro = 0;

    printf("Coordenada (x, y) da posição inicial da formiga: ");
    scanf(" %f %f", &pi.x, &pi.y);

    aux = pi;

    do {
        printf("Coordenada (x, y) da próxima posição da formiga: ");
        scanf(" %f %f", &pa.x, &pa.y);
        perimetro = perimetro + distancia(aux, pa);
        aux = pa;
    } while(pa.x != pi.x || pa.y != pi.y);

    printf("A formiga voltou e percorreu um total de %.2f unidades.\n", perimetro);

    return 0;
}

3.

#include <stdio.h>

#define N_ALUNOS 5

struct Data {
    int dia;
    int mes;
    int ano;
};

struct Aluno {
    char nome[50];
    char cpf[15];
    struct Data data_nasc;
    float nota1;
    float nota2;
};

void buscarReprovados(struct Aluno al[N_ALUNOS]) {
    int i;

    printf("\nALUNOS REPROVADOS:\n");

    for(i = 0; i < N_ALUNOS; i++) {
        if((al[i].nota1 + al[i].nota2) / 2.0 < 6.0) {
            printf("\tNome: %s\n", al[i].nome);
            printf("\tCPF: %s\n", al[i].cpf);
            printf("\tNascimento: %d/%d/%d\n", al[i].data_nasc.dia, al[i].data_nasc.mes, al[i].data_nasc.ano);
            printf("\tNota 1: %.2f\n", al[i].nota1);
            printf("\tNota 2: %.2f\n\n", al[i].nota2);
        }
    }
}

int main() {
    int i;

    struct Aluno alunos[N_ALUNOS];

    for(i = 0; i < N_ALUNOS; i++) {
        printf("\nREGISTRO DO ALUNO %d\n", i+1);

        printf("\tNome: ");
        scanf(" %[^\n]s", alunos[i].nome);

        printf("\tCPF: ");
        scanf(" %s", alunos[i].cpf);

        printf("\tData de nascimento (dia, mês e ano separados por espaço): ");
        scanf(" %d %d %d", &alunos[i].data_nasc.dia, &alunos[i].data_nasc.mes, &alunos[i].data_nasc.ano);

        printf("\tNotas: ");
        scanf(" %f %f", &alunos[i].nota1, &alunos[i].nota2);
    }

    buscarReprovados(alunos);

    return 0;
}

4.

void buscarAlunoAno(struct Aluno al[N_ALUNOS], int ano) {
    int i;
    int ano_nasc;

    printf("\nALUNOS NASCIDOS EM %d\n", ano);

    for(i = 0; i < N_ALUNOS; i++) {
        ano_nasc = al[i].data_nasc.ano;
        if(ano_nasc == ano) {
            printf("\tAluno: %s\n", al[i].nome);
        }
    }
}

5.

#include <stdio.h>

#define N_CAD 10

struct Cadastro {
    char nome[50];
    char cpf[15];
    int idade;
    int modalidade;
    int lote;
};

int main() {
    struct Cadastro cadastros[N_CAD];

    float modalidades[3] = {50.00, 30.00, 80.00};
    float preco_lote = 20.00;

    int i;
    float preco = 0;

    printf("CADASTRO DE PARTICIPANTE\n");
    for(i = 0; i < N_CAD; i++) {
        printf("\nPARTICIPANTE %d\n", i);
        printf("\tNome: ");
        scanf(" %[^\n]s", cadastros[i].nome);

        printf("\tCPF: ");
        scanf(" %s", cadastros[i].cpf);

        printf("\tIdade: ");
        scanf(" %d", &cadastros[i].idade);

        printf("\tModalidade: ");
        scanf(" %d", &cadastros[i].modalidade);

        printf("\tLote: ");
        scanf(" %d", &cadastros[i].lote);
    }

    printf("\nPREÇO PAGO POR PARTICIPANTE\n");
    for(i = 0; i < N_CAD; i++) {
        printf("\tParticipante: %s (%s)\n", cadastros[i].nome, cadastros[i].cpf);

        preco = modalidades[cadastros[i].modalidade - 1] + preco_lote * (cadastros[i].lote - 1);

        if(cadastros[i].idade < 15) {
            preco = preco * 0.5;
        }

        printf("\tPreço a pagar: %.2f\n\n", preco);
    }

    return 0;
}

Voltar