1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

instrução DO WHILE

Discussão em 'Programação' iniciada por AMSA, 28 de Dezembro de 2007. (Respostas: 20; Visualizações: 1687)

  1. AMSA

    AMSA Power Member

    Boas pessoal.

    Tnh uma condição que quero impor ao utilizador. Neste caso quero q, num intervalo de 0 a 12, restringir 3 valores, o 3, 4 e 8 com um do while.

    do{ não interessa
    }while ((c>=12)||(c<=0)||(c==3||c==4));
    não interessa.

    O problema é q nessa condicao ja estou a excluir o 3 e o 4, falta-me o 8. Já tentei algumas combinações com parentesis etc.. e nada.

    Como faço para meter o 8 a ser excluido?

    Cumps.
     
  2. Código:
    while(c >= 12 || c <= 0 || c == 3 || c==4 || c == 8);
     
  3. AMSA

    AMSA Power Member

    nao funciona.. portanto, ele assume o valor q nao quero q seja assumido. Isto é, supostamente o 8 nao devia dar e dá.. meto o 8 e ele segue com o programa.. nao deveria de seguir, mas sim voltar a fazer a pergt.

    Cumps.
     
  4. oi

    Acabei de criar este codigo e funcionou tudo bem (compilei e executei no cygwin):

    #include <stdio.h>

    int main (void){
    int a;
    do{
    printf ("Insira:");
    scanf ("%d",&a);
    }while ((a>=12)||(a<=0)||(a==3)||(a==4)||(a==8));

    printf ("numero: %d",a);

    return 0;
    }


    Axo k é igual ao do Mr. Brightside, mas funcionou perfeitamente.
    ;)
     
  5. migp999

    migp999 Power Member

    opá isso é estranho pk eu esprimentei o codigo e deste aqui funciona bm...de certeza k não te está a faltar um promenorzito?
    eu fix assim:

    #include <iostream>
    using namespace std;
    int main()
    {
    int c;
    do{ cout << "teste" << endl;
    cin >> c;
    }while(c >= 12 || c <= 0 || c == 3 || c==4 || c == 8);
    }

    cumps;D
     
  6. slack_guy

    slack_guy Power Member

    Se bem entendi, o que precisas é de, num intervalo de 0 a 12, excluir os algarismos 3, 4 e 8.

    Se é isso, em Perl seria qualquer coisa assim (não deve ser muito complicado adaptares para a linguagem que estejas a usar):
    Código:
    #!/usr/bin/perl 
    
    my $res;
    do {
        print q|Gi'me a number pueeese (between 0 and 12 but not 3, 4 or 8!): |;
        chomp($res = <>);
    } while ( $res >= 0 && $res <= 12 && $res != 3 && $res != 4 && $res != 8  )
    
    Por outro lado, teria mais piada se fosse escrito assim:
    Código:
    #!/usr/bin/perl 
    
    my $res;
    do {
        print q|Gi'me a number pueeese (between 0 and 12 but not 3, 4 or 8!): |;
        chomp($res = <>);
    } while ( $res =~/^[0125679][0-2]?$/ );
    
    mas creio que expressões regulares não sejam uma hipótese.
     
  7. vicnuno

    vicnuno Power Member

    Estás a compilar em que?

    já me aconteceu estar a bater no código e o problema ser da cache do compilador, que não estava a ser limpa.
     
  8. RokeSLB

    RokeSLB Power Member

    segundo percebi deve ser isto:

    while ((c<=12 && c>=0) && (c != 8 || c != 4 || c!=3))

    ou seja, tens um intervalo do genero c pertenca a: [0, 12] \ {3, 4, 8}
     
  9. AMSA

    AMSA Power Member

    Roke o teu exemplo parece ter bastante logica :P Não descurando dos outros, mas de facto eu nao consigo por o exemplo do Mr. Brightside a funcionar.. é estranho. Tinha feito o mesmo intervalo, de 0 a 12 a excluir 2 pontos e so funcionou com parentesis, mesmo fazendo logica da maneira que tinha posto pela primeira vez.

    Do genero:

    #include <stdio.h>

    int a;

    do{
    printf ("Qual a primeira cor?");
    scanf ("%d",&a);
    }while ((a>=12 ||a<=0)||a==3||a==4);

    printf ("numero: %d",a);

    return 0;
    }

    Isto deveria funcionar.. e não funciona.. tentei por diferente != e deveria funcionar.. pela logica e não funcionava.. não aceitava todos os valores abaixo != (x).

    Tive que meter assim:

    }while ((a>=12 ||a<=0)||(a==3||a==4));

    Assim já funcionou.

    Mais daqui a nada digo-vos qual das vossas sugestões foi aceite, bem como o excerto do codigo.

    Tou a utilizar o MS Visual Studio.. não digam a vossa opinião pq já li mais de milhares de vezes aqui debates sobre compiladores =P

    Cumps.
     
  10. Baderous

    Baderous Banido

    Eu experimentei assim e funcionou.
     
  11. AMSA

    AMSA Power Member

    Rocke SLB exprimentei como disseste e nao dá..

    Aqui esta o excerto do codigo:

    do{
    printf("4 banda? ");
    scanf("%d",&d);
    }while ((c<=12 && c>=0) && (c != 8 || c != 4 || c!=3));

    Mais ideias? tou lixado com isto lol. So me falta isto bah
     
  12. slack_guy

    slack_guy Power Member

    Tentaste da forma como eu sugeri, convertendo para C:
    Código:
    do {
        something
    } while ( c >= 0 && c <= 12 && c != 3 && c != 4 && c != 8  )
    
     
  13. AMSA

    AMSA Power Member

    Ya. Por exemplo, meto o 3 e ele funciona a mesma, apresentando o resultado em branco. tou aqui a anhar.. mesmo.

    Por exemplo:

    while ((c>=12||c<=0) || (c==6));

    isto assim deveria funcionar.... PEDIR O MESMO ENQUANTO O C for MAIOR 12 ou MENOR Q 0 e C for IGUAL A 6!

    Meto o 6 e ele funciona..
     
    Última edição: 30 de Dezembro de 2007
  14. AMSA

    AMSA Power Member

    Uma coisa mto estranha é q estou a por este excerto:

    #include <stdio.h>

    int main() {
    int a, c;

    do{
    printf ("Qual a primeira cor?");
    scanf (" %d",&c);
    }while ((c>=12)||(c<=0)||(c==3||c==4));

    printf ("numero: %d",c);

    return 0;
    }

    aparte do meu programa principal e ele funciona.. e no meu programa principal ele nao funciona.. não percebo pq, é por estas e por outras q ninguem gosta desta maravilha. Tou mesmo em brasas FDS.
     
  15. Baderous

    Baderous Banido

    Isto funciona perfeitamente no meu.
    Já experimentaste com outra coisa sem ser MS Visual Studio?
     
  16. AMSA

    AMSA Power Member

    Ja ta a bombar! lol

    Problema: nao estava a alterar a variavel qd colava o excerto do programa do projecto aparte do meu principal. O q estava a utilizar para exprimentar :X

    Bem, agora numa fase de aperfeiçoamento, queria saber como posso meter o valor da % no printf.

    Qd meto por exemplo ....... tolerancia: 20 % o % não aparece no printf, fica um espaço em branco.

    Acho q há um truque mas nao tou lembrado. Será com o escape?

    EDIT: e ja agr há alguma maneira de por o +- num so? Isto é, o + por cima do - lol.
     
  17. Código:
    printf("Tolerância: %d%%", c);
     
  18. AMSA

    AMSA Power Member

    e isto no printf: ± .

    Como meto? Na tabela ASCII nao existe. So se existir uma maneira de por sublinhado e assim basta meter o +. Da para fazer isso?

    EDIT: Bem ja tive a pesquisar e pelo q vi, dar até dá, mas dá é mto trabalho e implica ate tirar excertos da net e isso nao justificaria o trabalho à apresentar.. não é da minha autoria portanto perde a piada.

    Vai ficar apenas +-.
     
    Última edição: 30 de Dezembro de 2007
  19. AMSA

    AMSA Power Member

    Bem, para finalizar, alguém sabe dizer-me como bloquiar a introdução de letras numa menu so com numeros?

    Tipo tenho um menu de 1 a 4. Faço a macacada dos intervalos q permite apenas seleccionar de 1 a 4 mas dps não se descura a selecção das letras. Por exemplo, se eu ponho uma letra qd vou para seleccionar uma letra no menu, o programa mama-se todos, começa a escrever montes de caracteres, letras, numeros, etc na janela.. mto rapido.

    Há alguma maneira de impedir isto?
     

Partilhar esta Página