Universidade Federal de Minas Gerais
Instituto de Ciências Exatas
Departamento de Ciência da Computação

Algoritmos e Estruturas de Dados I

Arranjos


Exercícios:

  1. Escreva um trecho de programa que calcula a soma dos dias do ano do arranjo referido por numDiasMes apresentado acima.

  2.   int[] numDiasMes={0,31,28,31,30,31,30,31,31,30,31,30,31};
      int totalDias=0;
      for(i=0; i<=12; i++) totalDias+=numDiasMes[i];
      System.out.println("Total de dias:"+totalDias);
     
  3. Escreva um trecho de programa que verifica se dois vetores representados por dois arranjos de inteiros referidos por a1 e a2 são de mesmo tamanho.

  4.     int[] a1=...;
        int[] a2=...;
        int a1NumElementos= a1==null || a1.length==0 ? 0 : a1.length;
        int a2NumElementos= a2==null || a2.length==0 ? 0 : a2.length;
        if(a1NumElementos==a2NumElementos)
          System.out.println("a1 e a2 sao compativeis!");
        else
          System.out.println("a1 e a2 tem tamanho diferente!");
     
     
  5. Escreva um trecho de programa que calcula a soma de dois vetores representados por dois arranjos de inteiros referidos por a1 e a2. O resultado deve ser armazenado em um arranjo referido por a3.

  6.    int[] a3=new int[a1.length];
       for(int i=0; i<a1.length; i++) a3[i]=a1[i]+a2[i];
     

  7. Escreva um trecho de programa que testa se uma matriz representada por um arranjo de arranjos de inteiros é uma matriz quadrada.

  8.  

     
     
     

        int i;
        int[][] m=...;
        if(m==null)
          System.out.println("m nao contem referencia para um arranjo!");
        else if(m.length==0)
          System.out.println("m refere a um arranjo sem elementos!");
        else{
          for(i=0; i<m.length; i++) if(m[i]==null) break;
          if(i<m.length)
            System.out.println("m nao tem a linha "+(i+1));
          else{
            for(i=0; i<m.length; i++) if(m[i].length!=m.length) break;
            if(i<m.length)
              System.out.println("m tem "+m.length+" linhas, mas a linha "+
                                 (i+1)+" tem "+m[i].length+" colunas!");
            else
              System.out.println("m representa uma matriz quadrada!");
          }
        }

  9. Escreva um trecho de programa que testa se uma matriz representada por um arranjo de arranjo de inteiros é uma matriz triangular envolvendo a diagonal principal e os elementos abaixo dela.

  10.  

     
     
     

       int i;
       int[][] m=...;
       if(m==null)
          System.out.println("m nao contem referencia para um arranjo!");
        else if(m.length==0)
          System.out.println("m refere a um arranjo sem elementos!");
        else{
          for(i=0; i<m.length; i++) if(m[i]==null) break;
          if(i<m.length)
            System.out.println("m nao tem a linha "+(i+1));
          else{
            for(i=0; i<m.length; i++) if(m[i].length!=(i+1)) break;
            if(i<m.length)
              System.out.println("A linha "+(i+1)+" tem "+m[i].length+" colunas!");
            else
              System.out.println("m representa uma matriz triangular inferior!");
          }
        }
     

  11. Escreva um trecho de programa que, sabendo que um arranjo representa uma matriz quadrada, verifica se este arranjo representa uma matriz identidade.

  12.  

     

        int lin,col=0;
        varredura:
        for(lin=0; lin<m.length; lin++)
          for(col=0; col<m.length; col++)
            if(!( (lin==col& m[lin][col]==1) |
                  (lin!=col& m[lin][col]==0) ) ) break varredura;
        if(lin<m.length)
          System.out.println("problema com o elemento da linha "+
                             (lin+1)+", coluna "+(col+1));
        else
          System.out.println("representa matriz identidade!");
      }
    Comentário
    Um comando pode ser prefixado por um rótulo (um identificador seguido de dois pontos) e um comando break aninhado dentro deste comando pode fazer referência a este rótulo. Quando o fluxo de controle atinge este comando break com rótulo, são abandonadas as iterações, se existirem, e o fluxo de controle vai para o comando seguinte ao comando rotulado. No caso acima, se o break varredura é executado, o fluxo de controle abandona os dois comandos for e vai para o comando if(lin<m.length). Abaixo mostramos uma outra sugestão de solução sem usar o comando break com rótulo.
     

      boolean tudoOk=true;
      for(lin=0; lin<m.length&tudoOk; lin++)
        for(col=0; col<m.length&tudoOk; col++)
          tudoOk=(lin==col& m[lin][col]==1) | (lin!=col& m[lin][col]==0);
      if(tudoOk)
        System.out.println("representa matriz identidade!");
      else
        System.out.println("problema com o elemento da linha "+
                             lin+", coluna "+col);