Introduza o termo a pesquisar e clique Enter.

Só porque me anda a irritar

Nov 07 18

Escrito por Luis Nabais @ 18/11/07 20:11 | 8 Comentários »

…ver os ciclos for escritos com != pelo meu professor de IP fica aqui a forma mais simples de causar um erro a quem os usa assim:

for (int i = 0; i != valor; i++) {
   i = i + 2;
}

Agora o professor que resolva lá esta! (Se alguma vez ler isto, o que eu duvido)

PS: Sim eu sei que isto é código que nenhum programador alguma vez escreveria mas aposto que alunos de 1º ano o fazem de tempos a tempos.

pub:

8 Comentários

  1. Tiago Boldt Sousa

    Faz todo o sentido usar != nos for’s. Porquê? Funciona em qualquer situação(lógica, ao contrário da descrita). Em situações gerais, como já deves ter visto, o != funciona perfeitamente, mas, se estiveres por exemplo a percorrer um vector de objectos de uma classe por ti definida, dizer que o primeiro iterador é inferior ao segundo não é correcto. Aqui está um exemplo de como fazer correctamente um ciclo deste tipo: for(vector::iterator begin = meuVector.begin(), end = meuVector.end(); begin != end; begin++)

  2. Dextro

    Que raio de linguagem é essa? vector::iterador? wtf? :roll:

    Anyway eu discordo e continuo a achar que os < = e >= são melhores para utilizar em "for"s já que previnem contra situações semelhantes á que disse acima em que a variavel de iteração pode ser alterada dentro do proprio ciclo (imaginemos por exemplo um ciclo onde se ordenam os elementos de um vector por um dado valor. Pode por vezes ser util saltar valores dentro do vector um como eu faço previno-me contra possiveis falhas no meu algoritmo).

    Outra questão é se eu quiser começar num valor indicado pelo utilizador (por exemplo a partir do valor y de uma lista), caso o valor seja acima do tamanho da lista o ciclo não chega sequer a executar-se logo poupa-me o trabalho de me prevenir contra um erro de "out of bounds" (não que seja bom ignorar esses erros)...

    Eu continuo a achar que em ambiente de aprendisagem pode dar problemas ensinar os alunos a usar o !=...

  3. Tiago Boldt Sousa

    hum.. tags html deram-me cabe da coisa.. estava a falar de c++, dentro de um menor e maior, tinha CLASSE. Ou seja, se formos percorrer um qualquer vector (do STL) com objectos de uma determinada classe, temos que usar iteradores, que funcionam com o !=.

  4. Gustavo Felisberto

    Devem ser usados os ciclos certos para cada coisa. O teu prof deveria saber isso. O ciclo for é para ser usado quando “se sabe” o número de vezes que algo é para fazer. Quando se não sabe é para usar o while.
    i=0
    while(i != valor){
    domething_with(i)
    }

    Ainda em relação ao for Dextro: Não sei como é em C++ mas em Linguagens decentes:
    Iterator it = myCollection.iterator()
    while (it.hasnext()){
    Object obj = it.next()
    }

  5. Dextro

    Não sei o que raios é uma linguagem “decente” mas porque raios se vai criar uma classe só para fazer interacção? É preciso ser preguiçosos 😆

  6. Ninja

    Peço desculpas pela intromissão, mas é perfeitamente possível usar o operador lógico ! (negação) em um laço for. O segundo passo do laço é justamente uma comparação e deve ter um valor lógico estabelecido. Um caso extremamente útil de se usar o != em um for é quando fores percorrer uma sring.

    Exemplificando:
    for(i = 0; string[i] != ”; i++)

    Como o caracter ” representa o fim da string esse laço a percorre até o final.

  7. Gustavo Felisberto

    Ninja:

    int i = 0
    while (string[i] != ”){
    i++;

    }

    Ou usando o for

    for (i = 0; i
    A questão é que controlas o final. Como eu já disse o for indica um numero limitado de execuções do ciclo, e deves controlar que ele vai sair na declaração. Caso contrário tens um for que pode ser um while:

    for ( i = 0; i > -1; i++) {
    print "daqui eu não saio e ninguem me tira"
    }