Departamento de Ciência da Computação - IME - USP

MAC2166 Introdução à Computação

Prova 3


QUESTÃO 1

    Simule a execução do programa abaixo, destacando a sua saída. A saída do programa consiste de tudo que resulta dos comandos printf.
#include <stdio.h>

int f1(int *a, int b)
{ 
  int i, j, c;
  
  *a = 9; b = 8; i = 7; j = 6; c = 5;   
  printf("f1: *a=%d b=%d i=%d j=%d c=%d\n",
              *a,   b,   i,   j,   c);
  return 10;
}

int f2(int v[4])
{
  v[0] = 61; v[1] = 62; v[2] = 71; v[3] = 72;
  printf("f2: v[0]=%d v[1]=%d v[2]=%d v[3]=%d\n",
              v[0],   v[1],   v[2],   v[3]);
  return 81;
} 

int main()
{ 
  int nusp, v[4], m[4], a, b, i, j, c, d; 
  
  printf("Digite o seu no. USP: ");
  scanf("%d",&nusp);   /* use o SEU no. USP */
  printf("nusp=%d\n", nusp);
  
  d = nusp%10; 
  m[0] = 11; m[1] = 12; m[2] = 21; m[3] = 22;
  v[0] = 31; v[1] = 32; v[2] = 41; v[3] = 42;
  
  if (d == 2 || d == 3 || d == 4)
    { 
      a = 0; b = 1; c = 2; i = 3; j = 4; 
      a = f1(&i,j);
      printf("1: a=%d b=%d i=%d j=%d c=%d\n",
	         a,   b,   i,   j,   c);
    
      a = 0; b = 1; i = 2; j = 3; c = 4;
      i = f1(&i,i);
      printf("2: a=%d b=%d i=%d j=%d c=%d\n",
	         a,   b,   i,   j,   c);
    
      m[0] = f1(&m[1], m[2]);
      printf("3: m[0]=%d m[1]=%d m[2]=%d m[3]=%d\n",
	         m[0],   m[1],   m[2],   m[3]);
    
      m[3] = f2(m);
      printf("4: m[0]=%d m[1]=%d m[2]=%d m[3]=%d\n",
	         m[0],   m[1],   m[2],   m[3]);
      printf("5: v[0]=%d v[1]=%d v[2]=%d v[3]=%d\n",
	         v[0],   v[1],   v[2],   v[3]);
    } 


  else if (d == 5 || d == 6 || d == 7 || d == 8)
    {
      a = 4; b = 0; i = 1; j = 2; c = 3;
      b = f1(&i,j);
      printf("1: a=%d b=%d i=%d j=%d c=%d\n",
                 a,   b,   i,   j,   c);
      
      a = 4; b = 0; i = 1; j = 2; c = 3;
      j = f1(&j,j);
      printf("2: a=%d b=%d i=%d j=%d c=%d\n",
                 a,   b,   i,   j,   c);
  
      m[1] = f1(&m[2],m[3]);
      printf("3: m[0]=%d m[1]=%d m[2]=%d m[3]=%d\n",
                 m[0],   m[1],   m[2],   m[3]);
   
      m[0] = f2(m);
      printf("4: m[0]=%d m[1]=%d m[2]=%d m[3]=%d\n",
                 m[0],   m[1],   m[2],   m[3]);
      printf("5: v[0]=%d v[1]=%d v[2]=%d v[3]=%d\n",
                 v[0],   v[1],   v[2],   v[3]);
    }

  else if (d == 9 || d == 0 || d == 1)
    {
      a = 2; b = 3; c = 4; i = 0; j = 1; 
      b = f1(&i,j);
      printf("1: a=%d b=%d i=%d j=%d c=%d\n",
                 a,   b,   i,   j,   c);

      a = 1; b = 0; i = 4; j = 3; c = 2;
      i = f1(&i,i);
      printf("2: a=%d b=%d i=%d j=%d c=%d\n",
                 a,   b,   i,   j,   c);
  
      m[2] = f1(&m[3],m[0]);
      printf("3: m[0]=%d m[1]=%d m[2]=%d m[3]=%d\n",
                 m[0],   m[1],   m[2],   m[3]);
   
      m[1] = f2(m);
      printf("4: m[0]=%d m[1]=%d m[2]=%d m[3]=%d\n",
                 m[0],   m[1],   m[2],   m[3]);
      printf("5: v[0]=%d v[1]=%d v[2]=%d v[3]=%d\n",
                 v[0],   v[1],   v[2],   v[3]);

    }

  else
    { 
      printf("Tirei ZERO nesta questao\n");
    }
 
  return 0;
}


