Home RecentChanges

Pontos

Ficheiros pontos.c:

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

Compilar e executar:

[aplf@darkstar ~]$ gcc -g -Wall -ansi -pedantic -o pontos pontos.c 
[aplf@darkstar ~]$ valgrind ./pontos 
==6125== Memcheck, a memory error detector
==6125== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==6125== Using Valgrind-3.9.0 and LibVEX; rerun with -h for copyright info
==6125== Command: ./pontos
==6125== 
3
1 2
1 4
2 3
x:1 y:2
x:1 y:4
x:2 y:3
SE x:1 y:4
ID x:2 y:2
==6125== 
==6125== HEAP SUMMARY:
==6125==     in use at exit: 0 bytes in 0 blocks
==6125==   total heap usage: 2 allocs, 2 frees, 40 bytes allocated
==6125== 
==6125== All heap blocks were freed -- no leaks are possible
==6125== 
==6125== For counts of detected and suppressed errors, rerun with: -v
==6125== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)
[aplf@darkstar ~]$