segunda-feira, 10 de maio de 2010

ARQUIVO 2

Declaração e Assinalamento de Arquivos-Texto

O Pascal usa a palavra reservada TEXT como identificador padrão de arquivos-texto. A sintaxe para definir
variáveis desse tipo:

var
arq_alunos: text;
arq_func: text[512];



Os arquivos-texto são definidos inicialmente com memória temporária de 128 bytes. Isto quer dizer que o
Pascal trabalha com 128 bytes de informações de cada vez. Esse tamanho de memória temporária é
adequado para a maioria das aplicações. Entretanto, no caso de programas que utilizam repetidamente
informações guardadas em disquetes, como é o caso de programas de banco de dados, pode ser
conveniente aumentar a capacidade de memória temporária. Para estabelecer o tamanho da memória
temporária, basta colocar o número de bytes desejado entre colchetes depois da palavra TEXT, na
declaração da variável de arquivo (como no exemplo acima).

Normalmente, declaramos uma variável de memória, do mesmo tipo de dados que vão ser gravados ou
lidos no arquivo. É essa variável que guarda em memória os conteúdos dos registros que vão ser lidos do
arquivo ou que vão ser gravados no arquivo. Todo o manuseio com os dados é feito em memória. O arquivo
de dados é utilizado apenas para gravar ou ler informações.

Exemplo:
type dados = record
nome: string[30];
tel: string[10];
end;
var
arq_alunos: text;
registro: dados;



Para utilizarmos uma variável de arquivo para acessar um arquivo-texto, temos que associar a variável a um
determinado nome de arquivo em disco. Denominamos esse processo de assinalamento. A procedure
predefinida que executa esta tarefa é ASSIGN. Assign associa o nome da variável de arquivo a um nome de
arquivo em disco. Nunca deve ser usada em arquivos que já estejam em uso.

Exemplo:
assign (arq_alunos,’ALUNOS.DAT’);

A partir desse comando, toda referência a “arq_alunos” no programa será dirigida ao arquivo no disco
chamado “alunos.dat”.

Caso um programa tenha mais de uma variável de arquivo, teremos que assinalar indiv idualmente cada
variável, isto é, teremos tantos assign quanto forem as variáveis de arquivo.

Assinalar uma variável arquivo é criar um buffer específico para aquela variável. Um buffer é uma parte da
memória do computador, com determinada capacidade, que é criada para atuar como intermediário entre o
programa e o arquivo de dados no disco. A informação que se encontra no disco, primeiro é copiada para
buffer, uma determinada quantidade de bytes de cada vez, estando, portanto, disponível ao programa para
manipulação. Do mesmo modo, as informações, para serem gravadas em disco, são primeiramente
acumuladas no buffer. Quando o buffer está cheio, as informações são copiadas para o disco.

ALUNOS.DAT fl‡ BUFFER fl‡ MEMÓRIA

Graças aos buffers, os dados são movimentados corretamente, para os arquivos especificados.

O default de arquivos que podem ser abertos simultaneamente no Pascal é 16. Se você deseja aumentar o
número de arquivos que podem permanecer abertos basta usar a diretiva F do compilador. {$F20}.

Você também pode alterar o número de arquivos abertos ao dar “boot” no sistema, uando a declaração
FILES do arquivo CONFIG.SYS, além também de poder estabelecer o número de buffers utilizáveis
(BUFFERS).

Exemplo:
{$F20}
uses crt;
type dados = record
nome: string[30];
tel: string[10];
end;
var
arq_alunos: text;
registro: dados;
begin
clrscr;
assign(arq_alunos,’ALUNSO.DAT’);

 

 Abrindo um Arquivo-Texto

Um determinado arquivo-texto pode ser aberto para leitura ou gravação, mas não para ambas operações ao
mesmo tempo.

O Turbo Pascal fornece três procedures diferentes para abertura de um arquivo-texto:

a) Rewrite (var de arquivo): cria um novo arquivo e o abre para operações de escrita. Após a abertura,
podemos usar procedures WRITE e WRITELN para escrever os dados e linhas de texto no arquivo.
Caso o nome do arquivo já exista no disco, este procedimento destrói o arquivo antigo e cria outro
vazio e com o mesmo nome, isto significa que todos os dados do arquivo existente serão perdidos.