SOLUÇÃO
A resposta depende do resto da divisão do seu número USP por 10. Teste com o seu no. USP e compare a resposta.

nusp%10 == 0 ou nusp%10 == 1 ou nusp%10 == 9.

Digite o seu no. USP: 1234560
nusp=1234560
f1: *a=9 b=8 i=7 j=6 c=5
1: a=2 b=10 i=9 j=1 c=4
f1: *a=9 b=8 i=7 j=6 c=5
2: a=1 b=0 i=10 j=3 c=2
f1: *a=9 b=8 i=7 j=6 c=5
3: m[0]=11 m[1]=12 m[2]=10 m[3]=9
f2: v[0]=61 v[1]=62 v[2]=71 v[3]=72
4: m[0]=61 m[1]=81 m[2]=71 m[3]=72
5: v[0]=31 v[1]=32 v[2]=41 v[3]=42

Digite o seu no. USP: 1234561
nusp=1234561
f1: *a=9 b=8 i=7 j=6 c=5
1: a=2 b=10 i=9 j=1 c=4
f1: *a=9 b=8 i=7 j=6 c=5
2: a=1 b=0 i=10 j=3 c=2
f1: *a=9 b=8 i=7 j=6 c=5
3: m[0]=11 m[1]=12 m[2]=10 m[3]=9
f2: v[0]=61 v[1]=62 v[2]=71 v[3]=72
4: m[0]=61 m[1]=81 m[2]=71 m[3]=72
5: v[0]=31 v[1]=32 v[2]=41 v[3]=42

Digite o seu no. USP: 1234569
nusp=1234569
f1: *a=9 b=8 i=7 j=6 c=5
1: a=2 b=10 i=9 j=1 c=4
f1: *a=9 b=8 i=7 j=6 c=5
2: a=1 b=0 i=10 j=3 c=2
f1: *a=9 b=8 i=7 j=6 c=5
3: m[0]=11 m[1]=12 m[2]=10 m[3]=9
f2: v[0]=61 v[1]=62 v[2]=71 v[3]=72
4: m[0]=61 m[1]=81 m[2]=71 m[3]=72
5: v[0]=31 v[1]=32 v[2]=41 v[3]=42

nusp%10 == 2 ou nusp%10 == 3 ou nusp%10 == 4.

Digite o seu no. USP: 1234562
nusp=1234562
f1: *a=9 b=8 i=7 j=6 c=5
1: a=10 b=1 i=9 j=4 c=2
f1: *a=9 b=8 i=7 j=6 c=5
2: a=0 b=1 i=10 j=3 c=4
f1: *a=9 b=8 i=7 j=6 c=5
3: m[0]=10 m[1]=9 m[2]=21 m[3]=22
f2: v[0]=61 v[1]=62 v[2]=71 v[3]=72
4: m[0]=61 m[1]=62 m[2]=71 m[3]=81
5: v[0]=31 v[1]=32 v[2]=41 v[3]=42

Digite o seu no. USP: 1234563
nusp=1234563
f1: *a=9 b=8 i=7 j=6 c=5
1: a=10 b=1 i=9 j=4 c=2
f1: *a=9 b=8 i=7 j=6 c=5
2: a=0 b=1 i=10 j=3 c=4
f1: *a=9 b=8 i=7 j=6 c=5
3: m[0]=10 m[1]=9 m[2]=21 m[3]=22
f2: v[0]=61 v[1]=62 v[2]=71 v[3]=72
4: m[0]=61 m[1]=62 m[2]=71 m[3]=81
5: v[0]=31 v[1]=32 v[2]=41 v[3]=42

