Ir ao conteúdo
  • Cadastre-se

Simon Viegas

Membro VIP
  • Posts

    3.944
  • Cadastrado em

Tudo que Simon Viegas postou

  1. Olá. Faça um "teste de mesa"... ou simplesmente faça o processo mentalmente mesmo. Use um caderno ou o Bloco de Notas (do Windows) para armazenar o valor das variáveis durante o processo... No aguardo.
  2. Olá. Não é um "erro" propriamente dito. É que existem diferenças entre os comandos... Qualquer coisa dê uma olhada nesse tópico. Qual a diferença entre READ e READLN ??? Abraços
  3. Olá; Experimente trocar os read() por readln(). No aguardo.
  4. Olá. Uma opção poderia ser trocar de "integer" para "char" (de número para alfanumérico). No aguardo.
  5. Depende... tem várias formas... Algo bem simples poderia ser assim... writeln('Seja Bem-Vindo');readln; //servindo para dar um pause (aguarda um ENTER para continuar) Colocando antes de chamar o "menu". SOBRE O CÓDIGO POSTADO: 1) na minha opinião, o texto em "vermelho" não ficou legal... eu aconselharia tentar outras cores.. mas fica ao seu critério, é claro. 2) para que está carregando a Unit "Dos"? 3) falta indentar código... ele está um pouco bagunçado. 4) após ajustar certinho e testar, poderia já ir tentando implementar a parte do arquivo.. Por favor, veja esses pontos e nos responda/corrija/comente um por um, ok? No aguardo Abraços 3)
  6. Olá. Se desejar, poste aqui o seu código que damos uma analisada... vê tem alguma coisa "errada" ou que pode ser melhorada e tal... Caso contrário, favor avisar que fechamos o tópico. No aguardo.
  7. Olá. Você apenas postou um código... do que se trata? Ainda precisa de ajuda em alguma coisa? No aguardo.
  8. Olá. Com o novo código, qual a dúvida atual?
  9. Olá. Vou tentar ajudar... vamos lá: A primeira coisa, e se duvidar uma das mais importantes, é MANTER O CÓDIGO SEMPRE BEM INDENTADO. A indentação mantém uma estruturação visual de como está o código, ou seja, apenas seguindo o padrão da indentação, e olhando para o código, dá para fazer algumas análises... por exemplo, veja como ficaria esse mesmo código indentado (obs.: existem várias padrões de indentação, essa a seguir é o meu, que não necessariamente é o mais utilizado). {$APPTYPE CONSOLE}uses SysUtils;var idade, somaidade,contf, contm, maiorm, menorf, conth45, contf35 :integer; sexo, exp: string;BEGInsomaidade := 0 ;contf := 0;contm := 0;maiorm := 0;menorf := 0;conth45 := 0;contf35 := 0;writeln (' digite M para masculino ou F para feminino 0 para sair ');readln (sexo);while (sexo <> '0') do begin writeln ( ' Informe sua idade '); readln( idade); somaidade := somaidade + idade; writeln( ' Experiencia S/N '); readln (exp); if (sexo = 'M') then begin contm:= contm +1; end; if (exp = 'S') and (idade > 45) then begin somaidade := somaidade + idade; conth45 := conth45 + 1; end else if ( sexo = 'F') then begin contf:= contf +1; end; if (exp = 'S') and (idade < 35) and ( sexo = 'F') then begin somaidade := somaidade + idade; contf35 := contf35 + 1; end; writeln (' digite M para masculino ou F para feminino 0 para sair '); readln (sexo); end;writeln( ' Quantidade de candidato sexo feminino ', contf );writeln( ' Quantidade de candidato sexo masculino ', contm );readln;END. Veja, só de indentar, dá para verificar que tem algo errado na lógica, por exemplo: O else/if do "sexo" está vinculado ao if da experiência e idade... mas acho que uma coisa não tem haver com a outra. if (exp = 'S') and (idade > 45) then else if ( sexo = 'F') then Daí você precisa ir ajustando, de forma que, mantendo indentado, o código esteja "com a lógica correta". Para exemplo exemplo, você poderia tirar o "if (exp = 'S') and (idade > 45) then" do meio deles... Por ai vai. No aguardo.
  10. Olá. Eu não consegui entender o princípio desta "calculadora"... Então, o "loop infinito" está ocorrendo devido à comparação do "numfind = valuereal". Pelo jeito eles estão sempre ficando diferentes.. Daí tem várias formas de tentar ajustar... como colocar outra condição, como uma limite de "tentativas" (loops), ou mesmo entender e ajustar quais valores são esperados para essas duas variáveis... No aguardo.
  11. Olá. Você só postou somente o código... não comentou nada... Então, vou fazer alguns comentários... vamos lá: 1) REQUISITOS DO PROGRAMA Você deve se atentar e seguir o que está sendo pedido... Na descrição tem "código, descrição e preço", mas no código tem "codigo, nome, preco"... ou seja, está usando "nome" no lugar de "descrição". Creio eu que não seja a mesma coisa... Independente, sugiro que use o termo que ele especificou. 2) INDENTAÇÃO DE CÓDIGO Você precisa SEMPRE deixar o seu código bem arrumado. A indentação faz parte do processo de modelagem, pois ela também indica qual a sua intenção em cada trecho, ou seja, se está indentado, quer dizer que "está vincula a linha que está no indentamento anterior acima"... sugiro que tente deixar o código indentado já na medida que vai programando... é muito útil para encontrar erros!!! (de sintaxe e de lógica) Outra dica interessante é NÃO USAR O TAB, pois cada compilador tem uma configuração diferente, logo pode atrapalhar.. USE SEMPRE ESPAÇOS. Neste mesmo contexto, evite também esses espaços entre as linhas...Qual a necessidade deles? ... apenas vai deixar "visualmente bagunçado". Abaixo, tentando seguir o seu padrão, o seu código "reindentado". UNIT ListaEncad;INTERFACE type produto = record codigo : integer; nome : string; preco : real; end; List = ^no; //Lista é ponteiro. no = record obj : produto; proximo : List; end; procedure criar (var L : List); function vazia (L : list): boolean; procedure inserir (var L : list; x : produto); function Buscar1 (L : list; s : produto): list; function Buscar2 (L : list; cod : produto): list; procedure remover1(var L : list; cod : produto); function remover2(var L : list; s : produto): boolean; procedure mostrar (L : list);IMPLEMENTATION procedure criar (var L : list); // Procedimento para criar list begin L := nil; writeln ('lista iniciada...'); end; function vazia (L : list): boolean; //Uma list Vazia é representada por um Ponteiro cujo valor é Nulo. begin if (l = nil) then vazia := true else vazia := false; end; procedure inserir (var L : list; x : produto); // Procedimento para inserir um produto na list L var N, P : list; //N e P são Ponteiros. begin new(N); //Criar ponteiro N^.obj := x; if vazia (L) then //1º e 2ºCondição: 1ºSe a list Ordenada L esta vazia begin //2ºSe o elemento s é menor ou igual ao primeiro elemento da list. N^.proximo := L; //Nodo apontado por N passa a ser o primeiro da list L. L := N; //Endereço do Nodo apontado por N deve ser copiado para a variavel L. Tal que ambos ponteiros apontem o mesmo nodo. writeln (x.nome,' foi inserido(a) na lista!'); end else begin P := L; while (P^.proximo <> nil )do //3ºCondição e 4ºCondição: O elemento x é maior que o primeiro e existe outro que o supera begin //SÓ TEM UMA LINHA, NÃO PRECISA DE BEGIN/END [Simon] P := P^.proximo; end; N^.proximo := P^.proximo; P^.proximo := N; writeln (x.nome, ' Elemento inserido(a) na lista!'); end; // Final Da Ordenacao list Encadeada . begin //ESSE BEGIN E SEU END NÃO DEVEM EXISTIR!!! (está vinculado a o que) [Simon] writeln; writeln (' [Cadastrada Com Sucesso]'); end; //AQUI O END QUE NÃO DEVERIA EXISTIR [Simon] end; // Function Procurar Pelo Nome. function Buscar1 (L : list; s : produto): list; var P : list; begin if vazia(L) then writeln (' Impossivel Encontrar! Nao Tem produtos No Banco De Dados ! ') else begin P := L; while (P <> nil) and (s.nome <> P^.obj.nome) do P := P^.proximo; if (P <> nil) and (s.nome = P^.obj.nome) then begin writeln('[NOME] [CODIGO] [PRECO] '); writeln(P^.obj.nome ,'-------------' , '--------------', P^.obj.codigo,'-------------' , '-----------',P^.obj.preco:9:2 ,'--'); buscar1 := P; //faltou um ";" [Simon] end else if (P = nil)then begin buscar1 := nil; writeln; writeln(' ',s.nome,' [Nao Encontrado]'); end; end; end; // Function Procurar usando o codigo. function Buscar2 (L : list; cod : produto): list; var P : list; begin if vazia(L) then writeln (' Impossivel Encontrar! Nao Tem produtos No Banco De Dados ! ') else begin P := L; while (P <> nil) and (cod.codigo <> P^.obj.codigo) do P:=P^.proximo; if (P <> nil) and (cod.codigo = P^.obj.codigo) then begin writeln('[NOME] [CODIGO] [PRECO] '); writeln(P^.obj.nome ,'-------------' , '--------------', cod.codigo ,'-------------' , '---------------',P^.obj.preco:9:2 ,'--------'); buscar2 := P; end else if (P = nil)then begin buscar2 := nil; writeln; writeln(' ',cod.codigo,' [Nao Encontrado]'); end; end; end; //Remover produto por codigo procedure remover1 (var L : list; cod : produto); var P, Q : list; begin if vazia(L)then writeln( 'lista vazia!') else if (L^.obj.codigo = cod.codigo) then begin P := L; L := L^.proximo; writeln (cod.codigo, ' foi removido(a) da lista!'); dispose(P); end else begin P:=L; while((P^.proximo <> nil) and (cod.codigo <> P^.proximo^.obj.codigo )) do //4ºCondição : O elemento cod é diferente ao primeiro elemento de L. begin //SÓ TEM UMA LINHA, NÃO PRECISA DE BEGIN/END [Simon] P := P^.proximo; end; if (P^.proximo <> nil) and (P^.proximo^.obj.codigo = cod.codigo )then begin Q := P^.proximo; P^.proximo := Q^.proximo; writeln (cod.codigo, ' foi removido(a) da lista!'); dispose(Q); end else end; end; //remover um elemento da list por nome function remover2 (var L : list; s : produto): boolean; var P, Q : list; begin //O Primeiro elemento é o L^.obj if vazia(L) or (s.nome < L^.obj.nome) then //1º e 2ºCondição: 1ºCondição : A list ordenada L está vazia remover2 := false //2ºCondição : O elemento s é menor que o primeiro elemento da list ordenada L. else if (s.nome = L^.obj.nome) then //3ºCondição : O elemento s é igual ao primeiro elemento da list ordenada L. begin P := L; L := L^.proximo; writeln (s.nome, ' foi removido(a) da lista!'); dispose (P); remover2 := true; end else begin P := L; while (P^.proximo <> nil) and (s.nome > P^.proximo^.obj.nome) do //4ºCondição : O elemento s é maior que o primeiro elemento de L. P := P^.proximo; if (P^.proximo <> nil) and (s.nome = P^.proximo^.obj.nome) then begin Q := P^.proximo; P^.proximo := Q^.proximo; writeln (s.nome, ' foi removido(a) da lista!'); dispose (Q); remover2 := true; end else remover2 := false; end; end; //Imprimindo list Ordenada. procedure mostrar(L:list); begin if vazia (L) then writeln (' A lista esta vazia ') else begin writeln('[NOME] [CODIGO] [PRECO] '); while (L <> nil) do begin writeln(L^.obj.nome ,'-------------' , '--------------', L^.obj.codigo ,'-------------' , '---------------',L^.obj.preco:9:2 ,'--------'); L := L^.proximo; end; end; end;begin //NÃO PRECISA DESSE BEGIN, SÓ SE VOCÊ QUISESSE EXECETURAR ALGO QUANDO A UNIT FOSSE EXECUTADA. Pode remover esse BEGIN![Simon]END. Falta algo o programa... (uma base... para testar a unit, e já se preparar para implementar o arquivo) Depois implementar o arquivo. No aguardo.
  12. Uma coisa de cada vez... Mas é bem simples... Sugiro por enquanto focar na Unit... depois montar o programa. Qualquer dúvida é só postar. No aguardo.
  13. Por nada... Qualquer coisa vai tentando ai... se tiver alguma dúvida é só comentar... Fico no aguardo. Abraços
  14. Espero que já tenha feito alguma coisa... senão, antes de continuar lendo, recomendo tentar fazer sozinho.. só após, dê uma conferida nestes códigos que postei, beleza??? Para tentar ajudar, fiz um modelo de como poderia ir fazendo... //Unit que gerencia uma Lista Ordenada, utilizando//"encadeamento" (ponteiros apontando para ponteiros)UNIT ListaEncOrd; //São 3 qualidades: é uma lista, é encadeada e é ordenada. :)INTERFACE //### DEFINE E LISTA O QUE É VISÍVEL PARA O "MUNDO EXTERNO". //##### LISTA DE TIPOS GLOBAIS ##### type tPRODUTO = record //definição do tipo produto codigo :string; //<-- obs.:se for só número, poderia mudar para interger, por exemplo descricao:string; preco :real; end; Elem = tPRODUTO; //definição do tipo do elemento da lista (integer, string.. nesse contexto é um "produto" LstOrd = ^Nodo; //define um tipo que é será um ponteiro de outro. Nodo = record //estrutura de armazenamento obj :Elem; //objeto em si que será armazenado prox:LstOrd; //endereço da próximo estrutura (O Nodo aponta para o ponteiro de outro Nodo - isso é o "encadeamento") end; //##### LISTA DE PROCEDIMENTOS GLOBAIS ##### //procedimento que "inicializa" (prepara) a Lista procedure criar (var L:LstOrd); //função que verifica se a Lista está vazia ou não function vazia (L:LstOrd):boolean; //procedimento para inserir um novo objeto na Lista (ordenado pelo código) procedure inserir(var L:LstOrd; objeto:Elem); //função que localiza um produto na lista pela DESCRICAO {function BuscarPorDescricao (L:LstOrd; descricao:tDESCRICAO):LstOrd;} //<--FALTA IMPLEMENTAR //função que localiza um produto na lista pelo CODIGO {function BuscarPorCodigo (L:LstOrd; codigo:integer):LstOrd;} //<--FALTA IMPLEMENTAR //função que...... {function remover1(var L : LstOrd; code : integer): boolean;} //<--FALTA IMPLEMENTAR //função que...... {function remover2(var L : LstOrd; x : Elem): boolean;} //<--FALTA IMPLEMENTAR //procedimento que exibe todos os objetos que estão na lista. procedure show (L:LstOrd); //<--FALTA IMPLEMENTAR (ainda em testes) //procedimento que... {procedure imprimeObjeto(objeto:tPRODUTO);} // não está sendo usada no momentoIMPLEMENTATION //##### IMPLEMENTA OS PROCEDIMENTOS DA INTERFACE E DEFINE TIPO, VARIÁVEIS, PROCEDIMENTOS (ETC) LOCAIS ##### //procedimento que "inicializa" (prepara) a Lista procedure criar (var L : LstOrd); // Procedimento para criar Lista begin L := nil; //aponto para nulo (para nada). Usando como referência de "fim" do encadeamento. writeln('Lista iniciada...'); end; //função que verifica se a Lista está vazia ou não function vazia (L:LstOrd):boolean; begin if (L = nil) then vazia := true else vazia := false; end; //procedimento para inserir um novo objeto na Lista (ordenado pelo código) procedure inserir(var L:LstOrd; objeto:Elem); var N, P:LstOrd; //N=novo, P=auxiliar begin New(N); //cria um novo Nodo onde ficará o objeto N^.obj := objeto; //armazena o objeto no nodo if (vazia(L)) or (objeto.codigo <= L^.obj.codigo)then //1º e 2ºCondição: 1ºSe a Lista Ordenada L esta vazia begin //2ºSe o elemento s é menor ou igual ao primeiro elemento da lista. N^.prox := L; //Nodo apontado por N passa a ser o primeiro da lista L. L := N; //Endereço do Nodo apontado por N deve ser copiado para a variavel L. Tal que ambos ponteiros apontem o mesmo nodo. end else begin P := L; //auxiliar aponta para "L" (copia do endereç do pronteiro inicial) while (P^.prox <> nil ) and (N^.obj.codigo>P^.prox^.obj.codigo) do //3ºCondição e 4ºCondição: O elemento nome é maior que o primeiro e //existe outro que o supera P := P^.prox; //vai para o próximo N^.prox := P^.prox; //N aponto para a posição atual de P P^.prox := N; //P agora aponto para N // No final, P -> N -> Z (Z = para onde P estava apontand)!!! end; end; //procedimento que exibe todos os objetos que estão na lista. procedure show (L:LstOrd); //<--FALTA IMPLEMENTAR (ainda em testes) var P: LstOrd; //P=ponteiro auxiliar begin P:=L; //faz uma cópia do ponteiro L if Vazia (L) then writeln (' A lista esta vazia ') else begin //123456789 123456 123456789 123456789 123456789 123456789 1 1234567890 (apenas uma referência para o afastamento!!! writeln(' PRODUTO | DESCRICAO | PRECO '); writeln; while (P <> nil) do //enquanto não chegar ao fim da Lista begin {imprimeObjeto(P^.obj);} //se estivesse pronto, ficaria mais organizado! writeln(P^.obj.codigo:16,' ',P^.obj.descricao:40,' ',P^.obj.preco:10:2); //exibe os dados do produto atual P:= P^.prox; //vai para o próximo end; end; end; END.{Só um comentário: Vejamos esse trecho: N^.obj.codigo>P^.prox^.obj.codigo É bem simples: <N> é "Nodo", <Obj> é o que está sendo armazenado, <código> é um dos"atributos" do objeto, ou seja, não dá para comparar diretamente N^.obj > P^.prox^.obj...o que desse objeto é maior que o outro??? Logo, "foi definido" que será o código... se foroutro, muda para o outro...} Para testar, usei esse código: PROGRAM testeUnitListaOrdenada;uses CRT, ListaEncOrd;var listaProdutos :LstOrd; novoProduto :tPRODUTO; BEGIN//preparando programaClrScr; //limpa a tela (pertense a Unit CRT)criar(listaProdutos);//tentar exibir... (a lista está vazia)show(listaProdutos);//cadastrando produtoswriteln('Bla bla bla');writeln;//exemplo se fosse cadastar com valores pré-definidosnovoProduto.codigo :='MHH9748726';novoProduto.descricao:='Mouse de alta resolucao';novoProduto.preco :=43.99;inserir(listaProdutos, novoProduto);writeln('Produto ',novoProduto.codigo,' adicionado com sucesso');writeln;//exemplo se fosse cadastar com valores pré-definidosnovoProduto.codigo :='tech002';novoProduto.descricao:='Volante de com cambio em H';novoProduto.preco :=899.73;inserir(listaProdutos, novoProduto);writeln('Produto ',novoProduto.codigo,' adicionado com sucesso');writeln;//exemplo se fosse solicitandowriteln;writeln('DADOS DO NOVO PRODUTO');write('CODIGO :'); readln(novoProduto.codigo);write('DESCRICAO:'); readln(novoProduto.descricao);write('PRECO :'); readln(novoProduto.preco);inserir(listaProdutos, novoProduto);writeln('Produto ',novoProduto.codigo,' adicionado com sucesso');writeln;//exemplo se fosse cadastar com valores pré-definidosnovoProduto.codigo :='CdH-1092391';novoProduto.descricao:='Apenas inventei!!';novoProduto.preco :=110.23;inserir(listaProdutos, novoProduto);writeln('Produto ',novoProduto.codigo,' adicionado com sucesso');writeln;writeln;writeln;show(listaProdutos);writeln;writeln;writeln('FIM DO PROGRAMA');ReadKey;END. Qualquer coisa é só postar! No aguardo.
  15. Olá, Vamos comparar o código antigo com o novo: ANTIGO: if (vazia(L)) or (x<L^.obj.nome)then NOVO: if (vazia(L)) or (N^.nome<=N^.obj)then Traduzindo seria mais ou menos assim: se (a lista está vazia) ou (valor a ser inserido foi menor que o valor que está no objeto) façaif (vazia(L)) or (x<L^.obj.nome)then (<-- para quando o novo elemento deva ficar na primeira posição) Então, qual o novo valor a ser inserido? nesse caso é um "produto" (mas ele contém vários atributos, certo?). Então, é necessário escolher um desses atributos para ser usado como referência... ou seja, a lista é dita como "ordenada", logo tem que se definir em que "vai ser ordenado"... Supondo que queria ordenar por CODIGO, ficaria algo mais ou menos assim: "se (a lista está vazia) ou (valor a ser inserido foi menor que o valor que está no objeto) faça"if (vazia(L)) or (produto.codigo<=N^.obj.codigo) then Entendeu? Tente ir seguindo esse mesmo raciocínio.. Obs.: Veja que na sua primeira resposta, você definiu que os dados do produto estão no "obj" (tinha faltado apenas definir esse obj lá no type). Só para deixar mais claro: INTERFACE type tPRODUTO = record //definição do tipo produto codigo :string; //<-- obs.:se for só número, poderia mudar para interger, por exemplo descricao:string; preco :real; end; Elem = tPRODUTO; //definição do tipo do elemento da lista (integer, string.. nesse //contexto é um "produto" LstOrd = ^Nodo; Nodo = record //definição do tipo de cada "nodo" {codigo:integer;} //<--pode remover essa linha (esses dados estão no Elem) {preco :real;} //<--pode remover essa linha {nome :Elem;} //<--pode remover essa linha obj :Elem; //dado que está sendo armazenado prox:LstOrd; //endereço do próximo nodo end;... No aguardo.
  16. Olá. Qual navegador está utilizando? Então, eu estou utilizando o FPC 2.6.0 (dentro do programa NotePad++). Vou me basear por esse compilador, beleza? Vou tentar explicar o que mais ou menos está ocorrendo e ao mesmo tempo como analisar os possíveis erross... vamos lá: Ao compilar o código, apareceu o seguinte texto: E:\Simon\DropBox\Programas\Programação\Notepad++ 6.1.5\Compiladores\FPC\2.6.0\ppc386.exe "E:\Simon\DropBox\Programas\Programação\Notepad++ 6.1.5\ListaEncadeada.pas"Process started >>>ListaEncadeada.pas(70,13) Error: Illegal qualifierListaEncadeada.pas(71,13) Error: Illegal qualifierListaEncadeada.pas(72,13) Error: Illegal qualifierListaEncadeada.pas(77,29) Error: Illegal qualifierListaEncadeada.pas(88,55) Error: Illegal qualifierListaEncadeada.pas(111,40) Error: Illegal qualifierListaEncadeada.pas(113,37) Error: Illegal qualifierListaEncadeada.pas(132,48) Error: Illegal qualifierListaEncadeada.pas(134,45) Error: Illegal qualifierListaEncadeada.pas(157,36) Error: Illegal qualifierListaEncadeada.pas(160,21) Error: Illegal qualifierListaEncadeada.pas(171,68) Error: Illegal qualifierListaEncadeada.pas(177,64) Error: Illegal qualifierListaEncadeada.pas(196,31) Error: Illegal qualifierListaEncadeada.pas(199,25) Error: Illegal qualifierListaEncadeada.pas(210,65) Error: Illegal qualifierListaEncadeada.pas(214,61) Error: Illegal qualifierListaEncadeada.pas(253,4) Fatal: There were 17 errors compiling module, stoppingFatal: Compilation aborted<<< Process finished. (Exit code 1)================ READY ================ Pegando o "primeiro erro da lista", temos «ListaEncadeada.pas(70,13) Error: Illegal qualifier», ou seja, algo como "qualificador ilegal"... "está usando uma qualificação ilegal para variável " (incorreta). Na tal linha temos 70: N^.obj.preco := prec; //O livro não diz que tem que coloca o nome depois do obj no inserir. - Oras, <N> é um ponteiro, logo, não está errado utilizar o "^". Não deve ser isso... continuamos então.. - Já analisando o <N^.obj>, temos que <N> é um "record" , logo está coerente utilizar o "." para acessar um de seus atributos. Como <N> está como "ponteiro", como visto antes, devem-se utilizar o tal do utilizar o "^" antes desse "."... tudo certo até aqui... - Partimos agora para o <N^.obj.preco>... OPS!!! De onde vem esse ".preco"??? Como sabido, esse ponto está indicando que "obj" é um "record", correto??? Deixa eu olhar lá na declaração.......... Vi lá que tem "obj:Elem;". Agora olhamos o "elem"....... OPA!!! Encontrei... "elem" está como "Elem = string;", logo não poderia tentar utilizar esse ".preco", entendeu? RESUMIDAMENTE Você está utilizando um atributo que simplesmente não existe!!! POSSÍVEL SOLUÇÃO Ajusta o tal "obj" para suas necessidades... nesse caso transformando-o em um "record". Para "adiantar", um exemplo de como mais ou menos poderia ficar...: INTERFACE type tPRODUTO = record codigo :string; descricao:string; preco :real; end; Elem = tPRODUTO; LstOrd = ^Nodo; Nodo = record codigo:integer; preco :real; nome :Elem; obj :Elem; prox :LstOrd; end;... Obs.: claro que também poderia utilizar o record direto: Elem = record codigo :string; descricao:string; preco :real; end; Mas, acho mais elegante separar... e possibilita também utilizar esse mesmo tipo (tPRODUTO) em outra variável... Deu para entender o raciocínio? BONUS 1) Parâmetros dos procedimentos Já que tens "um objeto", poderia trabalhar com esse conceito nos procedimentos... procedure inseri (var L: LstOrd; produto:tPRODUTO); Bem mais prático, não? (em vez de passar atributo, por atributo). 2) Declaração de variáveis Verifiquei que tem uma variável solta na Interface.. var L : LstOrd; Onde que está utilizando ela?? Veja, vocês já devem ter ouvido falar em "variáveis globais" e "variáveis locais" (senão, sugiro pesquisar). Nesse caso, essa variável lá na Interface, é uma variável global, ou seja, é vista por todo o código... essa declaração lá, poderia servi por exemplo para caso você queira utilizar ela durante toda a Unit ou no programa que irá utilizar essa Unit, ou seja tanto o programa, tanto a Unit irão enxergar a mesma variável... mas não se engane... A variável "L" que está nas assinaturas dos procedimentos (como visto no item 1) não tem nada a ver com essa variável que está lá na Interface... RESUMIDAMENTE: apague essa variável de lá!!! Essa declaração não deveria existir!!! (como uma boa forma de testar, experimente mudar ela de nome para vê se vai mudar algo)! Espero não ter falado coisa de mais de uma vez... mais acho que por enquanto é isso ai.. Sugiro que ajuste essa questão do "tipo da variável obj" e as assinaturas... e vá ajustante o restante... Qualquer coisa é só postar. No aguardo.
  17. Olá. Poste aqui o código e onde está com dúvidas... Obs.: Sugiro inicialmente preparar a estrutura da "lista encadeada ordenada" (ajustado para o tipo de dado do problema: produtos). Feito isso, parte para parte criação do restante... Qualquer dúvida é só postar... No aguardo.
  18. Olá. Para saber a resposta do usuário, você precisa de uma variável para colher ela, ex.: writeln('Olá tudo bem? (S/N)');readln(bem);if bem='s' then Ao analisar as respostas, você deve utilizar a mesma variável.. ex.: writeln('Olá tudo bem? (S/N)');readln(bem);if bem='s' then begin writeln('Que bom!'); readkey endelse if bem='n' then begin writeln('Porque?'); writeln('Estou doente (D)'); writeln('Enjoado (E)'); Nesse caso, como são respostas "mutualmente exclusivas entre si", nem precisaria do segundo if, ex.: writeln('Olá tudo bem? (S/N)');readln(bem);if bem='s' then begin writeln('Que bom!'); readkey endelse begin writeln('Porque?'); writeln('Estou doente (D)'); writeln('Enjoado (E)') Por ai vai... São diversos pontos... como sugestão, sugiro fazer programa mais simples e deixar funcionando, e ai aos poucos vai incrementando... No aguardo.
  19. Olá... Por favor, poste o que já conseguiu faze e onde está com dúvidas.
  20. Eu não lembro e não sei nem para onde vai no Delphi, mas o erro é que você está tentando colocar um "comando", onde se está esperando "declaração de variáveis"... Lá no erro está dizendo: "aguandando uma ',' (para declarar mais variáveis com o mesmo tipo), ou um ':', para justamente definir o tipo! Outra coisa, você está criando uma Unit, que é um tipo específico de código.... não sei como é no Delphi, mas no pascal as unit são um tipo de código que servem para ser usados por outros códigos... eles são carregados pela "uses"... como no seu código mesmo tempo lá o "SysUtils", "Forms" etc. Sugiro se aprofundar mais um pouco no Pascal... mais fácil para pegar a parte lógica dos problemas. Depois quando for para o Delphi, será apenas uma adpatação de estrutura e um pouco de paradigma.
  21. Você está no caminho certo... mas tem alguns pontos equivocados: 1) a soma do ingredientes não tem a menor importância, ou seja, por exemplo, se eu tivesse 7, 2000, 15 (respectivamente), eu só poderei fazer 3 bolos!!!! 2) você utilizou um mod e comparando com 0, ou seja, sugerindo que quer uma "precisão" em um dos ingredientes, o que também não tem nada a ver, por exemplo, eu tenho 9, 22, 11 (nenhum é preciso), quantos bolos eu poderei fazer? a resposta será 2!!, correto?. E se fossem 9, 22, 10 (o 10 é preciso)? a resposta também seria 2. Outro pronto, e o que mais está enfático, é que independente do if a resposta será a mesma... logo, não seria correto usar um if...(ou precisa corrigir algo ai) Então, sugiro esses pontos: 1) primeiro do tudo (!!!) se atente em entender bem o problema, sem isso, seria logicamente impossível encontrar uma solução; (parece óbvio, e não estou dizendo que é o seu caso, mas a gente as vezes quer resolver sem mesmo entender... isso normal - vemos isso o tempo todo no dia a dia.) 2) já entendendo o que se quer, tente fazer um "algoritmo" (passos) para você mesmo conseguir resolver o problema manualmente... algo como: "que passos preciso seguir para resolver esse problema?"... como João faz ou deveria fazer?. Tente seguir esses passas "rigorosamente" e veja se chega a uma solução. Faça testes... vá ajustando... 3) agora vem a parte mais fácil: traduzir "os algoritmos" para a linguagem escolhida, que no caso é Pascal. No aguardo.
  22. Você poderia deixar o array <v> em ordenar alfabetica decrescente, dái o primeiro será mais recorrente, e o segundo o segundo.. etc Obs.: o que acontece se dois valores tivrem a mesma quantidade de repetições no primeiro lugar?? logo, você também precisa tratar isso!
  23. Tente verificar se os plugins estão ativos... E também lá no site, ao tentar baixa um vídeo tem a opção embaixo "Java: Off" ou "Java: On". Tente clicar no "off" para ficar "on".
  24. Olá. Poste aqui o que já conseguiu fazer e onde está com dúvidas... Sugestão: tente por exemplo fazer um programa que calcule os números somente de 1 a 10. No aguado.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!