From ba0b1dc63b1fb11e9412b6fa062a12fba76f8603 Mon Sep 17 00:00:00 2001 From: Alexandre P Francisco Date: Tue, 22 Apr 2014 10:52:50 +0100 Subject: [PATCH] Adding aula08. --- aula08/Makefile | 22 ++++++++++++++ aula08/ex1.c | 20 ++++++++++++ aula08/ex2.c | 75 +++++++++++++++++++++++++++++++++++++++++++++ aula08/ex3.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 198 insertions(+) create mode 100644 aula08/Makefile create mode 100644 aula08/ex1.c create mode 100644 aula08/ex2.c create mode 100644 aula08/ex3.c diff --git a/aula08/Makefile b/aula08/Makefile new file mode 100644 index 0000000..aae32c4 --- /dev/null +++ b/aula08/Makefile @@ -0,0 +1,22 @@ +CC=gcc +CFLAGS=-Wall -ansi -pedantic + +EXECS=ex1 ex2 ex3 + +EX1OBJ=ex1.o +EX2OBJ=ex2.o +EX3OBJ=ex3.o + +all: ${EXECS} + +ex1: ${EX1OBJ} + ${CC} ${CFLAGS} -o $@ ${EX1OBJ} + +ex2: ${EX2OBJ} + ${CC} ${CFLAGS} -o $@ ${EX2OBJ} + +ex3: ${EX3OBJ} + ${CC} ${CFLAGS} -o $@ ${EX3OBJ} + +clean: + rm -f *.o ${EXECS} diff --git a/aula08/ex1.c b/aula08/ex1.c new file mode 100644 index 0000000..37055bd --- /dev/null +++ b/aula08/ex1.c @@ -0,0 +1,20 @@ +#include +#include + +int main() { + int i, n, *v; + + scanf("%d", &n); + + v = malloc(sizeof(int) * n); + + for (i = 0; i < n; i++) + scanf("%d", v+i); + + for (i = 0; i < n; i++) + printf("%d\n", v[i]); + + free(v); + + return EXIT_SUCCESS; +} diff --git a/aula08/ex2.c b/aula08/ex2.c new file mode 100644 index 0000000..22edf42 --- /dev/null +++ b/aula08/ex2.c @@ -0,0 +1,75 @@ +#include +#include + +typedef struct { + int x; + int y; +} Ponto; + +typedef struct { + Ponto se; + Ponto id; +} Rectangulo; + +Ponto * lePontos(int n); +void escrevePontos(Ponto * pontos, int n); +Rectangulo * defineRectangulo(Ponto * pontos, int n); + +int main() +{ + Ponto *v; + Rectangulo *r; + int n; + + scanf("%d", &n); + v = lePontos(n); + + escrevePontos(v, n); + + r = defineRectangulo(v, n); + printf("SE x:%d y:%d\n", r->se.x, r->se.y); + printf("ID x:%d y:%d\n", r->id.x, r->id.y); + + free(v); + free(r); + + return EXIT_SUCCESS; +} + + +Ponto * lePontos(int n) +{ + int i; + Ponto *v = malloc(sizeof(Ponto) * n); + + for (i = 0; i < n; i++) + scanf("%d%d", &v[i].x, &v[i].y); + + return v; +} + +void escrevePontos(Ponto * pontos, int n) +{ + int i; + + for (i = 0; i < n; i++) + printf("x:%d y:%d\n", pontos[i].x, pontos[i].y); +} + +Rectangulo * defineRectangulo(Ponto * v, int n) +{ + int i; + Rectangulo * r = malloc(sizeof(Rectangulo)); + + r->se.x = r->id.x = v[0].x; + r->se.y = r->id.y = v[0].y; + + for (i = 1; i < n; i++) { + if (v[i].x < r->se.x) r->se.x = v[i].x; + if (v[i].x > r->id.x) r->id.x = v[i].x; + if (v[i].y > r->se.y) r->se.y = v[i].y; + if (v[i].y < r->id.y) r->id.y = v[i].y; + } + + return r; +} diff --git a/aula08/ex3.c b/aula08/ex3.c new file mode 100644 index 0000000..4ee5d55 --- /dev/null +++ b/aula08/ex3.c @@ -0,0 +1,81 @@ +#include +#include +#include + +#define CODE_MAX_LEN 10 +#define MAX_NOTA 20 + +typedef struct { + int num_aluno; + char* cod_disc; + int nota; +} Inscricao; + +/* Lê um sequência de n inscrições do standard input e devolve um novo + * vector de inscrições de alunos em disciplinas. Assuma que o código + * de uma disciplina é uma sequência de letras e digitos com tamanho + * máximo de 10 caracteres. + */ +Inscricao* lerInscricoes(int n) { + Inscricao *v = NULL; + int i = 0; + + v = malloc(sizeof(Inscricao) * n); + + for (i = 0; i < n; i++) { + v[i].cod_disc = malloc(sizeof(char) * CODE_MAX_LEN); + + scanf("%d", &v[i].num_aluno); + scanf("%s", v[i].cod_disc); + scanf("%d", &v[i].nota); + } + + return v; +} + +/* Dado um vector de inscrições de tamanho n devolve um novo vector de + * inteiros com a distribuição das notas de uma disciplina. Ou seja, + * na posição indice i do vector deverá conter o número de alunos que + * teve nota i à disciplina. + */ +int* distribuicaoNotas(Inscricao* ins, int n, char* disc) { + int *dist = NULL, i = 0; + + dist = malloc(sizeof(int) * (MAX_NOTA + 1)); + memset(dist, 0x0, sizeof(int) * (MAX_NOTA + 1)); + + for (i = 0; i < n; i++) + if (strcmp(ins[i].cod_disc, disc) == 0) + dist[ins[i].nota] ++; + + return dist; +} + +int main() { + Inscricao *inscs = NULL; + int n = 0, *dist = NULL, i = 0; + char disc[11]; + + printf("# inscricoes: "); + scanf("%d", &n); + + printf("Inscricoes (numero de aluno, codigo da disciplina, e nota):\n"); + inscs = lerInscricoes(n); + + printf("Disciplina: "); + while (scanf("%s", disc) != EOF) { + dist = distribuicaoNotas(inscs, n, disc); + for (i = 0; i <= MAX_NOTA; i++) + printf("%2d\t%d\n", i, dist[i]); + free(dist); + + printf("Disciplina: "); + } + + for (i = 0; i < n; i++) + free(inscs[i].cod_disc); + free(inscs); + + return EXIT_SUCCESS; +} + -- 2.30.2