nusp=1234564
f1: *a=9 b=8 i=7 j=6 c=5
1: a=10 b=1 i=9 j=4 c=2
f1: *a=9 b=8 i=7 j=6 c=5
2: a=0 b=1 i=10 j=3 c=4
f1: *a=9 b=8 i=7 j=6 c=5
3: m[0]=10 m[1]=9 m[2]=21 m[3]=22
f2: v[0]=61 v[1]=62 v[2]=71 v[3]=72
4: m[0]=61 m[1]=62 m[2]=71 m[3]=81
5: v[0]=31 v[1]=32 v[2]=41 v[3]=42


nusp%10 == 0 ou nusp%10 == 1 ou nusp%10 == 9 ou nusp%10 == 5.
Digite o seu no. USP: 1234565
nusp=1234565
f1: *a=9 b=8 i=7 j=6 c=5
1: a=4 b=10 i=9 j=2 c=3
f1: *a=9 b=8 i=7 j=6 c=5
2: a=4 b=0 i=1 j=10 c=3
f1: *a=9 b=8 i=7 j=6 c=5
3: m[0]=11 m[1]=10 m[2]=9 m[3]=22
f2: v[0]=61 v[1]=62 v[2]=71 v[3]=72
4: m[0]=81 m[1]=62 m[2]=71 m[3]=72
5: v[0]=31 v[1]=32 v[2]=41 v[3]=42

Digite o seu no. USP: 123456
nusp=123456
f1: *a=9 b=8 i=7 j=6 c=5
1: a=4 b=10 i=9 j=2 c=3
f1: *a=9 b=8 i=7 j=6 c=5
2: a=4 b=0 i=1 j=10 c=3
f1: *a=9 b=8 i=7 j=6 c=5
3: m[0]=11 m[1]=10 m[2]=9 m[3]=22
f2: v[0]=61 v[1]=62 v[2]=71 v[3]=72
4: m[0]=81 m[1]=62 m[2]=71 m[3]=72
5: v[0]=31 v[1]=32 v[2]=41 v[3]=42

Digite o seu no. USP: 1234567
nusp=1234567
f1: *a=9 b=8 i=7 j=6 c=5
1: a=4 b=10 i=9 j=2 c=3
f1: *a=9 b=8 i=7 j=6 c=5
2: a=4 b=0 i=1 j=10 c=3
f1: *a=9 b=8 i=7 j=6 c=5
3: m[0]=11 m[1]=10 m[2]=9 m[3]=22
f2: v[0]=61 v[1]=62 v[2]=71 v[3]=72
4: m[0]=81 m[1]=62 m[2]=71 m[3]=72
5: v[0]=31 v[1]=32 v[2]=41 v[3]=42

Digite o seu no. USP: 1234568 
nusp=1234568
f1: *a=9 b=8 i=7 j=6 c=5
1: a=4 b=10 i=9 j=2 c=3
f1: *a=9 b=8 i=7 j=6 c=5
2: a=4 b=0 i=1 j=10 c=3
f1: *a=9 b=8 i=7 j=6 c=5
3: m[0]=11 m[1]=10 m[2]=9 m[3]=22
f2: v[0]=61 v[1]=62 v[2]=71 v[3]=72
4: m[0]=81 m[1]=62 m[2]=71 m[3]=72
5: v[0]=31 v[1]=32 v[2]=41 v[3]=42

QUESTÃO 2

  Dizemos que uma matriz quadrada de números inteiros é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos de cada coluna e a soma dos elementos das diagonais principal e secundária são todas iguais. Exemplos

  numero de  linhas = 3
  numero de colunas = 3
  matriz:
     8   0   7
     4   5   6
     3  10   2
  A matriz eh magica!
  Somas = 15

  numero de  linhas = 2
  numero de colunas = 2
  matriz:
     1   1
     1   1
  A matriz eh magica!
  Somas = 2
  

  numero de  linhas = 2
  numero de colunas = 2
  matriz:
     1   2
     3   4
  A matriz nao eh magica!



  numero de  linhas = 3
  numero de colunas = 3
  matriz:
     1   0   0
     0   1   0
     0   0   1
  A matriz nao eh magica!

