Jump to content
vsilvanf

Ponteiros - Pascal

Recommended Posts

vsilvanf

Galera existe alguma forma Pascal, trabalhando com ponteiros, que eu consiga gerar aleatoriamente um inteiro longo com dez dígitos do tipo de um ponteiro.

Se existir poderiam me dar uma ideia da lógica a ser usada?

Share this post


Link to post
Share on other sites
passarito

Ou não estou a entender ou não estou a entender o objectivo!

Arranjas um ponteiro do tipo LongInt e depois aplicas-lhe um Random!

Mas duvido que sejá só isto. Explica-te melhor.

Share this post


Link to post
Share on other sites
thoga31

um inteiro longo com dez dígitos do tipo de um ponteiro.

Desconheço a existência de tal coisa em Pascal.

Assino por baixo o post do @passarito.


Knowledge is free!

Share this post


Link to post
Share on other sites
vsilvanf

Boa tarde enfim galera.

Estou cursando a faculdade de tecnologia, e tem um trabalho para ser entregue. Tem uma materia que é a respeito dos ponteiros em Pascal, e nessa questão no enunciado fala para usar a matéria de ponteiros. Também não entendi, já utilizei o Random mas sem ponteiros.

No enunciado pede para criar um Type ponteiro apontando para um record, e no record ter um campo para a informação do número e outro campo que seria o ponteiro criado acima (Recursividade).

E logo em seguida no enunciado pede para gerar aleatoriamente um inteiro longo com dez dígitos do tipo desse ponteiro criado.

Não consegui entender também, pq a lógica do ponteiros não seria só para criação de listas e arvores binárias?

Edited by vsilvanf

Share this post


Link to post
Share on other sites
pwseo

De que forma está isso escrito no enunciado? Aqui ninguém te vai resolver o exercício nem fazer o trabalho, mas pode ser que te ajudem a compreender o que é pretendido. Continua a parecer-me que algo está a ser confundido aí.

Além disso, parece-me que a estrutura de dados que acabaste de descrever é uma lista ligada simples... Talvez cada nó da mesma seja considerado um dígito (e seja para gerar 10 dígitos ao acaso). Já agora acrescento que a explicação que deste agora não tem nada a ver com a que deste no post de abertura da thread.

Uma vez mais: algo está muito confuso aí.

Edited by pwseo

Share this post


Link to post
Share on other sites
passarito

Que confusão que vai para aí.....

Estou cursando a faculdade de tecnologia, e tem um trabalho para ser entregue. Tem uma materia que é a respeito dos ponteiros em Pascal, e nessa questão no enunciado fala para usar a matéria de ponteiros. Também não entendi, já utilizei o Random mas sem ponteiros.

Assim, sim! Tem toda a lógica, mas deixa-me que te diga tu não estás cursando coisa nenhuma, pelas confusões que apresentas deixa-me que te pergunte 2 coisas: Tens ido às aulas? Tens estudado a matéria?

No enunciado pede para criar um Type ponteiro apontando para um record, e no record ter um campo para a informação do número e outro campo que seria o ponteiro criado acima (Recursividade).

Isto não tem nada a haver com recursividade mas sim com listas ligadas!

E logo em seguida no enunciado pede para gerar aleatoriamente um inteiro longo com dez dígitos do tipo desse ponteiro criado.

Cheira-me que não é nada disso, mas....

Não consegui entender também, pq a lógica do ponteiros não seria só para criação de listas e arvores binárias?

E é isso mesmo que é pedido!

Talvez cada nó da mesma seja considerado um dígito (e seja para gerar 10 dígitos ao acaso).

Acho que o problema é simples, não chega a essa complexidadedo.

É o que dizes ao inicio

parece-me que a estrutura de dados que acabaste de descrever é uma lista ligada simples...

Share this post


Link to post
Share on other sites
thoga31

No enunciado pede para criar um Type ponteiro apontando para um record, e no record ter um campo para a informação do número e outro campo que seria o ponteiro criado acima (Recursividade).

(...)

Não consegui entender também, pq a lógica do ponteiros não seria só para criação de listas e arvores binárias?

O que descreveste é uma lista ligada. A recursividade vem da tua imaginação.

A única parte que fiquei sem entender foi a do número de 10 dígitos. Cada nó contém um número destes, ou cada um dos 10 nós contém um dígito?

