sexta-feira, 26 de maio de 2017

CURSO DE LINGUAGEM BASIC

Apostila de QBasic

Apostila Qbasic


Índice


1. Iniciando o Qbasic

    O Qbasic é uma linguagem universal simbólica de instruções codificadas de fácil aprendizado para iniciantes de programação, isso por que o Qbasic exige uma mentalidade lógica do programador, pois o programador trabalha com muita lógica.
    Os comandos da linguagem Qbasic são aproximados do inglês, mas, mesmo assim, de fácil aprendizado e mais fácil ainda de se trabalhar.

1.1 Variáveis

    As variáveis possuem uma grande importância fundamental dentro de qualquer linguagem de programação. Elas armazenam os dados que vão para a memória do computador, e sempre referimos a elas, esses dados retornam da memória. E quando estão na memória, podemos fazer cálculos e executar determinadas funções.
    Para uma variável receber um conteúdo qualquer, é necessário anexar esse conteúdo ao nome que daremos para a variável. Exemplo:
Aluno = "José da Silva Xavier"
    Note que usamos o sinal de igual para que o nome do aluno seja inserido na variável Aluno, que está na memória do computador e, sempre que nos referimos a Aluno, seria como se contesse "José da Silva Xavier".
    Para darmos nomes as variáveis, temos que seguir algumas regras simples:
  1. Sempre iniciar com letras (A-Z,a-z). Não use números ou símbolos para iniciar o nome de uma variável.
  2. Pode-se usar até 40 caracteres para compor o nome da variável, então vamos colocar nomes bem claros, para que lendo o seu nome sabemos para que ela serve. Por Exemplo: NomeDeAlunoAplicado. Parece grande, mas só de ler já sabemos que é uma variável que irá armazenar o nome de uma aluno aplicado.
  3. Na composição do nome não se pode usar:
  • Espaço em branco;
  • Sinal de hífen;
  • Símbolos como @^*()'" ;
  • Acentos;
  • Palavras acentuadas.
  1. Pode-se usar letras do alfabeto, números e o sublinhado.
  2. A última letra pode-se usar símbolos de tipo de variável :$ ! % # &
  3. Cuidado para não usar nomes reservados para a linguagem, como: If, End, System, etc.

1.2 Tipos de Variáveis

NOME TIPO SIMB. BYTES MIN. MAX.
STRING Cadeia de caracteres (texto) $ Tam. do texto 0 32.767
INTEGER Número Inteiro % 2 -32.768 32.767
LONG Número Inteiro Longo & 4 -2.147.483.648 2.147.483.647
SINGLE Número de simples precisão (Real) ! 4 3,402823E+38 2,802597E-45
-2,802597E-45 -3,402823E+38
DOUBLE Número de precisão dupla (Real) # 8 1,79769313486231E+308 4,940656458412465E-324
-4,940656458412465E-324 -1,79769313486231E+308

1.3 Declarando Variáveis

    O comando DIM é responsável pela declaração de variáveis. Ele reserva um espaço na memória para a variável. Por exemplo:
DIM Numero AS INTEGER
            ou
DIM Numero%
Obs.: Apesar que o QBasic não seja obrigatório a declaração de variáveis, É MUITO IMPORTANTE DECLARA-LAS.
    Pode-se também usar matrizes, onde podemos armazenar vários dados em uma única variável. O que diferencia uma da outra é que esta possui vários níveis dentro de si, e em cada nível podemos armazenar dados. Veja um exemplo de uma declaração e iniciação:
DIM NomePersonagemGame(3) AS STRING
NomePersonagemGame(0) = "Aeris"
NomePersonagemGame(1) = "Aya Brea"
NomePersonagemGame(2) = "Sonic"
    Não é preciso dizer que todos os elementos precisam ser do mesmo tipo do declarado.
    Para acessar um determinado conteúdo, temos que especificar o número que fica junto da matriz, que é denominada de índice, e são eles que localizam os dados da matriz. Exemplo: PRINT NomePersonagemGame(1).
    Existem Matrizes Unidimensionais (ou Vetor) e Matrizes Multidimensionais, que é uma matriz dentro da outra (por Ex.: Texto$(2,10))

1.4 Primeiros comandos

  • PRINT
    O primeiro comando é o PRINT, com ele é possível colocar uma mensagem na tela ou mostrar um conteúdo de uma variável.
Exemplo:
PRINT "Meu primeiro programa em Qbasic"
Meu primeiro programa em Qbasic





















Pressione qualquer tecla para continuar
    A mensagem tem que estar entre aspas.
    Aqui outro exemplo usando para mostrar o conteúdo de uma variável:
DIM Mensagem AS STRING
DIM Numero AS INTEGER
Mensagem="O valor do Número é: "
Numero=4+4
PRINT Mensagem
PRINT Numero

Meu primeiro programa em Qbasic
O valor do Número é:
 8



