Escreva um programa que leia um número inteiro n, 1 ≤ n ≤ 100, e uma matriz A de números inteiros de dimensão n × n e imprima ``A matriz eh magica!'' se a matriz A é um quadrado mágico e imprima ``A matriz nao eh magica!'', em caso contrário. Não é necessário imprimir a matriz lida.

Sinta-se à vontade para escrever qualquer função que porventura desejar.

SOLUÇÃO

/* 
 * SOLUCAO 1: curta e grossa
 *
 */
#include <stdio.h>

#define MAX 100

#define SIM  1
#define NAO  0

int main()
{
  int a[MAX][MAX]; /*  matriz dada */
  int n;           /*  dimensao da matriz */
  int e_magica;    /*  indica se a matriz e magica ou nao */
  int i, j;        /*  (i,j) e uma posicao da matriz */

  int diag_p;      /*  soma dos elementos da diag. principal */
  int diag_s;      /*  soma dos elementos da diag. secundaria */
  int linha;       /*  soma dos elementos de uma linha */
  int coluna;      /*  soma dos elementos de uma coluna */

  /* leia a dimensao da matriz */ 
  printf("Digite o valor de n: ");
  scanf("%d", &n);

  /* leia a matriz */
  for (i = 0; i < n; i++)
    {
      for (j = 0; j < n; j++) 
	{
	  printf("Digite o elementos (%d,%d) da matriz: ", i, j);
	  scanf("%d", &a[i][j]);
	}
    }

  /* calcule a soma das diagonais */
  diag_p = 0; diag_s = 0;
  for (i = 0; i < n; i++)
    {
      diag_p = diag_p + a[i][i];
      diag_s = diag_s + a[i][n-i-1];
    }

  /* inicialize variavel indicadora */
  if (diag_p == diag_s)
    e_magica = SIM;
  else
    e_magica = NAO;

  /* calcule a soma de cada linha e coluna */
  i = 0;
  while (i < n && e_magica == SIM)
    {
      linha = 0;
      coluna = 0;
      for (j = 0; j < n; j++)
	{
	  linha = linha   + a[i][j];
	  coluna = coluna + a[j][i];
	}
      
      if (linha != diag_p || coluna != diag_s)
	e_magica = NAO;
      
      i = i + 1;
    }

  /* escreva a resposta */  
  if (e_magica == SIM) 
    {
      printf("A matriz eh magica (somas = %d)!\n", diag_p);
    }
  else
    {
      printf("A matriz nao eh magica!\n");
    }
  
  return 0;
}
/*
 * SOLUCAO 2: colocaremos aqui qualquer solução que virmos e que 
 *            seja essencialmente diferente da anterior.
 */

QUESTÃO 3

     Esta questão consiste na implementação de quatro funções. Todas as funções são simplificações muito grandes de alguns trechos de código que você escreveu para o seu EP4. Os nomes das funções são

InserirCoelho, InicializarIlha, AtualizarCoelhos, e main.

     A Ilha dos Coelhos e Coelhos é uma ilha povoada apenas por coelhos. Nesta questão vamos simular o comportamento de uma população de coelhos na ilha.

     A ilha é representada no seu programa por uma matriz de números inteiros ilha, de dimensões nI × nI. O valor de nI não ultrapassa o valor da constante MAXnI definida mais adiante.

     A simulação consiste na determinação da situação da população dos coelhos dessa ilha para cada instante de tempo t. A situação inicial da ilha é carregada de um arquivo. Abaixo vemos uma possível situação para o instante t=1$. As posições com coelhos são indicadas por um C