A explicação do enunciado está extremamente confusa, o que denota uma séria falta de conhecimentos de conceitos básicos que permitam estruturar minimamente um discurso coerente. O meu conselho é consolidar o mais depressa possível estes conceitos, porque não entender que se está perante um pedido de uma lista ligada quando se tem noção de que os ponteiros são úteis na sua criação é, no mínimo, grave.

Edited by thoga31
  • Vote 1

Knowledge is free!

Share this post


Link to post
Share on other sites
Suelen Passos
program GeraAleatorios(input{teclado}, output{tela});
type
  TDigito = 0..9;
  InteiroLongo = ^NoDigito;
  NoDigito = Record
              Digito: TDigito;
              Prox: InteiroLongo;
             End;
procedure mostrar(a{e}: InteiroLongo; tabulacao{e}: integer);
  begin
     write(output, '':tabulacao);
     while a<>nil do
        begin
           write(output, a^.Digito);
           a:= a^.Prox;
        end;
     writeln(output);
  end;
procedure produzAleatorio(var a{s}: InteiroLongo; tamanho{e}: integer);
  var
     posicao: integer;
     novo: InteiroLongo;
  begin
     a:= nil;
     for posicao:= 1 to tamanho do
        begin
           new(novo);
           novo^.Digito:= random(10);
           novo^.prox:= a;
           a:= novo;        {produz o inteiro do digito menos
                             significativo para o mais significativo}
        end;
  end;
function inverter(inteirao{e}: InteiroLongo): InteiroLongo;
  var
     res, auxiliar: InteiroLongo;
  begin
     res:= nil;
     while inteirao<>nil do
        begin
           new(auxiliar);
           auxiliar^.Digito:= inteirao^.Digito;
           auxiliar^.Prox:= res;
           res:= auxiliar;
           inteirao:= inteirao^.Prox;
        end;
     inverter:= res;
  end;
procedure produzSoma(prim{e},seg{e}: InteiroLongo; var resultado{s}: InteiroLongo);
  var
     x, y, auxiliar: InteiroLongo;
     propagar: integer;
  begin
     x:= inverter(prim);
     y:= inverter(seg);
     propagar:= 0;
     resultado:= nil;
     while (x<>nil) and (y<>nil) do
        begin
          new(auxiliar);
          auxiliar^.Digito:= (x^.Digito+y^.Digito+propagar) mod 10;
          propagar:= (x^.Digito+y^.Digito+propagar) div 10;
          auxiliar^.Prox:= resultado;
          resultado:= auxiliar;
          x:= x^.Prox;
          y:= y^.Prox;
        end;
     if (x=nil) then
        begin
           while y<>nil do
              begin
                 new(auxiliar);
                 auxiliar^.Digito:= (y^.Digito+propagar) mod 10;
                 propagar:= (y^.Digito+propagar) div 10;
                 auxiliar^.Prox:= resultado;
                 resultado:= auxiliar;
                 y:= y^.Prox;
              end;
        end
     else
        if (y=nil) then
           begin
              new(auxiliar);
              auxiliar^.Digito:= (x^.Digito+propagar) mod 10;
              propagar:= (x^.Digito+propagar) div 10;
              auxiliar^.Prox:= resultado;
              resultado:= auxiliar;
              x:= x^.Prox;
           end;
     if propagar<>0 then
        begin
           new(auxiliar);
           auxiliar^.Digito:= propagar;
           auxiliar^.Prox:= resultado;
           resultado:= auxiliar;
        end
  end;
var
  primeiro, segundo, soma: InteiroLongo;
begin
  randomize;
  produzAleatorio(primeiro, 10);
  produzAleatorio(segundo, 20);
  mostrar(primeiro, 11);
  mostrar(segundo, 1);
  produzSoma(primeiro, segundo, soma);
  writeln(output, '----------------------');
  mostrar(soma, 1);
  readln(input);
end.

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
thoga31

@Suelen Passos, para além do tópico já ter alguma idade e o membro @vsilvanf não voltar cá desde o dia 30 de Setembro, no P@P não se resolvem as questões para os outros.

Nós ensinamos a pescar e nunca, mas nunca, damos o peixe pronto-a-comer. Assim os membros nunca aprendem e começam a servir-se do P@P como um centro de resolução de trabalhos de casa gratuito.

Somos uma comunidade de programadores com o intuito de partilhar conhecimentos e não de fazer o trabalho dos outros.

Cumprimentos.


Knowledge is free!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.