sexta-feira, 19 de novembro de 2010

Exercício 5-6 Escreva algoritmo que leia os nomes e conceitos dos alunos de uma turma de tamanho máximo 60. O algoritmo deverá, para todos os alunos lidos, colocar em uma matriz o nome do aluno na primeira coluna e sua situação na segunda coluna: “aprovado”, se o conceito do aluno for superior a 0; “reprovado” caso contrário. Os conceitos vão de 0 a 4, estando reprovados os alunos cujo conceito é o 0. O algoritmo pára de ler quando o nome informado for “fim” ou tenham sido lidos o nome e o conceito de 60 alunos tamanho máximo da turma).

algoritmo "nomes e conceitos dos alunos"

var
   matriz:vetor[1..2,1..60] de literal
   vetconceito:vetor[1..60] de inteiro
   i,k:inteiro
inicio
      i<-0
      k<-0
      repita
            i<-i+1
            escreval("Digite o nome do",i,"º Aluno")
            leia(matriz[1,i])
         se (matriz[1,i]<>"fim") entao
            repita
            escreval("Digite o conceito do",i,"º Aluno")
            leia(vetconceito[i])
            ate ((vetconceito[i]>=0) e (vetconceito[i]<4))
            k<-k+1
         fimse
      ate ((i>=60) ou (matriz[1,i]="fim"))
      i<-0
      repita
            i<-i+1
            se (vetconceito[i]=0) entao
               matriz[2,i]<-"Reprovado"
            senao
                 matriz[2,i]<-"Aprovado"
            fimse
      ate ((i>=60) ou (i>=k))
      escreval("************  RESULTADO  ***********")
      escreval
      para i de 1 ate 60 faca
           se ((matriz[1,i]<>"")e(matriz[1,i]<>"fim"))entao

              escreval(matriz[1,i]," -- ",matriz[2,i])
           fimse
      fimpara   
fimalgoritmo

Exercício 5-5 Escreva algoritmo que leia caracteres em dois vetores vetA e vetB, de cinco posições.Após os dois vetores terem sido lidos, o algoritmo deverá colocar em um terceiro vetor vetC a diferença dos dois primeiro, i.e., os caracteres que estão contido em vetA e não estão contido em vetV. Por exemplo, se vetA = { “A”, “E”, “F”, “6“,“?”} e vetB = { “F”, “3”, “?”, “F“,“H”,“E”} então vetC = { “A”,“6“}

algoritmo "Interseção de Vetores A e B"

var
vetA,vetB:vetor[1..5] de literal
   vetC,vetCFinal:vetor[1..10] de literal
   contador,contadorC:inteiro
   qtdeEncontrada,posicaoEncontrada: inteiro
inicio
      contadorC<-1
      qtdeEncontrada<-1
     
   para contador de 1 ate 5 faca
        escreval("Informe um valor para A:")
        leia(vetA[contador])
        vetC[contadorC]<-vetA[contador]
        contadorC<- contadorC+1
        escreval("Informe um valor para B:")
        leia(vetB[contador])
        vetC[contadorC]<-vetB[contador]
        contadorC<- contadorC+1
   fimpara
  
   para contador de 1 ate 10 faca
        qtdeEncontrada<-0
        para contadorC de 1 ate 10 faca
             se (vetC[contador] <> vetC[contadorC]) entao
                qtdeEncontrada<- qtdeEncontrada+1
                se (qtdeEncontrada>1) entao
                   vetC[contadorC]<- ""
                fimse
             fimse
        fimpara
   fimpara
  
   contadorC<-1
   para contador de 1 ate 10 faca
        se (vetC[contador] <> "") entao
           vetCFinal[contadorC]<- vetC[contador]
           contadorC<-contadorC+1
        fimse
   fimpara
  
   para contador de 1 ate 10 faca
        se (vetCFinal[contador] <> "") entao
           escreval("Valor: ",vetCFinal[contador])
        fimse
   fimpara
fimalgoritmo

Exercício 5-4 Escreva um algoritmo que leia caracteres em dois vetores vetA e vetB, de cinco posições. Após os dois vetores terem sido lidos, o algoritmo deverá colocar em um terceiro vetor vetC o resultado da união dos dois primeiros, i.e., os caracteres que estão contidos em um ou outro vetor. Assuma que em um mesmo vetor não haverá caracteres repetidos, mas uma caracter contido em vetA poderá também estar contido em vetB. Nesse caso, apenas uma ocorrência é colocada em vetC. Por exemplo, se vetA = { “A”, “E”, “F”, “6“,“?”} vetB = { “F”, “3”, “?”, “F“,“H”,“E”} vetC = { “A”, “E”, “F”, “6“,“?”,”E”,“H”}

algoritmo "União de Vetores A e B"

var
vetA,vetB:vetor[1..5] de literal
   vetC,vetCFinal:vetor[1..10] de literal
   contador,contadorC:inteiro
   qtdeEncontrada,posicaoEncontrada: inteiro
inicio
      contadorC<-1
      qtdeEncontrada<-1
      
   para contador de 1 ate 5 faca
        escreval("Informe um valor para A:")
        leia(vetA[contador])
        vetC[contadorC]<-vetA[contador]
        contadorC<- contadorC+1
        escreval("Informe um valor para B:")
        leia(vetB[contador])
        vetC[contadorC]<-vetB[contador]
        contadorC<- contadorC+1
   fimpara