INSTANTE t = 1

  MAPA DA ILHA
       0   1   2   3   4 
     +---+---+---+---+---+
   0 | C |   |   |   |   |
     +---+---+---+---+---+
   1 |   |   | C |   |   |
     +---+---+---+---+---+
   2 |   |   |   |   |   |
     +---+---+---+---+---+
   3 |   |   |   |   |   |
     +---+---+---+---+---+
   4 |   |   |   |   | C |
     +---+---+---+---+---+

     Nessa ilha os coelhos são imortais, já que não há lobos para devorá-los. Cada coelho tem uma quantidade ec de energia (energia do coelho). A energia de um coelho permanece constante durante a simulação. A posição da matriz ilha que contenha um coelho deve conter o valor -ec. Uma posição vazia contém um zero.

     Os coelhos podem se mover para uma posição adjacente vazia ou permanecer no mesmo lugar. Dada a situação acima para t=1, uma possível situação para o instante t=2 está logo a seguir.

    coelho (4,4) moveu-se para posicao (3,4)
    coelho (1,2) moveu-se para posicao (2,2)
    coelho (0,0) permaneceu na  posicao (0,0)

INSTANTE t = 2

  MAPA DA ILHA
       0   1   2   3   4 
     +---+---+---+---+---+
   0 | C |   |   |   |   |
     +---+---+---+---+---+
   1 |   |   |   |   |   |
     +---+---+---+---+---+
   2 |   |   | C |   |   |
     +---+---+---+---+---+
   3 |   |   |   |   | C |
     +---+---+---+---+---+
   4 |   |   |   |   |   |
     +---+---+---+---+---+

     Quando o instante t da simulação for múltiplo do período prc de reprodução dos coelhos, eles podem se reproduzir. Uma coelha deve se reproduzir caso tenha se movimentado. Nesse instante, ela deixa um coelhinho em sua posição de origem com a energia ec dos coelhos. Se a coelha não se movimentou, então ela não pode se reproduzir. Dada a situação anterior para t=2 e supondo prc=2, uma possível situação para o instante t=3 está logo a seguir.

    coelho (3,4) moveu-se para posicao (2,4)
    coelha reproduziu; coelhinho esta em (3,4) e coelha esta em (2,4)

    coelho (2,2) moveu-se para posicao (2,1)
    coelha reproduziu; coelhinho esta em (2,2) e coelha esta em (2,1)

    coelho (0,0) moveu-se para posicao (1,0)
    coelha reproduziu; coelhinho esta em (0,0) e coelha esta em (1,0)
  
INSTANTE t = 3

  MAPA DA ILHA
       0   1   2   3   4 
     +---+---+---+---+---+
   0 | C |   |   |   |   |
     +---+---+---+---+---+
   1 | C |   |   |   |   |
     +---+---+---+---+---+
   2 |   | C | C |   | C |
     +---+---+---+---+---+
   3 |   |   |   |   | C |
     +---+---+---+---+---+
   4 |   |   |   |   |   |
     +---+---+---+---+---+

     O seu programa deve utilizar uma matriz coelho, de dimensões nC × 2, que armazena a lista das posições dos nC coelhos na ilha. O valor de nC é menor que MAX.

    coelho (0,0) permaneceu na  posicao (0,0)
    coelho (2,2) moveu-se para posicao (1,2)
    coelho (3,4) moveu-se para posicao (4,4)
    coelho (2,4) moveu-se para posicao (2,3)
    coelho (2,1) moveu-se para posicao (3,1)
    coelho (1,0) permaneceu na  posicao (1,0)
  
INSTANTE t = 4

  MAPA DA ILHA
       0   1   2   3   4 
     +---+---+---+---+---+
   0 | C |   |   |   |   |
     +---+---+---+---+---+
   1 | C |   | C |   |   |
     +---+---+---+---+---+
   2 |   |   |   | C |   |
     +---+---+---+---+---+
   3 |   | C |   |   |   |
     +---+---+---+---+---+
   4 |   |   |   |   | C |
     +---+---+---+---+---+

     Os protótipos de funções nesta questão usam as seguintes declarações:

 
