Jump to content
camisbales

Exercício com funções, arrays e loops

Recommended Posts

Olá,

preciso resolver o seguinte exercício:

Uma professora de programação, cansada de que os estudantes cheguem tarde, decidiu que vai cancelar a aula se há poucos presentes.

Ela representa a entrada dos estudantes como um array de tempos de chegada tarde, em minutos. Por exemplo, se um estudante chegou 10 minutos atrasado, outro 5 minutos antes da hora, outro com 3 minutos de atraso, e outro pontual, poderá representar assim:

var alunosDaSegunda = [10, -5, 3, 0];

Com essa informação e a quantidade mínima de estudantes para que suceda o curso, a professora quer saber se a aula acontecerá. Por exemplo, supondo que a quantidade mínima de estudantes para que a aula aconteça é de 2 alunos, então o curso da segunda-feira se realizará, porque houve um estudante que foi pontual e um estudante que chegou cedo.

 acontece(alunosDaSegunda, 2)
true

Mas se a quantidade mínima fosse 3, a aula não aconteceria:

 acontece(alunosDaSegunda, 3)
false

Escreva as seguintes funções: 1. acontece, que diz se a aula sucederá de acordo com o array dos estudantes que entraram. 2. aberturas, que utiliza um array com os arrays dos estudantes que entraram nos outros dias, e a quantidade mínima de estudantes, e diga quais os dias em que as aulas aconteceram e quais não. Por exemplo:

aberturas([alunosDaSegunda, alunosDaTerça, alunosDaQuarta], 2)
[true, false, false]

A seguir o código que eu escrevi e os erros apresentados:

function acontece (alunosDia, quorum){
    let resultado = [];
    for (let i = 0; i < alunosDia.length; i++){
    if (alunosDia <= 0){
    resultado.push (alunosDia);}
    if (resultado.length >= quorum) {
    return true;}
    }
}
    
function aberturas (alunosDia, quorum){
    let resultadoArray = [];
    for (let i = 0; i < alunosDia.length; i++){
    resultadoArray.push(acontece(alunosDia, quorum));
    }
}

ERROS