Pressione qualquer tecla para continuar
  • LOCATE
  •     Este comando imprime a mensagem em um lugar determinado na tela. Por exemplo:
    LOCATE 5,32: PRINT "Bom Dia"
    Meu primeiro programa em Qbasic
    O valor do Número é:
     8
    
                                     Bom Dia
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    Pressione qualquer tecla para continuar
        O primeiro número é o de linhas e o segundo de colunas. Os dois pontos (:) serve para usar dois comandos na mesma linha. O máximo de linhas por colunas que pode se usar neste tipo de tela é de 23 por 79. Claro que pode mudar isso, mas não colocarei aqui, pois isto é parte mais avançada, pois esta apostila é para iniciantes.
    • CLS
        Este comando limpa a tela do computador tirando todo o conteúdo escrito nela. Não se preocupe os dados como o valor das variáveis estão intactos, isto é, não são apagados da memória.
    • INPUT
        Este comando interrompe a execução do processamento e faz aparecer um cursor esperando você digitar algo. É obrigatório que se tenha uma variável para usar este comando.
    Sintaxe:
    INPUT [;] ["aviso"{; | ,}] lista-variável
    Aviso - Um texto opcional que é exibido antes do usuário digitar os dados. Um ponto-e-vírgula após o aviso anexa um ponto de interrogação ao texto.
    lista-variável - Uma ou mais variáveis, separadas por vírgulas, onde são armazenados dados inseridos a partir do teclado.
    * obs.: os comandos entre [] são opcionais.
    Exemplo:
    CLS
    DIM A AS INTEGER
    DIM Nome AS STRING * 10
    INPUT "Digite um Número:", A
    INPUT "Qual é o Seu Nome "; Nome
    PRINT A
    PRINT Nome

    Digite um Número:10
    Qual é o Seu Nome: _
    
    
     
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
     
    • SCREEN
        Define o modo de tela e outras características da tela. Pode-se com isso, dependendo do modo de tela, fazer gráficos e figuras.
    Sintaxe:
    SCREEN modo%
    modo% - Define o modo de tela.
    A seguinte tabela apresenta um resumo dos modos de tela:
    Adaptadores MDPA, CGA, Hercules, Olivetti, EGA, VGA ou MCGA
    SCREEN 0: Somente modo texto
    • Formato de texto 40 x 25, 40 x 43, 40 x 50, 80 x 25, 80 x 43 ou 80 x 50, caixa de caractere 8 x 8 (8 x 14, 9 x 14 ou 9 x 16 com EGA ou VGA)
    • 16 cores designadas a qualquer um dos 16 atributos (com CGA ou EGA)
    • 64 cores designadas a qualquer um dos 16 atributos (com EGA ou VGA)
    • Dependendo da resolução do texto e do adaptador, 8 páginas de memória de vídeo (0-7), 4 páginas (0-3), 2 páginas (0-1) ou 1 página (0)
    Adaptadores CGA, EGA, VGA ou MCGA
    SCREEN 1: gráficos de 320 x 200
    • Formato de texto 40 x 25, caixa de caractere 8 x 8
    • 16 cores de segundo plano e um de dois conjuntos de 3 cores de segundo plano designados com a instrução COLOR com CGA
    • 16 cores designadas a 4 atributos com EGA ou VGA
    • 1 página de memória de vídeo (0)
    SCREEN 2: gráficos de 640 x 200
    • Formato de texto 80 x 25, caixa de caractere 8 x 8
    • 16 cores designadas a 2 atributos com EGA ou VGA
    • 1 página de memória de vídeo (0)
    Adaptadores Hercules, Olivetti ou AT&T
    SCREEN 3: Adaptador Hercules requerido, somente monitor monocromático
    • Gráficos de 720 x 348
    • Formato de texto 80 x 25, caixa de caractere 9 x 14
    • Normalmente 2 páginas de memória de vídeo (0-1); 1 página (0) se for instalado um adaptador de vídeo colorido secundário
    • A instrução PALETTE não é suportada
    • Ativa o controlador MSHERC.COM da Hercules antes de utilizar o modo de tela 3
    SCREEN 4:
    • Suporta os modelos M24, M240, M28, M280, M380, M380/C e M380/T da Olivetti Personal Computers e AT&T Personal Computers 6300 series
    • Gráficos de 640 x 400
    • Formato de texto 80 x 25, caixa de caractere 8 x 16
    • 1 de 16 cores designadas como cor de primeiro plano (selecionada pela instrução COLOR); o segundo plano está fixado na cor preta
    • 1 página de memória de vídeo (0)
    • A instrução PALETTE (não veremos nesta apostila) não é suportada
    Adaptadores EGA ou VGA
    SCREEN 7: gráficos de 320 x 200
    • Formato de texto 40 x 25, caixa de caractere 8 x 8
    • Designação de 16 cores a qualquer um de 16 atributos
    • Se for um adaptador EGA com 64K de memória, 2 páginas de memória de vídeo (0-1); caso contrário, 8 páginas (0-7)
    SCREEN 8: gráficos de 640 x 200
    • Formato de texto 80 x 25, caixa de caractere 8 x 8
    • Designação de 16 cores a qualquer um de 16 atributos
    • Se for um adaptador EGA com 64K de memória, 1 página de memória de vídeo (0); caso contrário, 4 páginas (0-3)
    SCREEN 9: gráficos de 640 x 350
    • Formato de texto 80 x 25 ou 80 x 43, caixa de caractere 8 x 14 ou 8 x 8
    • 16 cores designadas a 4 atributos (adaptador com 64K de memória), ou 64 cores designadas a 16 atributos (adaptador com mais que 64K)
    • Se for um adaptador EGA com 64K de memória, 1 página de memória de vídeo (0); caso contrário, 2 páginas (0-1)
    Adaptadores EGA ou VGA, Somente Monitor Monocromático
    SCREEN 10: gráficos de 640 x 350, somente monitor monocromático
    • Formato de texto 80 x 25 ou 80 x 43, caixa de caractere 8 x 14 ou 8 x 8
    • Até 9 pseudocores designadas a 4 atributos
    • 2 páginas de memória de vídeo (0-1), adaptador com 256K de memória requerido
    Adaptadores VGA ou MCGA
    SCREEN 11 (VGA ou MCGA)
    • Gráficos de 640 x 480
    • Formato de texto 80 x 30 ou 80 x 60, caixa de caractere 8 x 16 ou 8 x 8
    • Designação de até 256K cores a 2 atributos
    • 1 página de memória de vídeo (0)
    SCREEN 12 (VGA)
    • Gráficos de 640 x 480
    • Formato de texto 80 x 30 ou 80 x 60, caixa de caractere 8 x 16 ou 8 x 8
    • Designação de até 256K cores a 16 atributos
    • 1 página de memória de vídeo (0)
    SCREEN 13 (VGA ou MCGA)
    • Gráficos de 320 x 200
    • Formato de texto 40 x 25, caixa de caractere 8 x 8
    • Designação de até 256K cores a 256 atributos
    • 1 página de memória de vídeo (0)
    Exemplo:
    'Este exemplo requer um adaptador gráfico colorido.
    SCREEN 1 '320 x 200 gráficos
    LINE (110, 70)-(190, 120), , B
    LINE (0, 0)-(320, 200), 3, , &HFF00
    • COLOR
        Este comando muda a cor da mensagem que está sendo mostrada na tela.
    Sintaxe:
    COLOR [prim-plano%] [,[seg-plano%]
    prim-plano% - Um número que define a cor de primeiro plano da tela.
    seg-plano% - Um número que define a cor de segundo plano da tela.
    Valores atributos de cores:
      Monitor Colorido Monitor Monocromático
    Atributo de cor Valor padrão cor (a) Cor de exibição Valor padrão cor Exibição
    Modos SCREEN 0, 7, 8, 9(b), 12, e 13
    0 0 Preto 0(c) Desativada
    1 1 Azul   Sublinhado(d)
    2 2 Verde 1(c) Ativada(d)
    3 3 Ciano 1(c) Ativada(d)
    4 4 Vermelho 1(c) Ativada(d)
    5 5 Magenta 1(c) Ativada(d)
    6 6 Marrom 1(c) Ativada(d)
    7 7 Branco 1(c) Ativada(d)
    8 8 Cinza 0(c) Desativada
    9 9 Azul Claro   Alta intensidade
    Sublinhado
    10 10 Verde Claro 2(c) Alta intensidade
    11 11 Ciano Claro 2(c) Alta intensidade
    12 12 Vermelho Claro 2(c) Alta intensidade
    13 13 Magenta Claro 2(c) Alta intensidade
    14 14 Amarelo 2(c) Alta intensidade
    15 15 Branco de Alta intensidade 0(c) Desativada
    Modos SCREEN 1 e 9(e)
    0 0 Preto 0 Desativado
    1 11 Ciano Claro 2 Alta intensidade
    2 13 Magenta Clara 2 Alta intensidade
    3 15 Branco de Alta Intensidade 0 Branco acinzentado
    Modos SCREEN 2 e 11
    0 0 Preto 0 Desativada
    1 15 Branco de Alta Intensidade 0 Branco acinzentado
    (a) números de cores EGA. VGA e MCGA utilizam valores de cor de exibição que produzem cores visualmente equivalentes.
    (b) Para VGA ou EGA com memória de vídeo > 64K.
    (c) Somente para o modo 0.
    (d) Desligado quando utilizado para segundo plano.
    (e) EGA com memória de vídeo <= 64K.
    Exemplo:
    SCREEN 0
    COLOR
    2, 15: CLS
    LOCATE 1, 15: PRINT "Estou Colorido de Verde"
    LOCATE 2, 15: COLOR 0: PRINT "Agora de Preto"
    LOCATE 3, 15: COLOR 0, 2: PRINT "Agora de Preto com fundo verde"

                  Estou Colorido de Verde
                  Agora de Preto
                Agora de Preto com fundo verde.
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    Pressione qualquer tecla para continuar
    Obs.: A visualização da 3a linha desta página será melhor vista nos navegadores versão 4.0
    Dica: No modo de Tela 0 pode fazer a cor de primeiro plano piscarem, é só somar o valor da cor com mais 16. Ex.:
    Se quiser que a cor Azul pisque, o valor dela é 1 + 16=17, fica assim: COLOR 17, 7: PRINT "Piscante"
    • GOTO
        Causa um desvio de linha, isto é, passa a instrução para outro local. A linha pode ser numerada ou nomeada . A linha numerada é aquela que tem números no início de cada linha (usado nas velhas linguagens não-estruturadas, como o velho BASIC e, se não me engano, o FORTRAN), e a nomeada é a que usa nomes.
            Numerada:         Nomeada:
    10 PRINT "Olá"
    20 PRINT "Bom dia"
    Desvio:PRINT "Desviado!"
    Sintaxe:
    GOTO linha
    linha O nome ou número da linha a ser executada posteriormente.
    Exemplo:
    10 CLS
    20 PRINT "Isto é um abismo. Eu vou pular!!!! Que perigo!!!!"

    30 GOTO 50

    40 PRINT "Buraco": PRINT "2+2=5 . Epa!! Erro matemático"

    50 BEEP: PRINT "Estou Salvo!"
    Isto é um abismo. Eu vou pular!!!! Que perigo!!!!
    Estou Salvo!






















    Pressione qualquer tecla para continuar
        Como você viu neste exemplo, o programa foi desviado de sua rota normal, não executando a linha 40. O BEEP é uma instrução que provoca um barulho no auto-falante do PC. O SYSTEM força o término do programa, retornando ao sistema operacional (no BASIC sai também da linguagem; uma vez, já cometi um suicídio do programa, pois não salvei antes de executá-lo. No QBasic não acontece e retorna a janela de edição.)
    Outro exemplo:
    CLS
    PRINT "Isto é um abismo. Eu vou pular!!!! Que perigo!!!!"

    GOTO FimAbismo

    PRINT "Buraco": PRINT "2+2=5 . Epa!! Erro matemático"
    SYSTEM
    FimAbismo:
    BEEP: PRINT "Estou Salvo!"
    O efeito é o mesmo do anterior.
    Obs.: Não recomendo usar o GOTO em uma programação estruturada, somente em alguns casos de emergência como Tratamento de Erros, que veremos no final da apostila.
    • REM
        O REM comenta uma linha. Ela não é executada, serve somente para instruir ou comentar. Também pode-se usar a aspas simples ( ' ).
    sintaxe:
    REM comentário
    ' comentário

    comentário Qualquer texto.
    Exemplo:
    REM Representa um comentário.
    ' Também representa um comentário
    .
    PRINT "Teste1" 'Representa um comentário após a instrução PRINT.
    PRINT "Teste2" : REM Também representa um comentário após a instrução PRINT.

    2. Operadores

        A finalidade básica dos operadores é comparar, calcular, igualar, concatenar, etc., enfim, fazer operações envolvendo variáveis.

    2.1 Operadores Matemáticos

        Alguns destes operadores são bastante conhecidos, principalmente para quem usa ou usou uma calculadora.
    OPERADOR
    DESCRIÇÃO
    EXEMPLO
    +
    Soma Var=2+2
    -
    Subtração Var=2-2
    *
    Multiplicação Var=2*2
    /
    Divisão Var=2/2
    \
    Divisão com resultado inteiro Var=2\2
    ^
    Exponenciação Var=2^2
    Mod
    Resto da divisão Var=2 Mod 2
        Os operadores respeitam uma ordem de precedência universal:
    1. Exponenciação
    2. Multiplicação e Divisão
    3. Adição e Subtração
        Se fizermos a conta: 2+2*2^2\2-2 resultará em 4. Se quisermos, por algum motivo, começar a soma primeiro, temos que colocar parênteses: (2+2)*2^2\2-2=6. Com isso mudamos a ordem de precedência dos operadores.

    2.2 Operadores Relacionais

        Estes operadores fazem comparações entre variáveis ou expressões. O retorno desta comparação sempre será valor diferente de zero, como -1 ou 1 (Verdadeiro) e zero (Falso). Na tabela abaixo, todas as comparações estão verdadeiras:

    OPERADOR
    DESCRIÇÃO
    EXEMPLO
    >
    Maior 5 >3
    <
    Menor 3 < 5
    >=
    Maior ou Igual 5 >= 3
    <=
    Menor ou Igual 3 <= 5
    =
    Igual 5 = 5
    <>
    Diferente 3 <> 5

    2.3 Operadores Lógicos

        Os Operadores Lógicos sempre retornam Verdadeiro quando a lógica é exata ou Falso quando a lógica não é exata.
    Os operadores são:
    AND - Usa-se para comparar duas expressões e só sairá um resultado verdadeiro somente se ambas forem verdadeiras.
    Ex.: 5 > 2 AND 10=10
    O resultado é Verdadeiro. Pois 5 é maior que 2 e 10 é igual a 10.
    20 >15 AND 5=4
    O resultado é Falso. 20 é maior que 15, mas 5 não é igual a 4.
    OR - Usa-se para comparar expressões também, e só sairá verdadeiro se pelo menos uma for verdadeira, isto é, uma das duas ou ambas.
    Ex.: 5 > 2 OR 10 < 100
    O resultado é Verdadeiro. Pois 5 é maior que 2 e 10 é menor que 100.
    20 > 15 OR 5 < 4
    O resultado é Verdadeiro. Pois 20 é maior que 15 mas 5 não é menor que 4.
    20 < 15 OR 5 < 4
    O resultado é Falso. 20 não é menor que 15 e nem é 5 é menor que 4.
    NOT - É um operador que inverte o resultado lógico, isto é, o que é Verdadeiro se torna Falso e vice-versa.
    Ex.: NOT(10 > 5)
    O resultado é Falso, apesar que 10 seja maior que 5, mas o NOT inverteu o resultado.
    XOR - Este aqui não admite confusão na comparação, diferente do OR não admite que duas expressões sejam verdadeiras, isto é, uma tem que ser falsa e a outra verdadeira. Nunca as duas.
    Ex.: 5 > 2 XOR 10 < 100
    O resultado é Falso. Apesar das duas expressões serem verdadeiras, o operador retorna Falso.
    20 > 15 XOR 5 < 4
    O resultado é Verdadeiro. Pois a primeira é verdadeira e a segunda é falsa.
    20 < 15 XOR 5 < 4
    O resultado é Falso. As duas tem resultado falso.
    EQV - Este aqui faz uma equivalência lógica entre duas expressões.
    Ex.: 10 > 8 EQV 8 > 6
    Retorna Verdadeiro, pois ambas as comparações são iguais.
    8 > 10 EQV 8 > 6
    Retorna Falso, pois as comparações retornam valores diferentes.
    IMP - Aqui uma coisa implica em outra, isto é, o resultado só será Falso se a primeira expressão for verdadeira e a segunda for falsa, nos outros será sempre verdadeiro. Neste operador a ordem dos operandos faz diferença nos resultados.
    Ex.: 10 > 8 IMP 6 > 8
    Retorna Falso, pois a primeira expressão é verdadeira e a segunda é falsa.
    10 > 8 IMP 8 > 6
    Retorna Verdadeiro.
    TABELA - VERDADE para Resultados lógicos
    EXPRESSÃO1 EXPRESSÃO2 AND OR NOT XOR EQV IMP
    V V V V F F V V
    V F F V F V F F
    F V F V V V F V
    F F F F V F V V

    2.4 Operador de String

        O mais simples de todos os operadores o "+" serve para juntar duas expressões de texto. Exemplo:
    "Quick" + "Basic"
        Resulta em "QuickBasic". Este operador também é responsável pela concatenação, isto é, a junção de duas variáveis ou expressões de texto. Cuidado se concatenar uma string com um número (a não ser número em uma expressão string. p/ ex.: "24") ou uma variável numérica, vai gerar um erro. O melhor, se quiser concatenar-las é melhor usar uma função de conversão (que veremos daqui a pouco), para evitar o erro.
    Ex.: "Numero: " + 15 'Gera erro       "Numero: " + STR(15) 'Não tem erro e retorna "Numero: 15"

    3. Comandos Condicionais e de Laço (Loops)

    3.1 Comandos Condicionais

        Como o próprio nome já indica, estes comandos executam ações desde que as condições sejam satisfatórias (ou verdadeiras).    
    • IF <Condição> THEN ...(Se <Condição> Então...)
      Esta estrutura faz que o computador avalie a condição imposta. Se for verdadeira, executa a ação.
      Por Exemplo:
      CLS
      DIM Numero AS INTEGER
      INPUT "Digite um Número maior que 10: ", Numero
      IF Numero > 10 THEN PRINT "Maior que 10"

      O programa pede que digite um número e depois ele verifica se o número que está na variável é maior que 10 (por ex. 11), se for então vai mostrar a mensagem "Maior que 10", caso contrário não faz nada.
    • IF <Condição> THEN ... END IF (Se <Condição> Então... Fim Se)
      É o mesmo acima, mas este pode ter várias linhas entre IF e END IF.
      Por Exemplo:
      CLS
      DIM Numero AS INTEGER
      INPUT "Digite um Número maior que 10: ", Numero
      IF Numero > 10 THEN    PRINT "Maior que 10"
          PRINT "Mais uma linha..."
      END IF
    • IF <Condição> THEN ... ELSE ... END IF (Se <Condição> Então... Senão...Fim Se)
      Foi acrescentado o ELSE, para quando quiser uma resposta para a condição Falsa.
      Por Exemplo:
      CLS
      DIM Numero AS INTEGER
      INPUT "Digite um Número maior que 10: ", Numero
      IF Numero > 10 THEN    PRINT "Maior que 10"
          PRINT "Mais uma linha..."
      ELSE    PRINT "Menor que 10"
          PRINT "Mais uma linha Extra..."
      END IF
    • IF <Condição> THEN ... ELSEIF ... END IF (Se <Condição> Então... Senão se...Fim Se)
      Foi acrescentado o ELSEIF, para quando a condição for Falsa, mas dependendo ainda de outra condição.
      Por Exemplo:
      CLS
      DIM Numero AS INTEGER
      INPUT "Digite um Número maior que 10: ", Numero
      IF Numero > 10 THEN    PRINT "Maior que 10"
          PRINT "Mais uma linha..."
      ELSEIF Numero = 15
          PRINT "O Número é 15. "
          PRINT "Parabéns!!!."
          BEEP
      ELSE    PRINT "Menor que 10"
          PRINT "Mais uma linha Extra..."
      END IF
    • SELECT CASE
      Significa "Seleção de casos", ou seja, colocamos vários casos para que o programa escolha um.
      Exemplo:
      CLS
      DIM
      Numero AS INTEGER
      INPUT
      "Digite um Número : ", Numero
      SELECT CASE Numero
          CASE 1 'Verifica se é 1
              PRINT "É o Primeiro"
          CASE 2 'Se não for, Verifica se é 2
              PRINT "Espere um Segundo"
          CASE 3 TO 10 'Se não for, Verifica se está entre 3 e 10
              PRINT "Entre 3 e 10"
          CASE IS > 100 'Se não for, Verifica se é maior que 100
              PRINT "Maior que 100"
          CASE ELSE 'Caso contrário...
              BEEP        PRINT "Então não me aborreça..."
      END SELECT

    3.2 Comandos de Laço (Loops)

       Estes comandos criam círculos viciosos, ou seja, criam uma estrutura condicional que se repete até que a condição seja satisfeita.
    • FOR <Condição>... NEXT
      Repete um bloco de instruções um número especificado de vezes.

      FOR contador = início TO fim [STEP incremento]
          [bloco-instruções]
      NEXT [contador [,contador]...]

      * contador - Uma variável numérica usada como contador de loop.
      * início e fim - Os valores inicial e final do contador.
      * incremento A quantidade de vezes que o contador é alterado pelo loop.

      Exemplo:
      FOR i% = 1 TO 15 'Conte de 1 a 15
          PRINT i%
      NEXT i%
      FOR i% = 7 TO -6 STEP -3 'Conte de 7 a -6 de -3 em -3
          PRINT i%
      NEXT i%
    • DO WHILE <Condição> ... LOOPRepete um bloco de instruções enquanto uma condição é verdadeira ou até uma condição se tornar verdadeira.
      DO [WHILE Condição]
          [bloco-instruções]
      LOOP
      Condição - Uma expressão numérica que o QBasic avalia como sendo verdadeira ou falsa .
      Exemplo:
          i% = 0
          PRINT "Valor de i% no início do loop é "; i%
          DO WHILE i% < 10
              i% = i% + 1
          LOOP
          PRINT
      "Valor de i% no final do loop é "; i%
    • DO .... LOOP WHILE <Condição>
      É a mesma coisa acima, mas o bloco é executado primeiro e depois a condição,sendo assim o bloco é executado pelo menos uma vez, diferente do anterior em que o laço pode não ser executado caso a condição seja verdadeira logo de cara.
      Exemplo:
          i% = 0
          PRINT "Valor de i% no início do loop é "; i%
          DO
              i% = i% + 1
          LOOP WHILE i% < 10
          PRINT
      "Valor de i% no final do loop é "; i%
    • WHILE <Condição> ... WEND
      É o mesmo do DO WHILE
    • EXIT << Comando>>Sai de um loop DO ou FOR (mesmo que não tenha alcançado a condição), um procedimento FUNCTION ou SUB (veremos depois).Exemplo:
      i% = 0
      DO
          i% = i% + 1
          IF i% = 500 THEN EXIT DO 'Quando o i% chegar a 500 Saia imediatamente...
      LOOP
      'Loop infinito
      PRINT
      "SAIR DO"; i%

    4. Funções de Auxílio

       Funções nada mais são rotinas prontas para executar determinadas ações. Existe no Qbasic funções de diversos tipos que ajudam em muito o programador. Vamos ver algumas funções, e veremos o poder que elas exercem dentro da linguagem.

    4.1 Funções Matemáticas

    Numero=<Função>(Expressão Numérica)
    ABS - Retorna sempre um valor positivo (absoluto).
         PRINT ABS(-50) 'Valor Impresso 50
    ATN - Retorna o arco-tangente de um número
    COS - Calcula o co-seno de um ângulo
    FIX - Retorna a parte inteira de um número, ignorando as casas decimais, se houver. Não faz arredondamento.
    HEX$ - Retorna a representação hexadecimal de um número decimal.
    RND - Retorna um número randômico, ou seja, escolhe um número aleatoriamente.
    SQR - Calcula a raiz quadrada de um número.

    4.2 Funções de Conversão

    STR$ - Converte um valor numérico para tipo String (texto). Válido somente para argumentos numéricos.     VarTexto$ = STR$(-50)
        PRINT VarTexto$ 'Valor Impresso -50
    CHR$ - Retorna o caractere correspondente ao código da Tabela ASCII
         VarTexto$ = CHR$(65)
        PRINT VarTexto$ 'Valor Impresso A
    VAL - Converte uma string de caracteres numéricos em uma variável numérica.
         VarNum = VAL("0150")
        PRINT VarNum 'Valor Impresso 150
    ASC - Retorna o código ANSI do primeiro caractere de uma String.
         VarNum = ASC("A")
        PRINT VarNum 'Valor Impresso 65
    CINT - Converte uma expressão numérica em um número inteiro. Faz arredondamento.     VarNum = CINT(50.50)
        PRINT VarNum 'Valor Impresso 50
    CLNG - Converte uma expressão numérica em um número inteiro longo. Faz arredondamento também.     VarNum = CLNG(150.60)
        PRINT VarNum 'Valor Impresso 151
    CSNG - Converte uma expressão numérica de ponto flutuante de precisão simples.     VarNum = CSNG(<Expressão Numérica>)
    CDBL - Converte uma expressão numérica de ponto flutuante de precisão dupla.     VarNum = CDBL(<Expressão Numérica>)

    4.3 Funções de Texto (String)

    INSTR - Retorna a posição da primeira ocorrência de uma seqüência em outra seqüência   Sintaxe: INSTR([início%,]texto1$,texto2$)
        início% Define a posição do caractere onde a pesquisa inicia.
          Se início% for omitido, INSTR inicia na posição 1.
        texto1$ - A seqüência de caracteres a pesquisar.
        texto2$ - A seqüência de caracteres a procurar.
       Exemplo:
          a$ = "Microsoft QBasic"
          PRINT "Posição do texto ="; INSTR(1, a$, "QBasic")
    LCASE$ - Converte o texto para minúsculas.
       Sintaxe: LCASE$(texto$)
       texto$ - Qualquer texto.
       Exemplo:
          a$ = "QBasic"
          PRINT a$;"LCASE: ";LCASE(a$)
    LEFT$ - Retorna um número especificado de caracteres mais à esquerda do texto.
       Sintaxe: LEFT$(texto$,n%)
        texto$ - Qualquer expressão de seqüência de caracteres.
        n% - O número de caracteres a retornar, começando com os caracteres mais à esquerda.
        Exemplo:
            a$ = "Microsoft QBasic"
            PRINT LEFT$(a$, 5) 'A Saída é: Micro
    LTRIM$ - Remove os espaços em branco à esquerda.
       Sintaxe: LTRIM$(texto$)
       texto$ - Qualquer texto.
       Exemplo:
          a$ = "    Basic    "
          PRINT "*" + a$ + "*" 'A Saída é: *    Basic    *
          PRINT "*" + LTRIM$(a$) + "*" 'A Saída é: *Basic    *
    MID$ - retorna parte de um texto (um subtexto).
       Sintaxe: MID$(texto$,início%[,comprimento%])
       texto$ - A seqüência a partir da qual a função retorna um subtexto ou o texto usado por MID$. Pode ser qualquer texto.
       início% A posição do primeiro caractere na subseqüência que está sendo retornada ou substituída.
       comprimento% O número de caracteres na subseqüência. Se o comprimento for omitido, MID$ retorna ou substitui todos os caracteres à direita da posição de início.
       Exemplo:
          a$ = "Onde é Paris?"
          PRINT MID$(a$, 8, 5) 'Saída é: Paris

    RIGHT$ - Retorna um número especificado de caracteres mais à direita do texto.
       Sintaxe: RIGHT$(texto$,n%)
        texto$ - Qualquer expressão de seqüência de caracteres.
        n% - O número de caracteres a retornar, começando com os caracteres mais à direita.
        Exemplo:
            a$ = "Microsoft QBasic"
            PRINT RIGHT$(a$, 5) ''A Saída é: Basic
    RTRIM$ - Remove os espaços em branco à direita.
       Sintaxe: RTRIM$(texto$)
       texto$ - Qualquer texto.
       Exemplo:
          a$ = "    Basic    "
          PRINT "*" + a$ + "*" 'A Saída é: *    Basic    *
          PRINT "*" + RTRIM$(a$) + "*" 'A Saída é: *    Basic*
    SPACE$ - Retorna uma seqüência de espaços.   Sintaxe: SPACE$(n%)   n% - O número de espaços desejados na seqüência.   Exemplo:      FOR i% = 1 TO 5         x$ = SPACE$ (i%)         PRINT x$; i%      NEXT i%
    STRING$ - Retorna um texto de tamanho determinado a partir da repetição de um caractere.
       Sintaxe: STRING$(comprimento%,{código-ascii% | expressão-sequência$})
       comprimento% - O comprimento do texto.
       código-ascii% - O código ASCII do caractere a ser repetido.
       expressao-sequência$ - Qualquer expressão de seqüência de caracteres. STRING$ preenche o texto com o primeiro caractere da expressão-sequência$.
       Exemplo:
          PRINT STRING$(3, "-");
          PRINT "Alo";
          PRINT STRING$(3, "-")
    UCASE$ - Converte o texto para maiúsculas.
       Sintaxe: UCASE$(texto$)
       texto$ - Qualquer texto.
       Exemplo:
          a$ = "QBasic"
          PRINT a$;"UCASE: ";UCASE(a$)

    4.4 Criando Funções personalizadas

        No Qbasic pode-se criar suas próprias funções ou Sub-rotinas, isto pode facilitar muito a programação, por exemplo, se tiver que fazer a mensagem "O Mundo da Internet" na linha 2 coluna 10 de cor azul e fundo verde. Provelmente teria um código assim:
    CLS
    COLOR 1, 2
    LOCATE 2, 10
    PRINT "O Mundo da Internet"
        Teríamos 3 linhas para isso. Mas agora podemos reduzi-la para uma linha só criando uma Rotina que vamos chamá-la de Palavra. Para fazer isso, primeiro vá até o menu Edit e em seguida Nova Sub..., em seguida de o nome para ela, Agora que vem o legal, coloque depois do nome da rotina, com os parênteses, (Texto$, Linha%, Coluna%, Cor1%, Cor2%) e entre SUB e END SUB:
    COLOR Cor1%, Cor2%
    LOCATE Linha%, Coluna%
    PRINT Texto$
        Com isso, vá em Visualizar>Subs... , selecione o nome do programa e, substituindo as linhas (menos o CLS) por Palavra "Mundo da Internet", 2,10,1, 2 . Veja os resultados. pode ser que um programa pequeno isso não seja necessário, mas num programa maior, isto pode ser útil, pois economiza digitação. Dica: use as Sub-Rotinas para "traduzir" alguns comandos do Qbasic. Por Exemplo: Criando a Sub. LimpaTela, pode-se inserir um CLS nele (Não precisa de parâmetros).
        Agora vamos criar uma Função usando uma fórmula da Física para calcular a Velocidade de um objeto, conhecendo o espaço percorrido e o tempo. Se não me engano a fórmula é: V=S/T. O processo é o mesmo da Sub, trocando Sub... por Function..., colocando o Nome de Velocidade!, tendo como parâmetros (Espaco! , Tempo!). E dentro da Função coloque: Velocidade!=Espaco!/Tempo!
    Agora retorne ao programa principal e digite: PRINT Velocidade(100, 80), com isso a nossa função retorna um valor Real com casas decimais.

    5. Arquivos

        Vamos supor a seguinte situação, você tem uma lista de 50 pessoas para cadastrar e de repente... acaba a energia em sua casa. E agora, escreve tudo de novo?. Calma para tudo tem solução. E o que vamos aprender agora a gravar e ler arquivos.
        Existem três tipos de arquivos: Seqüenciais, Aleatórios e Binários. O Seqüencial normalmente é usado para ler e gravar arquivos de texto (Ex.: os de extensão TXT), O Aleatório e usado para ler e gravar banco de dados, algo como um fichário. E o Binário é usado para ler e gravar dados em uma posição específica (de byte). Nesta apostila não especificarei sobre os Binários
        Também pode Acessar um arquivo como: Somente Leitura, Somente Gravação ou os dois
        Uma dica importante: TODOS OS ARQUIVOS ABERTOS DEVER SER FECHADOS, pois senão poder acarretar problemas como perdas de dados ou até o próprio arquivo.
        Para acessar o arquivo, seja lendo ou gravando, usa-se o seguinte sintaxe:
    OPEN arquivo$ [FOR modo] [ACCESS acesso] [chave] AS [#]número-arquivo% [LEN=tamreg%]
    Onde:
    * arquivo$ - O nome de um arquivo ou dispositivo. O nome de arquivo pode incluir uma unidade e um caminho. Obs.: Caso o caminho não é especificado, o interpretador supõe que o arquivo esteja no mesmo lugar que o QBasic que está sendo executado(Ex.: "ARQUIVO.TXT", Supõe que esteja no mesmo diretório ou pasta do QBasic, Diferente de "C:\DOC\ARQUIVO.TXT")
    * modo - Um dos seguintes modos de arquivo: APPEND, BINARY, INPUT, OUTPUT, ou RANDOM.
    APPEND especifica que o arquivo será aberto como saída seqüencial e posiciona o ponteiro no final do arquivo. Uma instrução PRINT # ou WRITE # irá então estender (acrescentar) o arquivo.
    BINARY especifica um modo de arquivo binário. Em um modo binário, você pode ler ou gravar informações para qualquer posição do byte no arquivo usando as instruções GET ou PUT.
    INPUT especifica que o arquivo é aberto para entrada seqüencial.
    OUTPUT especifica que o arquivo é aberto para saída seqüencial.
    RANDOM especifica que o arquivo é aberto em modo de arquivo aleatório.
    RANDOM é o modo de arquivo padrão.

    * acesso - Em ambientes de rede, especifica se o arquivo é aberto para READ, WRITE, ou acesso READ WRITE.
    READ Abre um arquivo somente para a leitura.
    WRITE Abre um arquivo somente para a gravação.
    READ WRITE Abre um arquivo tanto para a leitura quanto para a gravação. O modo READ WRITE é válido somente para acesso aleatório e modo binário, e arquivos abertos para APPEND (acesso seqüencial).

    * bloco - Especifica a blocagem do arquivo em um ambiente de rede: SHARED, LOCK READ, LOCK WRITE, LOCK READ WRITE.
    * número-arquivo% - Um número no intervalo de 1 à 255 que identifica o arquivo quando este é aberto.
    * tamreg% - Para arquivos randômicos, o comprimento de registro (o padrão é 128 bytes). Para arquivos seqüenciais, o número de caracteres buffered (o padrão é 512 bytes).

        Se você abrir um arquivo que não exista, ele será criado com tamanho 0, caso o arquivo se encontre aberto por um outro processo e o tipo de acesso não for permitido, a instrução OPEN falhará e gera um erro.

    5.1 Gravando um arquivo

       Podemos começar assim:
        CLS
        OPEN "TESTE.TXT" FOR OUTPUT AS #1
                PRINT #1,"Teste para gravar arquivo" ' O #1 é o numero do arquivo
        CLOSE #1
       Agora use o Edit ou o Bloco de Notas do Windows e abra o arquivo e leia (Lembre-se que ele está na mesma pasta onde o QBasic está ex.: C:\QBASIC ).
        Veja outros exemplos que podem ser usados.
        Exemplo 1:
            CLS
             OPEN
    "ARQ1.TXT" FOR OUTPUT AS #1
                      INPUT "Digite uma frase. <ENTER> Grava: ", Frase$
                       PRINT #1, Frase$
              CLOSE ' O Número de arquivo é opcional, Caso for aberto mais de um é necessário
         Observe que agora podemos escrever uma frase e será armazenado.
      Exemplo 2:
            CLS
            PRINT
    "Mini Nomeador"

            OPEN "Arq2.txt" FOR OUTPUT AS #1
                DO
                    INPUT
    "Nome:", Nome$
                    PRINT #1, Nome$
                    INPUT "Adicionar [S/N]"; Confirma$
            LOOP UNTIL Confirma$ = "n"
            CLOSE

     
      Topo

    5.2 Lendo um arquivo

        Agora que você aprendeu a gravar, agora vamos ler:
    CLS
        OPEN "TESTE.TXT" FOR INPUT AS #1
                LINE INPUT #1, Frase$ ' Lê uma linha do arquivo e joga para a variável Frase$
                PRINT Frase$ ' Imprime o arquivo na Tela
        CLOSE #1
    Teste para gravar arquivo
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    Pressione qualquer tecla para continuar
      Agora para o exemplo 2 do tópico anterior, vamos usar uma nova instrução para testar se o fim do arquivo foi alcançado.
    CLS
    PRINT
    "Mini Nomeador"

    OPEN "Arq2.txt" FOR INPUT AS #1
       DO
            INPUT #1, Nome$
            PRINT Nome$

        LOOP WHILE NOT EOF(1) 'Repete a instrução acima até acabar o arquivo
    CLOSE

    5.3 Arquivos Aleatórios

        Os aleatórios também são chamados de randômicos, eles executam operações de leitura e escrita mais rápido que arquivos de textos, mas a forma de trabalhar é idêntica.
        Antes de começarmos a criar esses arquivos, vamos aprender a criar nossos próprios tipos de variáveis (Oque?!, você pergunta. Sim podemos criar nossos tipos personalizados de variáveis). Está maravilha se chama TYPE, nela podemos declarar campos que podem ser gerenciados,e duas novas instruções o GET e o PUT.
    Síntaxe do Type:
    TYPE tipo
        nome-elemento AS nome-tipo
        [nome-elemento AS nome-tipo]
    .
    .
    .
    END TYPE

    * tipo  O nome do tipo de dado sendo definido. O nome pode consistir de até 40 caracteres e deve começar             com uma letra. Os caracteres válidos são A-Z, 0-9 e um ponto (.).
    * nome-elemento Um elemento do tipo de dado definido pelo usuário.
    * nome-tipo O tipo de elemento (INTEGER, LONG, SINGLE, DOUBLE, STRING ou um tipo de dado definido pelo usuário).

        Depois usamos o DIM para declará-la. Veja como fica no exemplo abaixo:
    TYPE Carta
        Naipe AS STRING * 9
        Valor AS INTEGER
    END TYPE
    DIM Baralho(1 TO 52) AS Carta
    Deck(1).Naipe = "Paus"
    Deck(1).Valor = 2
    PRINT Baralho(1).Naipe, Baralho(1).Valor
    O GET lê de um arquivo para memória de acesso aleatório ou uma variável. Algo parecido com o INPUT.
    O PUT grava uma variável ou memória de acesso aleatório para um arquivo. Algo parecido com o OUTPUT.
    GET [#]número-arquivo%[,[número-registro&][,variável]]
    PUT [#]número-arquivo%[,[número-registro&][,variável]]

    * número-arquivo% O número de um arquivo aberto.
    * número-registro& Para arquivos de acesso randômico, o número do registro a ser lido ou gravado.
    * variável Para GET, uma variável usada para receber informações lidas do arquivo. Para PUT, uma variável que contém informações a serem gravadas no arquivo. A variável é geralmente do tipo de variáveis definida pelo usuário.
        Vamos ver como se aplica este exemplo:
    CLS
    TYPE RegTeste
        Aluno AS STRING * 20
        Nota AS SINGLE
    END TYPE
    DIM Classe AS RegTeste
    OPEN "CLASSE.DAT" FOR RANDOM AS #1 LEN = LEN(Classe) ' O Len limita o tamanho do arquivo
        Classe.Aluno = "Maria"
        Classe.Nota = 99
    PUT #1, 1, Classe
    CLOSE #1
    OPEN "CLASSE.DAT" FOR RANDOM AS #1 LEN = LEN(Classe)
       GET #1, 1, Classe
        PRINT "ALUNO:", Classe.Aluno
        PRINT "NOTA:", Classe.Nota
    CLOSE #1
    ALUNO: Maria
    NOTA: 99























    Pressione qualquer tecla para continuar

    6. Tratamento de erros

        Já aconteceu quando você foi abrir um arquivo de texto e derrepente o programa saiu e voltou a janela de edição, falando que ele não existe, ou que o disco está cheio. Se a resposta foi Sim. Fique sabendo que isso é comum na programação e, como diz o velho ditado: "HERRAR É UMANO". Mas, não se preocupe... os erros existem para serem corrigidos e leva a perfeição do programa. Pois agora vamos aprender a lidar com os erros de programação.
        Os Erros são subdivididos em: Compilação, Dispositivo (ou de Entrada e Saída), Execução e Lógicos.
        Os Erros de Compilação acontece quando escrevemos um comando errado, esquecemos um parêntesis em uma função.
        Os Erros de Dispositivo é quando, por exemplo, tentamos acessar um disquete no drive e ele não está lá, ou quando mandamos imprimir e a impressora não está ligada.
        Os de Execução acontece quando o programa executa uma instrução ilegal, mas o programa já foi compilado. (Ex.: quando o programa faz uma divisão por zero)
        E os Erros Lógicos são aqueles que apesar do compilador não encontrar erros, mas o programa não tem o resultado esperado (como por exemplo gravar um arquivo ou um registro com dados vazios).
    Vamos ver um exemplo prático deles:
    Tente executar o código abaixo:
    CLS
    PRIN "Oi Mundo!!!"
     
    O compilador vai parar o programa e vai aparecer uma caixa de diálogo dizendo "Erro de Síntaxe" e o cursor na linha onde se encontra o erro.
    Este tipo de erro é fácil de resolver: Corrija o comando com a síntaxe correta (no caso: PRINT)
        O segundo caso vamos imprimir uma frase na impressora. para simular o erro, desligue a impressora um pouco, e execute o programa no modo MS-DOS® (pois o Windows® manda os dados para a fila de impressão simulando, assim, que a impressora em DOS está ligada) :
    CLS 
    PRINT "Imprimindo um texto." 
    LPRINT "O Qbasic é demais!!!!" 'Este comando envia um texto para impressora
    PRINT "Terminada a impressão"
     Vai aparecer uma caixa de diálogo dizendo: "Falha no dispositivo". Clique no botão Ajuda, e verá uma explicação do erro e um número do erro (no caso 25). Anote esse número que vamos usá-lo agora:
    ON ERROR GOTO 50
    5 CLS
     DIM Resposta AS STRING*1
     PRINT "Imprimindo um Texto"
    10 LPRINT "O QBasic é Demais!!!"
     PRINT "Terminada a impressão"
    END
    50
    SELECT CASE Err
     CASE 25
      PRINT "Impressora Desligada ou não instalada. Continuar ? (s/n)"
      INPUT "", Resposta
      IF Resposta = UCASE$("s") THEN GOTO 10 ELSE SYSTEM
     CASE ELSE
      PRINT "Erro inesperado Saindo."
    END SELECT
    
        O On Error desvia, quando ocorre um erro, para a linha determinada para tratar do erro (geralmente coloco no final do programa). A variável reservada ERR (Você não pode atribuir valor para ela, só o sistema) retorna o número que causou o erro (no caso 25) e usei uma rotina de escolha (SELECT CASE) para "filtrar" o ERR e exibir uma mensagem de aviso de que a impressora está desligada e se deseja imprimir novamente.
        Vamos ver o terceiro caso, o de execução. Este tipo de erro acontece pode passar despercebido pelo compilador, mas se não observa-lo, pode travar o programa. Veja o exemplo abaixo:
    CLS
    Valor=5
    Divizao=0
    PRINT "O resultado da conta é: " 
    PRINT (Valor/Divizao)
    
        Observe que o programa para a execução (se estivesse criado um executável provavelmente travaria). Para resolver esta "Pedra no caminho", vamos impor uma condição: Se a Divizao for igual a zero, colocar valor 1. Veja como fica:
    CLS
    Valor=5
    Divizao=0
    PRINT "O resultado da conta é: " 
    IF Divizao = 0 THEN Divizao = 1
    PRINT (Valor/Divizao)
    
       

    Nenhum comentário:

    Postar um comentário

    Curso SANS 504 Hacker Techniques, Exploits & Incident Handling

    SANS SECURITY 504 - Hacker Techniques, Exploits & Incident Handling     SANS Security 504.5.pdf13 MB     SANS Security 504.1.pdf12 M...