#define MAXnI 100
#define MAX   MAXnI*MAXnI

 

item (a) Escreva uma função de protótipo

    void InicializarIlha(int ilha[MAXnI][MAXnI], int nI,
                         int coelho[MAX][2], int nC,  int ec);
que recebe uma lista de posições de coelhos, representada pela matriz coelho de dimensões nC × 2 e coloca o valor -ec nas posições da matriz ilha que estão na lista e zero nas demais posições.

SOLUÇÃO

void InicializarIlha(int ilha[MAXnI][MAXnI], int nI,
                     int coelho[MAX][2], int nC,  int ec)
{
  int i, j; /* (i,j) e uma posicao da ilha */
  int k;    /* para percorrer a lista de coelhos */

  for (i = 0; i < nI; i++)
    {
      for (j = 0; j < nI; j++)
        {
          ilha[i][j] = 0;
        }
    }

  for (k = 0; k < nC; k++) 
    {
       ilha[coelho[k][0]][coelho[k][1]] = -ec;
     }
}

 

item (b) Escreva uma função de protótipo

    void InserirCoelho(int coelho[MAX][2], int *nC, int i, int j);
que recebe uma lista de posições de coelhos, representada pela matriz coelho de dimensões *nC × 2, e a posição (i, j) de um coelho. Essa função insere a posição do coelho no final da lista e incrementa a dimensão *nC.

SOLUÇÃO

/*
 * SOLUCAO 
 *         
 */
void InserirCoelho(int coelho[MAX][2], int *nC, int i, int j)
{
  coelho[*nC][0] = i;
  coelho[*nC][1] = j;
  *nC = *nC + 1;  ERRO comum: "*nC++;"  Certo eh: "(*nC)++;"   
}

 

Para escrever a função AtualizarCoelhos pedida no item (c) você deve usar as seguintes funções sem escrevê-las. Suponha que, como ocorreu no EP4, lhe é dada uma função de protótipo

    int PosicoesDisponiveis(int energia,
                            int ilha[MAXnI][MAXnI], int nI, 
                            int i, int j, 
                            int posicoes[5][2]) 
que coloca na matriz posicoes as posições adjacentes a (i, j) com energia igual a energia. Quando energia é zero, a posição (i, j) é também colocada em posicoes. A função devolve o número de posições colocadas na matriz.

Suponha ainda que lhe é dada uma função de protótipo

    void  SortearPosicao(int posicoes[5][2], int no_pos, 
                         int *prox_i, int *prox_j, 
                         int *semente)
que recebe uma lista de posições para movimentação de coelhos, no_pos que corresponde ao tamanho dessa lista, *semente que é a semente usada para calcular o próximo número pseudo-aleatório e coloca em *prox_i e *prox_j a posição sorteada, e em *semente a próxima semente.

item (c) Escreva uma função de protótipo

    void AtualizarCoelhos(int ilha[MAXnI][MAXnI], int nI,
                          int coelho[MAX][2], int *nC, int ec, int prc,
                          int *semente, int t)
que para cada coelho na lista coelho, percorrida do fim até o início:
  1. tenta movimentá-lo;
  2. tenta reproduzi-lo, caso t seja um instante de reprodução dos coelhos.
A sua função deve imprimir uma mensagem para cada movimentação e reprodução.

A sua função AtualizarCoelhos deve usar obrigatoriamente as funções

PosicoesDisponiveis, SortearPosicao e InserirCoelho.
Você pode usar a função InserirCoelho do item (b) mesmo que não a tenha feito. Sinta-se à vontade para escrever qualquer outra função que desejar.

SOLUÇÃO

/*
 * SOLUCAO 
 *         
 */
