Eu tambem tinha essas duvidas. E, do mesmo jeito que voce, so tinha uma vaga compreensao do primeiro. Entao, vamos por partes. DIM Define matrizes. Sintaxe: DIM matriz(indice) as TIPO Oi, Pedro No Qbasic, existem as variaveis. Mas, vamos supor que voce queira fazer um editor de textos que gravasse o texto somente depois de digitado. Entao teriamos que criar variaveis para armazenar cada linha. Exemplo: l1$, l2$, l3$. Claro que assim o numero de linhas ficaria bastante limitado, pois teriamos que criar uma variavel para cada linha. Mas, com o DIM, a gente pode criar uma variavel multipla. ex.: DIM a(2) Entao, ao inves de termos a variavel A, temos A(0), A(1), A(2). Temos varios A. Aparentemente inutil. Qual eh a diferenca entre ter uma variavel dividida em tres e ter tres variaveis? Vamos supor o seguinte programa: READ A0$ READ A1$ READ A2$ Ate que nao eh muito trabalhoso, sao so tres linhas. E se fossem 225? Voce nao poderia fazer o seguinte programa: FOR I = 1 to 255 READ aI$ NEXT Porque o QB entenderia que aI$ eh o nome de uma variavel, enquanto a sua intencao eh substituir esse I pelo valor de I mesmo, para ficar a1$, a2$, a3$ Mas se...: DIM a$(255) 'Divide a$ em 225 parttes FOR I = 1 to 255 READ a(I)$ 'Agora da, pois existe a(1), a(2), a(3) NEXT Bom, nao foi uma explicacao muito boa, mas espero que entenda. Eu expliquei para outra pessoa como se usava o DIM, mas perdi o e-mail. OBS.: Por que antes de usar GET deve-se usar o DIM. Simples. O que o GET faz eh capturar uma imagem, ponto por ponto. Entao, grava cada ponto na variavel (quer dizer, matriz). O TYPE Eu demorei mais tempo para descobrir como se usa o type. Pois o Help do Qbasic ensina mal, e ainda por cima traz um exemplo errado. Para descobrir como se usa o type eu tive que pesquisar intensamente o programa Balloon-X, de 66K (!!). Mas descobri.O TYPE serve para definir tipos de variaveis. Vc ja viu algum programa com alguma variavel que contenha um ponto? Na maioria daz vezes, essas variaveis com ponto foram definidas com Type. Ex.: Pessoa.Idade Eh como se Pessoa fosse uma variavel e Idade fosse uma subvariavel, ou seja, uma variavel dentro de Pessoa. Como um diretorio (ou pasta) e seus arquivos. Eh como se Pessoa fosse um diretorio. Dentro desse diretorio existem arquivos, como eh o caso de Idade. Para criar esse Pessoa.Idade usa-se o seguinte TYPE PessoaType 'PessoaType eh um TIPO Idade AS INTEGER Altura AS INTEGER Peso AS INTEGER END TYPE Criamos o tipo PessoaType. Mas num programa, nos nao usaremos PessoaType.Idade, PessoaType.Altura ou PessoaType.Peso. Pois PessoaType eh um tipo. Sim, um tipo, assim como DOUBLE eh um tipo, INTEGER eh um tipo, etc. Entao, como definimos que uma variavel eh de um tipo (double, single, etc.)? Usamos o DIM, como vc mesmo sabe. Entao seria: DIM Pessoa as PessoaType Pronto. A variavel Pessoa nao eh do tipo texto, nem de precisao dupla, nem nada. Pessoa eh do tipo PessoaType. Meio estranho, nao? Mas eh assim mesmo. E que tipo eh esse? O tipo PessoaType eh, na verdade, uma coletanea de tipos. No caso, tres INTEGERs (Idade, Peso e Altura). Entao o programa esta assim ate agora: TYPE PessoaType 'PessoaType eh um TIPO Idade AS INTEGER Altura AS INTEGER Peso AS INTEGER END TYPE DIM Pessoa as PessoaType Entao podemos fazer Pessoa.Idade, Pessoa.Altura e Pessoa.Peso Ate agora, meio inutil, nao? Mas e se colocassemos: DIM Pessoa(10) as Nomes Pronto. Agora temos Pessoa(0).Peso, Pessoa(1).Peso, Pessoa(2).Peso,... Pessoa(0).Idade, Pessoa(1).Idade, Pessoa(2).Idade,... Pessoa(0).Altura, Pessoa(1).Altura, Pessoa(2).Altura,... Ou seja, a cada Pessoa, atribuimos um Peso, uma Idade e uma Altura. Esse abaixo e' um programa que eu fiz, que mostra um outro exemplo do TYPE. DEFINT A-Z SCREEN 7 OPTION BASE 1 'Def DEF fnr (n) = INT(RND * n) 'Types TYPE Stars C AS INTEGER X AS INTEGER Y AS INTEGER END TYPE 'Dims DIM Star(300) AS Stars DIM C(300) AS Stars DIM X(300) AS Stars DIM Y(300) AS Stars RANDOMIZE TIMER 'Generating Random Stars FOR i = 1 TO 300 r = fnr(2) SELECT CASE r CASE 0 cor = 7 CASE 1 cor = 8 CASE 2 cor = 15 END SELECT rx = fnr(320) ry = fnr(200) PSET (rx, ry), cor Star(i).X = rx Star(i).Y = ry Star(i).C = cor NEXT i SLEEP DO 'Moving Stars Move: FOR i = 1 TO 300 FOR t = 1 TO 500: NEXT t PSET (Star(i).X, Star(i).Y), 0 IF Star(i).X >= 160 THEN Star(i).X = Star(i).X + 3 IF Star(i).X < 160 THEN Star(i).X = Star(i).X - 3 IF Star(i).Y <= 100 THEN Star(i).Y = Star(i).Y - 3 IF Star(i).Y > 100 THEN Star(i).Y = Star(i).Y + 3 IF Star(i).Y < 100 THEN Star(i).Y = Star(i).Y - 3 'Drawing IF Star(i).X > 320 THEN Star(i).X = fnr(320): Star(i).Y = fnr(200) IF Star(i).X < 0 THEN Star(i).X = fnr(320): Star(i).Y = fnr(200) IF Star(i).Y > 200 THEN Star(i).Y = fnr(320): Star(i).Y = fnr(200) IF Star(i).Y < 0 THEN Star(i).Y = fnr(320): Star(i).Y = fnr(200) PSET (Star(i).X, Star(i).Y), Star(i).C NEXT i LOOP