terça-feira, 29 de junho de 2010

Próxima Avaliação de Programação

Atendendo algumas solicitações (inclusive as relacionadas ao jogo da seleção) e com o objetivo de dar um maior tempo para o estudo e desenvolvimento de exercícios de algoritmos, estou adiando a nossa próxima avaliação da disciplina de Programação, que seria realizada no dia 02/07, e agora está sendo marcada para o dia 09/07.

Mais Exercícios de Programação

1º - Dado um vetor de 10 posições do tipo literal faça uma algoritmo que permita que o usuário digite 10 letras, e que estas letras sejam colocadas nas respectivas posições dentro do vetor. O algoritmo no entanto não poderá permitir que seja digitada uma letra menor (ordem alfabética crescente) que a letra que foi digitadas anteriormente, ou seja a letra que será colocada na posição 2 deverá ser maior ou igual que a letra colocada na posição 1, a letra colocada na posição 3 deverá ser maior que a letra digitada para a posição 2, e assim sucessivamente até o final do vetor. A primeira letra poderá ser digitada livremente pelo usuário sendo que a regra acima somente se aplica as letras que forem colocadas da segunda posição em diante.

var
...i: inteiro
...declare letras[ 10 ]: literal
inicio
...leia letras[ 1 ]
...i <- 2
...enquanto i <= 10 faca
......leia letras[ i ]
......se letras[ i ] < letras[ i - 1 ] entao
.........escreva "Letra inválida: Menor que a anterior..."
.........i <- i - 1
......fimse
......i <- i + 1
...fimenquanto
fimalgoritmo

2º - Um número de CPF é formado por 9 dígitos, mas 2 dígitos verificadores que ficam no final. Estes dígitos verificadores são calculados de acordo com os outros 9 dígitos do CPF e servem para verificar a validade do CPF.

Apresentamos aqui uma forma simplificada para o calculo destes dígitos: Somar os produtos de cada um dos dígitos do CPF, pela sua respectiva posição, e pegar o resto da divisão inteira desta soma por 11. este resultado será o digito verificador 1. Para calcular o digito verificador 2 , repetir o processo, somente alterando a multiplicação dos dígitos pela sua posição, de forma que as posições fiquem invertidas.

Faça um algoritmo capaz de, uma vez informado os 9 dígitos de um CPF qualquer, informar os 2 dígitos verificadores deste CPF.

var
...i: inteiro
...declare dv1, dv2, cpf: inteiro
inicio
...dv1 <- 0
...dv2 <- 0
...i <- 1
...enquanto i < 10 faca
......leia cpf
......dv1 <- dv1 + i * cpf
......dv2 <- dv2 + ( 10 - i ) * cpf
......i <- i + 1
...fimenquanto
...dv1 <- dv1 mod 10
...dv2 <- dv2 mod 10
...escreva dv1
...escreva dv2
fimalgoritmo

Observações.
  • Em 2 dias as respostas serão acrescentadas a esta postagem.
  • Quaisquer dúvidas devem ser especificadas através de comentários a esta postagem, não sendo respondido nenhum questionamento via e-mail.
  • O enunciado da 2ª questão especifica resto da divisão por 11, o que daria valores de 0 a 10, e cada dígito verificador deve ser de 0 a 9. Com isso, acho que houve um erro no enunciado, devendo o valor 11 ser substituído por 10.

terça-feira, 22 de junho de 2010

Algoritmo da 2ª Avaliação - 2010/2

Um curso de Sistemas de Informação calcula o conceito dos alunos da turma de Programação da seguinte forma:
  • Insuficiente: Aqueles com Médias inferiores a 5,0;
  • Regular: Aqueles com Médias variando de 5,0 a 6,9;
  • Bom: Aqueles com Médias variando de 7,0 a 8,9;
  • Excelente: Aqueles com Médias entre 9,0 e 10,0; inclusive.
Um professor da disciplina avaliou sua turma em 3 momentos diferentes, aplicando provas com notas de 0 (zero) a 10,0. A média final do aluno é calculada através da média aritmética das 3 avaliações.

Observa-se ainda que, após 60 horas de aula, o aluno é considerado aprovado se sua frequência for maior que 75% e o seu conceito não for Insuficiente.

