Skip to content

Instantly share code, notes, and snippets.

@paulojp-dev
Created December 29, 2016 05:28
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save paulojp-dev/d6003e7262a47d7114675e3b93aeabea to your computer and use it in GitHub Desktop.
Save paulojp-dev/d6003e7262a47d7114675e3b93aeabea to your computer and use it in GitHub Desktop.
Estrutura de Dados em Pascal: pilhas, filas, listas, exercícios, etc.
{
01 - Programa que armazena em uma variável dinâmica um valor inteiro informado pelo usuário e apresenta na tela o valor.
02 - Mostra o endereço de memória da variável dinâmica.
03 - Segunda variável dinâmica que recebe o primeiro valor.
}
Program questao01;
Var
num, num2, num3 : ^Integer;
Begin
new(num);
writeln('Digite um valo: ');
read(num^);
new(num2);
num2^ := num^;//um recebe o valor do outro, não a referência
num2^ := 8;
writeln('O valor digitado foi: ', num^);
dispose(num);
writeln('Endereço de memória da variável dinâmica: ', num^);
writeln('Valor recebido pela variável2: ', num2^);
dispose(num2);
writeln('Endereço de memória da variável dinâmica2: ', num2^);
num3 := num;//ponteiro recebe o endereço da variável dinâmica
writeln('Endereço de memória da variável dinâmica3: ', num3^);
End.
{
1 - Lista de idades, onde o usuário define a quantidade de idades a cadastrar;
2 - Lista amazenar nome e idade;
3 - Calcula e apresenta a média das idades, e o usuário mais velho.
}
Program questao01;
uses crt;
Type
cadastro = record
nome : String;
idade : Integer;
prox : ^cadastro;
end;
Var
r, p : ^cadastro;
i, n, total, idade_maior: Integer;
media : real;
Begin
new(p);
r := p;
writeln('Quantas pessoas deseja cadastrar?');
read(n);
FOR i := 1 TO n DO
begin
writeln('Digite o nome da ', i, 'º pessoa: ');
read(r^.nome);
writeln('Digite a idade da ', i, 'º pessoa: ');
read(r^.idade);
IF r^.idade > idade_maior THEN
idade_maior := r^.idade;
total := total + r^.idade;
new(r^.prox);
r := r^.prox;
end;
media := total / n;
r^.prox := nil;
r := p;
FOR i:=1 TO n DO
begin
writeln;
writeln('Nome da ', i, 'º pessoa: ', r^.nome);
writeln('Idade da ', i, 'º pessoa: ',r^.idade);
r := r^.prox;//Após mostrar a idade, o ponteiro 'r' pula p/ o próximo nó
end;
writeln('Média das idades cadastradas: ', media:0:2);
writeln('Maior idade: ', idade_maior);
End.
Program pilhaLivros;
USES crt;
Type
livro = record
nome_livro : String;
quant_pag : Integer;
autor_livro : String;
proximo : ^livro;
end;
Var
n_livro, top, pegar_livro : ^livro;
opc : Integer;
Begin
top := nil;
opc := -1;
WHILE opc <> 3 DO
begin
writeln('---------MENU---------');
writeln('|1 - Inserir livro. |');
writeln('|2 - Pegar livro. |');
writeln('|3 - Sair |');
writeln('----------------------');
writeln('Digite a opção: ');
readln(opc);
writeln;
CASE opc OF
1 : begin
new(n_livro);
writeln('----CADASTRAR LIVROS----');
writeln('Nome do livro: ');
readln(n_livro^.nome_livro);
writeln('Quantidade de páginas: ');
readln(n_livro^.quant_pag);
writeln('Nome do autor: ');
readln(n_livro^.autor_livro);
n_livro^.proximo := top;
top := n_livro;
end;
2 : begin
IF top = nil THEN
begin
writeln('Acabou os livros.');
readln;
end
ELSE
begin
writeln('----LIVRO RETIRADO----');
writeln('Nome do livro: ', top^.nome_livro);
writeln('Quantidade de páginas: ', top^.quant_pag);
writeln('Autor: ', top^.autor_livro);
pegar_livro := top;
top := top^.proximo;
dispose(pegar_livro);
readln;
end;
end;
3 : opc := 3;
ELSE begin
writeln('Opção inválida.');
readln;
end;
end;
clrscr;
end;
End.
Program pilhaDocumentos;
USES crt;
Type
documento = record
cod_doc : String;
tit_doc : String;
proximo : ^documento;
end;
Var
top, n_doc, rm_doc : ^documento;
opc : Integer;
Begin
top := nil;
opc := -1;
clrscr;
WHILE opc <> 3 DO
begin
writeln('-------------MENU-------------');
writeln('|1 - Inserir novo documento. |');
writeln('|2 - Remover documento. |');
writeln('|3 - Sair. |');
writeln('------------------------------');
writeln('Digite a Opção: ');
read(opc);
writeln;
CASE opc OF
1 : begin
new(n_doc);
writeln('----------INSERIR DOCUMENTO----------');
writeln('Código do novo documento: ');
readln(n_doc^.cod_doc);
writeln('Título do novo documento: ');
readln(n_doc^.tit_doc);
n_doc^.proximo := top;
top := n_doc;
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end;
2 : begin
IF top = nil THEN
begin
writeln('Acabou os documentos.');
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end
ELSE
begin
writeln('------------DOCUMENTO REMOVIDO------------');
writeln('Código do documento: ', top^.cod_doc);
writeln('Título do documento: ', top^.tit_doc);
readln;
rm_doc := top;
top := top^.proximo;
dispose(rm_doc);
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end;
end;
3 : opc := 3;
ELSE
begin
writeln('Opção Inválida.');
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end;
end;
end;
clrscr;
End.
Program pilhaDocumentos;
USES crt;
Type
documento = record
cod_doc : String;
tit_doc : String;
proximo : ^documento;
end;
Var
top, n_doc, rm_doc : ^documento;
opc : Integer;
Begin
top := nil;
opc := -1;
WHILE opc <> 3 DO
begin
writeln('-------------MENU-------------');
writeln('|1 - Inserir novo documento. |');
writeln('|2 - Remover documento. |');
writeln('|3 - Sair. |');
writeln('------------------------------');
writeln('Digite a opção: ');
read(opc);
writeln;
CASE opc OF
1 : begin
new(n_doc);
writeln('----------INSERIR DOCUMENTO----------');
writeln('Código do novo documento: ');
readln(n_doc^.cod_doc);
writeln('Título do novo documento: ');
readln(n_doc^.tit_doc);
n_doc^.proximo := top;
top := n_doc;
end;
2 : begin
IF top = nil THEN
begin
writeln('Acabou os documentos.');
readln;
end
ELSE
begin
writeln('------------DOCUMENTO REMOVIDO------------');
writeln('Código do documento: ', top^.cod_doc);
writeln('Título do documento: ', top^.tit_doc);
readln;
rm_doc := top;
top := top^.proximo;
dispose(rm_doc);
end;
end;
3 : opc := 3;
ELSE
begin
writeln('Opção inválida.');
readln;
end;
clrscr;
end;
end;
End.
Program filaDocumentos;
USES crt;
Type
documento = record
cod_doc : String;
tit_doc : String;
proximo : ^documento;
end;
Var
n_doc, rm_doc, primeiro_doc, ultimo_doc : ^documento;
opc : Integer;
Begin
primeiro_doc := nil;
ultimo_doc := nil;
opc := -1;
clrscr;
WHILE opc <> 3 DO
begin
writeln('-------------MENU-------------');
writeln('|1 - Inserir novo documento. |');
writeln('|2 - Pegar um documento. |');
writeln('|3 - Sair. |');
writeln('------------------------------');
writeln('Digite a opção: ');
read(opc);
writeln;
CASE opc OF
1 : begin
new(n_doc);
writeln('----------INSERIR DOCUMENTO----------');
writeln('Código do novo documento: ');
readln(n_doc^.cod_doc);
writeln('Título do novo documento: ');
readln(n_doc^.tit_doc);
IF primeiro_doc = nil THEN
primeiro_doc := n_doc
ELSE
ultimo_doc^.proximo := n_doc;
n_doc^.proximo := nil;
ultimo_doc := n_doc;
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end;
2 : begin
IF primeiro_doc = nil THEN
begin
writeln('Acabou os documentos.');
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end
ELSE
begin
writeln('------------DOCUMENTO REMOVIDO------------');
writeln('Código do documento: ', primeiro_doc^.cod_doc);
writeln('Título do documento: ', primeiro_doc^.tit_doc);
readln;
rm_doc := primeiro_doc;
primeiro_doc := primeiro_doc^.proximo;
dispose(rm_doc);
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end;
end;
3 : opc := 3;
ELSE
begin
writeln('Opção inválida.');
readln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end;
end;
end;
clrscr;
End.
Program pilhaDocumentos;
USES crt;
Type
documento = record
cod_doc : String;
tit_doc : String;
proximo : ^documento;
end;
Var
n_doc, rm_doc, primeiro_doc, ultimo_doc : ^documento;
opc : Integer;
Begin
primeiro_doc := nil;
ultimo_doc := nil;
opc := -1;
WHILE opc <> 3 DO
begin
writeln('-------------MENU-------------');
writeln('|1 - Inserir novo documento. |');
writeln('|2 - Remover documento. |');
writeln('|3 - Sair. |');
writeln('------------------------------');
writeln('Digite a opção: ');
read(opc);
writeln;
CASE opc OF
1 : begin
new(n_doc);
writeln('----------INSERIR DOCUMENTO----------');
writeln('Código do novo documento: ');
readln(n_doc^.cod_doc);
writeln('Título do novo documento: ');
readln(n_doc^.tit_doc);
IF primeiro_doc = nil THEN
primeiro_doc := n_doc
ELSE
ultimo_doc^.proximo := n_doc;
n_doc^.proximo := nil;
ultimo_doc := n_doc;
end;
2 : begin
IF primeiro_doc = nil THEN
begin
writeln('Acabou os documentos.');
readln;
end
ELSE
begin
writeln('------------DOCUMENTO REMOVIDO------------');
writeln('Código do documento: ', primeiro_doc^.cod_doc);
writeln('Título do documento: ', primeiro_doc^.tit_doc);
readln;
rm_doc := primeiro_doc;
primeiro_doc := primeiro_doc^.proximo;
dispose(rm_doc);
end;
end;
3 : opc := 3;
ELSE
begin
writeln('Opção inválida.');
readln;
end;
end;
clrscr;
end;
End.
Program filaProcessos;
USES crt;
Type
processo = record
nome : String;
proximo : ^processo;
end;
Var
n_proc, rm_proc, primeiro_proc, ultimo_proc : ^processo;
opc : Integer;
Begin
primeiro_proc := nil;
ultimo_proc := nil;
opc := -1;
clrscr;
WHILE opc <> 3 DO
begin
writeln('--------------MENU--------------');
writeln('|1 - Abrir novo processo. |');
writeln('|2 - Executar processo. |');
writeln('|3 - Sair. |');
writeln('--------------------------------');
writeln('Digite a opção desejada: ');
read(opc);
writeln;
CASE opc OF
1 : Begin
new(n_proc);
writeln('--------ABRIR PROCESSO--------');
writeln('Digite o nome do processo: ');
readln(n_proc^.nome);
IF primeiro_proc = nil THEN
primeiro_proc := n_proc
ELSE ultimo_proc^.proximo := n_proc;
n_proc^.proximo := nil;
ultimo_proc := n_proc;
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end;
2 : Begin
IF primeiro_proc = nil THEN
begin
writeln('Não há processos p/ executar.');
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end
ELSE
begin
writeln('--------EXECUTAR PROCESSO--------');
writeln('Nome do processo a ser executado: ', primeiro_proc^.nome);
rm_proc := primeiro_proc;
primeiro_proc := primeiro_proc^.proximo;
dispose(rm_proc);
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end;
end;
3 : opc := 3;
ELSE Begin
writeln('Opção inválida.');
readln;
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end;
end;
end;
clrscr;
End.
Program filaProcessos;
USES crt;
Type
processo = record
nome : String;
proximo : ^processo;
end;
Var
n_proc, rm_proc, primeiro_proc, ultimo_proc : ^processo;
opc : Integer;
Begin
primeiro_proc := nil;
ultimo_proc := nil;
opc := -1;
WHILE opc <> 3 DO
begin
writeln('--------------MENU--------------');
writeln('|1 - Abrir novo processo. |');
writeln('|2 - Executar processo. |');
writeln('|3 - Sair. |');
writeln('--------------------------------');
writeln('Digite a op��o desejada: ');
read(opc);
writeln;
CASE opc OF
1 : Begin
new(n_proc);
writeln('--------ABRIR PROCESSO--------');
writeln('Digite o nome do processo: ');
readln(n_proc^.nome);
IF primeiro_proc = nil THEN
primeiro_proc := n_proc
ELSE ultimo_proc^.proximo := n_proc;
n_proc^.proximo := nil;
ultimo_proc := n_proc;
end;
2 : Begin
IF primeiro_proc = nil THEN
begin
writeln('N�o h� processos p/ executar.');
readln;
end
ELSE
begin
writeln('--------EXECUTAR PROCESSO--------');
writeln('Nome do processo a ser executado: ', primeiro_proc^.nome);
readln;
rm_proc := primeiro_proc;
primeiro_proc := primeiro_proc^.proximo;
dispose(rm_proc);
end;
end;
3 : opc := 3;
ELSE Begin
writeln('Op��o inv�lida.');
readln;
end;
end;
clrscr;
end;
End.
Program filaProcessos;
USES crt;
Type
processo = record
nome : String;
proximo : ^processo;
end;
Var
n_proc, rm_proc, primeiro_proc, ultimo_proc, x_primeiro_proc, x_ultimo_proc : ^processo;
opc : Integer;
Begin
primeiro_proc := nil;
ultimo_proc := nil;
x_primeiro_proc := nil;
x_ultimo_proc := nil;
opc := -1;
clrscr;
WHILE opc <> 4 DO
begin
writeln('--------------MENU---------------');
writeln('|1 - Abrir novo processo. |');
writeln('|2 - Abrir processo prioritário.|');
writeln('|3 - Executar processo. |');
writeln('|4 - Sair. |');
writeln('---------------------------------');
writeln('Digite a opção desejada: ');
read(opc);
writeln;
CASE opc OF
1 : Begin
new(n_proc);
writeln('--------ABRIR PROCESSO--------');
writeln('Digite o nome do processo: ');
readln(n_proc^.nome);
IF primeiro_proc = nil THEN
primeiro_proc := n_proc
ELSE ultimo_proc^.proximo := n_proc;
n_proc^.proximo := nil;
ultimo_proc := n_proc;
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end;
2 : Begin
new(n_proc);
writeln('--ABRIR PROCESSO PRIORITÁRIO--');
writeln('Digite o nome do processo: ');
readln(n_proc^.nome);
IF x_primeiro_proc = nil THEN
x_primeiro_proc := n_proc
ELSE x_ultimo_proc^.proximo := n_proc;
n_proc^.proximo := nil;
x_ultimo_proc := n_proc;
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end;
3 : Begin
IF (x_primeiro_proc = nil) AND (primeiro_proc = nil) THEN
begin
writeln('Não há processos p/ executar.');
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end
ELSE
begin
IF x_primeiro_proc <> nil THEN
begin
writeln('--EXECUTAR PROCESSO PRIORITÁRIO--');
writeln('Nome do processo a ser executado: ', x_primeiro_proc^.nome);
rm_proc := x_primeiro_proc;
x_primeiro_proc := x_primeiro_proc^.proximo;
dispose(rm_proc);
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end
ELSE
begin
writeln('--------EXECUTAR PROCESSO--------');
writeln('Nome do processo a ser executado: ', primeiro_proc^.nome);
rm_proc := primeiro_proc;
primeiro_proc := primeiro_proc^.proximo;
dispose(rm_proc);
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end;
end;
end;
4 : opc := 4;
ELSE Begin
writeln('Opção inválida.');
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end;
end;
end;
clrscr;
End.
Program filaProcessos;
USES crt;
Type
processo = record
nome : String;
proximo : ^processo;
end;
Var
n_proc, rm_proc, primeiro_proc, ultimo_proc, x_primeiro_proc, x_ultimo_proc : ^processo;
opc : Integer;
Begin
primeiro_proc := nil;
ultimo_proc := nil;
x_primeiro_proc := nil;
x_ultimo_proc := nil;
opc := -1;
WHILE opc <> 4 DO
begin
writeln('--------------MENU---------------');
writeln('|1 - Abrir novo processo. |');
writeln('|2 - Abrir processo prioritário.|');
writeln('|3 - Executar processo. |');
writeln('|4 - Sair. |');
writeln('---------------------------------');
writeln('Digite a opção desejada: ');
read(opc);
writeln;
CASE opc OF
1 : Begin
new(n_proc);
writeln('--------ABRIR PROCESSO--------');
writeln('Digite o nome do processo: ');
readln(n_proc^.nome);
IF primeiro_proc = nil THEN
primeiro_proc := n_proc
ELSE ultimo_proc^.proximo := n_proc;
n_proc^.proximo := nil;
ultimo_proc := n_proc;
end;
2 : Begin
new(n_proc);
writeln('--ABRIR PROCESSO PRIORITÁRIO--');
writeln('Digite o nome do processo: ');
readln(n_proc^.nome);
IF x_primeiro_proc = nil THEN
x_primeiro_proc := n_proc
ELSE x_ultimo_proc^.proximo := n_proc;
n_proc^.proximo := nil;
x_ultimo_proc := n_proc;
end;
3 : Begin
IF (x_primeiro_proc = nil) AND (primeiro_proc = nil) THEN
begin
writeln('Não há processos p/ executar.');
readln;
end
ELSE
begin
IF x_primeiro_proc <> nil THEN
begin
writeln('--EXECUTAR PROCESSO PRIORITÁRIO--');
writeln('Nome do processo a ser executado: ', x_primeiro_proc^.nome);
readln;
rm_proc := x_primeiro_proc;
x_primeiro_proc := x_primeiro_proc^.proximo;
dispose(rm_proc);
end
ELSE
begin
writeln('--------EXECUTAR PROCESSO--------');
writeln('Nome do processo a ser executado: ', primeiro_proc^.nome);
readln;
rm_proc := primeiro_proc;
primeiro_proc := primeiro_proc^.proximo;
dispose(rm_proc);
end;
end;
end;
4 : opc := 4;
ELSE Begin
writeln('Opção inválida.');
readln;
end;
end;
clrscr;
end;
End.
Program filaPessoas;
USES crt;
Type
pessoa = record
nome : String;
proximo : ^pessoa;
end;
Var
n_pes, rm_pes, primeira_pes, ultima_pes, cont_pes : ^pessoa;
opc, quant : Integer;
Begin
primeira_pes := nil;
ultima_pes := nil;
cont_pes := nil;
opc := -1;
clrscr;
WHILE opc <> 4 DO
begin
writeln('-------------MENU-------------');
writeln('|1 - Inserir pessoa. |');
writeln('|2 - Remover pessoa. |');
writeln('|3 - Tamanho da fila. |');
writeln('|4 - Sair. |');
writeln('------------------------------');
writeln('Digite a opção: ');
read(opc);
writeln;
CASE opc OF
1 : begin
new(n_pes);
writeln('----------INSERIR PESSOA----------');
writeln('Nome da nova pessoa: ');
readln(n_pes^.nome);
IF primeira_pes = nil THEN
primeira_pes := n_pes
ELSE
ultima_pes^.proximo := n_pes;
n_pes^.proximo := nil;
ultima_pes := n_pes;
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end;
2 : begin
IF primeira_pes = nil THEN
begin
writeln('Fila vázia.');
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end
ELSE
begin
writeln('------------PESSOA REMOVIDA------------');
writeln('Nome da pessoa: ', primeira_pes^.nome);
readln;
rm_pes := primeira_pes;
primeira_pes := primeira_pes^.proximo;
dispose(rm_pes);
writeln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end;
end;
3 : begin
quant := 0;
cont_pes := primeira_pes;
WHILE cont_pes <> nil DO
begin
quant := quant + 1;
cont_pes := cont_pes^.proximo;
end;
writeln;
writeln('Quantidade de pessoas na fila: ', quant);
readkey;
clrscr;
end;
4 : opc := 4;
ELSE
begin
writeln('Opção inválida.');
readln;
writeln('Presione uma tecla para voltar ao menu.');
readkey;
clrscr;
end;
end;
end;
clrscr;
End.
Program filaEstacionamento2;
Type
motorista = record
nome : Integer;
prox : ^motorista;
end;
registro = record
p_moto : ^motorista;
u_moto : ^motorista;
prox : ^registro;
end;
Var
prof, aluno, visit : ^registro;
rm_moto, n_moto : ^motorista;
opc, t, i : Integer;
FUNCTION adc_registro(aluno : ^registro) : ^registro;
var
x : ^registro;
begin
new(n_moto);
writeln('----------SALVANDO MOTORISTA-----------');
writeln('Digite o nome do motorista: ');
readln(n_moto^.nome);
IF x^.p_moto = nil THEN
x^.p_moto := n_moto
ELSE x^.u_moto^.prox := n_moto;
n_moto^.prox := nil;
x^.u_moto := n_moto;
adc_registro := x;
end;
Begin
FOR i := 1 TO 3 DO
begin
p_moto[i] := nil;
u_moto[i] := nil;
end;
opc := 4;
WHILE opc <> 0 DO
begin
writeln('/--------------MENU--------------\');
writeln('|1 - Adcionar Motorista. |');
writeln('|2 - Remover Motorista. |');
writeln('|0 - Sair. |');
writeln('\--------------------------------/');
writeln;
writeln('Digite a opção: ');
read(opc);
writeln;
CASE opc OF
1 : Begin
writeln('/-----------ESCOLHA DO TIPO-----------\');
writeln('|1 - P/ Professores. |');
writeln('|2 - P/ Alunos. |');
writeln('|3 - P/ Visitantes. |');
writeln('|0 - P/ voltar ao Menu. |');
writeln('\-------------------------------------/');
writeln;
writeln('Digite a opção: ');
read(t);
new(n_moto);
IF (t = 1) OR (t = 2) OR (t = 3) THEN
begin
new(n_moto);
writeln('----------SALVANDO MOTORISTA-----------');
writeln('Digite o nome do motorista: ');
readln(n_moto^.nome);
IF p_moto[t] = nil THEN
p_moto[t] := n_moto
ELSE u_moto[t]^.prox := n_moto;
n_moto^.prox := nil;
u_moto[t] := n_moto;
end
ELSE
begin
writeln('Cancelando... Precione uma tecla p/ ser redirecionado ao Menu.');
readln();
end;
end;
2 : begin
IF (p_moto[1] = nil) AND (p_moto[2] = nil) AND (p_moto[3] = nil) THEN
begin
writeln('Estacionamento vázio.');
readln;
end
ELSE
begin
IF p_moto[1] = nil THEN
begin
writeln('----------Motorista Saindo----------');
writeln('Nome: ', p_moto[1]^.nome);
writeln('TIPO: Professor');
new(rm_moto);
rm_moto := p_moto[1];
p_moto[1] := p_moto[1]^.prox;
dispose(rm_moto);
readln;
end
ELSE IF p_moto[2]= nil THEN
begin
writeln('----------Motorista Saindo----------');
writeln('Nome: ', p_moto[2]^.nome);
writeln('TIPO: Aluno');
new(rm_moto);
rm_moto := p_moto[2];
p_moto[2] := p_moto[2]^.prox;
dispose(rm_moto);
readln;
end
ELSE
begin
writeln('----------Motorista Saindo----------');
writeln('Nome: ', p_moto[3]^.nome);
writeln('TIPO: Visitante');
new(rm_moto);
rm_moto := p_moto[3];
p_moto[3] := p_moto[3]^.prox;
dispose(rm_moto);
readln;
end;
end;
end;
0 : opc := 0;
ELSE begin
writeln('Opção Inválida.');
readln;
end;
end;
end;
End.
//LISTA LINEAR
{
1 - Variável Composta sem um tamanho definido;
2 - É composta por uma sequência de nós que contém 2 elementos cada: um valor e o um ponteiro p/ o próximo nó.
CRIAÇÃO:
1 - Cria-se um tipo 'nó' que irá representar o nó da lista, devendo ser um registro contendo a informação e um ponteiro p/ o próprio registro 'nó';
2 - Declarar um ponteiro 'p' que irá apontar p/ o nó definido;
3 - Criar uma variável dinâmica apontando p/ o registro nó;
4 - Atribuir um valor ao registro por meio da variável dinâmica;
5 - Usar a função 'nil', p/ limpar o endereço apontado pelo ponteriro do registro, assim encerrando a lista.
ADICIONANDO NÓS:
1 - Cria-se uma nova variável dinâmica que aponta p/ o ponteiro dentro do registro, e esse pontreiro apontará p/ um novo nó;
}
Program listaLinear;
Type
no = record //Registro
idade : Integer;
prox : ^no;
end;
Var
p : ^no;//Será usado como variável dinâmica
Begin
new(p);//1º nó
p^.idade := 22;
new(p^.prox);//2º nó -> Cria uma variável dinâmica, que aponta p/ o ponteiro dentro do registro, e esse ponteiro apotará p/ um novo nó
p^.prox^.idade := 21;
new(p^.prox^.prox);//3º nó
Program cartas;
type
carta = record
nipe:string;
numero:integer;
prox:^carta;
end;
var
topo_baralho:^carta;
nova_carta:^carta;
carta_removida:^carta;
menu:integer;
Begin
topo_baralho := nil;
menu := -1;
while menu <> 0 do
Begin;
writeln('----------- MENU ---------------');
writeln('1 - Inserir uma carta no baralho.');
writeln('2 - Tirar uma carta.');
writeln('0 - Sair.');
write('Escolha uma opcao:');
readln(menu);
if menu = 1 then // Inserir nova carta no baralho
Begin;
// 1. aloca��o da vari�vel din�mica que vai representar a nova carta a ser inserida
new(nova_carta);
// 2. defini��o dos dados da nova carta (nipe e n�mero)
writeln('Digite o nipe da nova carta');
readln(nova_carta^.nipe);
writeln('Digite o numero da nova carta');
readln(nova_carta^.numero);
// 3. ponteiro da nova carta recebe o endere�o do antigo topo do baralho
nova_carta^.prox := topo_baralho;
// 4. topo do baralho recebe o endere�o do novo topo do baralho (nova_carta)
topo_baralho := nova_carta;
end;
if menu = 2 then // Tirar uma carta
Begin;
if topo_baralho = nil then
Begin;
writeln('O baralho esta vazio, insira uma nova carta.');
readln();
end
else
Begin;
// 1. apresenta��o dos dados da carta (nipe e numero)
writeln('O nipe da carta eh ',topo_baralho^.nipe,' e o numero eh ',topo_baralho^.numero,'.');
// 2. a carta do topo do baralho � identificada como a carta que ser� removida
carta_removida := topo_baralho;
// 3. o topo do baralho recebe o endere�o da segunda carta (novo topo)
topo_baralho := carta_removida^.prox;
// 4. a carta removida � exclu�da da mem�ria do computador
dispose(carta_removida);
readln();
end;
end;
if menu = 0 then menu := 0;
if (menu <> 1) and (menu <> 2) and (menu <> 0) then writeln('Opcao Invalida');
clrscr;
end;
end.
Program Pzim ;
type
carta = record
nipe: string;
numero: integer;
proximo: ^carta;
end;
var
pilha: ^carta;
aux: ^carta;
Begin
//Primeira carta
new(pilha);
pilha^.nipe := 'ouro';
pilha^.numero := 1;
pilha^.proximo := nil;
//Segunda carta
new(aux);
aux^.nipe := 'copas';
aux^.numero := 10;
aux^.proximo := pilha;
pilha := aux;
//Terceira carta
new(aux);
aux^.nipe := 'espada';
aux^.numero := 12;
aux^.proximo := pilha;
pilha := aux;
//Remove o topo da pilha
aux := pilha;
pilha := pilha^.proximo;
dispose(aux);
writeln(pilha^.nipe);
writeln(pilha^.numero);
End.
Program cartas;
type
carta = record
nipe:string;
numero:integer;
prox:^carta;
end;
var
topo:^carta;
aux:carta;
i:integer;
FUNCTION insere(topoPilha:carta; novaCarta:carta):carta;
Begin
novaCarta.prox := @topoPilha;
insere := novaCarta;
end;
FUNCTION remove(topoPilha:carta):carta;
Begin
remove := topoPilha.prox^;
end;
Procedure acessaTopo(topoPilha:carta);
Begin
writeln(topoPilha.nipe);
writeln(topoPilha.numero);
end;
Begin
//inicializa a pilha
topo := nil;
//Cria um registro
aux.nipe := 'ouro';
aux.numero := 10;
//Insere o primeiro registro
aux := insere(topo^,aux);
topo := @aux;
//Acessa o promeiro registro
acessaTopo(topo^);
readln(i);
end.
Program fila_concurso;
type
candidato = record
nome:string;
prox:^candidato;
end;
var
primeiro_candidato:^candidato;
ultimo_candidato:^candidato;
novo_candidato:^candidato;
candidato_removido:^candidato;
menu:integer;
Begin
primeiro_candidato := nil;
ultimo_candidato := nil;
menu := -1;
while menu <> 0 do
Begin;
writeln('----------- MENU ---------------');
writeln('1 - Inserir candidato na fila.');
writeln('2 - Visualizar pr�ximo candidato.');
writeln('3 - Chamar pr�ximo candidato.');
writeln('0 - Sair.');
write('Escolha uma opcao:');
readln(menu);
if menu = 1 then // Inserir novo candidato na fila
Begin;
// 1. aloca��o da vari�vel din�mica que vai representar o novo candidato a ser inserido
new(novo_candidato);
// 2. defini��o dos dados do novo candidato (nome)
writeln('Digite o nome do novo candidato');
readln(novo_candidato^.nome);
// 3. verifica se existe algu�m na fila
if primeiro_candidato = nil then
Begin;
// 3.1 se n�o existir: indica que o novo candidato � o primeiro da fila
primeiro_candidato := novo_candidato;
end
else
Begin;
// 3.2 se j� existia algupem na fila: faz o �ltimo candidato apontar para o novo candidato
ultimo_candidato^.prox := novo_candidato;
end;
// 4. ponteiro do novo candidato indica que ele � o �ltimo da fila (nil)
novo_candidato^.prox := nil;
// 5. indica que o novo candidato � �ltimo da fila
ultimo_candidato := novo_candidato;
end;
if menu = 2 then // Visualizar pr�ximo candidato
Begin;
if primeiro_candidato = nil then
Begin;
writeln('N�o tem ninguem na fila.');
readln();
end
else
Begin;
// 1. apresenta��o dos dados do pr�ximo candidato (nome)
writeln('O pr�ximo a ser chamado ser� o ',primeiro_candidato^.nome,'.');
readln();
end;
end;
if menu = 3 then // Chamar o pr�ximo candidato
Begin;
if primeiro_candidato = nil then
Begin;
writeln('N�o tem ninguem na fila.');
readln();
end
else
Begin;
// 1. apresenta��o dos dados do pr�ximo candidato (nome)
writeln('Candidato ',primeiro_candidato^.nome,'.');
// 2. identifica o primeiro candidato como o que dever� ser removido
candidato_removido := primeiro_candidato;
// 3. identifica como primeiro da fila o segundo candidato
primeiro_candidato := primeiro_candidato^.prox;
// 4. desaloca da mem�ria o candidato removido
dispose(candidato_removido);
readln();
end;
end;
if menu = 0 then menu := 0;
if (menu <> 1) and (menu <> 2) and (menu <> 0) then writeln('Opcao Invalida');
clrscr;
end;
end.
Program filaEstacionamento;
USES crt;
Type
motorista = record
nome : String[40];
prox : ^motorista;
end;
Var
rm_moto, n_moto : ^motorista;
p_moto, u_moto : Array[1..3] OF ^motorista;
opc, t, i : Byte;
Begin
FOR i := 1 TO 3 DO
begin
p_moto[i] := nil;
u_moto[i] := nil;
end;
opc := 4;
clrscr;
WHILE opc <> 0 DO
begin
writeln('/--------------MENU--------------\');
writeln('|1 - Adcionar Motorista. |');
writeln('|2 - Remover Motorista. |');
writeln('|0 - Sair. |');
writeln('\--------------------------------/');
writeln;
writeln('Digite a opção: ');
read(opc);
writeln;
clrscr;
CASE opc OF
1 : Begin{INSERÇÃO DE DADOS}
writeln('/-----------ESCOLHA DO TIPO-----------\');
writeln('|1 - P/ Professores. |');
writeln('|2 - P/ Alunos. |');
writeln('|3 - P/ Visitantes. |');
writeln('|0 - P/ voltar ao Menu. |');
writeln('\-------------------------------------/');
writeln;
writeln('Digite a opção: ');
read(t);
new(n_moto);
clrscr;
IF (t = 1) OR (t = 2) OR (t = 3) THEN
begin
new(n_moto);
writeln('----------SALVANDO MOTORISTA-----------');
writeln('Digite o nome do motorista: ');
readln(n_moto^.nome);
IF p_moto[t] = nil THEN
p_moto[t] := n_moto
ELSE u_moto[t]^.prox := n_moto;
n_moto^.prox := nil;
u_moto[t] := n_moto;
end
ELSE
begin
writeln('Cancelando... Precione uma tecla p/ ser redirecionado ao Menu.');
readln;
end;
end;
2 : begin{REMOÇÃO DE DADOS}
IF (p_moto[1] = nil) AND (p_moto[2] = nil) AND (p_moto[3] = nil) THEN
begin
writeln('Estacionamento vázio.');
readln;
end
ELSE
begin
IF p_moto[1] <> nil THEN
begin
writeln('----------Motorista Saindo----------');
writeln('Nome: ', p_moto[1]^.nome);
writeln('TIPO: Professor');
new(rm_moto);
rm_moto := p_moto[1];
p_moto[1] := p_moto[1]^.prox;
dispose(rm_moto);
readln;
end
ELSE IF p_moto[2] <> nil THEN
begin
writeln('----------Motorista Saindo----------');
writeln('Nome: ', p_moto[2]^.nome);
writeln('TIPO: Aluno');
new(rm_moto);
rm_moto := p_moto[2];
p_moto[2] := p_moto[2]^.prox;
dispose(rm_moto);
readln;
end
ELSE
begin
writeln('----------Motorista Saindo----------');
writeln('Nome: ', p_moto[3]^.nome);
writeln('TIPO: Visitante');
new(rm_moto);
rm_moto := p_moto[3];
p_moto[3] := p_moto[3]^.prox;
dispose(rm_moto);
readln;
end;
end;
end;
0 : opc := 0;{SAIR}
ELSE begin
writeln('Opção inválida. Redirecionando p/ o Menu...');
readln;
end;
end;
clrscr;
end;
End.
//LISTA LINEAR
{
1 - Variável Composta sem um tamanho definido;
2 - É composta por uma sequência de nós que contém 2 elementos cada: um valor e o um ponteiro p/ o próximo nó.
CRIAÇÃO:
1 - Cria-se um tipo 'nó' que irá representar o nó da lista, devendo ser um registro contendo a informação e um ponteiro p/ o próprio registro 'nó';
2 - Declarar um ponteiro 'p' que irá apontar p/ o nó definido;
3 - Criar uma variável dinâmica apontando p/ o registro nó;
4 - Atribuir um valor ao registro por meio da variável dinâmica;
5 - Usar a função 'nil', p/ limpar o endereço apontado pelo ponteriro do registro, assim encerrando a lista.
ADICIONANDO NÓS:
1 - Cria-se uma nova variável dinâmica que aponta p/ o ponteiro dentro do registro, e esse pontreiro apontará p/ um novo nó;
}
Program listaLinear;
Type
no = record //Registro
idade : Integer;
prox : ^no;
end;
Var
p : ^no;//Será usado como variável dinâmica
Begin
new(p);//1º nó
p^.idade := 22;
new(p^.prox);//2º nó -> Cria uma variável dinâmica, que aponta p/ o ponteiro dentro do registro, e esse ponteiro apotará p/ um novo nó
p^.prox^.idade := 21;
new(p^.prox^.prox);//3º nó
p^.prox^.prox^.idade := 20;
p^.prox^.prox^.prox := nil;
writeln(p^.idade);//1º nó
writeln(p^.prox^.idade);//2º nó
writeln(p^.prox^.prox^.idade);//3º nó
End.
{
UTILIZANDO NÓS COM O COMANDO FOR:
1 - Define uma variável dinâmica 'p' p/ ser o primeiro nó;
2 - Define um ponteiro 'r' para ser apontado ao primeiro nó 'p';
3 - (Dentro do for) o ponteiro 'r' será definido como variável dinâmica 'new(r^.prox)', onde a partir do ponteiro interno 'prox' contido no 1º registro 'p' poderá ser chamado o próximo registro, assim criando outro nó;
4 - (Dentro do for) o ponteiro 'r' será apontado p/ variável dinâmica(nó) criada 'r^.prox';
5 - (Dentro do for) Agora podemos alterar o ultimo nó criado utilizando o 'r' que está apontado p/ o mesmo;
6 - Após serem criados os nós, devemos apontar o ponteiro 'r' p/ o 1º registro 'p' da lista, assim volta ao 1º registro da lista;
7 - (Dentro do for) P/ exibir os valores, devemos passar de resgistro em registro pelo 'r := r^.prox;', assim a cada loop, o ponteiro 'r' será apontado p/ o próximo registro(nó);
}
Program listaLinearFor;
Type
registro = record
num : Integer;
prox : ^registro;//Sempre conterá o endereço do próximo nó
end;
Var
r, p : ^registro;
i : Integer;
Begin
new(p);//Cria o 1º nó, que será o inicio da lista
r := p;//Ponteiro 'r' aponta p/ o 1º nó
r^.num := 0;
FOR i := 1 TO 10 DO
begin
new(r^.prox);//Cria o próximo nó(quando i=2, nó=2º; quando i=3, nó=3º; ...)
r := r^.prox;//O ponteiro 'r' vai apontar p/ o próximo registro, direcionado pelo ponteiro 'prox' interno dentro do próximo registro
r^.num := i;//'r' está apontando p/ o ultimo registro criado
end;
r^.prox := nil;//Define o fim da lista
r := p;//Ponteiro 'r' volta ao inicio da lista
FOR i := 1 TO 10 DO
begin
writeln(r^.num);
r := r^.prox;//Ponteiro 'r' aponta p/ o próximo ponteiro
end;
End.
Program Ponteiros;
Var
pt : ^integer;//Ponteiro do tipo inteiro
num: integer;
Begin
//PONTEIROS:
{
ponteiro : ^integer; -> Um ponteiro do tipo inteiro; Não permite receber valores; Para referênciar valores precisa ser apontado para uma variável estática.
num := valor;
ponteiro := @num;//Ponteiro vai ser apontado p/ o endereço de memória da variável estática.
writeln(ponteiro^);//Mostra o valor contido na variável apontada pelo ponteiro.
}
num := 20;
pt := @num;//Ponteiro recebe o endereço da variável.
writeln(pt^);//Mostra o valor contido na variável apontada.
End.
Program questao;
USES crt;
Type
m = record
n : String[15];
p : ^m;
end;
Var
primeiro, ultimo : array[1..3] of ^m;
rm_m, n_m : ^m;
z, x, i : Integer;
Begin
FOR i := 1 TO 3 DO begin
primeiro[i] := nil;
ultimo[i] := nil;
end;
z := 4;
clrscr;
WHILE z <> 0 DO
begin
writeln('Digite 1 p/ Adcionar Motorista');
writeln('Digite 2 p/ Remover Motorista');
writeln('Digite 0 p/ Sair');
writeln;
read(z);
writeln;
clrscr;
IF z = 1 THEN
Begin
writeln('Digite 1 P/ Professores');
writeln('Digite 2 P/ Alunos');
writeln('Digite 3 P/ Visitantes');
writeln('Digite 0 P/ voltar ao Menu');
read(x);
new(n_m);
clrscr;
IF (x = 1) OR (x = 2) OR (x = 3) THEN
begin
new(n_m);
writeln('Qual o nome do motorista?');
readln(n_m^.n);
IF primeiro[x] = nil THEN
primeiro[x] := n_m
ELSE ultimo[x]^.p := n_m;
n_m^.p := nil;
ultimo[x] := n_m;
end
ELSE readln;
end
ELSE IF z = 2 THEN
begin
IF (primeiro[1] = nil) AND (primeiro[2] = nil) AND (primeiro[3] = nil) THEN
begin
writeln('Todos motoristas saíram');
readln;
end
ELSE
begin
IF primeiro[1] <> nil THEN
begin
writeln('Professor saindo ', primeiro[1]^.n);
new(rm_m);
rm_m := primeiro[1];
primeiro[1] := primeiro[1]^.p;
dispose(rm_m);
readln;
end
ELSE IF primeiro[2] <> nil THEN
begin
writeln('Aluno saindo ', primeiro[2]^.n);
new(rm_m);
rm_m := primeiro[2];
primeiro[2] := primeiro[2]^.p;
dispose(rm_m);
readln;
end
ELSE
begin
writeln('Visitante saindo ', primeiro[3]^.n);
new(rm_m);
rm_m := primeiro[3];
primeiro[3] := primeiro[3]^.p;
dispose(rm_m);
readln;
end;
end;
end
ELSE IF z = 0 THEN z := 0
ELSE begin
writeln('Escolha errada');
readln;
end;
clrscr;
end;
End.
program questao;
uses crt;
type
m = record
n : string;
p : ^m;
end;
var
primeiro, ultimo : array[1..3] of ^m;
remove, novo : ^m;
z, x, i : integer;
begin
for i := 1 to 3 do begin
primeiro[i] := nil;
ultimo[i] := nil;
end;
z := -1;
clrscr;
while z <> 0 do
begin
writeln('digite 1 p/ adcionar motorista');
writeln('digite 2 p/ remover motorista');
writeln('digite 0 p/ sair');
writeln;
read(z);
writeln;
clrscr;
if z = 1 then
begin
writeln('digite 1 p/ professores; digite 2 p/ alunos; digite 3 p/ visitantes; digite 0 p/ voltar ao menu');
read(x);
new(novo);
clrscr;
if (x = 1) or (x = 2) or (x = 3) then
begin
new(novo);
writeln('qual o nome do motorista?');
readln(novo^.n);
if primeiro[x] = nil then
primeiro[x] := novo
else ultimo[x]^.p := novo;
novo^.p := nil;
ultimo[x] := novo;
end
else readln;
end
else if z = 2 then
begin
if (primeiro[1] = nil) and (primeiro[2] = nil) and (primeiro[3] = nil) then
begin
writeln('todos motoristas saíram');
readln;
end
else
begin
if primeiro[1] <> nil then
begin
writeln('professor saindo ', primeiro[1]^.n);
new(remove);
remove := primeiro[1];
primeiro[1] := primeiro[1]^.p;
dispose(remove);
readln;
end
else if primeiro[2] <> nil then
begin
writeln('aluno saindo ', primeiro[2]^.n);
new(remove);
remove := primeiro[2];
primeiro[2] := primeiro[2]^.p;
dispose(remove);
readln;
end
else
begin
writeln('visitante saindo ', primeiro[3]^.n);
new(remove);
remove := primeiro[3];
primeiro[3] := primeiro[3]^.p;
dispose(remove);
readln;
end;
end;
end
else if z = 0 then z := 0
else begin
writeln('escolha errada');
readln;
end;
clrscr;
end;
end.
Program VariavelDinamica;
Var
pt : ^integer;//Ponteiro que poderá ser utilizado como variável dinâmica
Begin
//VARIÁVEL DINÂMICA
{
vDinamica : ^integer;//Cria um ponteiro que poderá se tornar uma variável dinâmica por meio do comando 'new'.
new(vDinamica);//Cria uma variável dinâmica a partir de uma ponteiro; Essa será criada durante a execução; O compilador não faz alocação de memória p/ essa variável; A variável dinâmica aponta p/ um endereço de memória vázio.
vDinamica^ := valor;//A variável dinâmica possibilita recber um valor e direciona-o p/ o endereço de memória apontado por ela.
dispose(vDinamica);//Finaliza a variável dinâmica
}
new(pt);//Cria a variável dinâmica a partir do ponteiro criado
pt^ := 22;//Recebe o valor e o direciona p/ o endereço apontado pela variável dinâmica
writeln(pt^);//Exibe o valor
dispose(pt);//Finaliza a variável dinâmica
End.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment