Gabarito da Prova Sub

MAC115 - Física, segundo semestre de 2002

1. (a) A saída é como segue:

1 3 2 4
1 2 3 4

(b) Uma tal entrada é 3 4 1 2, que produz a saída

1 2 3 4
1 2 3 4
2. (a) void elimine(int a[], int j, int n)
{
  int i;
  for (i = j; i < n - 1; i++)
    a[i] = a[i + 1];
}
(b) int reduza(int a[], int i, int n)
{
  int j = i + 1;
  while (j < n) {
    if (a[j] == a[i]) {
      elimine(a, j, n);
      n--;
    } else
      j++;
  }
  return n;
}

(c) int elimine_duplicacoes(int a[], int n)
{
int i = 0;
while (i < n) {
  n = reduza(a, i, n);
  i++;
}
return n;
}
3. (a) int tipo(int l[], int n)
{
int d;
int i, neg = 0, pos = 0;
for (i = 1; i < n; i++)
  if ((d = l[i] - l[i - 1]) > 0)
    pos++;
  else if (d < 0)
    neg++;
if (neg == 0)
  return 1;
else if (pos == 0)
  return -1;
else
  return 0;
}
(b) void determine_tipos(int a[][NMAX], int m, int n, int tipos[])
{
int i;
for (i = 0; i < m; i++)
  tipos[i] = tipo(a[i], n);
}

(c) void leia_matriz(int a[][NMAX], int m, int n)
{
int i, j;
for (i = 0; i < m; i++)
  for (j = 0; j < n; j++)
    scanf("%d", &a[i][j]);
}
void imprima_matriz(int a[][NMAX], int m, int n)
{
int i, j;
for (i = 0; i < m; i++) {
  for (j = 0; j < n; j++)
    printf("%d ", a[i][j]);
  putchar('\n');
}
}
(c) int main()
{
int a[MMAX][NMAX], tipos[MMAX], m, n, neg = 0, z = 0, pos = 0, i;
scanf("%d %d", &m, &n);
leia_matriz(a, m, n);
determine_tipos(a, m, n, tipos);
for (i = 0; i < m; i++)
  if (tipos[i] > 0)  pos++;
  else if (tipos[i] < 0) neg++;
  else z++;
if (((neg > 0) && (z > 0)) || ((neg > 0) && (pos > 0))
    || ((z > 0) && (pos > 0)))
  printf("Matriz nao 'e homogenea.\n");
else  /* Supomos que nao existem linhas constantes */
  printf("Matriz 'e homogenea.\n");
return 0;
}