]> web.ist.utl.pt Git - iaed.git/commitdiff
Adding aula08.
authorAlexandre P Francisco <aplf@ist.utl.pt>
Tue, 22 Apr 2014 09:52:50 +0000 (10:52 +0100)
committerAlexandre P Francisco <aplf@ist.utl.pt>
Tue, 22 Apr 2014 09:52:50 +0000 (10:52 +0100)
aula08/Makefile [new file with mode: 0644]
aula08/ex1.c [new file with mode: 0644]
aula08/ex2.c [new file with mode: 0644]
aula08/ex3.c [new file with mode: 0644]

diff --git a/aula08/Makefile b/aula08/Makefile
new file mode 100644 (file)
index 0000000..aae32c4
--- /dev/null
@@ -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 (file)
index 0000000..37055bd
--- /dev/null
@@ -0,0 +1,20 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+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 (file)
index 0000000..22edf42
--- /dev/null
@@ -0,0 +1,75 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+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 (file)
index 0000000..4ee5d55
--- /dev/null
@@ -0,0 +1,81 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#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;
+}
+