Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

Algorítimo estranho

Recommended Posts

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.