Bom Diaaaa! Criei um cadastro aqui no forum pra ver se alguém consegue me ajudar com um exercício de pilhas na linguagem Pascal, o profº não explicou como se faz e jogou um exercício pra fazer valendo nota .. "1. Tendo as estruturas abaixo, faça um programa PASCAL que contenha um MENU com as seguintes opções: 1-Cadastrar Produtos, 2-Cadastrar Vendas, 3-Listar Vendas por período, 4-Excluir Vendas, 5-Sair; O programa deve ter no mínimo as subrotinas descritas. Poderão ter outras subrotinas porém estas não acrescentarão pontuação. Não use variáveis globais. program ContrVendas; type pProduto = ^NodProduto; pVenda = ^NodVenda; pItem = ^NodItem; NodProduto = record codigo:integer; nome:string[50]; valorunitario:real; ant:pProduto; end; NodVenda = record nro:integer; dataVenda:string[10]; cliente:string[50]; valorTotal:real; item:pItem; ant:pVenda; end; NodItem = record produto:integer; quantidade:integer; valorTotal:real; ant:pItem; end; procedure menu; forward; (1,0 pt) function setProdutos (pTopProd:pProduto):pProduto; forward; (1,0 pt) //cadastra os produtos até ser digitado 'fim' para o nome. O código não poderá repetir na pilha enquanto o programa estiver sendo executado procedure getProdutos (pTopProd:pProduto); foward; (1,0 pt) //lista os produtos da pilha conforme solicitado no cadastro da venda function setVendas (pTopVenda:pVenda):pVenda; forward; (1,0 pt) //cadastra a venda até ser digitado 'fim' na data. A numeração da venda será automático e não poderá existir dois número iguais na Pilha. Após ser informado o cliente será solicitado os itens da venda. O Valor Total será armazenado após inserir todos os itens da venda . procedure getVendas (pTopVenda:pVenda); forward; (1,0 pt) //é solicitado uma data e listado as vendas e itens realizadas nesta data function excVendas (pTopVenda:pVenda):pVenda; forward; (1,0 pt) //é solicitado um número de venda, é mostrado esta venda (e seus itens) e caso confirme é excluído das pilhas, os itens e a venda. function setItens :pItem; forward; (1,0 pt) //cadastra os itens da venda até ser informado '999999' no código do produto. Caso seja informado '0' é mostrado todos os produto da Pilha. Caso seja mostrado um número válido é mostrado a descrição do produto e o valor unitário. Caso não exista mostre a mensagem “Produto Inexistente” e fique solicitando o código do produto até ser digitado um número válido ou 999999. O valor total dos itens deve ser calculado pela quantidade informada multiplicado pelo valor unitário do produto cadastrado. procedure getItens (pTopItem:pItem); forward; (1,0 pt) //mostra todos os itens da Pilha conforme a venda informada. procedure excItens (pTopItem:pItem); forward; (1,0 pt) //apaga todo os nodos da pilha ITENS referente a uma venda procedure sairVendas (pTopVenda: pVenda); forward; (0,5 pt) //Ao escolher a opção SAIR no menu, apaga todos os 'nodos' da memória relativo as vendas. Os itens são excluídos no procedimento “excItens”. procedure sairProdutos (pTopProduto:pProduto); forward; (0,5 pt); //Ao escolher a opção SAIR no menu, apaga todos os 'nodos' da memória relativo aos produtos." Sei que é grande :( Eu comecei assim, mas acho que tá errado isso aí o.O , alguém pode me ajudar?: Menu = record type pProduto = ^NodProduto; pVenda = ^NodVenda; pItem = ^NodItem; NodProduto = record codigo:integer; nome:string[50]; valorunitario:real; ant:pProduto; end; NodVenda = record nro:integer; dataVenda:string[10]; cliente:string[50]; valorTotal:real; item:pItem; ant:pVenda; end; NodItem = record produto:integer; quantidade:integer; valorTotal:real; ant:pItem; end; function setProdutos (pTopProd:pProduto):pProduto; forward; procedure getProdutos (pTopProd:pProduto); foward; function setVendas (pTopVenda:pVenda):pVenda; forward procedure getVendas (pTopVenda:pVenda); forward; function excVendas (pTopVenda:pVenda):pVenda; forward; function setItens :pItem; forward; procedure sairProdutos (pTopProduto:pProduto); forward; procedure excItens (pTopItem:pItem); forward; procedure sairVendas (pTopVenda: pVenda); forward; procedure getItens (pTopItem:pItem); forward; procedure Menu; var opc:byte; p:Pont; begin p:=nil; repeat writeln;writeln; writeln('1-Cadastrar Produto'); writeln('2-Cadastrar Venda'); writeln('3-Listar Vendas por Período'); writeln('4-Excluir Vendas'); writeln('5-Sair'); readln(opc); case opc of 1:p:=Produto(p); 2:Vendas(p); 3:Item(p); 4:p:=Excluir(p); 5:Sair(p); end; until (opc = 5); end; function Produtos(p:Pont):Pont; var prim:Pont; begin prim:=p; new(p); write('Digite o nome do produto: '); readln(p^.nome); while (p^.nome <> 'fim') do begin write('Digite o codigo do produto: '); readln(p^.codigo); write('Digite o valor unitario do produto: '); readln(p^.valorunitario); p^.ant:=prim; prim:=p; new(p); write('Digite o nome: '); readln(p^.nome); end; dispose(p); result:=prim; end;