Faça um algoritmo que permita a digitação dos nomes, suas respectivas notas nas 3 avaliações e número de faltas; e que ao serem digitados os dados de cada aluno seja informado o conceito e a frequência do mesmo. Após a digitação dos dados do último aluno, o algoritmo deverá informar a quantidade de alunos reprovados, a quantidade de alunos com conceito Excelente, e a média geral da turma.

Como não foi especificado o número de alunos da turma, o algoritmo deverá solicitar dados enquanto o nome do aluno digitado seja diferente de "FIM".
__________________________________

Uma solução possível usando codificação para Visualg. Para efeito de avaliação serão considerados os seguintes elementos:
  • Laço de controle de leituras e processamento.
  • Leitura de dados dos alunos.
  • Calculo das médias e frequência.
  • Calculo dos conceitos, número de alunos reprovados e com conceito excelente.
  • Controle da saída dos dados pós leituras.
var
...nome: literal
...nota1, nota2, nota3: real
...faltas, nrAlunos, nrReprovados, nrExcelentes: inteiro
...media, frequencia, mediaGeral: real
inicio
...mediaGeral <- 0
...nrAlunos <- 0
...nrReprovados <- 0
...nrExcelentes <- 0
...leia nome
...enquanto nome <> "fim" faca
......leia nota1
......leia nota2
......leia nota3
......leia faltas
......media <- ( nota1 + nota2 + nota3 ) / 3
......frequencia <- ( 60 - faltas ) / 60 * 100
......mediaGeral <- mediaGeral + media
......nrAlunos <- nrAlunos + 1
......se media < 5 entao
.........escreva "Reprovado"
......nrReprovados <- nrReprovados + 1
......senao
.........se frequencia > 75 entao
............se media < 7 entao
...............escreva "Regular"
............senao
...............se media < 9 entao
..................escreva "Bom"
...............senao
..................escreva "Excelente"
...............fimse
............fimse
.........senao
............escreva "Reprovado por Falta"
.........fimse
.........se media >= 9 entao
............nrExcelentes <- nrExcelentes + 1
.........fimse
......fimse
......leia nome
...fimenquanto
...se nrAlunos <> 0 entao
......escreva "Media Geral: ", mediaGeral / nrAlunos
......escreva "Nr de Reprovados: ", nrReprovados
......escreva "Nr de Excelentes: ", nrExcelentes
...senao
......escreva "Inserir Pelo Menos os Dados de 1 Aluno"
...fimse
fimalgoritmo

Exercícios de Programação

Com o objetivo de melhor preparar os alunos para a próxima avaliação, são listados os exercícios a seguir.
  • Em 2 dias as respostas serão acrescentadas a esta postagem e novos exercícios serão postados.
  • Quaisquer dúvidas devem ser especificadas através de comentários a esta postagem, não sendo respondido nenhum questionamento via e-mail.
1º - Desenvolver um algoritmo capaz de calcular a media aritmética simples de uma série de números, sendo que:
  • O usuário deve informar a quantidade de números da série.
  • Se a quantidade for zero ou negativa o algoritmo não deve aceita-la.
  • O usuário deve informar um por um todos os números da série.
  • O algoritmo deve mostrar como resultado a media aritmética simples calculada através da formula:
MEDIA = ( X + X1 + X2 + ... XN ) / N

var
...soma, n, v, qtde: inteiro
...media: real
inicio
...n <- 0
...soma <- 0
...leia qtde
...se qtde > 0 entao
......enquanto n < qtde
.........leia( v )
.........soma <- soma + v
.........n <- n + 1
......fimenquanto
......media <- soma / n
......escreva "Média = ", media
...senao
......escreva "Quantidade Inválida"
...fimse
fimalgoritmo

2º - Dado um vetor de 10 posições do tipo inteiro, que deverá ser preenchido pelo usuário, faça um algoritmo capaz de percorrer todo o vetor dobrando todos os numero que forem ímpares e dividindo pela metade todos os numero que forem pares colocando o resultado das operações nas mesmas posições dentro do vetor.

var
...i: inteiro
...declare t, vet[ 10 ]: inteiro
inicio
...para i de 1 ate 10 faca
......leia vet[ i ]
...fimpara
...para i de 1 ate 10 faca
......t <- vet[ i ]
......se t mod 2 = 0 entao
.........vet[ i ] <- vet[ i ] / 2
......senao
.........vet[ i ] <- vet[ i ] * 2
......fimse
...fimpara
fimalgoritmo

