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;
}