.^~`^',~`^'-_~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/., TEMPLO DA ZINE WU TANG CLAN... TIRE SUAS DUVIDAS E MANDE SUGESTOES! OS EDITORES DA REVISTA ESTARAO PRONTOS PARA ATENDE - LO OBS: DIVULGUEM NOSSA ZINE EM TODOS CANTOS. []'pX_LARVA E CORPORACAO... .^~`^',~`^'-_~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/., ~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/., wU tAnG cLaN Z|N3 Corporation ~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/., ** - CONTATOS IMEDIATOS. 00 - DEDICATORIA 01 - BATE PAPO INICIAL. 02 - CONCEITOS BASICOS EM LINGUAGEM ASSEMBLY 03 - CONCEITOS BASICOS EM LINGUAGEM "C" 04 - CONCEITOS BASICOS EM LINGUAGEM "C++" 05 - CONCEITOS BASICOS EM LINGUAGEM CLIPPER 06 - CONCEITOS BASICOS EM LINGUAGEM DELPHI 07 - CONCEITOS BASICOS EM LINGUAGEM TURBO PASCAL 08 - CONCEITOS BASICOS EM VISUAL BASIC 09 - PIADAS... HAHAshhahehe 10 - RADIO AMADOR!!! 11 - MUSICA! :)) 12 - DESAFIO 13 - RECLAMACOES ;(( 14 - AGRADECIMENTOS...Tks ALL 15 - ERRATAS... :)) 16 - ESPECIAL 17 - PROCURA - SE 18 - PROPAGANDAS :)) *CONTATOS IMEDIATOS* Lembrando que para quem quiser entrar em contato com os membros da coorporacao ou quiserem reclamar ou dar sugestoes ou qquer outra coisa do Zine mande um e-mail para: zinewutangclan@geocities.com Agora, para quem quiser pegar o zine por meio das redes de msgs de um FREQ pela RBT no node: 12:1211/56 do magic name WTCZINE E soh mais uma coisa... lembrando q. a Zine estah hospedada em: www.geocities.com/SiliconValley/Lab/4568/ sendo assim... vamos aas msgs! >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> From: CARLOS E C PIRES To: WU TANG CLAN CORPORATION -> Legal a idéia de fazer um zine, realmente faltam coisas desse tipo. -> Mas gostaria de dar algumas sugestöes e fazer críticas construtivas: certo, isso eh bom! :)) -> 1) Mais cuidado com a linguagem - se a idéia é passar informaçöes -> com alguma seriedade, o respeito ao português deve ser, na medida do -> possível, observado. Näo que um erro ou outro façam diferença, mas näo -> custa nada dar uma relida no texto para verificar a ortografia. Senäo, -> parece que foi escrito em alguns segundos e imediatamente mandado pros -> leitores, sem cuidado. E tenho certeza que vcs passaram um bom tempo -> fazendo o zine! hehehe eh bem por ai... demoramos um pouquinho... mas tudo bem. valeu a chamada de atencao.. vamos tentar ser mais rigorosos na questao do portugues porem quanto aos acentos, nao podemos fazer nada. a internet aceita acento porem na forma TEXTO o usuario que estiver com o linux ou o win 3.11 ou outra plataforma qualquer poderah se defrontar com o monstro ACENTO este poderah engoli - lo e deixa - lo embaracado! :)) -> 2) Na parte de assembler, as informaçöes estäo corretas, mas achei -> que os iniciantes, sem qualquer noçäo de programaçäo, teräo dificuldades -> em acompanhar. Sugiro que, no próximo "capítulo", vc coloque um -> programinha pra escrever "Olá mundo!" e daí explique as diretivas do -> assembler (com explicaçöes simples sobre a segmentaçäo da memória e -> pilha), os registradores, a instruçäo mov, a instruçäo int e pronto. Bom, eu tentei fazer isso ao maximo possivel, porem o zine nao eh apenas para iniciantes, eh para pessoas avancadas, e tudo mais... por isso tenho q. jogar um pouco para os dois lados, porem valeu o tok. tentei ser o mais explicativo possivel! :)) -> 3) A seçäo de piadas rulez :) heheh vamos tentar melhora - la cada vez mais! -> 4) Que tal fazer uma interface pro zine, ao invés de lançar o texto -> puro. Com os conhecimentos que vcs têm, dá pra fazer em Pascal, C/C++ ou -> até VB, bem simples. Dá um ar profissional ao zine. certo.. bom, esta ideia jah foi dada por outros leitores e estah em andamento, porem nao sei se vai ser tao rapidamente, mas algum dia o zine vai ter isso! :)) -> 5) Faltou dizer qual é a periodicidade. hmmm. ai jah eh um graaande problema! pois todos ou trabalham, ou estu- dam, etc. ai fica complicado, mas aos poucos a gente vai tentando melhorar o tempo de lancamento, mas data exata serah dificil decidir alguma..! :(( -> Apenas algumas opiniöes, mas foi vc quem pediu... :) Continue com o -> zine, é inacreditável o número de pessoas que lêem e permanecem caladas, -> mas esperando ansiosamente os próximos números. bom, pedi mesmo!!! hehehe qto maior as criticas, vamos cada vez melhorando mais e mais o zine. Eu ia dizer q. era ateh melhor vcs. dando dicas pois o zine eh pra vcs. e tal! mas parei e refleti! pra vcs. nada... o zine eh NOSSO! ou seja, de vcs. e nosso, pois assim como voces aprendem, nohs tbm aprendemos pelo motivo da pesquisa ou entao resgatando algo q. nao lembravamos mais, sempre que "ensinamos", estamos aprendendo! por isso que nao desanimamos muito ao escrever o zine! :)) Agora quanto ao pessoal q. fica calado. isso eh q. me irrita, po a gente faz moh sacrificio e tal, e o pessoal nem fala nada! poxa podia mandar uma msg... parabens! ou entao outra ahhh vai se danar esse zine eh um lixo! hehehe qquer coisa! :)) mas diga algo! ;)) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> From: Cleber To: WU TANG CLAN CORPORATION -> Caros caras! opa... -> Eu nem sei aonde, consegui o zine de voces. O q. importa eh q. estah com ele! ;)) -> Era algo assim que eu tava precisando! Eu cansei de so ler esses zines -> hackers que nada explicam de programacao! eh.. agora alguns zines comecaram a falar de programacao... porem ainda eh pouco precisamos de algo mais dedicado a isso! :)) -> Eu nao sou programador, muito pelo contrario!! Eu a um mes atras -> comecei a me interessar por programacao. So sei um pouco de Basic, to -> pegando as manhas com algoritmos e logica com um livro que eu descolei, hmmm. legal.. Basic eh digamos que a linguagem mais facil de ser entendida e que da origem a diversas outras linguages origem digo no sentido de programacao.. quer dizer.. a maioria das linguagens usam de alguma forma a estruturacao do Basic! -> e to aprendendo legal Cobol. Alias, vcs nem citaram o Cobol no e-zine de -> vcs. Pq? heheh eh realmente cobol eh extremamente velho. Bom.. nao foi bem isso... apesar de velho.. nao conseguimos ninguem que programasse nessa linguagem e que estivesse afim de escrever no zine, porem como disse o zine eh um livro aberto e todos podem fazer parte, basta para isso vontade de participar e escrever akilo que sabe! :) se tiver interessado em ajudar na parte de cobol serah bem vindo aa corporacao... :)) -> Eu tambem comecei a ver um pouco de Pascal, Clipper e Assembler. Isso eh bom... -> Mas assembler eu desisti, pois eh extremamente complexo aquela merda. -> baixo nivel sucks. Bom.. nao eh bem por ai.. eu adoro assembly.. claro q. ele eh mais complexo.. talvez por isso eu gosto dele! ;)) hehe mas tipo eh bom saber +/- como ele trabalha, pois sem ele as outras linguagens nao sao nada.. tipo mesmo C e bom e tudo mais.. mas se vc. quiser uma melhoria em seus programas vc. precisa saber um pouco de ASM pelo menos o basico o que nao eh muito complicado e estou tentando mostrar o melhor caminho pela zine.. digo melhor, pois foi como aprendi.. claro q. corri atras, mas... -> Pascal e clipper eu dei uma parada, mas vou voltar agora! Certo... volte sim... tipo jah q. vc. conhece um pouco das duas... experimente o delphi tbm... ele usa uma estruturacao como a do pascal com algumas diferencas, mas lembra muito o clipper.. e tem uma ventagem, voce pode usar graficos.. por exemplo pode criar um programa que alem de cadastrar os clientes, mostre a foto dele por meio de scanners ou cameras. -> Eu gostaria de pedir pra voces, na parte de radio-amador comecarem -> desde uma parte mais basica e coisa e tal! Eu nem entendo desses lances, -> embora eu estude eletronica e meu professor curtia isso. certo... bom a parte de radio amador sao mais dicas de modulacao e tal o que vc. deve fazer para entrar em uma conversa, como fazer.. etc. nao eh nada radical na parte eletronica... quem sabe mais pra frente usaremos algo assim.... -> Vou dar um pulo na BBS de vcs! Eu me amarro em bbs. To ate pra montar -> a minha; so ta faltando tempo e dedicacao. heheh RA eh manero e bacana; mas -> PCboard da muito trampo! eh isso eh realmente... porem eu confesso PCB eh bem melhor q. RA e tipo nosso bbs acho q. deu uma parada estamos com falta de tempo($$) heheh assim q. conseguirmos um zip-drive o bbs volta.. eh q. as vezes da pane nos micros e tal.. e sem o backup do bbs nao dah... cancei de criar varias vezes o bbs,ai assim com o zip teremos o backup e tudo voltara ao normal! :)) -> Enfim caras, parabens pelo zine de vcs e continuem fazendo esse -> trabalho que ta animal! Tomara que vcs consigam fazer rapido o proximo -> numero, que eu to loco pra aprender mais algumas coisas! hehe valeu... mas sei lah.. talvez demore um pouco pois envolve tempo e nao o tempo de um soh.. porem o tempo de todos! :)) mas faremos o possivel para tentar lancar o mais rapido possivel! :)) -> Falow -> Obrigado pela atencao ok... T+ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> From: Paulo Sergio To: WU TANG CLAN CORPORATION -> valeu ! -> este site me eh util ! beleza... precisando de algo eh soh avisar! -> um abraco pra vc. tbm! >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> From: Joao Gilberto Magalhaes To: WU TANG CLAN CORPORATION -> Achei legal a publicacao de voces. Muito interessante. Quando fizer uma -> proxima atualizacao colocarei um link para vcs... certo.. obrigado pela forca! -> Agora uma sugestao: vamos nessa... -> 1. Voces precisam divulgar mais o seu trabalho :) certo... isso eh verdade.. entramos na rede com pouca potencia, porem ela foi ateh q. bem divulgada em bbss de Sao Paulo e espero que o pessoal tenha espalhado pelas bbss do Brasil inteiro! :)) -> 2. A internet eh bastante dinamica. Que tal se vcs dividissem a edicao em -> topicos com HyperLinks? Dessa forma o Leitor poderia ler o assunto -> especifico do seu interesse. ao inves de um super texto para ser lido de -> uma vez? Cansa... Apesar de bom... certo... bom estamos pretendendo lancar ou nessa ou na numero 3 um programa q. lerah os textos e mostrah por partes, com isso iremos acrescentar alguns caracteres no texto, porem ficarah muito melhor sua leitura pois aparecerah menus de escolha e tal... agora qto a internet e a divisao ai jah foi feito. Valeu pela dica! -> 3. Deixem o texto integral apenas na opcao de DownLoad. certo, isso tbm. jah foi feito. -> Espero que possa ter contribuido com alguma coisa... Ok.. valeu pelas dicas! :)) -> []s e ate mais em minha home. t+... Px_LARVA ESPOLETA EAGLE'S POWER LaSt^WaRRioR .~`^'-_!+=/.,~`^'-_!.~`@$^ 01 - BATE PAPO INICIAL .~.~`^'-_!+=/.,~`^'-_!`^'-_! Bom, Estamos pronto para lancar o segundo numero da nossa Zine que me parece estar ganhando alguns fans... heheh quer dizer.. alguns leitores! :)) Bom Algumas pessoas reclamaram de algumas falhas na escrita nao no conteudo mais nos acentos, nas expressoes... etc... bom... muita coisa.. nao tem acento mesmo.. pois nao sao todos os leitores que usam Windows ou Dos... cada um tem sua plataforma... e como em todas as letras(nao os acentos) sao iguais intaum resolvemos optar por uma leitura melhor da zine! :)) mas tudo bem... isso sao coisas simples.. :)) [Eagle's Power]'s Entao eh isso ai malucada..ehehe como o Eagle jah disse, vamos jogar mais um pouco de lenha na fogueira pra festa nao acabar... eh dessa maneira eh dessa forma..eheh tah dodio tha danado mas aI bando de doido, recebemos bastante incentivos e muitas criticas construtivas tipo: AH SE MATA!!! ehheh brinca- deira mas recebemos bastante conselhos, e estamos observando que o povo tah gostando da baguncera...eheh entao beleza que pura danado, vamos queimando tudo e cada vez mais escrevendo, ou escrevendo tudo e cada vez queimando mais. eheheheheh. Estamos muito contente de que tenham lido o Z|N3 e gostado, se nao gostou eu tenho uma solucao logica..ehehe, vai lendo que voce se acostuma. Malucada entao vamos arregacar tudo mais tudo por cah BELEZAAAAA!!! De inicio vou dizendo que vaum ocorrer algumas inovacoes .... com o Z|NE, vamos dar um aspecto mais profissional pra revista do tipo de um programa feito para leitura da revista, do tipo tecle ak. para Linguagem 'C' , ak. pra 'sair' ...... etc! e seria bem melhor, pois as materias ficariam separadas e assim tmb. podemos facilitar a sua leitura..ehhehehhihaihaiiahihaih, entao deixa eu ver se tem mais alguma coisa pra escrever.. hmmmmmmmmmmmmmmmm ah jah sei, tem outra coisera q. eu tava esquecendo, tipo eu mais o Fabio Freire, estamos montando uma parte da Z|N3, na qual seria dedicada aos magrelos.... ehheehehhehe e o que vou adiantando eh o titulo da bagaca..ehehhehehe seria "OS MAGRELOS II A REVOLTA DA CHIBATADA." (Os dois is(II), nao siguinifica que eh a segunda versao, eh uma foto minha e do Fabio Freire..ehehehehe, e a parte da chibatada eu nao sei pq. ohhhh, mas achei que ficaria legal..ehehahihiahha ...mas entao beleza, seria bem assim: "\Ì/" "\Ì/" OS MAGRELOS II A REVOLTA DA CHIBATADA ./\. ./\. Hmmmmmm, fugindo do assunto dos magrelos, eu queria dizer que se tiver algum malucao ai afim de dar uma forca..eeheheh soh dah um toque falora? mas beleza tudo legal entao, vamos agitar as bagacera agora........comece a ler, mas nao PARRRRRRRRREEEEEEEEEEEEE !!!!!!!!!!!!! morreu! ▒00þ╩ÚÚÚÚÚ£Ø«ë§ §╩tæ▒00þ╩ÚÚÚÚÚ£ Obs.: sua copia eh PIRATA! Ø«ë£Ø«ë§╩tæ▒00þ ou ocorreu um erro na descompactacao. []'pX \ os mesmos malucos / da primeira formacao \ continuam a bitolar Px_LARVA ESPOLETA / a sua mente, mas uma EAGLE'S POWER \ coisa eh certa, LaSt^WaRRioR / nenhum de nos ak \ tem certeza de nada / entao...... \ apenas LEIA! .~`^'-_!=+,~`^! 02 - CONCEITOS BASICOS EM LINGUAGEM ASSEMBLY ~`^'-_!+=/.,~`^'* Operadores Basicos/Avancados Sintaxe: MOV Destino,Fonte exemplo: MOV AX,3 Descricao: Move um valor para um registrador ou variavel definida pelo programador Explicacao: AX seria o registrador, e 3 o valor que voce iria colocar em AX porem voce pode mover valores entre dois registradores e outras coisas, veja alguns exemplos: MOV AX,BX MOV TESTE,AX onde teste eh uma variavel definida por voce(programador) Simplificacao: O MOV seria a mesma coisa que usar AX=3,TESTE=3, etc... ADD Destino,Fonte - O comando seria usado na seguinte forma: "ADD ax,bx" ax iria conter na forma mais groceira de se dizer a fonte e o destino.. mas como assim!? bom, esse funcao faz o seguinte: Pega o valor de ax e soma com o valor do outro registrador ou numero... ai coloca o resultado no proprio ax. seria o mesmo que: ax = 10, bx = 5, sendo assim, ax=15 pelo simples motivo de (10+5)=15 :)) ax=ax+bx ax=10+5 ax=15 SUB Destino,Fonte - O comando seria usado na seguinte forma: "SUB ax,bx" ax sera subtraido com o valor contido em bx, eh o mesmo caso do ADD explicado acima. porem ao inves de somar subtrai.... Seria o mesmo que: Digamos que ax = 10, e que bx = 5, sendo assim, ax no final seria igual a 5, pois: ax=ax-bx ax=10-5 ax=5 INC destino - O comando seria usado na seguinte forma: "INC AX" este eh mais simples, apenas soma o registrador com +1, seria o mesmo que: AX=AX+1 DEC destino - O comando seria usado na seguinte forma: "DEC AX" este eh mais simples, apenas subtrai o registrador com -1, seria o mesmo que: AX=AX-1 AND destino,Fonte - Conjuncao de operadores Bit a Bit Veja a tabela: ┌───────────┬───────────┬─────────────┐ │ Fonte │ Destino │ » Saida « │ ├───────────┼───────────┼─────────────┤ │ 1 │ 1 │ 1 │ ├───────────┼───────────┼─────────────┤ │ 1 │ 0 │ 0 │ ├───────────┼───────────┼─────────────┤ │ 0 │ 1 │ 0 │ ├───────────┼───────────┼─────────────┤ │ 0 │ 0 │ 0 │ └───────────┴───────────┴─────────────┘ O operador AND funciona desta forma, sempre que o valor fonte e o valor destino forem 1 o resultado sera 1 caso contrario o resultado sera 0. Atencao, ele checa numero por numero mas como!? bom, pelo que sabemos, o assembly trabalha com numeros bina- rios por isso eh complexo, mas para nos ajudar inventaram os numeros de- cimais e hexa.... Bom, mas meso que usamos decimal ou hexa, o assembly trabalha com binario, para isso o compilador converte esse numero que voce usou(caso jah nao esteja) para binario, com isso ele pode trabalhar com os numeros de 1 em 1, veja o exem- plo BINARIO que tambem pode ser usado e eu considero mais simples que os decimais..... MOV AL,01010101b ;lembrando que AL tem 8 bits AND AL,10001011b ;agora vamos ao resultado ----------- 00000001b ;pronto em al ficaria isso! OR Destino,Fonte - Logico Incluso OR Veja a tabela: ┌───────────┬───────────┬─────────────┐ │ Fonte │ Destino │ » Saida « │ ├───────────┼───────────┼─────────────┤ │ 1 │ 1 │ 1 │ ├───────────┼───────────┼─────────────┤ │ 1 │ 0 │ 1 │ ├───────────┼───────────┼─────────────┤ │ 0 │ 1 │ 1 │ ├───────────┼───────────┼─────────────┤ │ 0 │ 0 │ 0 │ └───────────┴───────────┴─────────────┘ O operador OR funciona desta forma, sempre que o valor fonte e o valor destino forem 0 o resultado sera 0 caso contrario o resultado sera 1. MOV AL,01010101b ;lembrando que AL tem 8 bits OR AL,10001011b ;agora vamos ao resultado ----------- 11011111 ;pronto em al ficaria isso! XOR - OR Exclusivo Veja a tabela: ┌───────────┬───────────┬─────────────┐ │ Fonte │ Destino │ » Saida « │ ├───────────┼───────────┼─────────────┤ │ 1 │ 1 │ 0 │ ├───────────┼───────────┼─────────────┤ │ 1 │ 0 │ 1 │ ├───────────┼───────────┼─────────────┤ │ 0 │ 1 │ 1 │ ├───────────┼───────────┼─────────────┤ │ 0 │ 0 │ 0 │ └───────────┴───────────┴─────────────┘ O operador XOR funciona desta forma, sempre que o valor fonte e o valor destino forem 0 ou 1 o resultado sera 0 caso contrario o resultado sera 1. MOV AL,01010101b ;lembrando que AL tem 8 bits XOR AL,10001011b ;agora vamos ao resultado ----------- 11011110 ;pronto em al ficaria isso! NOT - Inverte todos os BITS de um BYTE ou WORD exemplo: MOV AL,00001111b NOT AL a entrada foi 00001111b, logo apos o NOT ficarah: 11110000b simples nao!? mas muito util! TEST Destino,Fonte - O comando seria usado na seguinte forma: "TEST ax,10" os dois valores serao testados bit a bit e ao contrario de AND que salva o valor na variavel de destino, ele apenas altera o estado dos FLAGS. Sendo Assim, vc. podera usar os comandos de salto como JMP, JE , etc.. q. veremos mais adiante. SHR destino,Fonte - Mudanca aritimetica da direita, divide o numero por Fonte^2, sintaxe: "SHR ax,2" ira dividir ax por 4, pois (2^2=4) SHL destino,Fonte - Mudanca aritimetica da esquerda, multiplica o numero por Fonte^2, sintaxe: "SHL ax,2" ira multiplicar ax por 4, pois (2^2=4) Í───────────À ║ SAL e SAR ║ Ë───────────¢ SAL funciona da mesma maneira que SHL. SAR: ┌─────┐ │ ┌┴─────────────────┐ ┌─────┐ └───>│ │─────>│Carry│ └──────────────────┘ └─────┘ msb lsb SAL desloca todos os bits para a direita (o ultimo bit vai para o flag carry) e repete o conteudo do antigo ultimo bit (que foi deslocado). SAR eh a abreviacao de SHift Arithmetic Right. Sendo um deslocamento aritimético, näo poderia se desconsiderar o sinal do dado deslocado (dai o motivo de repetir o bit mais significativo!). Í───────────À ║ RCL e RCR ║ Ë───────────¢ RCL: ┌────────────────────────────────────────┐ │ │ │ ┌─────┐ ┌──────────────────┐ │ └────┤Carry│<────│ │<───┘ └─────┘ └──────────────────┘ msb lsb RCR: ┌──────────────────────────────────────┐ │ │ │ ┌──────────────────┐ ┌─────┐ │ └──>│ │─────>│Carry├──┘ └──────────────────┘ └─────┘ msb lsb RCR e RCL rotacionam o dado "passando pelo carry". Isto significa que o bit menos significativo (no caso de ROR) será colocado no flag de carry e que o conteúdo antigo deste flag será colocado no bit mais significativo do dado. Í───────────À ║ ROL e ROR ║ Ë───────────¢ ROL: ┌─────────────────────────┐ │ │ ┌─────┐ │ ┌──────────────────┐ │ │Carry│<──┴─│ │<───┘ └─────┘ └──────────────────┘ msb lsb ROR: ┌─────────────────────────┐ │ │ │ ┌──────────────────┐ │ ┌─────┐ └──>│ │──┴──>│Carry│ └──────────────────┘ └─────┘ msb lsb Aqui a rotaçao e' feita da maneira correta... o flag de carry apenas indica o ultimo bit que "saiu" e foi para o outro lado... A sintaxe dessas instruçöes é a seguinte: ┌─────────────────────────────────────────────────────────────────┐ │ SHL AX,1 │ │ SHR BL,1 │ │ RCL DX,CL │ │ ROL ES:[DI],CL │ └─────────────────────────────────────────────────────────────────┘ Note que o segundo operando é um contador do número de rotaçöes ou shifts seräo efetuadas. Nos microprocessadores 80286 em diante pode-se usar um valor diferente de 1, no 8088/8086 näo pode! Repare também que podemos usar APENAS o registrador CL como operando da direita se quisermos usar algum registrador! ■ Multiplicaçäo: Os processadores da família 80x86 possuem instruçöes de multiplicaçäo e divisäo inteiras (ponto flutuante fica pro 8087). Alguns cuidados devem ser tomados quando usarmos uma instruçäo de divisäo (que será vista mais adiante!). Uma coisa interessante com a multiplicaçäo é que se multiplicarmos dois registradores de 16 bits obteremos o resultado necessariamente em 32 bits. O par de registradores DX e AX säo usados para armazenar esse número de 32 bits da seguinte forma: DX será a word mais significativa e AX a menos significativa. Por exemplo, se multiplicarmos 0FFFFh por 0FFFFh obteremos: 0FFFE0001h (DX = 0FFFEh e AX = 0001h). Eis a regra para descobrir o tamanho do restultado de uma operaçäo de multiplicaçäo: ┌─────────────────────────────────┐ │ A * B = M │ ├──────────┬───────────┬──────────┤ │ A │ B │ M │ ├──────────┼───────────┼──────────┤ │ 8 bits │ 8 bits │ 16 bits │ │ │ │ │ │ 16 bits │ 16 bits │ 32 bits │ └──────────┴───────────┴──────────┘ A multiplicaçäo sempre ocorrerá entre o acumulador (AL ou AX) e um outro operando. Eis a sintaxe das instruçöes: ┌────────────────────────────────────────────────────────────────┐ │ MUL BL ; AX = AL * BL │ │ IMUL CX ; DX:AX = AX * CX │ └────────────────────────────────────────────────────────────────┘ A primeira instruçäo (MUL) näo considera o sinal dos operandos. Neste caso, como BL é de 8 bits, a multiplicaçäo se dará entre BL e AL e o resultado será armazenado em AX. A segunda instruçäo leva em consideraçäo o sinal dos operandos e, como CX é de 16 bits, a multiplicaçäo se dará entre CX e AX e o restultado será armazenado em DX e AX. Lembrando que o sinal de um número inteiro depende do seu bit mais significativo! ■ Divisäo: Precisamos tomar cuidado com a divisäo pelo seguinte motivo: Se o resultado näo couber no registrador destino, um erro de "Division by zero" ocorrerá (isto näo está perfeitamente documentado nos diversos manuais que li enquanto estudava assembly 80x86... Vim a descobrir este 'macete' numa antiga ediçäo da revista PC MAGAZINE americana). Outro cuidado é com o divisor... se for 0 o mesmo erro ocorrerá! A divisäo pode ser feita entre um número de 32 bits e um de 16 ou entre um de 16 e um de 8, veja a tabela: ┌────────────────────────────────┐ │ A / B = Q e resto │ ├──────────┬───────────┬─────────┤ │ A │ B │Q e resto│ ├──────────┼───────────┼─────────┤ │ 32 bits │ 16 bits │ 16 bits │ │ │ │ │ │ 16 bits │ 8 bits │ 8 bits │ └──────────┴───────────┴─────────┘ Assim como na multiplicaçäo o número (dividendo) de 32 bits é armazenado em DX e AX. Depois da divisäo o quociente é armazenado em AL e o resto em AH (no caso de divisäo 16/8 bits) ou o quociente fica em AX e o resto em DX (no caso de divisäo 32/8 bits). Exemplo da sintaxe: ┌─────────────────────────────────────────────────────────────────┐ │ DIV CX ; AX=DX:AX / CX, DX=resto │ │ IDIV BL ; AL=AX / BL, AH=resto │ └─────────────────────────────────────────────────────────────────┘ O primeiro caso é uma divisäo sem sinal e o segundo com sinal. Note os divisores (CX e BL no nosso exemplo). Na divisäo 16/8 bits o dividendo é armazenado em AX antes da divisäo... No caso de 32/8 bits DX e AX säo usados... Mais um detalhe: Os flags, depois de uma multiplicaçäo ou divisäo näo devem ser considerados. obs: o AX eh apenas exemplo vc. pode usar outros registradores inclusive os definidos e criados por voce.. seria mais uma ilustracao no caso! :) note tambem que AX eh substituido apenas uma vez, como no exemplo: AX=AX+BX AX=1+2 ai voce me pergunta.. por que isso!? sendo que quando aprendi a substituir valores na escola a gente sempre trocava todos os valores identicos!? bom.. a resposta eh simples, pois o computador precisa guardar em algum lugar o valor do resultado e o valor sera guardado no registrador de destino, no caso o AX :)) nota: as explicacoes sobre os comandos DIV,IDIV,MUL,IMUL,SAL,SAR,ROL,ROR,RCL e RCR. foram retirados do tutorial da RBT,o autor eh Frederico Pissarra, sendo assim,todos os creditos para esses 10 comandos sao dados a ele! :) aqui vai um programinha simples em duas versoes para imprimir na tela uma msg! jah o segundo eh mais complexo e usa o segmento de video e tal... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..corte aqui..<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Oi Segment ; Inicia o segmento oi! :)) assume cs:oi,ds:oi ; Assume cs e ds como sendo do segmento oi org 100h ; Gera um .COM comeco: jmp inicio ; o Controle Comeca Aqui msg db 'Olha Nao eh que escreve mesmo!$'; Msg a ser impressa inicio: Lea dx,msg ; Coloca a offset(deslocamento) da msg em ; DS:DX ou seja, no segmento DS e desloca- ; mento DX mov ah,09h ; Funcao para imprimir msgs no DOS int 21h ; INT do DOS mov ax,4c00h ; Retorna ao DOS int 21h ; INT do DOS oi ENDS ; Final da segmento oi END comeco ; eh necessario para a conclusao do programa >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..corte aqui..<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< bom, no primeiro programa eu usei a funcao 09h da int 21, essa funcao serve para imprimir uma msg via DOS eh bem simples veja: LEA DX,MSG ;neste caso eh necessario colokar em DX o deslocamento de onde se ;encontra a msg q. serah impressa, isso eh obrigatorio nesta funcao MOV AH,09h ;esta eh a funcao INT 21h ;esta eh a INT msg db 'Olha Nao eh que escreve mesmo!$' ; no caso estah eh a MSG eu usei ; DB pois significa Define Byte, ou seja, isso irah definir o BYTE ; q. serah impresso na tela, no caso essa msg inteira entre ; 'aspas simples' bom, notem tbm um $ no final da msg isso indica a ; funcao 09h q. ela deve interromper a leitura ali, intaum o DX ; indica onde comeca a frase e o $ onde termina! bom, do primeiro exemplo eh soh! >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..corte aqui..<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< codigo segment assume cs:codigo,ds:codigo org 100h ; ateh ak. vc. jah conhece! comeco: mov ax,0B800h ; coloca em ES o segmento de VIDEO no modo colorido! mov es,ax ; usa - se ES pelo motivo q. este eh o segmento extra ; vc. poderia usar outro como DS, porem DS eh o seg- ; mento de dados e iria dar problema no programa e ; outra a instrucao q. serah usada ira precisar de ES ; entao eh melhor usa - lo! mov di,1004 ; local onde serah impressa a msg lea si,msg ; indica onde a msg inicia! e coloca em SI mov cx,tam ; tamanho da msg para nao dar erro, obs: isso serah ; usado com o LOOP pois CX indica qtos loops serao ; feitos! mov ah,0ch ; estah eh a cor, se quiser ver outra cor, mude ak. ; para outro numero, e vera outra cor, soh nao coloke ; 0(zero) senao nao vera nada! :)) cld ; limpa o flag de DIRECAO, ou seja, irah na ordem ; crescente, do comeco ao fim...! volta: lodsb ; le o q. estah no endereco DS:SI e coloka em AL stosw ; le o q. estah em AX e coloka em ES:DI,no caso foi ; usado STOSW pra ler o registrador AX pois colocamos ; em AL o caracter para imprimir em AH a cor para ; ser impressa, por isso STOSW. loop volta ; faz o loop CX vezes! mov ax,4c00h ; termina o programa pelo DOS int 21h ; int do DOS msg db 'Ola, Este eh o meu teste de Velocidade!' tam equ $-msg ; isto indica o tamanho(LENght para programadores!) da MSG codigo ends end comeco >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..corte aqui..<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< bom, este exemplo eh mais complexo pois mexe com o segmento de video, porem eh muuito mais rapido e podemos usar cores o q. no exemplo anterior na dava! ahhhh para compilar estes programas eu sugiro o uso do Turbo Assembly, use: TASM PROG.ASM isso irah gerar o .OBJ TLINK /X/T PROG.OBJ esse irah gerar o .COM o /X indica q. nao eh para gerar os arquivos .MAP isso soh enche o HD.... jah a opcao /T indica para gerar o .COM caso voce queira gerar o .EXE nao use o /T porem nesses exemplos vc. tem q. gerar o .COM o .EXE usa outras coisas q. nao tem nesses programas! |EAGLE'S POWER| .~`^'-_!+=/.,~`^'-_ 03 - CONCEITOS BASICOS EM LINGUAGEM "C" ~`^'-_!+=/.,~`^'-_ Opa, e la vamos nois novamente....eh dessa manera, mas ai malucada, serah q. oceis intenderam arguma coisa na primeira zina...heheeh espero q. sim oka? Entao vamos dar continuidade a essa doidera e maravilhosa linguagem. Pelo que eu percebi ak eu parei na parte de exemplos e tudo mais, e lembro de ter dito q. eu passaria pra voceis uma tabelinha com os codigos com a barra invertida do tipo (\n)... pois bem, entao se liga soh nessa tabela ai velho! ┌─────────────────────────────────────────────────────────────┐ │ CODIGO SIGNIFICADO │ │─────────────────────────────────────────────────────────────│ │ │ │ \b Retrocesso(BS) │ │ \f Alimentacao de Formulario(FF) │ │ \n Nova Linha(LF) │ │ \r Retorno do Carro(CR) │ │ \t Tabulacao Horizontal │ │ \" " │ │ \' ' │ │ \0 Nulo │ │ \\ Barra Invertida │ │ \v Tabulacao Vertical │ │ \a Alerta(BEEP) │ │ \N Constante Octal=(n) │ │ \xN Constante Hexadecimal=(n) │ └─────────────────────────────────────────────────────────────┘ Beleza pura entao....ai foram os codigos de barra invertida, entao agora espero q. voce comece a prestar atencoes redobradas apartir de agora, pois comecaremos a ver os operadores. ───── OPERADORES ───── Nessa rica linguagem, existem 4 classes de operadores: . ARITIMETICOS . RELACIONAIS . LOGICOS . BIT a BIT ─────────── Operadores Aritimeticos ──────────── |Px_LARVA ESPOLETA| .~`^'-_!+=/.,!~`^ 04 - CONCEITOS BASICOS EM LINGUAGEM "C++" -_!+=/.,~+`^'-_!*_ .~`^'-_!+=/.,~^'- 05 - CONCEITOS BASICOS EM LINGUAGEM CLIPPER _!+=/.,~`^'-_!.~ hmmm. como dito na outra edicao nao vou ficar escrevendo novamente o que jah foi feito pela CA, os criadores do clipper.. eh o seguinte.. todas as funcoes estao perfeitamente explicadas porem... algumas podem causar duvidas como muitas q. eu tive... entao... quem quiser alguma funcao do clipper 5.2 explicada mais detalhadamente, por favor.. mande msgs. com o nome da funcao que deseja explicacao que terei o maior prazer em expli- ca - la! :)) Bom, mas voltando ao clipper em si... tenho algumas dicas sobre como criar a sua propria PLL ou se preferir a sua LIB e tudo mais... :)) 1 - Criando sua Propria PLL! :)) obs: o [ENTER] significa que voce deve apertar a tecla ENTER :)) no prompt do dos digite: RTLINK [ENTER] ai ira entrar no RTLINK depois disso digite: PRELINK [ENTER] ira dar inicio ao script do rtlink onde voce podera criar suas proprias PLLs.... bom apos a inicializacao do script digite: OUTPUT MINHAPLL [ENTER] esse serah o nome do arquivo que voce criara. depois eh necessario indicar ao link-editor(RTLINK) as livrarias(.LIB). ex: LIB CLIPPER,EXTEND,TERMINAL,DBFNTX [ENTER] bom, essas sao as basicas, mas voce pode acrescentar outras que use no programa. apos isso voce tera que mostrar uma referencia dos comandos/funcoes que ira querer em seu programa, como por exemplo: obs: REFER significa q. vc. irah associar a PLL aas funcoes usando como REFERencia as chamadas basicas das funcoes, como por exemplo _VPOS que guarda funcoes como ? ou @10,20 SAY entre outras.... cada uma serve pra ua coisa! :)) ahh nao se eskessa do _ no inicio das referencias.... REFER _VOPS,_VMACRO,_VDB,_DBFNTX [ENTER] REFER _VTERM,_VPICT,_GETSYS [ENTER] REFER _VDBG [ENTER] EXCLUDE ERRORSYS o exclude tem a funcao de retirar no caso o ERRORSYS da funcao pois este como DEFAULT seria compilado! agora uma descricao simples de cada comando: PRELINK: Indica ao RTLINK que serah iniciada a Pre-Linkagem de modulos. OUTPUT: Indica o nome da biblioteca pre-linkada(PLL) LIB: Nome Das livrarias(.LIB) que serao usadas na pre-linkagem. REFER: Extrai os modulos e coloca no arquivo PLL EXCLUDE: Retira os modulos mencionados da pre-linkagem, no caso foi dado como exemplo o errorsys que pode ter vindo com algum outro modulo e seja desnecessario! agora o exemplo dado acima de um modo mais correto, ou seja, como deveria ficar em seu computador! RTLINK [ENTER] PRELINK [ENTER] OUTPUT MINHAPLL [ENTER] LIB CLIPPER,EXTEND,TERMINAL,DBFNTX [ENTER] REFER _VOPS,_VMACRO,_VDB,_DBFNTX [ENTER] REFER _VTERM,_VPICT,_GETSYS [ENTER] REFER _VDBG [ENTER] EXCLUDE ERRORSYS [ENTER] ; [ENTER] Bom.. isso seria o que voce escreveria a partir do dos em diante..... agora voce pode montar um arquivo .LNK q. tenha tudo isso menos a linha RTLINK com isso o arquivo poderia ser automaticamente pre-linkado por exemplo... crie um arquivo chamado MINHAPLL.LNK e coloke o seguinte: PRELINK OUTPUT MINHAPLL LIB CLIPPER,EXTEND,TERMINAL,DBFNTX REFER _VOPS,_VMACRO,_VDB,_DBFNTX REFER _VTERM,_VPICT,_GETSYS REFER _VDBG EXCLUDE ERRORSYS pronto agora salve e digite o seguinte: RTLINK @MINHAPLL pronto ira fazer todos os passos descrito acima de uma unica vez! :)) ahhh lembrando que o ; eh necessario para se dizer ao link-editor que ali acaba sua tarefa e retornar ao DOS! :)) agora com a PLL pronta, podemos usa - la em nossos programas, com a seguinte sintaxe: RTLINK FILE Prog.PRG PLL MINHAPLL.PLL pronto. assim irah criar um .EXE muito menor e muito mais veloz... porem para a execucao perfeita do programa, eh necessario que o arquivo MINHAPLL.PLL esteja no mesmo diretorio do programa, ou pelo - no path! 1 - Criando sua Propria LIB! :)) Bom.. neste caso eh beeem mais complicado... nos precisamos criar a LIB em um outro programa como por exemplo o assembly ou mesmo no clipper porem isso nos obrigara a um maior conhecimento... mas eh o seguinte, voce cria um arquivo .OBJ com ele vc. compila o seu fonte, por exemplo crie um programa com a funcao IMPRIME ex: Programa: IMPRIME.PRG ? "ISTO EH UM TESTE! :))" ai compile o programa com: CLIPPER IMPRIME.PRG e crie um outro pra executar essa funcao, como por exemplo: Programa: TESTA.PRG IMPRIME() ai compile o programa com: CLIPPER TESTA agora voce estah com dois programas, o primeiro mostra uma frase na tela, jah o segundo nao faz absolutamente nada sem o primeiro, entao vem a pergunta, certo e agora como eu faco para o segundo funcionar!? eh simples... voce usa o rtlink da seguinte forma: RTLINK FI TESTA,IMPRIME com isso voce terah o arquivo TESTA.EXE porem serah criado a partir do IMPRIME.OBJ que na verdade estah fazendo o papel de uma .LIB bom... eh isso... :)) qquer duvida estamos ai! :)) |EAGLE'S POWER| ~`^'-_!+=/.,~`^. 06 - CONCEITOS BASICOS EM LINGUAGEM DELPHI ^'-_!+=.~`^'-_!+=/ Hi there! Bom, quero primeiro agradecer a todos q nos escreveram, e pedir para que continuem a escrever... Eh disso q precisamos para continuar o Zine. Em nossa ultima edicao, vimos um pouco de como trabalhar com o "Ambiente" do Delphi, como responder a eventos e mudar propriedades. Mas naum vimos muuuito codigo ainda, e bem, a melhor forma de aprender a programar eh programando :) Intaum tente isto no evento OnCreate de um Formulario em um novo projeto: Form1.Caption := 'Wu TanG ClAn ZiN3 eh d+ :)'; Entendeu? NAO!? Intaum eh o seguinte: Isso ai altera a propriedade Caption (o titulo) do Formulario. Para alterar qualquer propriedade (desde q nao seja readonly), de qualquer objeto (componente, formulario, etc.), vc deve usar o nome do objeto + o operador ponto (.) + o nome da propriedade := Um valor qualquer. Confuso? Olha soh: Form1.Caption := 'Estou aprendendo alguma coisa!' | | | | | \__ Valor a ser atribuido. | \__ Nome da propriedade. \__ Nome do objeto. Espero q tenha ficado + claro assim. Agora eh soh rodar (F9 - RUN) o programa que voce acabou de gerar. Qndo voce roda seu programa dentro do Ambiente Delphi, ele faz o seguinte: 1. Compila o codigo-fonte Pascal descrevendo o formulario 2. Compila o arquivo do projeto. 3. Cria um arquivo executavel (.EXE) vinculando as bibliotecas adequadas (Qndo especificado). 4. Executa o arquivo .EXE, usualmete no modo de depuracao. Como vc pode ver, o simples fato do Delphi compilar seu programa ao inves de interpreta-lo como a maioria das linguagens, o torna muito + rapido. "Tudo vai para algum lugar!" -=-=-=-=-=-=-=-=-=-=-=-=-=-=- Eh isso ai, tudo vai para algum lugar, nada desaparece no Delphi. Toda alteracao feita no ambiente visual termina em algum codigo. Nada permanece oculto e inacessivel. Embora parte dele possa ser razoavelmente complexa, voce pode editar tudo! Sabe, uma vez, ao explicar sobre redes a alguns alunos de um curso de Hardware, eles me perguntaram: "E pra que eu vou precissar disso?" Bom, isso me desanimou totalmente! Odeio explicar as coisas a quem naum estah interessado. Lembrei disso porque, bom existe coisas que eu vou escrever aki q vc naum vai morrer se naum souber, mas naum custa nada saber, alem do +, um dia vc pode precisar saber disso como eu precisei :) Vou pedir aos leitores q por favor naum fiquem soh no que aparece aki no zine, mas que tambem tentem bolar seus proprios programas, mesmo que nao seja mencionado aki. Use os comandos que sao expostos. Se vc for fazer 1 ou 2 programinhas por mes no Delphi, qndo sair a outra edicao vc jah eskeceu tudo! Vamos ver o q o Delphi faz pra gente -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Mesmo que voce naum entenda tudo isso que se segue, nos precisamos ver o que o Delphi criou pra gente quando abrimos um novo projeto/formulario. Quando vc inicia um projeto novo, em branco, o formulario vazio tem algum codigo associado a ele, com vc pode ver aki: unit Unit1; interface uses SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private declarations } public { Public declarations } end; var Form1 : TForm1; implementation {$R *.DFM end. O arquivo, nomeado Unit1, usa uma serie de unidades e define um novo tipo de dados (uma classe) e uma nova variavel (um objeto daquela nova classe). A classe recebe o nome de TForm1 e eh derivada de TForm. A variavel global eh Form1, do novo tipo TForm1. Pega ai: ------------------------------------------------------------------------- Units sao os modulos em que um programa Pascal eh dividido. Quando inicia um novo projeto, voce tem um programa e uma unit. As units sao entao compiladas separadamente e vinculadas ao programa principal. Em outras palavras, units sao os arquivos de codigo-fonte Pascal indicados pela extensao .PAS -------------------------------------------------------------------------- Se vc der um novo nome aos arquivos, o codigo mudara ligeiramente, uma vez que o nome da unit deve refletir o nome do arquivo. Se vc der o nome WTC.PAS ao arquivo, o codigo iniciara com: unit WTC; Assim que vc comeca a adicionar componentes, o codigo tambem sera alterado, conforme o componente q vc adicione. Por ex. se vc adicionar um botao, o codigo tera o segunte trecho alterado: type TForm1 = class(TForm) Button1: TButton; private { Private declarations } public { Public declarations } end; Agora se vc mudar a propriedade Name do botao (usando o Object Inspector) para Push_Me, o codigo mudara + uma vez: type TForm1 = class(TForm) Push_Me: TButton; private { Private declarations } public { Public declarations } end; Estabelecer outras propriedades que naum sejam o nome naum exerce nenhum efeito no codigo-fonte. As propriedades do formulario e seus componentes sao armazenados num arquivo de descricao do formulario em separado (com uma extensao .DFM). Adicionar novos manipuladores de eventos causam maior impacto sobre o codigo. Cada vez q vc adiciona um novo manipulador para um evento, uma linha eh adicionada a definicao do tipo de dados do formulario, um conjunto de metodos vazio eh adicionado a parte de implementacao e algumas informacoes sao armazenadas no arquivo de descricao do formulario (.DFM). Arquivos de um sistema em Delphi -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- O delphi, diferentemente de outras linguagens populares para DOS, possui, para cada Projeto uma serie de arquivos distintos. Vc deve tomar cuidado ao nomear determinados arquivos, pois em alguns deles, o nome do arquivo deve refletir um trecho de codigo, como no caso das units e arquivos de projeto. As extensoes de arquivos Delphi -------------------------------------------------------------------------- Extensao Tipo de Arquivo Descricao -------------------------------------------------------------------------- DCU Unidade (Unit) Estes arquivos de objetos sao o compilada resultado da compilacao de um arquivo .PAS (e o seu formulario) ~DF Backup (.DFM) Backup do arquivo de mesmo nome .DFM (Descricao do formulario) DFM Desenvolvimento Arquivo de descricao do form. (Em formato binario) DOF Desenvolvimento Arquivo c/ as configuracoes atuais para as opcoes do projeto. A estensao era .OPT no Delphi 1. ~DP Backup (.DPR) Backup do arquivo do projeto (veja .DPR abaixo) DPR Desenvolvimento Arquivo do projeto, lista todos os elementos do projeto e oferece alguma inicializacao. DSK Desenvolvimento Este arquivo contem informacoes sobre o desktop, como posicao das janelas e arquivos abertos no editor, inclusive algumas opcoes de ambiente DSM Dados do Object Armazena inf. do Browser e pode Browser ser usado para acessar inf. sem ter de recompilar o projeto (ou qndo vc naum puder recompila-lo por causa de algum erro). EXE Arquivo executavel Hummm... Precisa explicar??? ~PA Backup (.PAS) Backup de arquivos de Units (PAS) (Veja ref. abaixo) PAS Codigo fonte da Codigo fonte de uma Unit Pascal, Unit que pode ser o codigo-fonte de um formulario, ou um arquivo fonte independente. RES Recursos compilado O arquivo binario associado ao projeto e que contem por padrao, seu icone. Vc pode adicionar outros recursos ou outros arq. deste tipo ao projeto ---------------------------------------------------------------------------- Uma Base muuuuuuuuuuuuuito importante MESMO! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Se vc jah programou em Pascal ou outra linguagem tipada, vc jah sabe o que eu vou falar, mas se nao, LEIA, RELEIA ate entender tudo, ateh o ultimo detalhe! hehehe Isso aki vc vai usar pro resto da vida. Nesta parte, vou falar um pouco dos tipos de dados. Olha soh: Dado | Tipo | Algoritmo -------+---------+---------- 'A' | Char | Caracter \ Alguns livros e professores discordam, 'AA' | String | String / acho q por nao preverem dados de 1 caracter! '1234' | String | String 1234 | Integer | Inteiro 1234.5 | Real | Real Esses ai sao os tipos basicos de dados, todos eles possuem uma faixa, que sera mostrada + pra frente. Explicando, isso ai, em "Dado" eh soh um exemplo e note as '' nos dados do tipo Char e String, eles sao REALMENTE necessarios! Sem os '', o compilador "pensa" que isso eh um inteiro ou nome de comando/funcao e vai acusar erro. Pra quem naum faz PD, Algoritmo eh: "Um conjunto de comandos organizados de maneira logica de forma a garantir a sua repetibilidade". Em outras palavras, uma representacao em determinada linguagem com suas regras e sintaxes proprias que expressao a logica que vc criou para solucionar o problema que o levou a escrever o codigo! Esses nomes sao como um "padrao" aki no Brasil. Jah os "Tipos" sao os nomes desse "tipo" de dado pro Delphi. Por ex, se vc quiser criar uma variavel, que vai "guardar" valores inteiros, vc usa: Var I : Integer; ^^^^^^^ Percebe??? Agora, anota ai a tabela com as faixas de dados: Tipo | Faixa | Tamanho -----------+--------------------------+------------------------------------- ShortInt | -128..127 | 8-bit Sinalizado Integer | -32768.. 32767 | 16-bit Sinalizado LongInt | -2147483648..2147483647 | 32-bit Sinalizado Byte | 0..255 | 8-bit Nao-sinalizado Word | 0..65535 | 16-bit Nao-sinalizado String | 0..255 Caracteres | 255 Bytes ANSIString | 0..XXX Caracteres | XXX Bytes <> Char | 1 Caracter | 1 Byte -----------'--------------------------'------------------------------------- Dica: -------------------------------------------------------------------------- Naum deixe de ler sobre Pascal aki na Zine. Maioria dos comandos do Pascal, que nao utilizam a CRT funcionam no Delphi. Por exemplo o FOR no Delphi e no Pascal sao identicos, porem o Write no Delphi nao funciona tao simples quanto no Pascal ;) Assim como o Delay (Use o TTimer!) e outros... -------------------------------------------------------------------------- Wow! Vetores :)) -=-=-=-=-=-=-=-=- Matrizes = Vetores ! :)) Intaum qndo eu escrever vetor/matriz, eh a mesma coisa. Se vc jah faz PD e conhece o conceito, pula essa parte e vai lah ver como q usa no Delphi :P Agora, o q sao matrizes? Resposta: Sao uma especie de tabela que vc pode montar na MEMORIA do computador. Matrizes Unidimencionais ------------------------ Unidimencionais por q so tem uma dimensao (Obvio nao?), ou seja, sao como tabelas de apenas uma linha :) Olha aki: ------------------------------------------------------- | | | | | | | | | | | | | | | | | | | ------------------------------------------------------- 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 Imagina q isso ai eh uma variavel, um vetor de hummm... 18 posicoes :) Entaum vamo declarar isso: Var Matriz : array[1..18] of char; O Numero de posicoes pode ser qq coisa ordinal. Agora, digamos q vc queira fazer uma matriz de inteiros. Entao eh soh mudar o "char" pra integer oras! Mas pra nos aki vamos ficar c/ a de char pra naum conplicar muuuuuuito. Agora, veja o q acontece qndo o computador chega a esta linha de codigo: Codigo: Matriz[5] := 'W'; Resultado: ------------------------------------------------------- | | | | | W| | | | | | | | | | | | | | ------------------------------------------------------- 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 O que acontece aki eh q o caracter 'W' vai ser armazenado na posicao 5 da matriz. A diferenca entre usar matriz e outras variaves eh o acrescimo do [] para indicar as posicoes. Cada posicao eh independente da outra qnto ao seu conteudo, como se fossem variaveis diferentes. O q vc jah deve ter percebido eh q, se eu usar: var Nomes : array[1..2] of string; ou criar duas variaves (Nome1 e Nome2) do tipo String vc obtem +/- o mesmo resultado. Porem existe uma vantagem muuuuito grande em utilizar a matriz :) Vc pode, ao inves de utilizar uma constante no indice (ex. Nomes[1]), utilizar uma variavel (ex. Nomes[X]) desde q esta variavel seja ordinal, e seja controlada para nao ultrapassar a faixa de posicoes da matriz. Ex. Var Nomes : Array[1..500] of String; I : Integer; Se eu utilizar I para controlar as posicoes (com: Nomes[I]), o valor de I deve: I >= 1 e I <= 500. Ou seja I esta entre 1..500 :)) Matrizes Multidimensionais -=-=-=-=-=-=-=-=-=-=-=-=-=- O q eh isso ai??? O eskema eh o seguinte: Eh a mesma coisa das matrizes (vetores) normais, soh q tem + de uma dimensao e consequentemente + de um indice :)) hehehe parece confuso??? Eh moh facil (depois de pegar o jeito ;) Ex. Var Nomes : Array[1..10,5..15] of String; Begin Nomes[1, 6] := 'Wu TanG ClAn Z|N3'; .... .... End. Percebe??? Vc simplesmente acrescentou uma dimensao (podem ter muito +). Uma coisa deve estar clara eh q Nomes[1,5] e Nomes[1,6] sao distintos e podem ter valores diferentes! Assim como Nomes[1,5] e Nomes[2,5] podem ter valores diferentes, ou seja, sao posicoes diferentes da matriz. Em matrizes de duas dimensoes, vc pode trabalhar, pensando em uma tabela normal (linha e coluna), enquanto a de 3 dimensoes um cubo (linha, coluna e profundidade), jah a de 4 dimensoes eh melhor naum tenta imaginar nada fisico pra num fundir a cuca ;)) Para acrescentar uma dimensao, vc simplesmente poe uma virgula ao final da faixa da ultima dimensao e insere uma nova faixa q ira determinar a nova dimensao... Olha o ex. que fica + facil de entender: {codigo de matriz de uma dimensao} Var Nomes : Array[1..5] of String; {codigo de matriz de duas dimensoes} Var Nomes : Array[1..5,1..9] of String; {codigo de matriz de 3 dimensoes} Var Nomes : Array[1..5,1..3,1..2] of String; E assim por diante... Dica: --------------------------------------------------------------------------- Vc sabia q pode utilizar qq coisa q seja ORDINAL como "range" e indice da matriz? Por ex. vc pode declarar uma matriz do tipo: Var Msg : Array[False..True] of String; Legal neh?? ;) bom, isso eh soh um ex., + pode ter outros tipos ordinais dentro dos [] por ex: shortint, longint, integer... P.S. Nunca testei c/ char + talvez funcione :) nem q seja [ord(ch)] hehehe Hummm se vc num sabe o q eh ord() fica frio q agente vai reservar uma ed. soh pra falar de funcoes ;)) --------------------------------------------------------------------------- Ops... Tava eskecendo, Eu sou Thiago Correa! + apartir de agora vou assinar c/ meu handle (LaSt^WaRRioR). Qq coisa vc pode me encontrar em: e-1/2: last.warrior@lords.com ICQ..: 5391667 BBS..: Sercom, Kemek, UnReal e outras ai :) ou ainda nas redes de msg como Fido sob o nome de Thiago Correa :)) e naum esquece de dar uma passada na pagina do zine, agora na geocities: www.geocities.com/SiliconValley/Lab/4568/ Se vc quiser mandar um e-1/2 pra zine: zinewutangclan@geocities.com |LaSt^WaRRioR| Bom teoricamente teriamos apenas LaSt^WaRRioR para escrever delphi, porem notem no texto a seguir uma participacao de uma mina, talvez entrando na coorporacao.. isso eh questao de conversarmos... porem ai estah sua contribuicao... ___________________________________________ Trabalhando com datas Originalmente, na linguagem Turbo Pascal não tínhamos uma variável própria para guardar uma data. A solução, no caso do Delphi, foi criar um "tipo" chamado TDateTime que conterá data e também hora. Este tipo de variável ocupará 8 bytes de memória e gravará o ano com 4 algarismos. Para que estas informações (de data e hora) caibam em apenas 8 bytes o sistema grava de uma forma codificada. Isto nos obriga a utilizar funções de conversão, como veremos a seguir. Tecnicamente os dados são gravados no formato ponto flutuante, em uma variável Double. É importante saber que no uso de campos data e hora em banco de dados, tanto um campo data, como um campo hora, quando acessados pelo Delphi, serão transformados para o formato TDateTime. Em outras palavras, se voce tiver em seu banco de dados um campo tipo data e outro tipo hora, no Delphi você terá duas variáveis teoricamente do mesmo tipo:TDateTime. Note, porém, que apenas o começo ou o fim da variável será utilizado pelo sistema em cada caso. Funções de Conversão para String: function DateToStr(Data:TDateTime):String; - Converte um TDateTime em uma String (pegando apenas a parte da Data desta variável). Ex.:Label1.Caption:=DateToStr(Table1Data.Value); function TimeToStr(Hora:TDateTime):String; - Converte um TDateTime em uma String (pegando apenas a parte da Hora desta variável). Ex.: Label1.Caption:=TimeToStr(Table1Time.Value); function DateTimeToStr(DataAndHora:TDateTime):String; - Converte um TDateTime em uma String. (pegando a Data e Hora desta variável). Ex.: Label1.Caption:=DateTimeToStr(Now); Funções de Conversão para TDateTime: function StrToDate(Data:String):TDateTime; - Converte uma String em um TDateTime. (setando apenas a parte da Data desta variável). Ex.: Table1Data.Value:=StrToDate(EditMask1.Text) function StrToTime(Hora:String):TDateTime; - Coverte uma String em um TDateTime. (setando apenas a parte da Hora desta variável). Ex.: Table1Time.Value:=StrToTime(EditMask2.Text0; function StrToDateTime (DateAndHora:String):TDateTime - Converte uma String em um TDateTime. (setando Data e Hora desta variável). Ex.: var DateAndTime:TDateTime; begin DateAndTime:=StrToDateTime(Edit1.Text); Label1.Caption:=DateTimeToStr(DateAndTime); Retorna o Dia e a Hora Atual: function DayOfWeek(Data:TDataTime):Integer; Ex.:Label1.Caption:=Data e Hora Atual+DateTimeToStr(Now0; - Retorna o dia da semana em um inteiro de 1 a 7. Sendo: *************** * 1 - Domingo * * 2 - Segunda * * 3 - Terça * * 4 - Quarta * * 5 - Quinta * * 6 - Sexta * * 7 - Sábado * *************** Ex.: Const Semana:Array[1..7] of String[3]=(`Dom`, `Seg`, `Ter`, `Qua`, `Qui`, `Sex`, `Sab`); { Veremos vetores e constantes logo mais} Begin Label1.Caption:=`Hoje é um: `+Semana[DayOfWeek(Now)]; End; **************************************************************************** Trabalhando com Vetores A definição de um vetor deve seguir o seguinte formato: Variável: Array[NºIni..NºFin] of TipoDoVetor; Ex.: Var DiaDaSemana:[1..7]of String; ou DiaDaSemana:[0..6]of String; Uso: Begin DiaDaSemana[2]:=`Terça`; I:=4; Label1.Caption:=DiaDaSemana[I]; End; Analise o exemplo abaixo que demonstra o uso de vetores: Var Vet:Array[1..12]of String; Procedure TForm1.FormCreate(Sender:TObject); begin Vet[1]:=`Janeiro`; Vet[2]:=`Fevereiro`; Vet[3]:\`Marco`; end; procedure TForm1.Button1Click(Sender:TObject); begin Edit2.Text:=Vet[StrToInt(Edit1.Text)]; end; |Ana Paula| .~`^'-_!+=/., 07 - CONCEITOS BASICOS EM LINGUAGEM TURBO PASCAL '-_!+=/.,~`^'-. De acordo com observaçöes feitas por diversos professores, inclusive por mim, a maior parte das pessoas ficam ligadas para sempre à primeira linguagem que aprenderam, e quando aprendem uma nova linguagem, têm uma certa tendência em desenvolver os algoritmos segundo o vocabulário e regras sintáticas da primeira linguagem, so que escritas na nova. Este Texto foi extraido de um tutorial de Pascal, Nao sei o porque, mas ainda nao consegui identificar o autor, peco desculpas caso ele leia um texto dele publicado em outro zine, mas nao pude evitar.... Bom, soh pra nao perder akeles negocios de autenticidade e tal.., ai vai a unica coisa que encontrei sobre o autor no tutorial...... []s ·¨■ ¯lCa ■¨· Bom, isso ai acima, foi a unica assinatura que encontrei sobre o cara.. Tipo, agora comentando sobre o fato que foi exposto por ele... tai mais um objetivo da zine, proporcionar a novatos uma visao geral sobre as linguagens, facilitando assim sua escolha. E outra, como voce tera opor- tunidade de conhecer diversas linguagens, quem sabe, nao quebramos essa barreira de "a primeira ser a unica" :))) Bem.. tudo legal, mas vamos comecar com Pascal "o nao eh que rimo!!!" :)) Ak. Continua a Aula dois desse belo texto criado pelo cara q. deixou essa assinatura ai em cima! :)) III.2.3 - A declaraçäo type Além dos tipos de dados pré-definidos no Turbo Pascal, podemos também definir novos tipos através da declaraçäo Type. A sua sintaxe geral é: Type identificador = (valor1,valor2,valor3,valor4, ... ,valorN); O identificador deve seguir as regras dadas anteriormente e entre os parentêses estäo os valores que podem ser assumidos. Exemplos: Type cor = (azul,vermelho,branco,verde,amarelo); dia_útil = (segunda,terça,quarta,quinta,sexta); linha = string[80]; idade = 1..99; (* a partir deste instante, além dos tipos de dados pré-definidos, podemos também utilizar os novos tipos definidos cor,dia_útil, linha e idade *) Var i : integer; d : idade; nome : linha; dia : dia_útil; cores : cor; (* etc. *) Observaçäo: Quando damos os valores que os dados podem assumir através da declaraçäo type, o Turbo Pascal assume, automaticamente, que o valor da direita vale mais que o da esquerda e assim por diante. Por exemplo: no caso da definiçäo de cor,amarelo vale mais que verde, que por sua vez vale mais que branco e assim por diante. III.3 - Constantes ---------- III.3.1 - A declaraçäo const Nesta subárea, podemos definir tantas constantes quantas quisermos. Sintaxe: Const Meu_nome = 'Thelmo'; cor_preferida = 'verde'; número_máximo = 24345; (* e assim por diante *) Toda vez que nos referirmos às constantes acima, o Turbo Pascal substitui-las-á pelos seus respectivos valores. III.3.2 - Constantes pré-definidas Existem algumas constantes pré-definidas e que podemos utilizá-las sem ter que declará-las. Säo elas: PI = 3.1415926536E + 00 FALSE TRUE NIL Pointer nulo, veremos mais adiante. MAXINT = 32767 III.3.3 - Constantes tipadas A declaraçäo de variáveis na subárea Var, apenas reserva espaço de memória para elas, mas nåo as inicializa, ou seja, até que se atribua valores a elas, seus valores seräo desconhecidos. Sob certas circunstâncias, seria interessante que pudéssemos ao mesmo tempo em que declaramos a variável, dar seu valor inicial. Isto é possível com o conceito de constante tipada cuja sintaxe é: Const variável : tipo = valor; Exemplos: const Contador : integer = 100; c : char = 'A'; Estamos definindo duas variáveis, uma chamada contador que é inteira e vale inicialmente 100, e outra chamada c que é do tipo char e cujo valor inicial é 'A'. III.4 Operadores ---------- III.4.1 - Operadores aritméticos + adiçäo - subtraçäo * multiplicaçäo / divisäo entre números reais DIV divisäo entre números inteiros MOD resto da divisäo (*******************************************************) PROGRAMA EXEMPLO : Mostra como utilizar operadores aritmeticos ********************************************************) Program Operadores_aritimeticos; Uses CRT; Var x,y,z : integer; r1,r2 : real; Begin ClrScr; (* limpa a tela *) x:=10; y:=20; z:=x+y; writeln(z); (* escreve o valor de z na tela de video *) x:= 20 DIV 3; y:= 20 MOD 3; writeln(x); (* escreve 6 na tela *) writeln(y); (* escreve 2 na tela *) r1:=3.24; r2:=r1/2.3; writeln(r2); end. III.4.2 - Operadores lógicos AND E lógico OR OU lógico XOR OU EXCLUSIVO lógico Estes operadores só aceitam como operandos, valores lógicos, ou seja : TRUE e FALSE . A operaçäo AND resulta em TRUE se e somente se todos os operandos forem TRUE, se um deles ou mais de um for FALSE entäo o resultado será FALSE. A operaçäo OR resulta TRUE quando pelo menos um dos operandos for TRUE. A operaçäo XOR resulta TRUE quando os operandos forem diferentes entre si, isto é, quando um for TRUE o outro deverá ser FALSE. Exemplo: (*******************************************************) PROGRAMA UTILIZANDO OS OPERADORES LOGICOS (*******************************************************) Program operadores_logicos; Uses CRT; Var x,y : boolean; Begin x:=TRUE; y:=FALSE; Writeln( x OR y ); (* escreve TRUE *) Writeln( x AND y ); (* escreve FALSE *) Weiteln( x XOR y ); (* escreve TRUE *); End. III.4.3 - Operadores relacionais O Turbo Pascal possui ao todo 7 operadores relacionais que säo muito utilizados nas tomadas de decisöes, säo eles: = igual <> diferente > maior que < menor que >= maior ou igual que <= menor ou igual que IN testa se um elemento está incluso em um conjunto Exemplos: 1-) Se A=30 e B=50 entäo ( A = B ) FALSE ( A < B ) TRUE 2-) Se A=TRUE e B=FALSE ( A <> B ) TRUE ( A = B ) FALSE 3-) Se A=50 , B=35, C='A' , D='B' ( ( A < B ) OR ( C < D ) ) TRUE A avaliaçäo será verdadeira se uma ou outra expressäo for verdadeira, no caso, como C < D entäo a resposta é TRUE III.4.4 - Operadores entre bits Os operadores entre bits só podem ser aplicados em dados dos tipos byte ou integer e o resultado é do tipo integer. Eles agem bit a bit e podem ser aplicados na notaçäo hexadecimal ou decimal. Säo eles: SHL - SHift Left Desloca n bits à esquerda. Durante o deslocamento, os bits à esquerda säo perdidos e dígitos zeros preenchem a posiçäo direita. Exemplos: 1-) Se X = 00010101 entäo X shl 2 = 01010100 X shl 5 = 10100000 2-) 55 shl 3 = 184 55 = 00110111 deslocando 3 à esquerda ficaria: 10111000 que é igual a 184 3-) $F0 shl 2 = $C0 $F0 = 11110000 deslocando 2 à esquerda ficaria: 11000000 que é igual a $C0 SHR - SHift Right Desloca n bits à direita. Durante o deslocamento,os bits à esquerda säo preenchidos com zeros e os da direita säo perdidos. Exemplos: 1-) Se X = 10101100 entäo X shr 3 = 00010101 X shr 6 = 00000010 2-) 55 shr 3 = 6 55 = 00110111 deslocando 3 à direita ficaria: 00000110 que é igual a 6 3-) $F0 shr 2 = $3C $F0 = 11110000 deslocando 2 à direita ficaria: 00111100 que é igual a $3C OBS: Já sei, vc näo manja de base 2, eh eh eh, entonces complica, bem vou tentar em poucas palavras explicar a base 2. Nós operamos na base 10, porque trabalhamos com 10 algarismos, 0..9, certo? Bem na base 2 operamos somente com 2 algarismos, o 0 e o 1. Dessa forma, temos que representar todos os números da base 10 utilizando somente o 0 e 1. Parece complicado ? Nem tanto, veja abaixo a correspondência: BASE 10 BASE 2 0 0 1 1 2 10 3 11 4 100 5 101 6 110 7 111 8 1000 9 1001 10 1010 11 1011 e assim por diante Para converter um número da base 10 para a base 2, basta dividir o número, o qual queremos converter, por dois sucessivamente até que o resto seja 0, depois pegamos os restos de baixo para cima, exemplo: (23) --> ( ) 10 2 23 / 2 dá 11 e sobra 1 11 / 2 dá 5 e sobra 1 5 / 2 dá 2 e sobra 1 2 / 2 dá 1 e sobra 0 1 / 2 dá 0 e sobra 1 Portanto (23) --> (10111) 10 2 Para coverter da base 2 para a base 10, devemos fazer ao contrário: (10111) --> ( ) 2 10 4 3 2 1 0 ( 1 0 1 1 1 ) 4 3 2 1 0 1 x 2 + 0 x 2 + 1 x 2 + 1 x 2 + 1 x 2 = 16 + 0 + 4 + 2 + 1 = 23 NOT O operador NOT nega os bits, isto é os bits iguais a 1 se tornam 0 e os bits zero se tornam 1. Devemos lembrar, no entanto, que os inteiros possuem 2 bytes, portanto,ao se trabalhar com números decimais inteiros será afetado o byte de mais alta ordem e também o sinal. Exemplo: NOT (255) = -256 Para suprimir este problema, você deve trabalhar com bytes: Program Exemplo; Uses CRT; Var i,j : Byte; Begin ClrScr; i:=255; j:=NOT(i); Writeln(j); (* será escrito 0 *) End. AND Este operador realiza a operaçäo E lógico bit a bit. Relembrando, a operaçäo E resulta em 1 se e somente se os dois operandos forem iguais a 1, caso contrário, o resultado será igual a 0. Exemplos: 1-) $0F AND $F0 = $0 pois $0F = 00001111 $F0 = 11110000 00001111 AND 11110000 = 00000000 2-) 255 AND 55 = 55 pois 255 = 11111111 55 = 00110111 11111111 AND 00110111 = 00110111 3-) 34 AND 76 = 0 pois 34 = 00100010 76 = 01001100 00100010 AND 01001100 = 00000000 OR Este operador realiza a operaçäo OU lógico bit a bit. Relembrando, a operaçäo OU resulta em 1 se um ou os dois operandos forem iguais a 1. Exemplos: 1-) $0F OR $F0 = $FF pois $0F = 00001111 $F0 = 11110000 00001111 OR 11110000 = 11111111 2-) 255 OR 55 = 255 pois 255 = 11111111 55 = 00110111 11111111 OR 00110111 = 11111111 3-) 34 OR 76 = 110 pois 34 = 00100010 76 = 01001100 00100010 OR 01001100 = 01101110 XOR Este operador realiza a operaçäo OU EXCLUSIVO lógico bit a bit. Relembrando, a operaçäo OU EXCLUSIVO resulta em 1 se os operandos forem diferentes entre si . Exemplos: 1-) $0F XOR $F0 = $FF pois $0F = 00001111 $F0 = 11110000 00001111 XOR 11110000 = 11111111 2-) 255 XOR 55 = 200 pois 255 = 11111111 55 = 00110111 11111111 XOR 00110111 = 11001000 3-) 34 XOR 76 = 110 pois 34 = 00100010 76 = 01001100 00100010 XOR 01001100 = 01101110 III.4.5 - Concatenaçäo Esta operaçäo é representada pelo sinal de adiçäo, ou seja, +. Os operandos devem ser do tipo string ou char. Exemplo: 'Isto é uma ' + 'string' = 'Isto é uma string' ┌─────────────────────────────┐ │IV - Entrada e saída de dados│ └─────────────────────────────┘ IV.1 - Write e Writeln --------------- Estas säo as principais procedures destinadas a exibir todos os tipos de dados no vídeo. A diferença entre write e writeln reside no fato de que a procedure write escreve o parâmetro, e mantém o cursor do lado daquilo que foi escrito, enquanto que writeln passa o cursor para a próxima linha. Estas procedures possuem 3 formas de sintaxes, a saber: Primeira forma: Write(parâmetro_1,Parâmetro_2, ...); Exemplo: Program Exemplo; Uses CRT; Var i : integer; r : real; c : char; s : string[20]; Begin ClrScr; (* apaga a tela e coloca o cursor em 1,1 *) Writeln('Exemplos de aplicacao de writeln e write'); writeln; (* apenas pula uma linha *) i:=100; r:=3.14; c:='A'; s:='interessante'; writeln('Valor de i e igual a ',i); write('valor de r = '); writeln(r); writeln(c,' ',s); end. Este programa resultaria na seguinte tela: --------------------------------------------------------- Exemplos de aplicacao de writeln e write Valor de i e igual a 100 valor de r = 3.1400000000E+00 A interessante --------------------------------------------------------- Segunda forma: Write(parâmetro : n); onde n é um número inteiro que determina quantas colunas o cursor deve ser deslocado à direita, antes do parâmetro ser escrito. Além disso, o parâmetro é escrito da direita para a esquerda, exemplo: Program Exemplo; Uses CRT; Begin Writeln('A'); Writeln('A':5); end. Resultaria a seguinte tela: --------------------------------------------------------- A .....A --------------------------------------------------------- Os pontos representam espaços em branco Terceira forma: Write(parâmetro : n : d); Neste caso, n tem a mesma funçäo que o caso anterior sendo que d representa o número de casas decimais. Obviamente, parâmetro terá que ser do tipo Real. Exemplo: Program Exemplo; Uses CRT; Var r : real; Begin ClrScr; r:=3.14156; Writeln(r); Writeln(r:10:2); End. resultaria a seguinte tela: --------------------------------------------------------- 3.1415600000E+00 3.14 --------------------------------------------------------- IV.2 - Read e Readln ------------- Estas procedures säo utilizadas para fazer leitura de dados via teclado. A procedure Read lê um dado do teclado até que se pressione a tecla ENTER, sendo que cada tecla digitada é ecoada para o vídeo. Após pressionarmos ENTER, o cursor permanecerá no mesmo lugar. Já, a procedure Readln faz a mesma coisa só que o cursor passa para a próxima linha. A sintaxe geral para estas procedures é: Read (Var_1,Var_2,Var_3,...); Ao se digitar os valores das variáveis pedidas, deve-se separá-los por espaços. Exemplo 1: Program teste; Uses CRT; Var a,b,c:integer; Begin clrscr; readln(a,b,c); writeln (a,' ',b,' ',c); end. Exemplo 2: Program teste; Uses CRT; Var i : integer; r : real; c : char; s : string[10]; Begin ClrScr; Write('Digite um numero inteiro ------> '); Readln(i); Write('Digite um numero real ---------> '); Readln(r); Write('Digite um caractere -----------> '); Readln(c); Write('Digite uma string -------------> '); Readln(s); Writeln;Writeln; (* pula duas linhas *) Writeln(i); Writeln(r); Writeln(c); Writeln(s); End. Exemplo 3: (*******************************************************) PROGRAMA AREA_DE_TRIANGULOS : calcula area de triangulos (*******************************************************) Program Area_de_Triangulos; Uses CRT; Var Base, (* base do triangulo *) altura: (* altura do triangulo *) Real; Begin ClrScr; Writeln('CALCULO DA AREA DE TRIANGULOS':55); Writeln; Write('Valor da base ------> '); Readln(base); Writeln; Write('Valor da altura ----> '); Readln(altura); Writeln; Writeln; Writeln('Area do triangulo = ',base*altura/2 : 10 : 2); End. ReadKey: Lê uma tecla do teclado, sem que seja necessário pressionar a tecla ENTER Program Exemplo; Uses CRT; Var tecla:char; Begin Write('digite uma tecla ->'); Tecla:=readkey; Writeln; writeln('vc digitou ',tecla); end. IV.3 - Impressora ---------- Podemos enviar dados para a impressora através das procedures Write e Writeln. Para tanto, devemos colocar, antes dos parâmetros a serem enviados à impressora, o nome lógico LST. Exemplo: Writeln('isto vai para o vídeo'); Writeln(lst,'isto vai para a impressora',' e isto também'); IV.4 - Funçöes e procedures para controle de vídeo ------------------------------------------- IV.4.1 - ClrScr Esta procedure tem a finalidade de limpar a tela de vídeo e colocar o cursor na primeira coluna da primeira linha. A tela de vídeo é dividida em 80 colunas e 25 linhas. O canto superior esquerdo tem coordenadas (1,1) e o inferior direito (80,25). IV.4.2 - Gotoxy(x,y) Move o cursor para a coluna x e linha y. Exemplo: Program Exemplo; Uses CRT; Var x,y : Byte; Begin ClrScr; Gotoxy(10,2); Write('Coluna 10 da linha 2'); x:=40; y:=10; Gotoxy(x,y); Write('Coluna 40 da linha 10'); End. IV.4.3 - ClrEol Esta procedure limpa desde a posiçäo atual do cursor até o final da linha. IV.4.4 - CrtExit Envia para a tela de vídeo a string de finalizaçäo definida na instalaçäo IV.4.5 - CrtInit Envia para a tela de vídeo a string de inicializaçäo definida na instalaçäo. IV.4.6 - Delline Procedure que elimina a linha em que está o cursor. As linhas posteriores sobem, ocupando a que foi eliminada. Exemplo: Program exemplo; Uses CRT; Begin ClrScr; Writeln('linha 1'); Writeln('linha 2'); Writeln('linha 3'); Writeln('linha 4'); Gotoxy(1,2); (* posicionei o cursor no início da linha 2 *) Delline; End. O programa anterior irá provocar a seguinte tela: --------------------------------------------------------- linha 1 linha 3 linha 4 --------------------------------------------------------- Repare que a string 'linha 2' foi eliminada. IV.4.7 - HighVideo Coloca o vídeo no modo normal. Esta procedure é equivalente a NormVídeo. IV.4.8 - InsLine Esta procedure faz examente o contrário de Delline, ou seja, insere uma linha na posiçäo atual do cursor. Exemplo Program Exemplo; Begin ClrScr; Writeln('linha 1'); Writeln('linha 2'); Writeln('linha 3'); Writeln('linha 4'); Gotoxy(1,3); (* cursor na 1a. coluna da 3a. linha *) InsLine; Write('teste'); Gotoxy(1,20); End. Este Programa provocará a seguinte tela --------------------------------------------------------- linha 1 linha 2 teste linha 3 linha 4 --------------------------------------------------------- IV.4.9 - LowVideo Coloca o vídeo em baixa intensidade até que se execute a procedure NormVideo ou HighVideo. IV.4.10 - NormVideo O mesmo que HighVideo IV.4.11 - TextBackGround Esta procedure seleciona a cor do fundo sobre o qual o texto será escrito. Sua sintaxe geral é: TextBackGround(cor); Tabela de cores 0 Black Preto 1 Blue Azul 2 Green Verde 3 Cyan Ciano 4 Red Vermelho 5 Magenta Magenta 6 LightGray Cinza-claro Nós podemos entrar com o número ou o nome da cor em inglês Exemplo: Program Exemplo; Uses CRT; Begin ClrScr; WriteLn('teste'); TextBackGround(7); Writeln('teste'); TextBackGround(Brown); Writeln('teste'); End. IV.4.12 - TextColor Esta procedure permite selecionar a cor com que o texto será imprimido. Tabela de cores 0 Black Preto 1 Blue Azul 2 Green Verde 3 Cyan Ciano 4 Red Vermelho 5 Magenta Magenta 6 Brown Marrom 7 LightGray Cinza-claro 8 DarkGray Cinza-escuro 9 LightBlue Azul-claro 10 LightGreen Verde-claro 11 LightCyan Ciano-claro 12 LightRed Vermelho-claro 13 LightMagenta Magenta-claro 14 Yellow Amarelo 15 White Branco 16 Blink Piscante Exemplo: Program Exemplo; Uses CRT; Begin Clrscr; TextBackGround(7); TextColor(black); writeln('teste'); TextColor(black+blink); write('teste'); End. IV.4.13 - Window Sintaxe: Window(x1,y1,x2,y2); Esta procedure tem o poder de definir uma janela de texto cujo canto esquerdo superior é x1,y1 e canto inferior direito é x2,y2. Após esta instruçäo, as instruçöes ClrScr, Write Writeln agem somente dentro da janela recém definida. A instruçäo Gotoxy passa a utilizar como referencial o ponto x1,y1 que passa a ser considerado 1,1. Exemplo: Program Exemplo; Uses CRT; Begin Window(10,10,70,20); ClrScr; (* limpa somente a janela *); Writeln('teste'); (* escreve 'teste' em 10,10 *) End. IV.4.14 - WhereX Funçäo que retorna o número da coluna onde está o cursor. IV.4.15 - WhereY Funçäo que retorna o número da linha onde está o cursor. IV.5 - Controle do teclado ------------------- IV.5.1 - Kbd Quando quisermos ler dados do teclado e que näo sejam ecoados para o monitor de vídeo até que sejam processados e aceitos, nós podemos utilizar a seguinte sintaxe: Read(Kbd,Variável); No caso de números inteiros ou reais, o número só será aceito quando pressionarmos a tecla , no caso de variáveis do tipo char, o caractere será aceito sem que seja necessário pressionar a tecla , idem para o tipo string. Exemplo: Program Exemplo; Uses CRT; Var i:integer; Begin ClrScr; Write('Entre com um inteiro --> '); Readln(Kbd,i); Writeln(i); End. IV.5.2 - BufLen Buflen é uma variável interna pré-definida em Turbo Pascal cujo valor inicial é 126.Ela contém o número máximo de caracteres aceitos por Read. Exemplo: Program Exemplo; Uses CRT; Var i : Integer; Begin ClrScr; Writeln(Buflen); (* escreve 126 *) Buflen:=2; Write('Digite um inteiro --> '); Readln(i); (* se você tentar digitar inteiros com mais de dois dígitos, readln näo permitirá *) End. IV.5.3 - Keypressed O identificador Keypressed é uma funçäo especial do Turbo Pascal que retorna um valor booleano - TRUE se uma tecla foi pressionada, ou FALSE caso contrário. Ela é muito utilizada para detectar teclas pressionadas no teclado. Exemplo Program Exemplo; Uses CRT; Begin ClrScr; Write('Pressione uma tecla -> '); Repeat until Keypressed; (* repita até que uma tecla seja pressionada. O comando Repeat Until será estudado mais adiante *) End. .~`^'-_!+=/.,~`^'- 08 - CONCEITOS BASICOS EM VISUAL BASIC -_!+=/.,~.~`^'-_!+=/ Microsoft Visual Basic 4.0 for Windows 95 "O Arquivo de Projeto" O arquivo de projeto, como default, sempre terá a extensão "*.VBP" Um arquivo VBP (Visual Basic Project) é um indice (ou catalogo) que armazena as especificacões dos demais componentes (arquivos) necessários para o perfeito funcionamento da aplicacão. Os arquivos VBP são sempre armazenados no formato ASCII, permitin- do que você os customize manualmente por meio de um editor padrão ASCII ou até mesmo crie aplicacões que funcionem como utilitários para gerenciamento dos arquivos de projetos. "Componentes de um Projeto" 'Arquivos de Formulários (.FRM)' Estes arquivos possuem a extensão FRM e, como seu próprio nome já diz, armazenam os textos (códigos e referências) dos formulários e seus controles, incluindo todos os valores iniciais das proprieda- des estabelecidas em tempo de desenho. O arquivo FRM também armaze- na todas as declaracoes de variáveis, constantes, procedures exter- nas (do desenvolvedor) ou de enventos. 'Arquivos de Módulos' Um arquivo de módulo possui como padrão a extensão BAS. Este compo- nente de um projeto devera ser utilizado para a criacão de rotinas genéricas, declaracoes globais e atributos globais para o ambiente do desenvolvimento. Uma rotina, quando declarada dentro de um arqui- vo de módulo, poderá ser chamada por qualquer formulário de projeto. No caso de variáveis, constantes ou tipos de dados, estes devem ser explicitamentes declarados como públicos por meio da declaracão "PUBLIC", caso contrario sua abrangência será apenas para o módulo em questão. 'Arquivos de Controles 16 Bits (.VBX)' Algumas classes de objetos disponíveis no Visual Basic 4.0 já estão embutidos em sua biblioteca, no entanto não seria possível desenvol- ver algumas tarefas, como por exemplo a programação de uma aplicação para comunicacao via modem, utilizando-se apenas os controles inter- nos do Visual Basic 4.0. Os arquivos VBX são arquivos de controles customizados que permitem aumentar os recursos de diversas classes de objetos ou criar novas classes. Sempre que você utilizar um ou mais arquivos de controles, deverá adicioná-los ao projeto, fazendo com que estejam disponíveis na caixa de controles e na janela de pro- jetos. Dessa forma sempre que voce compilar sua aplicação, eles não serão acoplados ao arquivo EXE gerado, obrigando-o a entregar uma có- pia dos mesmos ao seu usuário, do contrário sua aplicação não funcio- nará. Esses arquivos estão disponíveis somente na versão 16 Bits do Microsoft Visual Basic 4.0; para a versao 32 bits você deverá utili- zar os arquivos OCX. 'Arquivos de Controles Customizados OLE (.OCX)' Esta é uma novidade da versão 4.0 do VB. Os arquivos de controles customizados OLE possuem a extensão .OCX. Quando você instala o VB 4.0, esses arquivos sao copiados para o diretorio \WINDOWS\SYSTEM e alguns deles já são embutidos na caixa de controles. Os arquivos OCX permitem uma maior flexibilidade no desenvolvimento, já que fun- cionam para as versões 16 e 32 Bits. Para cada VBX das versoes ante- riores do VB, esta versão traz um OCX compatível. Este é um padrão de indústria para controles costumizados, que já estão sendo utiliza- dos pelas empresas que desenvolvem produtos auxiliares (Add-Ins) para programadores VB. 'Arquivos de Classes (.CLS)' Os arquivos de classes são semelhantes aos formulários, só que não possuem uma interface visível. Nos arquivos .CLS, você poderá definir seus próprios objetos, cada um com suas propriedades e métodos. Os objetos criados em arquivos .CLS não possuem eventos. 'Arquivos de Recursos (.RES)' Os arquivos de recursos permitem armazenar diversos dados (textos, bitmaps, sons etc.) os quais podem ser alterados sem a necessidade de alteração do seu código VB. Para criar arquivo .RES, você neces- sitara utilizar um ambiente de desenvolvimento que possua editor e compilador de recursos como o "AppStudio", que está disponível no MS C++. 'Arquivos Externos (Insetable Objects)' Os arquivos externos geralmente possuem a extensão .EXE e fazem par- te de produtos externos ao VB. Esses arquivos permitem criar soluções integradas com aplicações. "Propriedades" As propriedades definem as caracteristicas de determinado controle ou formulario. Aqui vou mencionar as propriedades mais importantes: BorderStyle - Esta propriedade permite especificar o estilo da borda. Cada controle tem um estilo de borda diferente. Caption - A maioria dos objetos possui textos de apresentação. No caso de formulários, o texto de apresentação é o título da janela. A propriedade Caption permite especificar um texto de apresen- tação para o(s) objeto(s) selecionado(s). Left - Esta propriedade podera ser manipulada movendo-se o formulário horizontemente na tela ou alterando-se o seu valor na janela de propriedades. Por meio dela você poderá especificar a posição relativa da margem esquerda do formulário em relação à margem esquerda do desktop. Os valores expressos aqui, são especificados em TWIPS. Cada polegada tem 1440 TWIPS. Top - Esta propriedade permite estabelecer a posição vertical do formu- lário na tela. Você poderá alterá-la movendo o formulário vertical- mente na tela ou alterando o seu conteúdo na janela de propriedades. Height - Permite especificar a altura do formulário. Sempre que aumenta ou diminui a altura do formulário (manualmente), você estará atribuindo, automaticamente, um novo valor para esta proprie- dade. Width - Igual a propriedade anterior, so que referente a largura de um objeto. Name - Esta propriedade é uma das mais importantes e está disponível para todos os objetos do VB. Por meio dela você poderá atribuir um nome para identificar um objeto selecionado dentro do código. Como default, cada objeto possui um nome, geralmente o mesmo da propriedade Caption. Para colocar um nome em um objeto, recomendo que coloque o seguin- te prefixo para poder identificar. OBJETO PREFIXO DO NOME Directory List Box Dir Drive List Box Drv File List Box Fil Form Frm Frame Fra Grid Grd Horizontal Scroll Bar Hsb Label Lbl Line Lin List Box Lst Menu Mnu OLE Client Ole Option Button Opt Picture Box Pic Shape Shp Text Box Txt Timer Tmr Verical Scroll Bar Vsb Autosize - Esta propriedade, quando ativada, faz com que o tamanho do label seja ajustado conforme o texto de apresentação nele inserido. Sorted - Esta propriedade permite ativar ou desativar a classifica- ção ascendente automática dos itens existentes dentro de um Combo Box. ForeColor - Esta propriedade permite especificar a cor a ser utili- zada para o texto existente dentro do objeto em questão. MaxLength - O Texto Box permite a entrada de 65.535 caracteres. Por meio dele, podemos especificar um valor máximo de carac- teres a serem digitados. Text - A propriedade Text permite especificar um texto a ser inserido dentro do Text Box. Font - Esta propriedade permite alterar as características de letras que devem ser utilizadas para o texto a ser inserido na caixa de texto em questão. Multiline - Através da propriedade Multiline, podemos ativar ou desa- tivar o tratamento de múltiplas linhas de textos dentro de um Text Box. ScrollBars - Sempre que trabalharmos com Text Box de forma multili- nhas, devemos ativar algum tipo de barras de rolagem, permitindo que o usuário percorra rapidamente o texto digitado. "Sintaxe para Programacao das Propriedades" Form.Controle.Propriedade = valor "Tipos de Dados no VB4" TIPO TAMANHO PRECISAO/ABRANGENCIA Integer 2 bytes -32,768 ate 32,767 Long 4 bytes -2,147,483,648 ate 2,147,483,647 Single 4 bytes -3.402823E38 ate -1.401298E-45 1.401298E-45 ate 3.402823E38 Double 8 bytes -1.79769313486231E08 ate -4.94065645841247E 324 -4.94065645841247E 324 ate 1.79769313486231E308 Currency 8 bytes -922337203685477.5808 ate 922337203685477.5807 String 1 byte p/caractere 0 ate 65.535 caracteres 0 to 2E32 no sistema 32 bits Byte 1 byte 0 ate 255 Boolean 2 bytes True ou False Date 8 bytes Object 4 bytes Qualquer distância de um objeto Variant 16 bytes+ 1 por carac. Aceita qualquer um dos acima. Qualquer elemento declarado como Variant poderá armazenar qualquer um dos tipos de dados apresentados, incluindo objetos e arrays. "Declarando Variaveis" Existem dois tipos de declaração: as implícitas e as explícitas. Vamos estudar as duas, as suas diferenças, etc. Veja o exemplo a seguir: ---------------------------------------------------------------------- Private Sub Command1_Click() VarTemp1 = 10 VarTemp2 = 55 VarTemp3 = 12 Print VarTemp1 + VarTemq2 + VarTemp3 End Sub ---------------------------------------------------------------------- Analisando o resultado, vemos que nao corresponde ao real, pois a soma deveria resultar em 77 e não em 22 como ocorreu. No entanto, não foi emitida nenhuma mensagem de erro de execução ou sintaxe dificultando assim o reconhecimento e correção do código. O que ocorreu é que o nome da segunda variável declarada é VarTemp2 e não VarTemq2, como foi digitado na linha de somatória. Para evitar esses problemas, você deverá usar as declarações explícitas. Para você por uma declaração explícita, basta ir no General Declarations, e digitar a seguinte linha: OPTION EXPLICIT, ou podera ir no menu Tools, selecionar a opção Options, e na caixa de diálogo que estiver escrito "Require Variable Declaration", marque com um X. Se você fizer isso, o exemplo acima não irá funcionar, pois o VB irá enviar uma mensagem de erro, como VARIABLE NOT DEFINED. Para voce declarar explicitamente uma variável, deverá utilizar o comando Dim. Veja a sintaxe básica: DIM nomevariavel AS tipo 'nomevariavel' - Especifica o nome a ser atribuido à variável 'tipo' - Especifica o tipo da variável. Caso não seja especificado, será atribuido a default, que é a Variant. Uma outra forma de declarar variáveis é utilizando os sufixos: TIPO SUFIXO Integer % Long & Single ! Double # Currency @ String $ Caso você necessite declarar variáveis com o mesmo nome, faça o seguinte: modulo.NomeVar 'modulo' - Nome do módulo no qual a variável está armazenada 'NomeVar' - Especifica o nome da variável a ser utilizada. Para você declarar uma constante, você deverá utilizar o seguinte comando: Const nomeconst [As tipo] = valor 'nomeconst' - Especifica o nome da constante 'tipo' - Especifica o tipo de conteúdo da constante 'valor' - Especifica o valor armazenado na constante Constantes Públicas: Devem ser declaradas dentro da área de declaração dos módulos por meio da sintaxe: Public Const nomeconst = valor "Arrays de Dados no Microsoft Visual Basic 4.0" Conceitos Arrays são coleções de variáveis que compartilham o mesmo nome e possuem um número, chamado Índice, o qual permite identificar o elemento que desejamos manipular. Obrigatoriamente, todos os elementos de um array deverão possuir o mesmo tipo de dado. Para permitir armazenar diferentes conteúdos para elementos do mesmo array, você deverá criá-lo com o tipo Variant. Basicamente, existem dois tipos de arrays: arrays fixos e arrays dinâmicos. Os arrays fixos terão um tamanho preestabelecido na sua declaração e não poderão ser alterados no decorrer da execução do aplicativo. No caso dos arrays dinâmicos, estes deverão ser declarados apenas com o número de dimensões (colunas) que possuem e o seu tamanho será definido no decorrer da execução do aplicativo, podendo ser aumentado ou diminuído. Declarando Arrays Unidimensionais Fixos A sintaxe utilizada deverá ser a seguinte: DIM/PUBLIC/PRIVATE nomearray(nelementos) [sufixo] As tipo nomearray - Especifica o nome que será utilizado para identificação do array. A nomenclatura dos arrays segue as regras para nomenclatura das variáveis nelemento - Indica o número de elementos que o array deverá possuir. sufixo - Opcionalmente poderá ser utilizado para especificar o tipo do array. tipo - Dado que será utilizado para armazenamento dentro dos elementos do array. Caso não seja especificado, será assumido o tipo Variant. Declarando Arrays Multidimensionais Fixos Chamamos de arrays multidimensionais os que são declarados com mais de uma dimensão, isto e, mais de uma coluna. Sintaxe: DIM/PUBLIC/PRIVATE nomearray(X1, Y1, X2, Y2, ...) [sufixo] As tipo Xn - Indica o número de elementos da dimensão (número de linhas) Yn - Indica o número de dimensões (número de colunas) Entendendo Procedimentos Sempre que o usuário efetua uma ação válida sobre um objeto, este dispara uma rotina denominada "procedimento de evento", a qual poderá ter várias instruções para serem executadas. Este é um tipo de procedimento, mas existem vários outros: -procedimentos da linguagem -funções da linguagem -procedimentos do usuário -funções do usuário Existem diversos pontos que diferenciam um procedimento de uma função a saber: 1. Na Chamada: A) Quando você chama um procedimento dentro do seu código, este deverá obrigatoriamente iniciar a linha de código. Exemplos válidos: END 'Procedimento da Linguagem COMMAND1_CLICK 'Procedimento de Evento MEU_PROCEDIMENTO 'Procedimento do Usuario Exemplos não válidos: DIM VARMEM VARMEM = END VARMEM = COMMAND1_CLICK VARMEM = MEU_PROCEDIMENTO B) Uma função sempre deverá ser atribuida a uma expressão, isto é, nunca poderá iniciar uma linha de código e sempre deverá ser seguida de parênteses ("()"). Exemplos válidos: DIM VARMEM VARMEM = STR(10000) 'Funcao da Linguagem VARMEM = MINHA_FUNCAO() 'Funcao do Usuario IF MINHA_FUNCAO() = 10 THEN ... 'Funcao do Usuario Exemplos não válidos: STR(10000)MINHA_FUNCAO()MINHA_FUNCAO 2. Na criação: A) Um procedimento é sempre criado dentro de um bloco definido pelos co- mandos SUB...END SUB, conforme os gabaritos a seguir. Gabarito para Procedimentos de Eventos: SUB OBJETO_EVENTO (lista de argumentos) comandos END SUB Gabarito para Procedimentos do Usuário: SUB MEU_PROCEDIMENTO (lista de argumentos) comandos END SUB B) Uma função é sempre criada dentro de um bloco definido pelos comandos FUNCTION...END FUNCTION, conforme o gabarito a seguir: Gabarito para Funções do Usuário: FUNCTION MINHA_FUNCAO (lista de argumentos) comandos END FUNCTION Uma outra diferenca entre os procedimentos e as funções é que as funções sempre retornam valores a sua chamada original. "Estruturas Condicionais" Por meio das Estruturas Condicionais, podemos testar condições e tomar decisões. Nela podemos usar If, Else, ElseIf, End If, >, <, =, AND, OR. If - Se Else - Se nao ElseIf - Se nao, Se > maior que < menor que = igual a AND - e OR - ou Exemplo: ---------------------------------------------------------------------------- Private Sub Command1_Click() Dim Nota As Integer Nota = Text1.Text If Nota > 10 Then MsgBox "Esta Nota é Invalida", 16, "Erro" ElseIf Nota = 10 Then MsgBox "Parabens! Nota maxima!', 16, "CDF" ElseIf Nota < 6 Then Msgbox "Nota Horrivel!", 16, "Burro" EndIf End Sub ---------------------------------------------------------------------------- Traduzindo: Ele cria uma variável chamada "Nota", no qual será o Text1.Text. Dai a pessoa tem que digitar a nota. Quando a pessoa clicar no Command1, e se a Nota for maior que 10, aparece uma mensagem como nota inválida, se for 10 a nota, aparecerá uma mensagem de Parabéns. Se for menor que 6, exibirá uma mensagem que a pessoa foi mal. Opcionalmente, você poderá usar a estrutura SELECT CASE...END SELECT para testar condições. A sintaxe é a seguinte: Select Case condicao [Case expressao -n [commandos]] [Case Else [comandos1]] End Select condicao: Especifica a condição a ser avaliada expressao -n: Expressão a ser avaliada e comparada com a condição estabele- cida. comandos: Grupo de comandos a serem executados se a condição for verdadeira. "Estruturas de Controles de Loopings (Lacos)" Em alguns trechos de códigos, você poderá necessitar repetir um bloco de comandos um certo numero de vezes ou a partir de condições preestabelecidas. Veja a sintaxe: Do [{While | Until} condicao] [comandos] [Exit Do] [comandos] Loop While: Enquanto Until: Ate que Exemplo: Private Sub Command1_Click() Dim Contador% 'Fazer Enquanto o Contador for menor ou igual a 2000 Do While Contador% <= 2000 Contador% = Contador% + 1 List1.AddItem "Item" & Str(Contador%) Loop End Sub Veja o mesmo programa usando o Until Private Sub Command1_Click() Dim Contador% Do Until Contador% >= 2000 Contador% = Contador% + 1 List1.AddItem "Item" & Str(Contador%) Loop End Sub A segunda estrutura de looping é o WHILE...WEND que é a mesma coisa que DO WHILE...LOOP A terceira estrutura de looping é um contador acumulador. Veja a sintaxe: For contador = valor_inicio To valor_final [Step incremento] [comandos] [Exit For] [comandos] Next [contador] Exemplo: Dim Contador% For Contador% = 0 To 10 Combo1.AddItem Contador% Next Note que o Combo1 irá ter números de 1 a 10. ............................................................................ Bom, esta parte de VB foi enviada por um amigo nosso e especialmente coloca- do na ZINE, especialmente, pois VB iria ficar sem apoio este mes, porem com o envio desse texto, poderemos colocar coisas para este e para o proximo numero, ai ateh lah esperamos poder ter alguem jah com a funcao de escrever ensinando VB. Entao eh isso ai, a unica coisa que nao sei eh de quem real- mente eh esse texto, mas ai... ao autor, parabens pelo texto que estah otimo. T+ [Eagle's Power]'s .~`^'-_!+=/.,~`^'-_! 09 - PIADAS... Hahahahahahah .~`^'-_!+=/.,~`^'-_!.~`^'-#$ YEH YEH YEHHHH!!!! AHAHAHAHAHHAHA Vamos malucao, sorria, vc. pode nao saber mas voce esta sendo FILMADO...hihiihihihihhhi nada ve, mas entao beleza q. pura oh bicho, vamo q. vamo, o zine nao pode para..eeheheheheh bicho vamos continuar a nos divertir com as piadas ok? tem uns doido por ai oh q. disse q. as piada ele jah conhecia todas, entao eu respondo: Beleza pura vei, ai se nao perde tempo lendo ohhh, vai lendo o resto ok?!?!?! Tipo eh o seguinte malucada espero q. todos colaborem, pois eu nao tenho um estoque de piada ohhh, mas beleza "DROGAS, CRIMES, TRINTA E OITO NA MAO, PRO- FISSAO LADRAAAAAAOOOO!!!! viajei, eh q. eu to ouvindo um som ak oh vei, mas tah dodio tah danado tah pitimbado, vamos da rizada vai.... Entao pessoal, vamos nos divertir numa boa certo? Beleza... Vamos nessa que eh bom a bessa...:) <-_ I Ueh, isso ak jah tinha na zine anterior...eheh I []'pX_LARVA ESPOLETA 01. O Garoto chega em casa e logo quer saber o por que sua familia morre de repente, entao, assim que entra em sua casa corre para sua mae e pergunta: Mamae.... Por que eh que todos em nossa familia morrem de repente!? ..... Mamae!? ..... Mamae!? ..... Mamaaaaaaaeeeeee..... Xi.... :)) 02. Voltando do recreio, Marcelo pede ao professor para ir beber agua, este diz que nao, que ele deveria ter ido durente o intervalo. apos cinco minutos ele insiste: - professor eu preciso muito beber agua, posso? o professor diz novamente que nao! mais cinco minutos e.... - mas professor eu estou morrendo de sede... posso ir!? - NAO! passados outros cinco minutos. - professor nao estou aguentando, posso beber agua!? - jah disse q. nao. olhe.. pense q. estah com frio q. a sede passa. apos cinco minutos Marcelo retorna: - professor, o senhor tem um cobertor!? :)) 03. Sabe por que o cerebro da mulher fica deste tamanho (.) quando ela morre!? porque Dilata! :)) 04. Sabe pq. uma loira ficou contente ao montar um quebra cabeca depois de 2 anos!?, pois na caixa infromava: De 4 a 6 anos! :)) 05. Se nao fosse pelas mulheres, ficariamos na Mao! ;)) 06. Num asilo de velhos, um ancião se dirigiu a uma colega: Não podemos ter sexo, mas gostaria de ter alguém para segurar o meu pênis, não creio que isso faça mal. A coleginha aquiesceu e durante dois meses se encontravam para tomar sol no terraço, ele tirava a estrovenga e ela pegava. Um belo dia ele desapareceu. Ela procurou por toda parte no asilo, e foi finalmente encontrá-lo no quintal, sentado ao lado de outra velhinha, que segurava o seu membro viril. A antiga companheira ficou indignada: Durante dois meses eu segurei seu pênis sem problema, e agora você me deixa por uma outra. O que ela tem que eu não tenho? O velhinho retrucou sorrindo: Doença de Parkinson! 07. O pneu do carro do Manuel fura diante de um hospicio. Ele desce e tira as porcas da roda, mas elas escorregam para dentro de um bueiro. Um dos in- ternos assiste a cena do lado de dentro das grades do manicomio e acon- selha ao Manuel: Tire uma porca de cada uma das tres rodas para segurar a que ficou solta, ate chegar a um posto. Fenomenal! Muito boa ideia. Obrigado! Olhe, eu nem sei por que tu estas ai dentro. Eu estou aqui porque sou doido, nao porque sou burro! 08. Ao vir para o Brasil, o Manuel fica fascinado com a caixa de fosforos e resolve mandar uma de presente para a Maria, em Portugar, junto com uma carta explicando o seu uso. Dias depois, recebe um telegrama de Maria: "Nao funciona". Incredulo, o Manuel comenta: - Mas como? Eu testei um por um... 09. O Portugues chegou ao Brasil e veio visitar um amigo seu. Logo apos o pouso do aviao, saiu procurando pelo amigo que jah o esperava com sua mercedes,logo ao entrar no carro, avistou um negocio na parte da frente do carro e perguntou ao amigo o que era akilo!? e o amigo respondeu: - eh o seguinte... sempre que eu quero acertar alguem, eu miro ali e vou em cima da pessoa, ai buUUUUmmm! - hmmmm. legal.... nisso vinha passando uma senhora pela rua... ai o cara acelerou e seguiu em direcao a senhora na maior velocidade e dizendo ao Portugues: - Veja como funciona... e tirando o maior sarro continuou acelerando, ao chegar perto da senhora, ele desviou pois sua intencao era de brincar com o amigo, foi quando ouviu: PLAFT! Parou para olhar e viu a senhora caida, foi quando ia falar e foi interrompido pelo portugues: - Tu precisas concertar esta mira.... se eu nao abro a porta, tu nunca iria acerta - la! :)) 10. Por que portugues usam caneta atras da orelha? - Pra fazer conta de cabeca. 11. - Por favor! O senhor viu alguem dobrando esta esquina, agora ha pouco? - Nao, senhoire. Quando aqui cheguei, ela ja estava dobrada... 12. Em Lisboa, apos um incendio no pequeno predio, os bombeiros, verificando os destrocos, encontram apenas um morto.E justamente o avo do Manuel, que estava de cabeca para baixo, com o dedo indicador apontando para um dos cantos do ambiente.Ao seu lado, um extintor de incendio, com a seguinte instrucao: " Em caso de incendio, vire de cabeca para baixo e aponte para a chama". 13. E o Manuel entra com tudo numa contramao. Da azar e eh parado por um guarda, no ato: - Onde o senhor pensa que vai? - Bem, seu guarda, eu estava a ire ao cinema, mas parece que me atrasei. Esta todo mundo a voltaire! 14. No elevador, estao o Manuel e um casal desconhecido. De repente, nosso amigo d'alem-mar solta um estrondoso pum. O outro, claro, chia: - O senhor nao tem vergonha? Fazer isso na frente de minha mulher? - Oh! Desculpe! Eu nao sabia que era a vez dela. 15. O Manuel presenteia a filha moca com um casaco de pele de raposa prateada. Satisfeitissima, ela afaga o presente com as maos comentando: - Como pode uma coisa tao maravilhosa vir de um animal tao pequeno, sem aparencia, totalmente insignificante... - Alto la! Se tu nao queres me agradeceire, va la. Mas tambem nao precisa ofendeire!... 16. O Manuel vai visitar um velho navio de guerra. Em um dos compartimentos, tropeca numa placa de bronze, onde esta escrito: " Aqui tombou o Almirante Barroso". E comenta: - Nao eh de admiraire. Eu tambem quase cai aqui! 17. - Comandante Joaquim! Estou a avistaire uma tropa que se encaminha diretamente ao nosso forte! - Sao amigos ou inimigos, sentinela Manuel? - Olha, eu acho que sao amigos. Vem todos juntos... 18. - Voce sabe porque portugues usa bigode? - Nao. - Pra ficar parecido com a mae. 19. - Sabes Joaquim, o doutoire me disse para bebeire um pouco de suco de limao depois de um banho quente. - E tu bebeste o suco de limao, Manuel? - Que nada! Nao consegui nem acabar de bebeire toda aquela agua quente do banho! 20. O Manuel e a Maria vao ao jogo de futebol. Chegam superatrasados porque a Maria demorou seculos se arrumando. Quando entram no estadio, esta para comecar o segundo tempo. O Manuel pergunta a um dos torcedores: - Como esta o jogo? - Zero a zero. - E a Maria: - Estas a veire? Chegamos a tempo! 21. O Manuel vai ao Rio de Janeiro. Os amigos o advertem que la os motoristas de onibus e taxi costumam voar com seus veiculos. Chegando na Cidade Maravilhosa, Manuel pega um taxi: - Avenida Brasil, por favoire. - Que altura? - Se tu fores a mais de dois metros, eu pulo desse troco, o raios! 22. - O, Maria, estou a morrer de cansaco... Vim correndo atras do onibus e, sem nunca o alcancaire, acabei chegando ate aqui... meu consolo e que economizei vinte cruzados... - Mas tu es burro mesmo, hein, Manuel? Por que nao correste atras de um taxi? Terias economizado muito mais! 23. O carro do Manuel enguica e ele vai com o filho ao mecanico. Apos verifi- car o motor do velho carro, o mecanico diz: - O problema esta no freio. Vou ter que mexer no burrinho. O Manuel puxa o garoto para tras e se altera: - Nao, senhoire! No garoto ninguem mexe! 24. O Manuel chega em casa, numa tarde, e da com um pinguim em seu jardim. Sem nunca ter visto um antes, ele fica todo atrapalhado, sem saber o que fazer, e pede ajuda para um vizinho, que o aconselha: - Olha, Manuel, o melhor que voce tem a fazer e leva-lo ao Zoologico. No dia seguinte, o vizinho encontra com o Manuel passeando com o pinguim levando-o rua abaixo por uma cordinha amarrada no pescoco e se surpreen- de: - O, Manuel! Aonde voce vai com o bicho! Voce nao o levou ao zoologico ontem? - Levei sim e ele adorou. Hoje, estou a leva-lo ao Plycenter. 25. O Manuel se emprega como ajudante numa oficina mecanica. O dono o chama para a primeira tarefa: - To consertando o pisca-pisca deste carro. Vai la atras e me diz se ta funcionando. E o Manuel, olhando com atencao para a lanterna traseira: - Ta funcionando, nao ta funcionando, ta funcionando, nao ta funcionando.. 26. Chega o assaltante, apontando uma arma por debaixo da roupa, e grita pro Manuel: - Pare! - Impare! E o assaltante, sem entender nada: - Mas eu estou te roubando... - Ah! Entao nao brinco mais! 27. - Ora, Manuel! Ate que enfim o quilo do arroz baixou! - Afe, Maria? E quantos gramas pesa agora? 28. O Manuel vai trabalhar de mordomo: - Acorda, patrao! Acorda! - O que foi? O que foi? - Esta na hora do senhoire tomar o remedio para durmire... 29. O Manuel vem dirigindo pela estrada. Uma viatura da policia rodoviaria o faz parar e o guarda lhe pede a carta. - Carta? Ora, mas eu fiquei de lhe escreveire? 30. A Maria vai ao medico: - Ai doutoire! Eu nao consigo dormire. Se durmo virada pra cima, sou atacada por forte doire de cabeca. Se viro para um lado, atacam-me os rins. Se viro para o outro ataca-me uma doire no baco. O que e que eu faco, o doutoire? - Porque a senhora nao experimenta dormir de brucos? - Porque, ai , me ataca o Manuel! 31. O Manuel faz uma ligacao telefonica: - Alo? E da Varig? Por favoire, senhorita, eu queria sabeire o tempo de voo Sao Paulo-Lisboa. - Um minutinho... - Ah! Esta bem, muito obrigado! E desliga o telefone. 32. - Entao, Manuel, como se tem se sentido com os banhos que lhe receitei? - Muito bem, doutoire. So que sinto o corpo um pouco pegajoso. - Pegajoso? - E, eu acho que e por causa do assucar... - Assucar? - O senhoire nao mandou tomaire banhos de agua douce? Ora, pois... 33. O executivo ja esta atrasado para pegar o aviao e toma um taxi que o Manuel dirige nas horas de folga. A certa altura, se impacienta: - Nao sei por que foram construir o aeroporto tao longe da cidade. - E que queriam que ele ficasse bem perto dos avioes, doutoire. 34. O Manuel e a Maria resolvem ir ao Teatro Municipal. Percebendo estarem atrasados, o marido pede a mulher que se apresse. Apos muitos retoques, a Maria termina de se arrumar e eles se dirigem as pressas para o teatro. Ao entrarem, o apresentador esta anunciando: - Ouviremos a Quinta Sinfonia de Beethoven. Irritado, o Manuel ralha com a Maria: - Estas vendo, mulher? Por tua causa perdemos as outras quatro! 35. O Manuel chega no chaveiro e pede: - Seria possivel o senhoire abrir a porta do meu carro, pois travou-se com as chaves dentro? - Pois nao, senhor. Se puder aguardar um instante... - Mas seja breve, por favoire. Parece que vai choveire e o meu carro tem capota, ora pois! 36. A Maria trabalha como enfermeira, num hospital: - Doutoire, o senhor pediu anestesia local, mas ca na caixinha esta escrito que ela foi fabricada na Alemanha... 37. Voce sabe que computador, em qualquer lugar do mundo, tem memoria. Menos em Portugal. La, computador tem... uma vaga lembranca. 38. Pouca gente sabe, mas na epoca da Segunda Guerra os portugueses tambem construiram seus campos de concentracao. Num desses campos, um homem eh condenado aa morte, por intermedio de gas. O condenado eh levado a um quarto, com portas e janelas abertas. - Como poderei morrer por intermedio de gas, se aqui tem tanta ventilacao? - Cale a boca e fique de pe em cima desse xis, marcado no chao. O cara fica. Manuel, o algoz, corta uma corda, e um enorme botijao de gas se precipita do teto, em cima da cabeca do condenado. 39. - Voce sabe quantos portugueses sao necessarios para trocar uma lampada? - Nao. - Cinco. Um sobe na mesa e segura a lampada, os outros quatro rodam a mesa. 40. O amigo do Manuel vai a sua casa e o encontra empurrando uma velha geladeira por toda a cozinha. Estranha e pergunta: - O Manuel! Que diabo estas a fazeire? - E que a danada esta enguicou e eu estou a veire se ela pega no tranco. 41. - Comandante Manuel, o inimigo mandou um aviao de reconhecimento. - Entao, mande uma carta de agradecimento. 42. - Voce eh cego de nascenca? - Nao, senhoire. So da vista mesmo. 43. O portugues nao aguenta mais ver o ingles contar tanta prosa a respeito das grandes invencoes de seus compatriotas. Sr. fulano inventou isso, Lord sicrano inventou aquilo. Ate que o ingles mencionou o limpador de para-brisa. - Alto la! O limpadoire de para-brisa quem inventou foi um portugues! E antes que o outro pudesse dizer qualquer coisa: - O ingles apenas aperfeicoou a invencao do patricio, botando o limpadoire pro lado de fora do vidro! 44. O Manuel compra um assougue. Um dia, chegam gritando em sua casa: - Seu Manuel, Seu Manuel! O seu acougue pegou fogo! - Ora, nao tem importancia. A carne esta na geladeira... 45. Ai o Manuel vai no mecanico, de novo: - O, gajo! Eu queria consertaire a buzina do meu carro... - Tudo bem. - ... porque o freio nao esta bom. 46. O Manuel vai a uma festa gran-fina. Ressabiado, com medo de dar algum fora, fica observando como os demais convidados se comportam. O jeito correto de beber, de comer. Observa alguem ja satisfeito, palitando os dentes, com discricao... Mais tarde, o anfitriao, vem cumprimenta-lo: - E ai, Manuel? Esta sendo bem servido? - Olhe, pa.. Eu nunca comi tao bem! So daqueles palitinhos, que as pessoas comem escondido, tapando a boca com as maos, eu ja comi uns quinze... 47. - Por que piscina de portugues tem agua azul? - Porque ele mergulha com a caneta. 48. O Manuel vai ao cinema, a tarde. Entra e nao enxerga um palmo naquele escuro. Fica parado, de pe, esperando acostumar a vista. O lanterninha vem ajuda-lo. O Manuel ve aquela luz se aproximando, se aproximando... e pimba! Pula com tudo no colo de um casalzinho que comia pipocas. Maior fuzue, voa pipoca, todo mundo reclama aos berros. - Me desculpe, gente! E que se eu nao saio da frente, aquela bicicleta ia me atropelaire! 49. - Joaquim! Quando eu tiver pegado no sono, faca o favor de vir apagar a luz. - Pois nao, patrao! E so o senhoire tocaire a campainha e eu virei correndo. 50. O fregues entra no bar do Manuel e le o cartaz afixado na parade: " Pao simples: 5 cuzados. Pao com manteiga: 8 cruzados. Pao sem manteiga: 10 cruzados. Estranha e pergunta: - O Manuel, por que o pao sem manteiga nao custa o mesmo q. o pao simples? - Porque da mais trabalho, ora! A gente tem que colocaire a manteiga depois tiraire! 51. Ha 27 anos o Manuel so frquentava aquele restaurante. De repente, comeca a ir ao concorrente, do outro lado da rua. O dono do primeiro estranha e o aborda na rua: - O Manuel, que foi que houve? Nossas refeicoes nao lhe agradam mais? - Nao. Nao ha nada de errado com elas. Estou apenas a obedeceire as ordens do meu dentista. - Dentista? - Exatamente. Quando lhe mostrei os dentes que doiam, ele me mandou passar a comeire so do outro lado! 52. Naquele dia ensolarado, Manuel esquece as chaves dentro do carro, apos travar a porta. Com um pedaco de arame, atraves do vao de uma das janelas, e com o auxilio de Maria, inicia a delicada operacao. E a Maria vai dando as indicacoes: - Mais a direita, Manuel.. Um poquinho mais para a frente... Falta pouco.. Isso! Apos retirar as chaves finalmente o Manuel abre a porta do carro. E quando a Maria comenta: - Ainda bem Manuel! Eu ja nao aguentava mais de caloire aqui dentro! 53. O Manuel vai pela primeira vez ao cinema. Chega na bilheteria e compra uma entrada. Dai a poquinho, volta e pede mais uma. Nao passam mais dois minutos, vem comprar outra. A bilheteira chia: - Po, meu! Por que voce nao compra todas de uma vez? - Nao me culpe, senhorita! E que tem um gajo ali na porta que, toda vez, me toma o bilhete e rasga! bom pessoal eh isso ai... acho q. jah deu para se divertir bastante... entao eh o seguinte... estas piadas foram enviadas por um novo amigo... quem sabe ele nao se integre aa coorporacao, porem pediu q. desse seu nome e e-mail, satizfazendo sua vontade, ai vai.... Meu E-Mail é Fabrizi@Base.com.br Meu nome é Fabrício Passos da Costa beleza!? intaum... eh isso ai.... Px_LARVA ESPOLETA EAGLE'S POWER LaSt^WaRRioR .~`^'-_!+=/.,~`^'-_!.~`^'-_ 10 - RADIO AMADOR .~`^'-_!+=/.,~`^'-_!.~`^'-_.~`^' .+~`^'-_!+=/.,~`^'-_!.~`^'-_!. 11 - MUSICA ~`^'-_!+=/.,~`^'-_!-_!+=/.,~`^'-!. Bom, como a zine eh livre pra eu escrever o que quiser... vamos nessa! Quero falar um pouco sobre "Nenhum de Nos"... eh uma banda senssacional... tipo eu nao curtia quer dizer.. nao conhecia a banda.. conhecia as musicas pois faziam muito sucesso, mas nao sabia q. era deles, foi qdo assistindo ao programa H de inverno em Campos de Jordao, vi os caras cantando e adivinha qual musica!? isso mesmo... Camila, Camila.... putz.. essa musica eh animal... ai resolvi comprar um Cd dos caras, nao eh q. eles detonam mesmo! :)) intaum de lambuja vai a letra da Camila, Camila.... Depois da ultima noite de festa chorando e esperando amanhecer, amanhecer. As coisas aconteciam com alguma explicacao. com alguma explicacao. Depois da ultima noite de chuva, chorando e esperando amanhecer, amanhecer. As vezes peco a ele que va embora que va embora. Camila, Camila. E eu que tenho medo ateh de suas maos, Mas o odio cega e voce nao percebe. Mas o odio cega. E eu que tenho medo ateh do seu olhar, mas o odio cega e voce nao percebe, mas o odio cega. A lembranca do silencio daquelas tardes. daquelas tardes.... Da vergonha do espelho naquelas marcas. naquelas marcas. Havia algo de insano naqueles olhos. Olhos insanos. Os olhos que passavam o dia a me vigiar. a me vigiar. Camila, Camila. E eu que tinha apenas 17 anos, baixava minha cabeca pra tudo. Era assim que as coisas aconteciam. Era assim que eu via tudo acontecer. E eu que tinha apenas 17 anos, baixava minha cabeca pra tudo. Era assim que as coisas aconteciam. Era assim que eu via tudo acontecer. Camila, Camila. agora mundando um pouquinho o estilo, vamos ver um pouco de Hip-Hop! :)) ou se preferir RAP para quem nao sabe o que significa, vamos lah: R(Rhythm) - Ritimo A(And) - e P(Poetry) - Poesia uma mistura de Batidas com vocalizacao em forma poetica, ou seja, uso de palavras com rima que regem essa composicao musical... |EAGLE'S POWER| HIP - HOP ────────────────────- BREAK DANCE NA VEIA! ────────────────────── Ao contrario do que muita gente imagina, a Break Dance permanece viva, evoluindo sempre e tornando-se cada vez mais interessante. Nos EUA, o Break vem sendo apresentado em concorridissimos espetaculos de teatro e em seminarios universitarios. Por aqui, para nao deixar a peteca cair, essa cultura de rua em forma de arte eh apresentada em eventos, em que o publico pode tomar conhecimento de tudo da melhor maneira: dancando hip-hop! Se existe uma festa que merece o carimbo de "aprovado" nesse estilo, certa- mente eh a que acontece no ESPACO SKEMA 1, na avenida Rio Branco, 86, bem no centro de Sao Paulo. Imperdivel. Som Black ano 1 No 1 Comentario: Atencao, caso vc. curta o movimento Break e nao saiba onde encontrar, eu vou lhe informar, apareca na estacao Sao Bento do metro ou mesmo na estacao Conceicao do metro, eu digo isso, pois quando estou livre eu do um pulo por essas quebradas pra curtir o movimento... isso eh Hip - Hop na veia VEIO! ────────────────────── 2PAC, o IMORTAL ────────────────────── Jah virou rotina. Tupac Shakur continua escandalosamente vivo no mundo da midia. Em mais um episodio das infindaveis repercussoes da morte do rapper/ ator/ativista/gangsta, apareceu o (ateh entao declarado morto) pai de Shakur, ou ao menos alguem que se intitula como tal. O nome do distinto cavalheiro eh Bill Garland, um ex-presidiario nova-iorquino. Mais que depressa ele esta entrando com um recurso na justica para abocanhar nada mais nada menos do que a metade da fortuna de 2Pac. Segundo declaracoes de Afeni Shakur(mae de Tupac) ela nunca soube ao certo quem seria o verdadeiro pai do rapaz, mas quando ofereceu a Garland a oportunidade de assumir a paternidade, ele se recusou. Por conta desses e outros motivos, a rede HBO americana esta preparando um filme sobre o rapper e a atriz Jasmine Guy, amiga do falecido, que esta fechando patrocinios para fazer um filme sobre Afeni Shakur. Aguardem as invevitaveis cenas dos proximos capitulos... Som Black ano 1 No 1 Comentario: Eu nao poderia deixar vc. na mao e nao lhe passar mais um pouco de Hip - Hop, e esta vai pra vc. q. curte um filme Gangsta. Eu jah assisti e recomendo a todos vcs. do movimento, bicho o filme eh o seguinte: JUICE Se nao viu, assista, se jah viu, assista denovo, e dessa vez faca uma copia, o q. se ta esperando...eheheh vai fundo malandro... ────────────────────── RAP NACIONAL (RACIONAIS MC'S) ───────────────────── Aqui vai um pequeno trecho da entrevista q. a revista RACA fez com os manos da pesada Racionais MC'S... RACA: Por que Racioanis? EDY - Vem de raciocinio neh? Um nome que tem a ver com as letras, que tem a ver com a gente. Voce pensa pra falar. BROWN - Naquela epoca o rap era muito bobo. Rap de enganar, liga mano? Nao forcava a pensar. BLUE - Era musica facil. RACA: Ja sao oito anos e sao quatro discos, eh isso? EDY - Nao, foram dois LP e um mix, agora sai o quarto, Sobrevivendo no Inferno. RACA: Mas tem um CD coletanea tambem. EDY - Isso ai eh coisa da gravadora. BROWN - A gente nao lancaria um CD com todas as musicas junto, sao tres fazes diferentes. A gravadora ve o lado comercial da parada. RACA: Em uma faze e outra, qual seria a diferenca? EDY - Tem diferenca de idade neh mano, se vai crescendo vai mudando o pensamento..... Px_LARVA ESPOLETA ~`^'-_!+=/.,~`^'-_!.~`^'-_! 12 - DESAFIO(!?) ~`^'-_!+=/.,~`^'-_!-_!+=/.,~`^'- Bom, este eh o nosso espaco para divulgarmos novos trabalhos e os bons programadores q. temos pelo Brasil :))) Iremos lancar dois desafios, o primeiro serah para os programadores em C jah o segundo eh para aqueles que se identificaram melhor com o assembly...... Na verdade o que queremos eh que nossos caros leitores retribuam o aprendi- zado, e so assim veremos se vossa senhoria :-) (Hmmmm.falei bonito, hehe) esta mesmo acompanhando o nosso curso, pois estes desafio serao para benefi- cio proprio de voces, entao pesso para todos participarem, e o premio para o ganhador sera...ah sei lah bixo, sera que voce se contentaria apenas com o seu nome ou seu nick publicado ? Ai voce me diz: - Mas que tal uma graninha extra!?!? - Ta louco mano, se fosse pra ganhar dinheiro se acha que nossa corporacao es- taria fazendo esse Z|N3 ? Pra comeco de conversa, gostamos do que fazemos, e na verdade queremos ensinar e ao mesmo tempo aprender com voces leitores, e se isso nao serviu como consolo, que tal.. [ESSA ZINE TEM FINS BENEFICIENTES PARA COM O CRIANCA ESPERANCA, PARTICIPE] |TA LOCO TA DANADO MEU, VOCE NAO VAI ACREDITAR NISSO VAI? :) | Ou poderiamos dizer tambem: - Ei psit, o da potrona mande sua colaboracao via e-mail(HAHAHA QUE HORRIVEL) Para doar 30 conto mande o e-mail para [30@conto.com.br] Para doar 60 conto mande o e-mail para [60@conto.com.br] Para doar 90 conto mande o e-mail para [90@conto.com.br] Para nao doar, noa leia a revista :)))) Percebeu agora porque nao podemos dar um premio para o vencedor do dEsAfIo? Se nao entendeu eu vou resumir...NAO GANHAMOS NADA EM DINHEIRO FAZENDO A ZINE, APENAS FAZEMOS PORQUE GOSTAMOS E QUEREMOS ENSINAR AOS OUTROS O QUE SABEMOS, E AO MESMO TEMPO APRENDER COM VOCES LEITORES... Resumidamente, eh isso! :))))) |Px_LARVA ESPOLETA| 1 - Desafio Em "C" Bicho, eu espero q. nao me decepcionem, entao o desafio eh o seguinte: escreva um program em TC, no qual imprima na tela a mensagem: WU TANG CLAN ZIN3 CORPORATION Pronto eh soh isso, ahahahahahahahah se vc. conseguir, nao fique muito contente, mas se vc. nao conseguir, SE MATEEEEE! BAHHHH Mas tipo ai entra a criatividade, se pode pensar, beleza, vou usar soh o printf e jah era, mas ai, derrepente vei, se vc. for criativo e fizer um baguiu descente malucao do tipo sei lah faca piscar, faca com cores, faca ate falar, entao, melhor dizendo, use a cabeca....affffeeee ferro! Dica: printf("WU TANG CLAN ZIN3 CORPORATION") Se que mais??????...pruuuuuuuuuuu....hahahahahahaah falora bicho...PENSE! Ah nao esqueca, manda a fonte e "documentacao" ;)) 2 - Desafio Em Assembly Crie um programa que imprima algo na tela em diversas cores e diversas vezes.... isso eh baba tendo em vista as explicacoes e os exemplos do curso... agora uma dica... use o comando LOOP para isso, como assim? vou explicar: em um programa assembly, se vc. quiser fazer um loop vai precisar saber o local do salto ou entao o label(rotulo)! tipo... um exemplo disso MOV CX,10 IMPRIME: ; este eh o LABEL ou se preferir ROTULO XOR AH,AH ; espera uma tecla ser digitada ; o xor eh um truque usado para zerar o registrador ; de uma forma mais simples.. poderia ser ; MOV AH,0 INT 16h ; Int da BIOS MOV AH,2 ; imprime caracter em DL via DOS MOV DL,AL ; caracter a ser impresso, veja q. coloquei o valor ; de AL pois este serah retornado pela funcao 0 da ; int 16 veja a instrucao acima INT 21h ; Int do DOS LOOP IMPRIME ; ak. estah o que queremos fara o LOOP CX vezes ; como assim!? veja q. acima usei o MOV CX,10 ; sendo assim ele farah o loop 10 vezes obs: os rotulos soh nao podem ser iniciados por numeros e podem conter ateh 32 caracteres 3 - Desafio em Clipper Crie um programa que cadastre clientes, altere, e apague, use para isso uma ".PLL" criada por voce e use o artificio RTLINK FI prog1,prog2.... criando assim uma digamos q. livraria(.LIB) nao venha me dizer q. nao sabe as funcoes do clipper que eh soh olhar o NG.. porem se tiver alguma duvida.. mande msgs! :)) estaremos ajundando voce na criacao do seu programa! :)) |EAGLE'S POWER| []'Px_LARVA ESPOLETA .~`^'-_!+=/.,~`^'-_!.~`^'-_! 13 - RECLAMACOES ;(( .~`^'-_!+=/.,~`^'-_.~`^'-_!~ Bom as reclamacoes nao foram muitas ainda bem! :)) heheh eh brincadeira quem tiver que reclamar.. pode soltar o verbo.. estamos aqui para ouvi - los! heheh mas tudo bem... intaum.. agora vao as duas reclamacoes q. recebemos... a primeira eh sobre a escrita... bom.. nao sei se poderah ser melhorada.. porem revisaremos a zine algumas vezes.. mas alguns erros podem passar desa- percebidos por nos! :)) jah a outra reclamacao foi sobre alguns exemplos nao funcionarem em compiladores para Linux... Bom... sinto muito.. nao temos como testar os exemplos em todas plataformas ai vai de cada um para poder adapta - la de algum modo.... bom... mas a reclamacao eh valida... e sempre que alguma funcao nao funcionar em alguma plataforma que nao seje DOS nem WINDOWS, por favor.. nos avisem... soh assim podemos tentar cada vez mais melhorarmos a compatibilidade! :)) Eh isso ai, como o Eagle vem falando ai em cima, vou continuar sobre essa parada de RECLAMACAO, jah to de saco cheio...ehehehhhe o povo nao reclama de nada pra gente sair no pau....tah doidio tha danado (tDTd), eu tava loco pra malucada reclamar, mas ninguem chutou o pau....beleza q. pura, ou ninguem ta lendo..ehhehehehahahahahah ou tipo e tal, tal e tipo ....sei lah malucao to achando esse pessoal mais loco q. nois ohhh, eh foda....mas hmmmmmmmm ........mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm ...mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm ..mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm tava so pensando e aproveitando pra aumentar as linhas da zine.... ah entao, onde eu parei mesmo....eh o seguinte povo,,,vamu recramar se nao agente acha q. ta tudo legar, mas tipo se vc. fala puta maluco esse pX_LARVA eh moh imbecil....hihihhihihi nao vai adiantar mutio nao, vo ficar mais imbecil ainda.. era soh isso, e se nao gostar...hummmm, se nao, se nao, se nao,,,, se nao nao.... Px_LARVA ESPOLETA EAGLE'S POWER LaSt^WaRRioR ..`^'-_!+=^-_!.^-_!@ 14 - AGRADECIMENTOS...Tks ALL~`^'-_!.~`^'-_!+=/.,~`^'-_!. Como sempre, estarei agradecendo a Deus, bom, muitos nao sao religiosos, ou cristao ou sei lah, pois eu tbm. nao sou muito fanatico nisso porem esse Deus que uso eh num sentido superior... akele q. olha por nos! q. nos guia e tal, nao akele desenhado pela igreja catolica ou outra q. o pessoal sempre usa, digo Deus num sentido amplo simplificando um ser superior a nos, meros seres - humanos.... e tbm. quero agradecer a familia, apesar de xiar, estao sempre apoiando! ;)) e agradecer aos leitores, pela forca e tudo mais... estou sentindo q. com essa zine, estamos conseguindo alcancar nosso objetivo de unir os programadores e mostrar a forca Brasileira... tipo jah tem uma galera legal participando da edicao do zine, e queremos ver muuito mais nessa edicao... entao pesso a todos para espalharem o zine por ai a fora... tipo muitos nao acessam a inet, porem acessam os bbss, entao quem for de fora de Sao Paulo, favor enviar o zine pelas bbss por ai a fora, soh assim conseguiremos um maior numero de leitores e um fortalecimento cada vez maior do zine.... Bom, quero agradecer muito aos leitores que participaram da zine, mandando correcoes, e-mail, exemplos, e tudo o mais... e agradecimentos especiais ao Guilherme Manika pela explicacao de como achar o IP de um programa, e ao Eduardo Carvalho, por alem de ajudar a achar o IP em ASM, tem me dado a maior forca nessa linguagem, sempre q. nao entendo algo, recorro aa ele! :)) na verdade estamos aprendendo junto, com uma pequena diferenca, ele sabe beem mais q. eu! :)) heheh mas tudo bem.. estamos ai... e tipo, queria mandar um agradecimento para uma pessoa muito especial, o nome dela eh Leticia, soh queria agradecer por ela existir! :)) hmmm. como sempre.. uma msg especial para reflexao! " Eh melhor a lagrima de uma derrota, do que a vergonha de nao ter lutado." bom, acho q. eh soh... e tipo, tah faltando mulheres tanto para escrever o zine, qto para le - lo! cade as programadoras!?!?!?!?? t+ [Eagle's Power]'s ..`^'-_!+=^-_!.^-_!^.-_+^-_. 15 - ERRATAS -_.+^-_.~`^'-_!.~`^'-_!+=/.,~`^'-_!. opa... correcoes feitas por leitores! :)) Essa Errata foi feita e enviada por Rafael Caetano...... Qdo vc escreve: void main() { comando; ... comando; } Esta definindo a funcao. Prototipos sao as declaracoes que vc escreve no comeco do programa (geralmente atraves dos headers que vc inclui). Por exemplo, se vc usa getchar() e potencia() na funcao main(), o compilador precisa saber antecipadamente que tipo (int, double, etc) essas funcoes retornam e quais os tipos dos argumentos que ela espera: int getchar(void); double potencia(double, double); void main() { int c = getchar(); ... double x=2,y=3, z; z = potencia(x, y); } double potencia(double a, double b) { ... } ..`^'-_!+=^-_!.^-_!^.-_+^-_. 16 - ESPECIAL -_.+^-_.~`^'-_!.~`^'-_!+=/.,~`^'-_! Ueh... Especial!? sim... especial... aqui estah a participacao do leitor para duvidas deixadas pelos escritores do zine ou complemento sei lah.. qquer coisa q. tenha como fonte o leitor! isso mesmo, aqui estah a participacao do leitor, e neste zine veio uma coisa que me deixou contente, dois leitores me chamaram atencao qto ao ponto de sabermos qual o IP(instruction Pointer) ou se preferir Proxima instrucao! isso em assembly, dois leitores fizeram mandaram fontes e explicaram sobre o ponto q. deixei em aberto no zine! entao credito a eles! :)) Px_LARVA ESPOLETA EAGLE'S POWER LaSt^WaRRioR >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..corte aqui..<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< .model small .code org 100h ; gera .COM, lembra? :) main: jmp p ; pula o DB db 111 dup (0) ; so para aumentar IP p: even call i1 ; guarda o valor de IP na pilha i1: pop ax ; poem o valor de IP em AX add ax,4 ; + 4 p/ apontar p/ a prox. instrucao call exibe_reg ; o endereco exibido sera ; desta instrucao ret ; termina o programa e retorna ao 'dos' exibe_reg: ; rotina para exibir valor de registrador mov dl,ah ; coloca o valor de ah em DL para usar a funcao ; 02 da int 21h! and dl,0f0h ; faz um AND(e logico) de DL com 0f0h! mov cl,4 ; coloca 4 em CL geralmente usado como contador ror dl,cl ; faz uma rotacao de BITS com o valor de CL call soma ; funcao para somar! push ax ; salva o valor de AX mov ah,2 ; funcao 02-imprime o q. estiver em DL na tela! int 21h ; int do DOS pop ax ; restaura AX mov dl,ah ; coloca ah em DL and dl,0fh ; faz um e logic(AND) de DL com 0fh call soma ; soma push ax ; salva AX mov ah,2 ; funcao 02... int 21h ; int 21h do DOS pop ax ; restaura AX mov dl,al ; coloca al em dl and dl,0f0h ; faz um and com 0f0h ror dl,cl ; rotaciona DL com CL call soma ; soma push ax ; salva AX mov ah,2 ; funcao 02.... int 21h ; int do DOS pop ax ; restaura AX mov dl,al ; coloca AL em DL and dl,0fh ; faz um and com 0fh call soma ; soma mov ah,2 ; funcao 02... int 21h ; int do DOS mov dl,'h' ; imprime h na tela usando a funcao 2 da int 21h int 21h ; int do DOS ret ; retorna para a funcao q. chamou! soma: cmp dl,0ah ; compara dl com 0ah jae soma_l ; se for igual ou maior pula para soma_l add dl,'0' ; adiciona 0 ret ; retorna para a funcao q. chamou! soma_l: add dl,'A'-10 ; adiciona dl a 'A'(65)-10 ret ; retorna para a funcao q. chamou! end main >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..corte aqui..<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< com esse programa, voce conseguirah ver o IP da proxima instrucao, ela serah impressa na tela! programa cedido por Eduardo Carvalho, qquer coisa mande msgs q. entro em contato com ele.... Eduardo... Valeu pelo fonte! :)) .~`^'-_!+=/.,~`^'-_!.~`@$^-. 17 - PROCURA - SE ^,.~.~`^'-_!+=/.,~`^'-_!`^'-_!. HAHAahheheh Procura - se, ate parece propaganda oh! :)) mas tipo nao eh bem isso... eh o seguinte: Estamos precisando de alguem que programa em Java para poder dar auxilio no zine, tipo Java, Html, Visual Basic e C++, bom, se nao conseguirmos ninguem essas linguagens, vao ficar sem apoio, por isso, se alguem se interessar por uma dessas e estiver afim de participar, dah um tok ok!? valeu entao... Px_LARVA ESPOLETA EAGLE'S POWER LaSt^WaRRioR .~`^'-_!+=_/.,~`^'-_!.~`@$^-. 18 - PROPAGANDAS ^,.~.~`^'-_!+=/.,~`^'-_!`^'-_!. Bom, este espaco eh reservado para propagandas, nao temos muita ateh agora, mas quem sabe!? ;)) Eh o seguinte, a zine nao tem patriocinio nenhum, porem se alguem estiver afim de patricionar, ou alguma coisa do genero, basta entrar em contato conosco para conversarmos ok.!? bom, aos leitores nao se assustem, tipo isso ak. eh soh para no caso de alguem querer a propa- ganda da empresa, ou algo do genero, porem o zine, nao irah acabar por falta disto ok!? isso eh soh no caso de o zine crescer e quem sabe o pessoal querer fazer propagandas nele! :)) mas eh isso ai. se nao tiver tbm. sem problemas! :)) Bom, entao vamos aas propagandas: * KEMEK BBS : (011) 861-4358 24hs. operando com 3 nodes! Uma BBS bem interessante e muito boa por sinal, nao perca e ligue lah o mais rapido possivel eh muito legal mesmo... entao pessoal lah voce encontra arquivos variados, chat entre nodes e muito mais...! Liguem! Aos leitores do Zine, o sysop estarah liberando um tempo extra... tipo avisem - no que vc. eh leitor da zine WU TANG CLAN e pronto! :)) com isso estarah ganhando um(1) mes de assinatura gratuita com acesso full e 30(trinta) minutos diarios.... Px_LARVA ESPOLETA EAGLE'S POWER LaSt^WaRRioR ~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/., FIM DA ZIN3 ~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,