quinta-feira, 17 de junho de 2010

Exercício de Programação - Resposta

Ao tentar resolver o exercício proposto observei que o enunciado parecia um pouco confuso quanto ao cálculo do salário, podendo levar a interpretações diferentes para o problema em questão. Dito isto, o algoritmo a seguir tem a minha interpretação quanto ao especificado.

Para o melhor entendimento da solução, esta será apresentada através das fases do seu desenvolvimento. Aconselho que usem esta metodologia na prova.

Fase 1 - Laço geral de controle e leitura de dados dos funcionários.

var
...nrFunc, qtde: inteiro
...nome: literal
inicio
...nrFunc <- 1
...enquanto nrFunc <= 10 faca
......leia "Nome de Funcionário: ", nome
......leia "Quantidade de peças no mês", qtde
......nrFunc <- nrFunc + 1
...fimenquanto
fimalgoritmo

Fase 2 - Classificação e contagem dos integrantes for classe.

var
...nrFunc, qtde: inteiro
...nome: literal
...nrClasA, nrClasB, nrClasC: inteiro
inicio
...nrFunc <- 1
...enquanto nrFunc <= 10 faca
......leia "Nome de Funcionário: ", nome
......leia "Quantidade de peças no mês", qtde
......se qtde <= 100 entao
.........nrClasA <- nrClasA + 1
......senao
.........se qtde <= 200 entao
............nrClasB <- nrClasB + 1
.........senao
............nrClasC <- nrClasC + 1
.........fimse
......fimse
......nrFunc <- nrFunc + 1
...fimenquanto
fimalgoritmo

Fase 3 - Calculo da produção (fase 3.1) e do salário total (fase 3.2).

var
...nrFunc, qtde: inteiro
...nome: literal
...nrClasA, nrClasB, nrClasC: inteiro
...producao: inteiro
...salario, salTot: real
inicio
...producao <- 0
...nrFunc <- 1
...enquanto nrFunc <= 10 faca
......leia "Nome de Funcionário: ", nome
......leia "Quantidade de peças no mês", qtde
......producao <- producao + qtde
......salario <- 450
......se qtde <= 100 entao
.........nrClasA <- nrClasA + 1
......senao
.........se qtde <= 200 entao
............nrClasB <- nrClasB + 1
............salario <- salario + 0.10 * ( qtde - 100 )
.........senao
............nrClasC <- nrClasC + 1
............salario <- salario + 0.15 * 100
............salario <- salario + 0.20 * ( qtde - 200 )
.........fimse
......fimse
......salTot <- salTot + salario
......nrFunc <- nrFunc + 1
...fimenquanto
...escreva "Funcionários Classe A: ", nrClasA
...escreva "Funcionários Classe B: ", nrClasB
...escreva "Funcionários Classe C: ", nrClasC
...escreva "Produção Total: ", producao, " peças."
...escreva "Salário Total: R$", salTot
fimalgoritmo

sábado, 12 de junho de 2010

Exercício de Programação

Uma empresa de autopeças classifica os seus funcionários da seguinte forma:
  • Funcionário classe A: É aquele que produziu até 100 peças por mês.
  • Funcionário classe B: é Aquele que produziu de 101 a 200 Peças por mês.
  • Funcionário classe C: é aquele que produziu mais de 201 peças em um mês.
Sendo ainda que o salário dos funcionários é calculado da seguinte forma:
  • Classe A : Um salário mínimo (R$450,00) por mês.
  • Classe B : Um salário mínimo mais 10 centavos por peça produzida acima de 101 peças.
  • Classe C : um salário mínimo mais 15 centavos por peça produzida acima de 101 peças e 20 centavos por peça produzida acima de 201 peças.
Faca um algoritmo que permita a digitação de 10 nomes de funcionários, e as suas respectivas quantidades de pecas produzidas no mês, e que após o ultimo funcionário tenha sido digitado, o algoritmo deverá informar a quantidade de funcionários de cada classe, a produção total de todos os funcionários, e o total de salário pago pela empresa para todos os funcionários.