acontece([10, -5, 3, 0], 4) - deveria retornar false;
 acontece([10, -5, 3, 0], 3 - deveria retornar false;

 aberturas([[0, 0, 3, 0], [1, 2, 4, 5], [0, 0, -1]], 3) - undefined deepEqual [ true, false, true ];
 aberturas([[0, 0, -3, 0], [1, 2, 4, 5], [0, 0, -1]], 4) - undefined deepEqual [ true, false, false ].
 

Share this post


Link to post
Share on other sites

O erro era que você não estava acessando index do array e tb não estava retornando o resultado por isso estava retornando undefined.

 

function acontece (alunosDia, quorum){
  let resultado = [];
  for (let i = 0; i < alunosDia.length; i++){
    if (alunosDia[i] <= 0){
      resultado.push (alunosDia[i]);
    }
  }
  
  return resultado.length >= quorum;
}
    
function aberturas (alunosDia, quorum){
  let resultadoArray = [];
  for (let i = 0; i < alunosDia.length; i++){
    resultadoArray.push(acontece(alunosDia[i], quorum));
  }
  
  return resultadoArray;
}

console.log(acontece([10, -5, 3, 0], 4)); // - deveria retornar false;
console.log(acontece([10, -5, 3, 0], 3)); // - deveria retornar false;
console.log(aberturas([[0, 0, 3, 0], [1, 2, 4, 5], [0, 0, -1]], 3)); //  - undefined deepEqual [ true, false, true ];
console.log(aberturas([[0, 0, -3, 0], [1, 2, 4, 5], [0, 0, -1]], 4));

JSBin: https://jsbin.com/junejiseda/edit?html,js,console

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By mateus.andriollo
      Boa tarde,
      Tenho alguns campos numéricos q ao fazer uma select gostaria q retornasse uma legenda
       
      exemplo:
      Status: 0=Inativo / 1=Ativo Condição: 1=Funcionando / 2=Em manutenção / 3=Manutenção Interna   
      Seria algo assim, tenho varias tabelas com estes campos... mas tenho q ficar usando replace.
      Existe uma forma de criar uma função para isso? Nem q na função eu tenha que setar nome do campo, ficando assim:
      Legenda('Status',cadastro.status) 
    • By adamo marinho
      Estou tentando achar numeros iguais dentro de arrays criadas usando a função array_intersect, porem para facilitar o meu projeto, precisaria incluir variaveis dentro das arrays, alguem pode ajudar por favor?

      <?php $v1_1 = 1; $v1_2 = 2; $v1_3 = 3; $v1_4 = 4; $v1_5 = 5; $v1 = array($v1_1, $v1_2, $v1_3, $v1_4, $v1_5); $v2_1 = 6; $v2_2 = 7; $v2_3 = 8; $v2_4 = 9; $v2_5 = 10; $v2 = array($v2_1, $v2_2, $v2_3, $v2_4, $v2_5); $v3_1 = 10; $v3_2 = 9; $v3_3 = 8; $v3_4 = 7; $v3_5 = 6; $v3 = array($v3_1, $v3_2, $v3_3, $v3_4, $v3_5); $v4_1 = 5; $v4_2 = 4; $v4_3 = 3; $v4_4 = 2; $v4_5 = 1; $v4 = array($v4_1, $v4_2, $v4_3, $v4_4, $v4_5); $resultado = array_intersect($v1, $v2, $v3, $v4 ); var_dump($resultado); ?>
    • By manolegal
      Bom dia
      Tenho um formulário onde o usuário seleciona vários registros para gravar no BD. Os dados estão sendo gravados corretamente (vários registros ao mesmo tempo).
      O problema é o seguinte: tenho um dado de TOTAL DE PEDIDOS, um dado de NUMERAÇÃO INICIAL e um dado de NUMERAÇÃO FINAL.
      As numerações inicial e final são definidas de acordo com o TOTAL DE PEDIDOS. Exemplo: TOTAL DE PEDIDOS -> 5, INICIAL -> 1, FINAL -> 5.
      O detalhe é que essa numeração (Inicial e Final) deve ser sequencial.
      Supondo que já exista este dado no BD (TOTAL DE PEDIDOS -> 5, INICIAL -> 1, FINAL -> 5), e supondo que serão inseridos 02 novos registros na tabela, sendo ambos com 10 PEDIDOS. Neste caso, no primeiro registro inserido, a NUMERAÇÃO INICIAL deve ser 6 e a NUMERAÇÃO FINAL deve ser 15; e o segundo registro inserido deve ser NUMERAÇÃO INICIAL igual a 16 e NUMERAÇÃO FINAL igual a 25. Problema que para ambos os registros, está calculando o valor INICIAL como 6 e valor FINAL como 15.
      Como faço para realizar o cálculo corretamente, para que a cada registro seja calculado o valor correto da NUMERAÇÃO INICIAL? Para definição deste valor inicial, faço select no BD para pegar a maior numeração existente, porém o sistema pega este valor e atribui o primeiro valor encontrado para todos os registros, sendo que preciso que a cada lançamento este valor seja atualizado para cálculo da numeração do registro seguinte.
       
    • By Luiz Henrique
      Olá pessoas,
       
      Como faço para criar um array multidimensional?
      É uma busca e os dados recebo de um arquivo json armazeno em um array usando um foreach e o strpos para verificar se a busca existe, então fiz isso:
       
       
      //$data é o arquivo json $array = array(); foreach($data as $key => $value){  if(strpos(...)){ $array['id'][] = $value->id; $array['nome'][] = $value->nome; $array['valor'][] = $value->valor; } }  Porém isso me retorna 
       
      id' => array (size=3) 0 => int 1 1 => int 2 2 => int 3 'nome' => array (size=3) 0 => string 'teste1' 1 => string 'teste2' 2 => string 'teste3' 'valor' => array (size=3) 0 => float 28 1 => float 30 2 => float 35  Mas preciso dele neste formato
        
      array (size=3) 0 => public 'id' => int 1 public 'nome' => string 'teste1' public 'valor' => float 28 1 => public 'id' => int 2 public 'nome' => string 'teste2' public 'valor' => float 30 2 => public 'id' => int 3 public 'nome' => string 'teste3' public 'valor' => float 35 E não consigo fazer de forma alguma !
       
       
    • By Luiz Henrique
      Olá pessoas,
       
      Tenho uma classe e dentro dela várias chamadas para métodos de acordo com a necessidade em outra classe (para obter dados DB), como são muitas e vou duplicar os arquivos, para ganhar tempo queria colocar o nome da classe em uma variável porém não funciona.
       
      use Class1; class Class2 { public $className = 'Class1'; ... $dados = $this->className::function(); // não funciona } Era para gerar isso:
      $dados = Class1::function();
      Se eu der um echo $this->$className, ele me retorno o nome da Class1 porém para executar um método dentro da Class1 não vai, diz que a classe Class1 não existe!
      Tem alguma forma de funcionar isso?
       
      Obrigado.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.