para contador de 1 ate 10 faca
        qtdeEncontrada<-0
        para contadorC de 1 ate 10 faca
             se (vetC[contador] = vetC[contadorC]) entao
                qtdeEncontrada<- qtdeEncontrada+1
                se (qtdeEncontrada>1) entao
                   vetC[contadorC]<- ""
                fimse
             fimse
        fimpara
   fimpara
  
   contadorC<-1
   para contador de 1 ate 10 faca
        se (vetC[contador] <> "") entao
           vetCFinal[contadorC]<- vetC[contador]
           contadorC<-contadorC+1
        fimse
   fimpara
  
   para contador de 1 ate 10 faca
        se (vetCFinal[contador] <> "") entao
           escreval("Valor: ",vetCFinal[contador])
        fimse
   fimpara
fimalgoritmo

Exercício 5-3 Seja o seguinte algoritmo: 01. algoritmo “semnome” 02. var 03. vetA, vetB, vetC: vetor[1..5] de literal 04. i, j, k : numérico 05. achou : lógico 06. início 07. i <- 1 08. repita 09. escreva(“Entre com”, i, “o elemento do vetor A”) 10. leia(vetA[i]) 11. escreva(“Entre com”, i, “o elemento do vetor B”) 12. leia(vetB[i]) 13. i < i + 1 14. até i > 5 15. i <-1 16. repita 17. vetC[i] <- “” 18. i < i + 1 19. até i > 5 20. i <- 1 21. k <- 1 22. repita 23. j <- 1 24. achou <- FALSO 25. repita 26. se vetA[j] = vetB[j] então 27. vetC[k] <- vetA[i] 28. k <- k+1 29. achou <- VERDADEIRO 30. fimse 31. j <- j+1 32. até (j > 5) ou achou 33. i <- i+1 34. até i > 5 35. fimalgoritmo Determine o conteúdo final de vetC, mostrando o teste de mesa completo utilizado para tal, supondo que os valores lido foram “k”, “d”, “j”, “s”, “d”, “k”, “s”, “j”, “h” e “m”,nessa ordem.

Teste de mesa:      
        [1]  [2]   [3]   [4]   [5]                                 I        J    K       Achou
vetA  k     j      d     s       h                                  1       1    1        falso
vetB  d     s      r     j        m                                 2       2
vetC  -     -      -     -       -                                   3
                                                                           4
                                                                           5
                                                                           6
                                                                           1
                                                                           2
                                                                           3
                                                                           4
                                                                           5
                                                                           6
                                                                           1


Resposta: vetC não recebeu nenhum valor, pois as posições não se repetiram e achou recebeu FALSO.

Exercício 5-2 Escreva um algoritmo que leia o nome dos alunos de uma turma de tamanho indefinido (mas não superior a 60) e sua nota em uma prova (0 a 10; o algoritmo deve verificar se a nota fornecida é válida). O algoritmo pára de ler quando o nome do aluno fornecido for vazio (“”). Para cada aluno, o algoritmo deve escrever seu nome e sua nota normalizada, dada pela fórmula: NNi = Ni X 10/Nmax (5.5) Onde NNi é a nota normalizada do i-ésimo aluno, Ni é sua nota original, e Nmax é a nota máxima obtida dentre todos os alunos da turma.

algoritmo "Nota de cada aluno normalizada"

var
 nomes: vetor [1..60] de literal
 notas: vetor [1..60] de real
 notaMaxima, notaNormalizada: real
 i, k: inteiro

inicio
 i <- 1
 repita
   escreva("Digite o nome do aluno: ")
   leia (nomes[i])
   se (nomes[i] <> "") entao
      repita
         escreva ("Digite a nota do aluno: ")
         leia ( notas[i])
      ate ((notas[i] >=0) e (notas[i] <= 10))
      i <- i+1
   fimse
 ate ((i >= 60) ou (nomes[i] = ""))
 k <- i
 notaMaxima <- notas[1]
 para i de 2 ate k faca
    se (notas[i] > notaMaxima) entao
        notaMaxima <- notas[i]
    fimse
 fimpara
 escreval (" Abaixo a listagem dos nomes e das notas normalizadas: ")
   para i de 1 ate k faca
     notaNormalizada <- notas[i] * (10/notaMaxima)
     escreval (nomes[i], "  -  ", notaNormalizada)
   fimpara
 fimalgoritmo

Exercício 5-1 Escreva um algoritmo que calcule e coloque em um vetor os números de 1 a n cuja raiz quadrada é um número inteiro ímpar. Por exemplo, 1, 9, 25, 49,...O valor de n deve ser lido, sendo que n ≤1000.

algoritmo "Raiz Quadrada"

var
 numero, divisaoComResto, i, k: inteiro
 vet: vetor[1..1000] de inteiro

inicio
 repita
   escreva("Digite um número entre 1-1000: ")
   leia (numero)
 ate ((numero <= 1000) e (numero > 0))
 k <- 1
 para i de 1 ate numero faca
   se (( i mod 2) = 1) entao
       divisaoComResto <- i*i
       vet[k] <-  divisaoComResto
       k <- k + 1
   fimse
 fimpara
 para i de 1 ate (k-1) faca
    escreval (vet[i])
 fimpara
 fimalgoritmo