void AtualizarCoelhos(int ilha[MAXnI][MAXnI], int nI,
                      int coelho[MAX][2], int *nC, int ec, int prc,
                      int *semente, int t)
{
  int k;              /* indice para percorrer lista de coelho */
  int no_p;           /* numero de posicoes */
  int i, j;           /* (i,j) e posicao do coelho sendo analizado */ 
  int prox_i, prox_j; /* (pro_i,prox_j) e a nova posicao do coelho sendo analizado */ 
  int posicoes[5][2]; /* lista de posicoes disponiveis */
  
  
  for (k = *nC-1; k >= 0; k--)
    {
      /* guarde a posicao do coelho */
      i = coelho[k][0];
      j = coelho[k][1];

      /* construa lista de posicoes disponiveis */
      no_p = PosicoesDisponiveis(0, ilha, nI, i, j, posicoes);

      /* sortei uma nova posicao para o coelho */
      SortearPosicao(posicoes, no_p, &prox_i, &prox_j, &*semente);
      
      /* mova coelho para a posicao sorteada */
      ilha[i][j]           =   0;
      ilha[prox_i][prox_j] = -ec;
      
      /* atualize posicao do coelho na lista de coelhos */
      coelho[k][0] = prox_i;
      coelho[k][1] = prox_j;
      
      if (i == prox_i && j == prox_j)
        {
          printf("    coelho (%d,%d) permaneceu na  posicao (%d,%d)\n", 
                 i, j, prox_i, prox_j);
        }
      else
        {
          printf("    coelho (%d,%d) moveu-se para posicao (%d,%d)\n", 
                 i, j, prox_i, prox_j);

          /* coelha deve reproduzir */
          if (t % prc == 0)
            {
              /* coloque coelhinho na ilha */
              ilha[i][j]  = -ec;

              /* insira coelhinho na lista de coelhos */
              InserirCoelho(coelho, &*nC, i, j);

              printf("    coelha reproduziu; coelhinho esta em (%d,%d)"
                     " e coelha esta em (%d,%d)\n", 
                     i, j, prox_i, prox_j);
            }
        }
      printf("\n");
    }
}  

 

Para escrever a função main pedida no item (d) você deve usar as seguinte funções sem escrevê-las. Suponha que lhe é dada uma função de protótipo

    void Ler(int *nI, 
             int *ec,  int *prc, int coelho[MAX][2], int *nC, 
             int *tmax, int *semente);
que lê todos os dados do arquivo entrada.txt. Suponha ainda que lhe é dada uma função de protótipo
    void ImprimirIlha(int ilha[MAXnI][MAXnI], int nI);
que recebe a matriz ilha de dimensões nI × nI, e imprime a situação representada pela matriz ilha com carateres.

item (d) Escreva uma função main que lê todos os dados do problema e imprime a situação na ilha desde o instante t=1 até o instante t=tmax.

A sua função main deve usar obrigatoriamente as funções

Ler, ImprimirIlha, InicializarIlha e AtualizarCoelhos.
Você pode usar a função InicializarIlha do item (b) e a função AtualizarCoelhos do item (c) mesmo que não a tenha feito.

SOLUÇÃO

/*
 * SOLUCAO 
 *         
 */
int main()
{
  int nI;                 /* dimensao da ilha */
  int ilha[MAXnI][MAXnI]; /* mapa da ilha */
 
  int nC;                 /* numero de coelhos */
  int coelho[MAX][2];     /* lista com posicoes dos coelhos */
  int ec;                 /* energia  dos coelhos */ 
  int prc;                /* periodo de reproducao dos coelhos */ 

  int t;                  /* instante da simulacao */
  int tmax;               /* maior instante da simulacao */
  int semente;            /* semente para gerador de numeros */
 
  Ler(&nI, &ec, &prc, coelho, &nC, &tmax, &semente);
  InicializarIlha(ilha, nI, coelho, nC, ec);

  for (t = 1; t < tmax; t++)
    {
      printf("INSTANTE t = %d\n", t);
      ImprimirIlha(ilha, nI);   
      AtualizarCoelhos(ilha, nI, coelho, &nC, ec,  prc, &semente, t);
    }
  
  printf("INSTANTE t = %d\n", t);
  ImprimirIlha(ilha, nI);
  return 0;
}

 

 

 


Last modified: Wed Apr 1 09:47:32 BRT 2009