b) APPEND (var de arquivo): abre um arquivo-texto já existente, de modo que podemos adicionar
novos registros no fim do arquivo. Ocorre um erro de I/O se o arquivo não existir no disco. Após a
abertura, podemos usar as procedures WRITE e WRITELN para escrever dados no arquivo.

c) RESET(var de arquivo): abre um arquivo já existente para leitura. Após a abertura do arquivo,
podemos usar as procedures READ e READLN para lermos dados e linhas de texto do arquivo.

Em contraste com a procedure REWRITE que cria um arquivo novo destruindo o antigo, caso exista, as
procedures APPEND e RESET assumem a existência de um arquivo nomeado no disco. Se o arquivo não
puder ser localizado, em ambos os casos, resultarão em erros de I/O em tempo de execução.

Exemplo:
uses crt;
type dados = record
nome: string;
tel: string;
end;
var
registro: dados;
arq_reg: text;
begin
clrscr;
assign(arq_reg,’ALUNOS.DAT’);
{$I-}
reset(arq_reg);
{$I+}
if IOResult = 0 then
write(‘Arquivo “ALUNOS.DAT” aberto para leitura’);
else
begin
rewrite(arq_reg);
write(‘Arquivo ALUNOS.DAT criado’);
end;
readkey;
close(arq_reg);
end.



Escrevendo Dados num Arquivo-Texto:

Veja o programa-exemplo abaixo:

uses crt;
type dados = record
nome: string;
tel: string;
end;
var
registro: dados;
arq_reg: text;
conf: char;
begin
clrscr;
assign(arq_reg,’ALUNOS.DAT’);
{$I-}
append(arq_reg);
{$I+}
if IOResult = 0 then
writeln(‘Arquivo “ALUNOS.DAT” aberto para leitura’);
else
begin
rewrite(arq_reg); write(‘Arquivo ALUNOS.DAT criado’);
end;
readkey;
repeat
write(‘Entre com um nome: ‘); readln(registro.nome);
write(‘Seu telefone: ‘); readln(registro.tel);
write(‘Confirma gravação ? : ‘); conf := upcase(readkey);
if conf = ‘S’ then
writeln(arq_reg,registro.nome,#32,registro.tel);
until conf=’N’;
close(arq_reg);
end.



Observe que o comando WRITELN automaticamente insere ao final da linha um caracter de retorno de
carro (#13) e um de alimentação de linha (#10).

Podem ser usados como caracteres delimitadores de campos: espaço (#32) e tabulação (#9).



Fechando um Arquivo-Texto:

Para fechar qualquer arquivo aberto, o Pascal dispõe da procedure CLOSE, como foi visto nos exemplos
anteriores de programas.

Notas sobre o comando close:

· Se vários arquivos foram abertos simultaneamente, teremos que fechá-los individualmente, usando um
comando close para cada um.

· O comando CLOSE fecha o arquivo externo em disco, mas não termina com o assinalamento feito pelo
comando ASSIGN. Isto significa que o programa pode usar um comando REWRITE, RESET ou
APPEND após o comando CLOSE se necessário.

· CLOSE é um comando muito importante, pois é usado para manter a integridade e exatidão dos
arquivos de dados. Relembre que o buffer atua como um intermediário entre o programa e o arquivo em
disco. Quando se executa uma operação de gravação, os dados são enviados primeiramente para o
buffer. Quando o buffer está cheio, os dados são gravados em disco. Freqüentemente essa operação é
chamada de atualização de arquivos em disco.

O que acontece quando o buffer só está parcialmente cheio e não existem mais dados para preenchê-lo. Se
você está esperando que o buffer semi-cheio simplesmente transfira seu conteúdo para o disco quando o
programa termina a sua e xecução, você está enganado. Os dados de um buffer semi-cheio não são
necessariamente gravados no arquivo.

O comando CLOSE força o buffer a transferir o seu conteúdo para o arquivo de disco, mesmo que o buffer
não esteja cheio.

Apostila de Turbo Pascal 7.0


8. Lendo Dados de um Arquivo-Texto

Veja o programa-exemplo abaixo:
uses crt;
type dados = record
nome: string;
tel: string;
end;
var
registro: dados;
arq_reg: text;
conf: char;
begin
clrscr;
assign(arq_reg,’ALUNOS.DAT’);
{$I-}
reset(arq_reg);
{$I+} {tentando abrir para leitura}
if IOResult <> 0 then
exit; {algum problema, fim}
with registro do
begin
repeat
readln(arq_reg,nome,tel); {lendo do arquivo}
write(nome,‘ ’,tel); {listando na tela}
until eof(arq_reg); {repita até que o final do arquivo seja atingido}
end;
close(arq_reg);
readkey;
end.


· Quando o programa está lendo uma seqüência de valores de um arquivo texto, a procedure READ
reconhece os caracteres delimitadores usados durante o processo de gravação.

· O arquivo-texto foi projetado para conter só caracteres ASCII. Mesmo assim, as procedures READ e
READLN podem ler apropriadamente valores de dados numéricos ou strings. É evidente que durante
um processo de leitura, não podemos colocar valor de uma variável string numa variável numérica.

· Já foi dito que um arquivo-texto é um arquivo seqüencial, por isso é necessário sabermos quando o fim
de arquivo foi atingido. A quantidade de linhas gravadas pode ser controlada pelo programador, através
de técnicas, porém, o modo mais prático para se descobrir o fim do arquivo é usado a função booleana
EOF, como foi aplicado no exemplo acima.

A função EOF retorna true se o ponteiro estiver no final do arquivo. Caso contrário, a função retornará false,
indicando que o fim do arquivo não foi atingido.

ARQUIVO

Arquivo
Vamos aprender a usar o Arquivo de tipo TEXT
Arquivos TEXT
Conhecido por arquivo seqüencial.
Tipo especial de arquivo que pode ser editado normalmente através de um editor de textos qualquer.
É dito seqüencial porque a leitura tem que ser feita seqüencialmente do início ao fim do arquivo.
Sintaxe :
: Text;

# Arquivos TEXT

    * Program grava_algo;

    * Var Arquivo : Text;


    * algo : String;

    * i : integer;

    * Begin

    * Assign(Arquivo, 'algo.txt');

    * Rewrite(Arquivo);

    * Write('Digite algo: ');

    * Readln(algo);

    * For i := 1 to 10 do


    * Writeln(Arquivo, algo);

    * Close(Arquivo);

    * End.


# Arquivos TEXT

    * Program le_algo;

    * Var Arquivo : Text;

    * algo : String;

    * Begin

    * Assign(Arquivo, 'algo.txt');


    * Reset(Arquivo);

    * While not EOF(
Arquivo) do

    * Begin


    * Readln(Arquivo, algo);

    * Writeln(algo);

    * End;

    * Close(Arquivo);


    * End.

PARAMETROS.

Passagem de parametro
A passagem pode ser por referencia ou por valor.

Vamos ao exemplo de passagem de parametro por referencia:

Program ext4 ;
 var
  n1,n2,op : integer;
  function subt( var a: integer; b:integer): integer;
   var
    x: integer;
   Begin
     x := a - b;
     subt := x;
     writeln('O Resultado da subtração é:',x);
   end;
Begin
   repeat
   Writeln('Digite o primeiro numero ');
   readln(n1);
   Writeln('Digite o segundo numero ');
   readln(n2);
   writeln(subt(n1,n2));
   writeln(' Digite 1- Novo 2- Sair ');
   readln(op);
   until(op=2);
 End.

Explicação:
1-Declarei as variaveis Globais.
2-Criei uma Função por referencia. Contem Var: na declaração das variaveis que retornaram valor.
3-Coloquei a equação dentro da função.
4-Comecei o programa principal e pedi os numeros e li eles.
5-Chamei a Função, subt(n1,n2), n1 e n2 são as variaveis que vão receber os numeros digitados.
6-No programa principal fiz um Repeat para não ter que ficar abrindo o programa toda hora.

Agora por valor:
PROGRAM PotenciaExp5_de_4_valores;

VAR valor1,valor2,valor3,valor4:INTEGER;

PROCEDURE Leitura(n:INTEGER;VAR num:INTEGER);

BEGIN
     REPEAT
           WRITE('Escreva o ',n,'§ valor -> ');
           READLN(num);
     UNTIL (num>0) AND (num<51);
END;

FUNCTION Potenciaexp5(x:INTEGER):INTEGER;

BEGIN
     potenciaexp5:=(SQR(x)*SQR(x)*x);
END;

PROCEDURE Escrita(n,auxresult:INTEGER);

BEGIN
     WRITELN('A Potˆncia de expoente 5 de ',n,' ‚ ',auxresult);
END;


BEGIN  { bloco principal }
     Leitura(1,valor1);
     Leitura(2,valor2);
     Leitura(3,valor3);
     Leitura(4,valor4);
     Escrita(valor1,potenciaexp5(valor1));
     Escrita(valor2,potenciaexp5(valor2));
     Escrita(valor3,potenciaexp5(valor3));
     Escrita(valor4,potenciaexp5(valor4));
END.

Procedures e Functions

Definição:

Uma das técnicas mais utilizadas e tida como vantajosa na confecção de programas grandes é a modularização. Consiste em dividir o programa em diversos módulos ou subprogramas, de certa forma dependentes uns dos outros. Existe um módulo que é o principal, a partir do qual são chamados os outros módulos, esse módulo principal recebe o nome de programa principal, enquanto que os outros são chamados de subprogramas. No Pascal, existem dois tipos de subprogramas:
- Procedures (procedimentos)
- Functions (funções)

Procedure:
A procedure é como se fosse um programa. Ela tem a estrutura praticamente igual a de um programa. Ela deve ser ativada (chamada) pelo programa principal ou por uma outra procedure, ou até por ela mesma. Ela contém um cabeçalho, área de declarações e o corpo da procedure. Devemos lembrar que tudo que for declarado dentro das sub-áreas só será reconhecido dentro da procedure.
Todos os elementos (constantes, variáveis, etc.) que forem definidos antes de começar o corpo do programa, são considerados globais e podem ser utilizados por todas as procedures, functions e o próprio programa. O espaço para tais elementos é criado durante a compilação. Já os elementos declarados dentro de uma procedure, só existem dentro da procedure, exemplo: ao declararmos uma variável dentro de uma procedure, toda vez que ativarmos a procedure, tal variável será criada e ao sairmos da procedure ela será destruída.
Quando estivermos dentro do programa, teremos acesso à variável global e quando estivermos dentro da procedure, teremos acesso à variável local.

Exemplo:

Program Exemplo_1; {cabeçalho do programa}
uses crt;
procedure testando; {cabeçalho da procedure testando}
var {sub-área Var da procedure testando}
begin
   ...{corpo da procedure testando}
end; {fim do corpo da procedure testando}

var {declaração de variáveis do programa principal}

begin {início do porgrama principal}
   ...
   testando; {procedure sendo chamada pelo programa}
   ...
end. {fim do programa principal}


Function:
As funções são muito parecidas com as procedures. A principal diferença é que o identificador de uma função assume o valor de retorno da função (ou seja, essa função fará um determinado cálculo e retornará ao programa principal tendo um valor armazenado que foi calculado dentro dessa função) . Uma função deve sempre retornar um valor e em Turbo Pascal, este valor é retornado no nome da função.
A declaração de uma função é muito parecida com de uma procedure que por sua vez é parecida com a de um programa:

Exemplo:

Program Exemplo_2;
uses crt;
Function Nome_da_função(parâmetros) : Tipo_da_função; {cabeçalho da função}
var {declaração de variáveis da função}
begin
   ... {corpo da função}
end;

var {declaração das variáveis do programa principal (caso queira usar as mesmas variáveis para o programa e para a função, tem que declarar antes da function}


begin {início do programa principal}
   ...
   rTotal:=Nome_da_função(parametros); {function sendo chamada e atribuindo o valor calculado para rTotal}
   ...
end.


A formação do nome da função deve seguir as mesmas regras para formação de identificadores em Turbo Pascal. Dentro dos parênteses devemos declarar os parâmetros (variáveis a serem utilizadas) e seus respectivos tipos dos quais a função depende (real, integer, etc). O tipo de valor retornado pela função também deve ser declarado (real, integer, etc).
Na área de declarações, podemos declarar labels, constantes, variáveis e até mesmo Procedures e Functions. Devemos lembrar que tais elementos só poderão ser utilizados dentro do corpo da função, pois são locais a ela.

Importante: na hora de "chamar"a function, é necessário que o programa já tenha os valores (parãmetros) já lidos ou definidos peolo programa principal.

Exemplo:

program exemplo_3;
uses crt;
var
   res,a,b:real; {essas variáveis do programa principal podem ser usadas pela function, por isso, nesse caso, não precisa declará-las novamente dentro da function}

function soma(a,b:real):real; {essa linha diz que a function chama-se soma, e vai utilizar duas variáveis: a e b, que são reais. O resultado obtido também será real}


begin

   soma:=a+b; {cálculo do valor "soma"}
end;

begin {inicio do programa principal}

   readln(a);
   readln(b);
   res:=soma(a,b); {a variável res vai receber o valor calculado pela function soma, que vai somar a e b}
   writeln(res);
end. {fim do programa}

ARRAY


Array Unidimensional

A estrutura do tipo vetor é a mais conhecida dos programadores por ser a estrutura mais simples de ser
implementada. Suas características básicas são:
É uma estrutura homogênea, isto é, formada de elementos de mesmo tipo, chamado tipo base.
Todos os elementos da estrutura são igualmente acessíveis, isto é, quer dizer que o tempo e o tipo de
procedimento para acessar qualquer um dos elementos do vetor são iguais.
Cada elemento componente da estrutura tem um nome próprio, que é o nome do vetor seguido do índice.
A declaração de um vetor pode utilizar um tipo definido pelo usuário ou simplesmente a especificação de
array para uma variável

Exemplo:

Program ex8;
uses crt;
const max = 50;
var
nomes: array[1..maximo] of string[20];
notas: array[1..maximo] of real;
soma, media: real;
i: 1..máximo;
begin
clrscr;
soma := 0;
for i:=1 to Maximo do
begin
write(‘Entre com o nome do aluno: ‘,i,’de ‘,maximo,’: ‘); readln(nomes[i]);
write(‘Entre com sua nota: ‘); readln(notas[i]);
soma := soma + notas[i]; {acumulador de notas}
end;
media := soma/Maximo; {media geral da turma}
write(‘Média geral da turma: ‘,media:5:2);
readkey;
end.

 Array multidimensional

Os tipos dos componentes de um array não precisam necessariamente ser inteiros, reais ou outro tipo de
dados simples. Na verdade, um array pode conter dados de qualquer tipo, até mesmo outros arrays. Se um
vetor contém outro vetor como tipo, ele é denominado array multidimensional ou simplesmente matriz.

type apart = array[1..10,’A’..’C’] of string[40];
var
propriet: apart;


Um elemento pode ser selecionado pela expressão geral matriz[i,j], onde matriz é uma variável do tipo
matriz, i é o índice das linhas e o j o índice das colunas.

Exemplo:
Program construir_matrizes;
uses crt;
const linhas = 2;

colunas = 4;
type matriz = array[1..linhas,1..colunas] of integer;
var
b: matriz;
i:1..linhas;
j: 1..colunas;
begin
clrscr;
for i:=1 to linhas do
for j:=1 to colunas do
begin
gotoxy(j*5,i*2);
if (i=j) then
B[i,j]:=5+2*j
else
B[i,j] := I*I-j;
end;
readkey;
end.

TYPE.

Um tipo enumerado é uma seqüência ordenada de identificadores definidos pelo usuário, que forma um tipo
ordinal. A palavra reservada para criaç ão de tipos enumerados é type.

Type semana = (segunda, terça, quarta, quinta, sexta, sábado, domingo);

Uma das mais importantes características de um tipo enumerado é a ordem na qual os valores são
ordenados. Além de estabelecer os próprios identificadores, a declaração do mesmo define a ordem dos
identificadores no tipo.

Exemplo:

Program ex7;
uses crt;
type cores = (preto, azul, vermelho, amarelo, verde, rosa, branco, roxo, lilas);
var
uma_cor: cores;
begin
clrscr;
uma_cor := roxo; {atribuir um identificador a variável de tipo}
uma_cor := succ(uma_cor); {recebeu lilás, o sucessor}
uma_cor := pred(uma_cor); {recebeu roxo novamente, o antecessor}
uma_cor := succ(azul); {recebeu vermelho, sucessor de azul}
if succ(uma_cor)>=lilás then
uma_cor := preto;
writeln(ord(uma_cor)); {escreveu 2, a ordem do vermelho}
uma_cor := preto;
writeln(ord(uma_cor)); {escreveu 0, a ordem do preto}
for uma_cor := preto to rosa do
writeln(ord(uma_cor)); {escreveu as posições, do preto ao rosa}
end.

REPEAT UNTIL.

Vamos agora a estrutura de repetição REPEAT UNTIL que quer dizer repita até
vamos ao programa:

Program Pzim ;
var
nome:string;
idade,op:integer;
 Begin
      repeat
      writeln('Digite seu nome');
      Readln(nome);
      Writeln('Digite sua idade');
      readln(idade);
      writeln('1-Novo ou 2-Sair');
      readln(op);
      until (op=2);
 End.


Explicação:
1-Declarei as variáveis, NOME, IDADE, e OP.
2-Coloquei o REPEAT de onde ele vai começar a repitir.
3-Pedi o nome, li o nome, pedi a idade, li a idade.
4-E perguntei se ele queria 1 para novos dados ou 2 para sair.
5-Coloquei o UNTIL que quer dizer onde ele vai parar de repetir e OP igual a 2 para que saia da repetição.
6-Se digitar 1 ele repete as perguntas anteriores até que para sair voce digite o número 2.

WHILE DO

Agora vamos aprender o WHILE DO
Usando o while pedimos ao Pascal para repetir "enquanto" a expressão for verdadeira.
Vamos ao exemplo:

Program Pzim ;
var
n:integer;
cont:string;
 Begin 
 cont:='sim';      
 while (cont='sim') do
 begin
 writeln('Digite um numero');readln(n);
 writeln('Voce digitou o numero ', n);
 writeln('digite sim para continuar ou qualquer tecla para sair');readln(cont);

 end;
 End.


Explicação:
1-Declarei as variáveis, dentre elas a variável CONT do tipo STRING.
2-Declarei que a variável conte recebe o valor da palavra SIM.
3-Esse é o While, vamos usar a variável, enquanto cont for igual a SIM repita.
4-Vai pedir seu nome, ler ele, e perguntar se você quer digitar outro nome.
5-Se voce digitar SIM ele vai entender que cont foi verdade, e volta a perguntar seu nome, se você digitar NAO a reposta vai ser falsa, e portanto ele sairá do porgrama.

Agora vamos dar um valor para o WHILE repetir, vamos fazer um programa que faça uma operação fácil e simples de adição.

Exemplo:

Program Pzim ;
var
a,b,c,cont:integer;
 Begin
 while (cont<7) do
 begin
 write('Digite o primeiro numero numero');readln(a);
 write('Digite o segundo numero');readln(b);
 writeln('A soma dos numeros é: ', a+b);
 cont:=cont+1;
 end;
 End.


Explicação:
1-Declarei as variaveis,cont sera o contador, A o primeiro número e B o segundo.
2-Pedi os números e li.
3-Criei um contador, ou seja CONT vai receber CONT mais 1.
4-ele vai exibir a resposta da adição e pedir novamente novos números até o número que você deu de limite no programa.

FOR TO

Vamos agora para a estrutura de decisão FOR TO
Permite que uma sequência de comandos seja executada um número definido de vezes.
A variável usada para contador já recebe um valor inicial e é incrementada pelo comando.
Exemplo:

Program Pzim ;
var
nome:string;

cont:integer;
 Begin
 writeln('digite seu nome');
 readln(nome);
  for cont:=1 to 5 do
 begin
 writeln(nome);
 end;
 End.


Explicação:
1-Declarei as variáveis, NOME tipo STRING e o CONT tipo INTEGER, a variável CONT vai ser usada como a variável do FOR.
2-Pedi o Nome, li o nome.
3-Declarei o quanto que o nome se repetirá, no caso vai ser de 1 até 5, ou FOR CONT:=1 TO 5 DO, o simbolo := quer dizer Recebe, ou seja, Cont recebe 1 ate 5.
4-Escrevemos o que vai ser escrito 5 vezes.

Esse é o FOR TO.

IF THEN.

Vamos agora aprender uma estrutura de decisão, o que é isso? é o que vai direcionar você a algum lugar, se você tiver uma opção você vai ter que decidir em qual ir, ela que vai fazer isso pra você.
vamos a pratica

program ex1;
var
nome:string;
idade,op:integer;
begin
writeln('Digite seu nome');
readln(nome);
writeln('Digite sua idade');
readln (idade);
writeln('O que você quer ver primeiro?');
writeln('1-Nome ou 2-Idade');
read(op);
if (op=1) then
begin
writeln('Seu nome é: ', nome);
end
else
begin
writeln('Sua idade é: ', idade);
end;
end.


Agora vamos as explicações:
1-Declarei as variáveis NOME do tipo INTEGER e IDADE do tipo INTEGER.
2-Pedi para o usuário digitar o nome, li o nome, pedi a idade e li a idade.
3-A variável OP foi criada para auxiliar no IF, ele que vai dizer pra onde vamos, como eu pedi para ele digitar os números 1 ou 2 essa variável tem que ser do tipo integer.
4-Após você escolher entre 1 e 2 ele vai ler sua resposta READLN(OP).
5-Agora vem o IF, que quer dizer SE em português, ou seja se OP for igual ao numero 1 IF (OP=1) THEN escreva na tela SEU NOME É: E O NOME DIGITADO.
6-Agora vem o else que faz parte do IF, ele quer dizer algo como se não for a opção anterior vá para a próxima, ou seja se não digitar o numero 1 escreva SUA IDADE É: E A IDADE DIGITADA.
7-Antes do else o end anterior não pode ter ponto e virgula.
8-O IF tem um BEGIN para inserir o WRITELN, lembre sempre de colocar o END; para terminar esse BEGIN.

Bem ,esse é o IF.

Variáveis, Writeln e Readln.

A definição que eu aprendi foi que variável é um espaço reservado na memória RAM que tem um nome e um tipo.
Existem alguns tipos de variável, vou citar alguns que vamos usar:
string:aceita qualquer caractere alfa-numérico.
integer:aceita números inteiros.
readl:aceita números reais.
char:aceita apenas um caractere alfa-numérico.

Agora vai um exemplo de como usá-la:

Program ex;
Var
nome:string;
begin
writeln('Digite um nome');
readln(nome);
writeln('Oi ',nome);
end.


Antes de declarar a variável colocamos o VAR, vale lembrar que o pascal não é Case sensitive ou seja não importa se você escreva com letras maiúsculas ou minúsculas ele vai aceitar do mesmo jeito.
O nome da variável foi NOME do tipo string que só vai aceitar caracteres alfa-numéricos.
writeln é o comando usado para escrever na tela e readln ler, ou seja primeiro ele pediu para o usuário digitar seu nome, logo após leu o nome e enfim escreveu na tela Oi e o nome digitado.
O Writeln para ser escrito na tela tem que estar entre parênteses e apostrofes ('assim'); e com um ponto e virgula no final, e para escrever a variável não necessitamos usar-los.

domingo, 9 de maio de 2010

Tabela da Verdade

O primeiro assunto que aprendi em lógica de Programação foi a Tabela da Verdade.
Então vamos a ela:


  A    B     A and B      A or B     A xor B
  V    V          V          V         F
  V    F          F          V         V
  F    V          F          V         V
  F    F          F          F         F

Explicação:
  • A Base para formar a tebela da verdade são as duas letras A|B.
  • Você terá 3 portas lógicas : AND, OR, XOR.
  • Porta AND:
Você precisa ter Dois V, Veja:
A=V AND B=V  [Resultado:V]
Já se A=V AND B=F [Resultado=F]
  • Porta OR: 
Você só precisa de um V para que o resultado seja Verdadeiro:
A=V OR B=F [Resultado=V]
A=F OR B=F [Resultado=F]
  • Porta XOR:
Na porta XOR V XOR V é Falso:
A=V XOR B=V [Resultado=F]

Então é isso, não foi tão complicado, mas é bom que você entenda toda a tabela, você não vai aprender ela de primeira, mas e só dar uma estudadinha que você consegue.

Pascal ZIM

Vamos começar pelo Copilador do código, vamos aprender a liguagem Pascal.

Você pode fazer o download do copilador AQUI.