Carcleo 4 Denunciar post Postado Maio 2, 2012 Preciso da ajuda de vocês para descobrir a lógica de um algorítimo. Pode ser em portugol mesmo. A ideia é: Em uma escola os professores podem atribuir notas de 0.0 a 10.0 aos seus alunos com intervalos de 1.0 ponto, ou seja, são notas válidas: 0.0, 1.0, …, 9.0 e 10.0. O professor de computação resolveu pedir a determinado aluno que escrevesse um algoritmo que imprimisse a frequência das notas em cada uma de suas turmas. Pois bem, esse aluno é você e a sua tarefa é escrever este algoritmo. Formato dos dados de entrada: A entrada é composta dos dados de cada uma das turmas do professor. A primeira linha de uma turma contém um inteiro N que informa o número de alunos na turma. As próximas N linhas de entrada informam as notas dos alunos dessa turma. O algoritmo deve parar de ler os dados das várias turmas quando N = 0. Considere que não serão fornecidas notas inválidas. Por exemplo, a nota 3.8 nunca seria fornecida. Observação: O formato dos dados de entrada é necessariamente o formato descrito. Nenhuma outra variação é permitida ou necessária. Exemplo de entrada: 5 1.0 8.0 2.0 8.0 10.0 4 6.0 7.0 7.0 6.0 0 Formato dos dados de saída: A saída é composta por várias linhas contendo as seguintes informações: primeiro o número de ordem da turma na entrada de dados, por exemplo, Turma 1. Em seguida, linhas com uma nota e a frequência desta nota na turma. Caso uma nota tenha frequência igual a zero não é necessário imprimi-la. Procure seguir este formato. Exemplo de saída: Neste exemplo, a saída foi construída a partir dos dados fornecidos no exemplo de entrada de dados. Turma 1: 1.0: 1 2.0: 1 8.0: 2 10.0: 1 Turma 2: 6.0: 2 7.0: 2 Observações: Na sua solução, a frequência de notas de uma turma pode aparecer logo em seguida à entrada dos dados daquela turma. Assim, se usado este padrão, na tela do usuário os dados de saída de cada turma apareceriam logo em seguida aos dados de entrada. Na sua solução, tenho que considerar a existência da função paraInt() descrita a seguir. O uso dessa função não é obrigatório. função paraInt(entradas: numReal) Essa função retorna a parte inteira do número real passado como parâmetro. Exemplo: teste ← 9.9 imprima paraInt(teste) // imprimiria 9 Bom, eu tentei e cheguei ao resultado abaixo. Mas gostaria de saber se tem como melhorar ou se errei em alguma coisa: Inicio acabou <- verdadeiro enquanto acabou faça imprima 'Quanto alunos na turma?' leia alunos_turma se alunos_turma = 0 então acabou <- falso senão para i<-1 até alunos_turma faça imprima 'Digite a nota:' leia Nota notas_turma[alunos_turma][i][Nota] proximo i fim se fim enquanto fim Grato a quem puder ajudar. Carlos Rocha Compartilhar este post Link para o post Compartilhar em outros sites
Mr. Scooby 0 Denunciar post Postado Maio 3, 2012 Preciso da ajuda de vocês para descobrir a lógica de um algorítimo. Pode ser em portugol mesmo. A ideia é: Em uma escola os professores podem atribuir notas de 0.0 a 10.0 aos seus alunos com intervalos de 1.0 ponto, ou seja, são notas válidas: 0.0, 1.0, …, 9.0 e 10.0. O professor de computação resolveu pedir a determinado aluno que escrevesse um algoritmo que imprimisse a frequência das notas em cada uma de suas turmas. Pois bem, esse aluno é você e a sua tarefa é escrever este algoritmo. Formato dos dados de entrada: A entrada é composta dos dados de cada uma das turmas do professor. A primeira linha de uma turma contém um inteiro N que informa o número de alunos na turma. As próximas N linhas de entrada informam as notas dos alunos dessa turma. O algoritmo deve parar de ler os dados das várias turmas quando N = 0. Considere que não serão fornecidas notas inválidas. Por exemplo, a nota 3.8 nunca seria fornecida. Observação: O formato dos dados de entrada é necessariamente o formato descrito. Nenhuma outra variação é permitida ou necessária. Exemplo de entrada: 5 1.0 8.0 2.0 8.0 10.0 4 6.0 7.0 7.0 6.0 0 Formato dos dados de saída: A saída é composta por várias linhas contendo as seguintes informações: primeiro o número de ordem da turma na entrada de dados, por exemplo, Turma 1. Em seguida, linhas com uma nota e a frequência desta nota na turma. Caso uma nota tenha frequência igual a zero não é necessário imprimi-la. Procure seguir este formato. Exemplo de saída: Neste exemplo, a saída foi construída a partir dos dados fornecidos no exemplo de entrada de dados. Turma 1: 1.0: 1 2.0: 1 8.0: 2 10.0: 1 Turma 2: 6.0: 2 7.0: 2 Observações: Na sua solução, a frequência de notas de uma turma pode aparecer logo em seguida à entrada dos dados daquela turma. Assim, se usado este padrão, na tela do usuário os dados de saída de cada turma apareceriam logo em seguida aos dados de entrada. Na sua solução, tenho que considerar a existência da função paraInt() descrita a seguir. O uso dessa função não é obrigatório. função paraInt(entradas: numReal) Essa função retorna a parte inteira do número real passado como parâmetro. Exemplo: teste ← 9.9 imprima paraInt(teste) // imprimiria 9 Bom, eu tentei e cheguei ao resultado abaixo. Mas gostaria de saber se tem como melhorar ou se errei em alguma coisa: Inicio acabou <- verdadeiro enquanto acabou faça imprima 'Quanto alunos na turma?' leia alunos_turma se alunos_turma = 0 então acabou <- falso senão para i<-1 até alunos_turma faça imprima 'Digite a nota:' leia Nota notas_turma[alunos_turma][i][Nota] proximo i fim se fim enquanto fim Grato a quem puder ajudar. Carlos Rocha Sou novo no iMasters, e coincidentemente, estou com a mesma dúvida do Carcleo, para resolver a mesma questão, caso alguém possa nos ajudar, agradeço a colaboração. Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Maio 3, 2012 Onde estão as variáveis? Deixe me ver se entendi, ele pede o numero de alunos na turma, e depois pede pra colocar a nota de cada aluno daquela turma certo? E quando o numero de alunos for 0 ele para o programa e exibe todas as notas de todas as turmas. Se este for o caso você precisa de um vetor que armazene todas as turmas e outro que armazene todas as notas, o problema é que você terá de dividir estes vetores para saber qual vetor é responsável por qual nota de qual turma. Se ele tiver que exibir assim que o usuário termina a contagem de alunos o programa é facil porque ele pode ser executado em apenas 2 vetores, sendo um para turma e um para notas. Sendo que notas recebe um valor do tipo inteiro "int" ou "integer" como preferir, e o vetor do tipo turma tambem, assim como o numero de alunos por turma. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Maio 7, 2012 Na verdade, esse é um problema típico de inicio de faculdade. A Faculdade elegeu uma pseudo linguagem de programação chamada PETEQS parecida com o PORTUGOL. Então, o que vale é a logica e não o codigo em si. Mas, o que o professor quer é que, a medida que os dados vão sendo processados, tambem vão sendo impressos e não depois que els forem todos digitados. A saida seria alguma coisa parecida com isso: Exemplo de entrada: 5 (primeira turma tem cinco alunos com notas) 1.0 (primeira nota da turma\) 8.0 2.0 8.0 (aqui a nota oito de repete para outro aluno) 10.0 4(segundaa turma tem quatro alunos com notas) 6.0 7.0 7.0 6.0 0(Aqui o programa para de rodar) Observe que notas se repetem. Mas elas não podem ser repetidas. Então a saida deve ser assim: Turma 1: 1.0: 1 2.0: 1 8.0: 2 10.0: 1 Turma 2: 6.0: 2 7.0: 2 Observe que, na saida, não informo o numero de alunos da turma. Mas sim, o posicionamento da entrada: Turma 1, Turma 2 ......; Eu tentei fazer assim: função paraInt(entradas: numReal) Inicio acabou <- falso enquanto não acabou faça imprima 'Quanto alunos na turma?' leia alunos_turma imprima alunos_turma se alunos_turma = 0 então acabou <- verdadeiro senão para i<-1 até alunos_turma faça imprima 'Digite a nota:' leia Nota Se Nota já existe então faça imprima paraInt(Nota) <- Nota+1 senão imprima paraInt(Nota) ‘ : 1’ fim se proximo i fim se fim enquanto fim Mas acho que errei na logica na hora de filtrar se uma determinada nota foi repetida entre os alunos de uma turma. Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Maio 18, 2012 Amigos antes de tudo, eu durante a faculdade entrava nesse site, que tem diversos problemas porém podendo ser resolvidos em outras linguagens se lhe interessar: http://br.spoj.pl/ e o fórum de discussão deles bem legal também: http://br.spoj.pl/forum/ Bom inicialmente conseguirmos ver que você irá utilizar 2 loops, um para ler as turmas outro para ler as notas.. algo assim: inteiro alunos, notas, i leia (alunos); Enquanto alunos <> 0 faça para i de 1 até alunos faça Leia (notas); Fim_para leia (turmas); Fim_enquanto Claro como vi no seu algoritmo realmente utilizar vetor seria uma boa, tente dar uma melhorada nele com as informações que eu te passei que aos poucos você completa ele. []s Compartilhar este post Link para o post Compartilhar em outros sites