Jump to content
HelderT

Ajuda Ponteiros

Recommended Posts

HelderT

Olá !

Eu estou com algumas dificuldades no processo de remoção de dados, na procedure remoção de dados.

Será que podiam ajudar a perceber o que é que eu estou a fazer mal??

Program HelderHugo;
USES crt, dos;

Type ponteiro = ^atletas;

     time = record
              horas, minutos, segundos, milesimos, anos, meses, dias, semanas: word;
            end;

     atletas = record
                 nome: string[20];
                 idade: string[3];
                 sexo: string[9];
                 nacionalidade: string[15];
                 dorsal:        integer;
                 tempo: time;
                 next: ponteiro;
               end;

VAR
NovoReg ,Inicio, ap, aux:                          ponteiro;
sairam:                                            boolean;
resp:                                              char;
pos, ramdom_dorsal, op, i:                         integer;
DiaSemana:                                         string;
tam_n, tam_i, tam_s, tam_na:                       string;
hora, min, seg, mil, ano, mes, dia, semana:        word;
//***Arrays***
ja_sairam: array[1..100] of integer;
restricoes: array[1..45] of char;
restricoesnumero: array[1..89] of char;

//*********************************//
//******QUADRO MOSTRAR DADOS*******//
//*********************************//
Procedure quadro_mostrar;
Var k, l: integer;
Begin
     //********************* Quadros da Classificação ************************//
     gotoxy(5,12);
     write('CLASSIFICAÇÃO');

     For k:=4 to 18 do
       Begin
         gotoxy(k,10);
         write(#205);
           For l:= 11 to 13 do
             Begin
               gotoxy(19,l);
               write(#186);
             End;
       End;

     For k:=4 to 18 do
       Begin
         gotoxy(k,14);
         write(#205);
           For l:= 11 to 13 do
             Begin
               gotoxy(3,l);
               write(#186);
             End;
       End;

     gotoxy(3,10);
     write(#201);

     gotoxy(19,10);
     write(#187);

     gotoxy(3,14);
     write(#200);

     gotoxy(19,14);
     write(#188);

     gotoxy(19,12);
     write(#204);

     gotoxy(20,12);
     write(#205);

     gotoxy(21,12);
     write(#205);

     //***********************************************************************//

     //************************ Quadros do Dorsal ****************************//
     gotoxy(24,12);
     write('DORSAL');

     For k:=23 to 30 do
       Begin
         gotoxy(k,10);
         write(#205);
           For l:= 11 to 13 do
             Begin
               gotoxy(22,l);
               write(#186);
             End;
       End;

     For k:=23 to 30 do
       Begin
         gotoxy(k,14);
         write(#205);
           For l:= 11 to 13 do
             Begin
               gotoxy(31,l);
               write(#186);
             End;
       End;

     gotoxy(22,10);
     write(#201);

     gotoxy(31,10);
     write(#187);

     gotoxy(22,14);
     write(#200);

     gotoxy(31,14);
     write(#188);

     gotoxy(22,12);
     write(#185);

     gotoxy(31,12);
     write(#204);

     gotoxy(32,12);
     write(#205);

     gotoxy(33,12);
     write(#205);

     //***********************************************************************//

     //************************** Quadros do Nome ****************************//

     gotoxy(43,12);
     write('NOME');

     For k:=35 to 55 do
       Begin
         gotoxy(k,10);
         write(#205);
           For l:= 11 to 13 do
             Begin
               gotoxy(34,l);
               write(#186);
             End;
       End;

     For k:=35 to 55 do
       Begin
         gotoxy(k,14);
         write(#205);
           For l:= 11 to 13 do
             Begin
               gotoxy(56,l);
               write(#186);
             End;
       End;

     gotoxy(34,10);
     write(#201);

     gotoxy(56,10);
     write(#187);

     gotoxy(34,14);
     write(#200);

     gotoxy(56,14);
     write(#188);

     gotoxy(34,12);
     write(#185);

     gotoxy(56,12);
     write(#204);

     gotoxy(57,12);
     write(#205);

     gotoxy(58,12);
     write(#205);

     //***********************************************************************//

     //************************** Quadros da Idade ***************************//

     gotoxy(61,12);
     write('IDADE');

     For k:=60 to 66 do
       Begin
         gotoxy(k,10);
         write(#205);
           For l:= 11 to 13 do
             Begin
               gotoxy(59,l);
               write(#186);
             End;
       End;

     For k:=60 to 66 do
       Begin
         gotoxy(k,14);
         write(#205);
           For l:= 11 to 13 do
             Begin
               gotoxy(67,l);
               write(#186);
             End;
       End;

     gotoxy(59,10);
     write(#201);

     gotoxy(67,10);
     write(#187);

     gotoxy(59,14);
     write(#200);

     gotoxy(67,14);
     write(#188);

     gotoxy(59,12);
     write(#185);

     gotoxy(67,12);
     write(#204);

     gotoxy(68,12);
     write(#205);

     gotoxy(69,12);
     write(#205);

     //***********************************************************************//

     //*************************** Quadros do Sexo ***************************//

     gotoxy(74,12);
     write('SEXO');

     For k:=71 to 81 do
       Begin
         gotoxy(k,10);
         write(#205);
           For l:= 11 to 13 do
             Begin
               gotoxy(70,l);
               write(#186);
             End;
       End;

     For k:=71 to 81 do
       Begin
         gotoxy(k,14);
         write(#205);
           For l:= 11 to 13 do
             Begin
               gotoxy(82,l);
               write(#186);
             End;
       End;

     gotoxy(70,10);
     write(#201);

     gotoxy(82,10);
     write(#187);

     gotoxy(70,14);
     write(#200);

     gotoxy(82,14);
     write(#188);

     gotoxy(70,12);
     write(#185);

     gotoxy(82,12);
     write(#204);

     gotoxy(83,12);
     write(#205);

     gotoxy(84,12);
     write(#205);

     //***********************************************************************//

     //********************** Quadros do Nacionalidade ***********************//

     gotoxy(88,12);
     write('NACIONALIDADE');

     For k:=86 to 103 do
       Begin
         gotoxy(k,10);
         write(#205);
           For l:= 11 to 13 do
             Begin
               gotoxy(85,l);
               write(#186);
             End;
       End;

     For k:=86 to 103 do
       Begin
         gotoxy(k,14);
         write(#205);
           For l:= 11 to 13 do
             Begin
               gotoxy(104,l);
               write(#186);
             End;
       End;

     gotoxy(85,10);
     write(#201);

     gotoxy(104,10);
     write(#187);

     gotoxy(85,14);
     write(#200);

     gotoxy(104,14);
     write(#188);

     gotoxy(85,12);
     write(#185);

     gotoxy(104,12);
     write(#204);

     gotoxy(105,12);
     write(#205);

     gotoxy(106,12);
     write(#205);

     //***********************************************************************//

     //*********************** Quadros da Hora e Data ************************//

     gotoxy(117,12);
     write('HORA/DATA');

     For k:=108 to 135 do
       Begin
         gotoxy(k,10);
         write(#205);
           For l:= 11 to 13 do
             Begin
               gotoxy(107,l);
               write(#186);
             End;
       End;

     For k:=108 to 135 do
       Begin
         gotoxy(k,14);
         write(#205);
           For l:= 11 to 13 do
             Begin
               gotoxy(136,l);
               write(#186);
             End;
       End;

     gotoxy(107,10);
     write(#201);

     gotoxy(136,10);
     write(#187);

     gotoxy(107,14);
     write(#200);

     gotoxy(136,14);
     write(#188);

     gotoxy(107,12);
     write(#185);

     //***********************************************************************//

     //*************************** Quadro de baixo ***************************//

     For k:=20 to 113 do
       Begin
         gotoxy(k,3);
         write(#205);
           For l:= 4 to 6 do
             Begin
               gotoxy(19,l);
               write(#186);
             End;
       End;

     For k:=20 to 113 do
       Begin
         gotoxy(k,7);
         write(#205);
           For l:= 4 to 6 do
             Begin
               gotoxy(114,l);
               write(#186);
             End;
       End;

     gotoxy(19,3);
     write(#201);

     gotoxy(114,3);
     write(#187);

     gotoxy(19,7);
     write(#200);

     gotoxy(114,7);
     write(#188);

     gotoxy(11,5);
     write(#201);

     gotoxy(19,5);
     write(#185);

     gotoxy(11,10);
     write(#202);

     For k:=12 to 18 do
       Begin
         gotoxy(k,5);
         write(#205);
           For l:= 6 to 9 do
             Begin
               gotoxy(11,l);
               write(#186);
             End;
       End;

     gotoxy(114,5);
     write(#204);

     gotoxy(121,5);
     write(#187);

     gotoxy(121,10);
     write(#202);

     For k:=115 to 120 do
       Begin
         gotoxy(k,5);
         write(#205);
           For l:= 6 to 9 do
             Begin
               gotoxy(121,l);
               write(#186);
             End;
       End;
End;

//*********************************//
//******** MOSTRAR DADOS **********//
//*********************************//
Procedure mostrar_dados;
Var l, k: integer;
Begin
     clrscr;
     quadro_mostrar;
     ap := Inicio;
     i := 1;
     Repeat
         gotoxy(5,6*i+12);
         write(i,''+ char(#166) +' Lugar');
           For k:=4 to 18 do
             Begin
               gotoxy(k,6*i+10);
               write(#205);
                 For l:= 6*i+11 to 6*i+13 do
                   Begin
                     gotoxy(19,l);
                     write(#186);
                   End;
             End;

         For k:=4 to 18 do
           Begin
             gotoxy(k,6*i+14);
             write(#205);
               For l:= 6*i+11 to 6*i+13 do
                 Begin
                   gotoxy(3,l);
                   write(#186);
                 End;
           End;

         gotoxy(3,6*i+10);
         write(#201);

         gotoxy(19,6*i+10);
         write(#187);

         gotoxy(3,6*i+14);
         write(#200);

         gotoxy(19,6*i+14);
         write(#188);

         gotoxy(19,6*i+12);
         write(#204);

         gotoxy(20,6*i+12);
         write(#205);

         gotoxy(21,6*i+12);
         write(#205);

         gotoxy(25,6*i+12);
         write(ap^.dorsal);

         For k:=23 to 30 do
           Begin
             gotoxy(k,6*i+10);
             write(#205);
               For l:= 6*i+11 to 6*i+13 do
                 Begin
                   gotoxy(22,l);
                   write(#186);
                 End;
           End;

         For k:=23 to 30 do
           Begin
             gotoxy(k,6*i+14);
             write(#205);
               For l:= 6*i+11 to 6*i+13 do
                 Begin
                   gotoxy(31,l);
                   write(#186);
                 End;
           End;

         gotoxy(22,6*i+10);
         write(#201);

         gotoxy(31,6*i+10);
         write(#187);

         gotoxy(22,6*i+14);
         write(#200);

         gotoxy(31,6*i+14);
         write(#188);

         gotoxy(22,6*i+12);
         write(#185);

         gotoxy(22,6*i+12);
         write(#185);

         gotoxy(31,6*i+12);
         write(#204);

         gotoxy(32,6*i+12);
         write(#205);

         gotoxy(33,6*i+12);
         write(#205);

         gotoxy(36,6*i+12);
         write(ap^.nome);

         For k:=35 to 55 do
           Begin
             gotoxy(k,6*i+10);
             write(#205);
               For l:= 6*i+11 to 6*i+13 do
                 Begin
                   gotoxy(34,l);
                   write(#186);
                 End;
           End;

         For k:=35 to 55 do
           Begin
             gotoxy(k,6*i+14);
             write(#205);
               For l:= 6*i+11 to 6*i+13 do
                 Begin
                   gotoxy(56,l);
                   write(#186);
                 End;
           End;

         gotoxy(34,6*i+10);
         write(#201);

         gotoxy(56,6*i+10);
         write(#187);

         gotoxy(34,6*i+14);
         write(#200);

         gotoxy(56,6*i+14);
         write(#188);

         gotoxy(34,6*i+12);
         write(#185);

         gotoxy(56,6*i+12);
         write(#204);

         gotoxy(57,6*i+12);
         write(#205);

         gotoxy(58,6*i+12);
         write(#205);

         gotoxy(61,6*i+12);
         write(ap^.idade);

         For k:=60 to 66 do
           Begin
             gotoxy(k,6*i+10);
             write(#205);
               For l:= 6*i+11 to 6*i+13 do
                 Begin
                   gotoxy(59,l);
                   write(#186);
                 End;
           End;

         For k:=60 to 66 do
           Begin
             gotoxy(k,6*i+14);
             write(#205);
               For l:= 6*i+11 to 6*i+13 do
                 Begin
                   gotoxy(67,l);
                   write(#186);
                 End;
           End;

         gotoxy(59,6*i+10);
         write(#201);

         gotoxy(67,6*i+10);
         write(#187);

         gotoxy(59,6*i+14);
         write(#200);

         gotoxy(67,6*i+14);
         write(#188);

         gotoxy(59,6*i+12);
         write(#185);

         gotoxy(67,6*i+12);
         write(#204);

         gotoxy(68,6*i+12);
         write(#205);

         gotoxy(69,6*i+12);
         write(#205);

         gotoxy(72,6*i+12);
         write(ap^.sexo);

         For k:=71 to 81 do
           Begin
             gotoxy(k,6*i+10);
             write(#205);
               For l:= 6*i+11 to 6*i+13 do
                 Begin
                   gotoxy(70,l);
                   write(#186);
                 End;
           End;

         For k:=71 to 81 do
           Begin
             gotoxy(k,6*i+14);
             write(#205);
               For l:= 6*i+11 to 6*i+13 do
                 Begin
                   gotoxy(82,l);
                   write(#186);
                 End;
           End;

         gotoxy(70,6*i+10);
         write(#201);

         gotoxy(82,6*i+10);
         write(#187);

         gotoxy(70,6*i+14);
         write(#200);

         gotoxy(82,6*i+14);
         write(#188);

         gotoxy(70,6*i+12);
         write(#185);

         gotoxy(82,6*i+12);
         write(#204);

         gotoxy(83,6*i+12);
         write(#205);

         gotoxy(84,6*i+12);
         write(#205);

         gotoxy(87,6*i+12);
         write(ap^.nacionalidade);

         For k:=86 to 103 do
           Begin
             gotoxy(k,6*i+10);
             write(#205);
               For l:= 6*i+11 to 6*i+13 do
                 Begin
                   gotoxy(85,l);
                   write(#186);
                 End;
           End;

         For k:=86 to 103 do
           Begin
             gotoxy(k,6*i+14);
             write(#205);
               For l:= 6*i+11 to 6*i+13 do
                 Begin
                   gotoxy(104,l);
                   write(#186);
                 End;
           End;

         gotoxy(85,6*i+10);
         write(#201);

         gotoxy(104,6*i+10);
         write(#187);

         gotoxy(85,6*i+14);
         write(#200);

         gotoxy(104,6*i+14);
         write(#188);

         gotoxy(85,6*i+12);
         write(#185);

         gotoxy(104,6*i+12);
         write(#204);

         gotoxy(105,6*i+12);
         write(#205);

         gotoxy(106,6*i+12);
         write(#205);

         gotoxy(109,6*i+12);
         write(ap^.tempo.horas,':',ap^.tempo.minutos,':',ap^.tempo.segundos,':',ap^.tempo.milesimos,' --> ',ap^.tempo.dias,'/',ap^.tempo.meses,'/',ap^.tempo.anos);

         For k:=108 to 135 do
           Begin
             gotoxy(k,6*i+10);
             write(#205);
               For l:= 6*i+11 to 6*i+13 do
                 Begin
                   gotoxy(107,l);
                   write(#186);
                 End;
           End;

         For k:=108 to 135 do
           Begin
             gotoxy(k,6*i+14);
             write(#205);
               For l:= 6*i+11 to 6*i+13 do
                 Begin
                   gotoxy(136,l);
                   write(#186);
                 End;
           End;

         gotoxy(107,6*i+10);
         write(#201);

         gotoxy(136,6*i+10);
         write(#187);

         gotoxy(107,6*i+14);
         write(#200);

         gotoxy(136,6*i+14);
         write(#188);

         gotoxy(107,6*i+12);
         write(#185);

         inc(ap,1);
         i := i + 1;
      Until (i-1 = pos);
End;

//*********************************//
//*****PROCEDURE ELIMINAR DADOS****//
//*********************************//
Procedure eliminar_dados;
Var delete: integer;
Begin
     mostrar_dados;

     gotoxy(40,5);
     write('Digite o numero do dorsal do atleta que deseja eliminar: ');
     readln(delete);

     ap := NovoReg;

     for i := 1 to pos do
     begin
          if ap^.dorsal = delete
          then
          begin
               NovoReg := NovoReg^.next;
               dispose(ap);
          end
          else
          begin
               while ap <> NIL do
               begin
                    if ap^.dorsal = delete then
                    begin
                         aux^.next := ap^.next;
                         dispose(ap);
                    end
                    else
                    begin
                         aux := ap;
                         ap := ap^.next;
                    end;
               end;
          end;
     end;

     readkey;
     mostrar_dados;
     readkey;
End;



//*********************************//
//******QUADRO INSERIR DADOS*******//
//*********************************//
Procedure quadro_inserir;
VAR k, l: integer;
Begin
     clrscr;
     For k:=24 to 74 do
       Begin
         gotoxy(k,4);
         write(#205);
           For l:= 5 to 7 do
             Begin
               gotoxy(75,l);
               write(#186);
             End;
       End;

     For k:=24 to 74 do
       Begin
         gotoxy(k,8);
         write(#205);
           For l:= 5 to 7 do
             Begin
               gotoxy(23,l);
               write(#186);
             End;
       End;

     gotoxy(23,4);
     write(#201);

     gotoxy(75,4);
     write(#187);

     gotoxy(23,8);
     write(#200);

     gotoxy(75,8);
     write(#188);

     gotoxy(23,6);
     write(#185);

     For k:=12 to 22 do
       Begin
         gotoxy(k,6);
         write(#205);
           For l:= 7 to 9 do
             Begin
               gotoxy(11,l);
               write(#186);
             End;
       End;

     For k:=4 to 18 do
       Begin
         gotoxy(k,10);
         write(#205);
           For l:= 11 to 13 do
             Begin
               gotoxy(19,l);
               write(#186);
             End;
       End;

     For k:=4 to 18 do
       Begin
         gotoxy(k,14);
         write(#205);
           For l:= 11 to 13 do
             Begin
               gotoxy(3,l);
               write(#186);
             End;
       End;

       gotoxy(11,6);
       write(#201);

       gotoxy(11,10);
       write(#202);

       gotoxy(3,10);
       write(#201);

       gotoxy(3,14);
       write(#200);

       gotoxy(19,10);
       write(#187);

       gotoxy(19,14);
       write(#188);

       For k:=4 to 18 do
       Begin
         gotoxy(k,16);
         write(#205);
           For l:= 17 to 19 do
             Begin
               gotoxy(19,l);
               write(#186);
             End;
       End;

     For k:=4 to 18 do
       Begin
         gotoxy(k,20);
         write(#205);
           For l:= 17 to 19 do
             Begin
               gotoxy(3,l);
               write(#186);
             End;
       End;

     gotoxy(3,16);
     write(#201);

     gotoxy(3,20);
     write(#200);

     gotoxy(19,16);
     write(#187);

     gotoxy(19,20);
     write(#188);

     For k:=4 to 18 do
       Begin
         gotoxy(k,22);
         write(#205);
           For l:= 23 to 25 do
             Begin
               gotoxy(19,l);
               write(#186);
             End;
       End;

     For k:=4 to 18 do
       Begin
         gotoxy(k,26);
         write(#205);
           For l:= 23 to 25 do
             Begin
               gotoxy(3,l);
               write(#186);
             End;
       End;

     gotoxy(3,22);
     write(#201);

     gotoxy(3,26);
     write(#200);

     gotoxy(19,22);
     write(#187);

     gotoxy(19,26);
     write(#188);

     For k:=4 to 18 do
       Begin
         gotoxy(k,28);
         write(#205);
           For l:= 29 to 31 do
             Begin
               gotoxy(19,l);
               write(#186);
             End;
       End;

     For k:=4 to 18 do
       Begin
         gotoxy(k,32);
         write(#205);
           For l:= 29 to 31 do
             Begin
               gotoxy(3,l);
               write(#186);
             End;
       End;

     gotoxy(3,28);
     write(#201);

     gotoxy(3,32);
     write(#200);

     gotoxy(19,28);
     write(#187);

     gotoxy(19,32);
     write(#188);

     For k:=4 to 18 do
       Begin
         gotoxy(k,34);
         write(#205);
           For l:= 35 to 37 do
             Begin
               gotoxy(19,l);
               write(#186);
             End;
       End;

     For k:=4 to 18 do
       Begin
         gotoxy(k,38);
         write(#205);
           For l:= 35 to 37 do
             Begin
               gotoxy(3,l);
               write(#186);
             End;
       End;

     gotoxy(3,34);
     write(#201);

     gotoxy(3,38);
     write(#200);

     gotoxy(19,34);
     write(#187);

     gotoxy(19,38);
     write(#188);

     For k:=4 to 18 do
       Begin
         gotoxy(k,40);
         write(#205);
           For l:= 41 to 43 do
             Begin
               gotoxy(19,l);
               write(#186);
             End;
       End;

     For k:=4 to 18 do
       Begin
         gotoxy(k,44);
         write(#205);
           For l:= 41 to 43 do
             Begin
               gotoxy(3,l);
               write(#186);
             End;
       End;

     gotoxy(3,40);
     write(#201);

     gotoxy(3,44);
     write(#200);

     gotoxy(19,40);
     write(#187);

     gotoxy(19,44);
     write(#188);

     For k:=24 to 74 do
       Begin
         gotoxy(k,10);
         write(#205);
           For l:= 11 to 13 do
             Begin
               gotoxy(75,l);
               write(#186);
             End;
       End;

     For k:=24 to 74 do
       Begin
         gotoxy(k,14);
         write(#205);
           For l:= 11 to 13 do
             Begin
               gotoxy(23,l);
               write(#186);
             End;
       End;

     gotoxy(23,10);
     write(#201);

     gotoxy(23,14);
     write(#200);

     gotoxy(75,10);
     write(#187);

     gotoxy(75,14);
     write(#188);

     For k:=24 to 74 do
       Begin
         gotoxy(k,16);
         write(#205);
           For l:= 17 to 19 do
             Begin
               gotoxy(75,l);
               write(#186);
             End;
       End;

     For k:=24 to 74 do
       Begin
         gotoxy(k,20);
         write(#205);
           For l:= 17 to 19 do
             Begin
               gotoxy(23,l);
               write(#186);
             End;
       End;

     gotoxy(23,16);
     write(#201);

     gotoxy(23,20);
     write(#200);

     gotoxy(75,16);
     write(#187);

     gotoxy(75,20);
     write(#188);

     For k:=24 to 74 do
       Begin
         gotoxy(k,22);
         write(#205);
           For l:= 23 to 25 do
             Begin
               gotoxy(75,l);
               write(#186);
             End;
       End;

     For k:=24 to 74 do
       Begin
         gotoxy(k,26);
         write(#205);
           For l:= 23 to 25 do
             Begin
               gotoxy(23,l);
               write(#186);
             End;
       End;

     gotoxy(23,22);
     write(#201);

     gotoxy(23,26);
     write(#200);

     gotoxy(75,22);
     write(#187);

     gotoxy(75,26);
     write(#188);

     For k:=24 to 74 do
       Begin
         gotoxy(k,28);
         write(#205);
           For l:= 29 to 31 do
             Begin
               gotoxy(75,l);
               write(#186);
             End;
       End;

     For k:=24 to 74 do
       Begin
         gotoxy(k,32);
         write(#205);
           For l:= 29 to 31 do
             Begin
               gotoxy(23,l);
               write(#186);
             End;
       End;

     gotoxy(23,28);
     write(#201);

     gotoxy(23,32);
     write(#200);

     gotoxy(75,28);
     write(#187);

     gotoxy(75,32);
     write(#188);

     For k:=24 to 74 do
       Begin
         gotoxy(k,34);
         write(#205);
           For l:= 35 to 37 do
             Begin
               gotoxy(75,l);
               write(#186);
             End;
       End;

     For k:=24 to 74 do
       Begin
         gotoxy(k,38);
         write(#205);
           For l:= 35 to 37 do
             Begin
               gotoxy(23,l);
               write(#186);
             End;
       End;

     gotoxy(23,34);
     write(#201);

     gotoxy(23,38);
     write(#200);

     gotoxy(75,34);
     write(#187);

     gotoxy(75,38);
     write(#188);

     For k:=24 to 74 do
       Begin
         gotoxy(k,40);
         write(#205);
           For l:= 41 to 43 do
             Begin
               gotoxy(75,l);
               write(#186);
             End;
       End;

     For k:=24 to 74 do
       Begin
         gotoxy(k,44);
         write(#205);
           For l:= 41 to 43 do
             Begin
               gotoxy(23,l);
               write(#186);
             End;
       End;

     gotoxy(23,40);
     write(#201);

     gotoxy(23,44);
     write(#200);

     gotoxy(75,40);
     write(#187);

     gotoxy(75,44);
     write(#188);

     gotoxy(11,54);
     write(#200);



     For k:=12 to 22 do
       Begin
         gotoxy(k,54);
         write(#205);
           For l:= 51 to 53 do
             Begin
               gotoxy(11,l);
               write(#186);
             End;
       End;

     For k:=24 to 74 do
       Begin
         gotoxy(k,46);
         write(#205);
           For l:= 47 to 49 do
             Begin
               gotoxy(75,l);
               write(#186);
             End;
       End;

     For k:=24 to 74 do
       Begin
         gotoxy(k,50);
         write(#205);
           For l:= 47 to 49 do
             Begin
               gotoxy(23,l);
               write(#186);
             End;
       End;

     gotoxy(23,46);
     write(#201);

     gotoxy(23,50);
     write(#200);

     gotoxy(75,46);
     write(#187);

     gotoxy(75,50);
     write(#188);


     For k:=24 to 74 do
       Begin
         gotoxy(k,52);
         write(#205);
           For l:= 53 to 55 do
             Begin
               gotoxy(75,l);
               write(#186);
             End;
       End;

     For k:=24 to 74 do
       Begin
         gotoxy(k,56);
         write(#205);
           For l:= 53 to 55 do
             Begin
               gotoxy(23,l);
               write(#186);
             End;
       End;

     gotoxy(23,52);
     write(#201);

     gotoxy(23,56);
     write(#200);

     gotoxy(75,52);
     write(#187);

     gotoxy(75,56);
     write(#188);

     For k:=4 to 18 do
       Begin
         gotoxy(k,46);
         write(#205);
           For l:= 47 to 49 do
             Begin
               gotoxy(19,l);
               write(#186);
             End;
       End;

     For k:=4 to 18 do
       Begin
         gotoxy(k,50);
         write(#205);
           For l:= 47 to 49 do
             Begin
               gotoxy(3,l);
               write(#186);
             End;
       End;

     gotoxy(23,48);
     write(#185);

     gotoxy(11,14);
     write(#203);

     gotoxy(11,15);
     write(#186);

     gotoxy(11,16);
     write(#202);

     gotoxy(11,20);
     write(#203);

     gotoxy(11,21);
     write(#186);

     gotoxy(11,22);
     write(#202);

     gotoxy(11,26);
     write(#203);

     gotoxy(11,27);
     write(#186);

     gotoxy(11,28);
     write(#202);

     gotoxy(11,32);
     write(#203);

     gotoxy(11,33);
     write(#186);

     gotoxy(11,34);
     write(#202);

     gotoxy(11,38);
     write(#203);

     gotoxy(11,39);
     write(#186);

     gotoxy(11,40);
     write(#202);

     gotoxy(19,12);
     write(#204);

     gotoxy(23,12);
     write(#185);

     gotoxy(11,44);
     write(#203);

     gotoxy(11,45);
     write(#186);

     gotoxy(11,46);
     write(#202);

     gotoxy(3,46);
     write(#201);

     gotoxy(11,50);
     write(#203);

     gotoxy(3,50);
     write(#200);

     gotoxy(19,46);
     write(#187);

     gotoxy(23,54);
     write(#185);

     For k:=20 to 22 do
       Begin
         gotoxy(k,48);
         write(#205);
       End;

     gotoxy(19,50);
     write(#188);

     gotoxy(19,48);
     write(#204);

     For k:=20 to 22 do
       Begin
         gotoxy(k,12);
         write(#205);
       End;

     gotoxy(19,18);
     write(#204);

     gotoxy(23,18);
     write(#185);

     For k:=20 to 22 do
       Begin
         gotoxy(k,18);
         write(#205);
       End;

     gotoxy(19,24);
     write(#204);

     gotoxy(23,24);
     write(#185);

     For k:=20 to 22 do
       Begin
         gotoxy(k,24);
         write(#205);
       End;

     gotoxy(19,30);
     write(#204);

     gotoxy(23,30);
     write(#185);

     For k:=20 to 22 do
       Begin
         gotoxy(k,30);
         write(#205);
       End;

     gotoxy(19,36);
     write(#204);

     gotoxy(23,36);
     write(#185);

     For k:=20 to 22 do
       Begin
         gotoxy(k,36);
         write(#205);
       End;

     gotoxy(19,42);
     write(#204);

     gotoxy(23,42);
     write(#185);

     For k:=20 to 22 do
       Begin
         gotoxy(k,42);
         write(#205);
       End;

     //**************** Texto Fixo *****************
       gotoxy(9,18);
       write('NOME');

       gotoxy(9,24);
       write('IDADE');

       gotoxy(9,30);
       write('SEXO');

       gotoxy(5,36);
       write('NACIONALIDADE');

       gotoxy(8,42);
       write('DORSAL');

       gotoxy(7,48);
       write('TEMPO/DATA');
     //*********************************************
End;

//*********************************//
//*********PROCEDURE LIMPAR********//
//*********************************//
Procedure limpar;
Begin
     gotoxy(25,18);
     write('                                                  ');

     gotoxy(25,24);
     write('                                                  ');

     gotoxy(25,30);
     write('                                                  ');

     gotoxy(25,36);
     write('                                                  ');

     gotoxy(25,42);
     write('                                                  ');

     gotoxy(25,48);
     write('                                                  ');

     gotoxy(25,54);
     write('                                                  ');
End;

//*********************************//
//********* VALIDAR O NOME ********//
//*********************************//
Procedure validar_nome (Var tam_name: string[21]);
Var x,i,y:    integer;
Begin
     //**** Restrições ****
     restricoes[1] := '1';
     restricoes[2] := '2';
     restricoes[3] := '3';
     restricoes[4] := '4';
     restricoes[5] := '5';
     restricoes[6] := '6';
     restricoes[7] := '7';
     restricoes[8] := '8';
     restricoes[9] := '9';
     restricoes[10] := '0';
     restricoes[11] := '!';
     restricoes[12] := '"';
     restricoes[13] := '#';
     restricoes[14] := '$';
     restricoes[15] := '%';
     restricoes[16] := '&';
     restricoes[17] := '/';
     restricoes[18] := '(';
     restricoes[19] := ')';
     restricoes[20] := '=';
     restricoes[21] := '?';
     restricoes[22] := '»';
     restricoes[23] := '«';
     restricoes[24] := '\';
     restricoes[25] := '|';
     restricoes[26] := '+';
     restricoes[27] := '*';
     restricoes[28] := '-';
     restricoes[29] := '_';
     restricoes[30] := '.';
     restricoes[31] := ':';
     restricoes[32] := ',';
     restricoes[33] := ';';
     restricoes[34] := 'º';
     restricoes[35] := 'ª';
     restricoes[36] := '<';
     restricoes[37] := '>';
     restricoes[38] := '@';
     restricoes[39] := '£';
     restricoes[40] := '§';
     restricoes[41] := '€';
     restricoes[42] := '{';
     restricoes[43] := '[';
     restricoes[44] := ']';
     restricoes[45] := '}';
     //********************

     Repeat
       x := 0;
           For i:=1 to 45 do
             Begin
               For y:=1 to 20 do
                 Begin
                   If ((length(tam_name) > 20) OR (tam_name[y] = restricoes[i]))
                   Then
                     Begin
                       gotoxy(25,18);
                       write('                                            ');
                       tam_name := '                                            ';
                       gotoxy(25,54);
                       write('Nome + de 20 caracteres ou caracteres inválidos!');
                       gotoxy(25,18);
                       readln(tam_name);
                       x := x + 1;
                     End;
                 End;
             End;
     Until (x = 0);
End;

//*********************************//
//********* VALIDAR IDADE *********//
//*********************************//
Procedure validar_idade (Var tam_idade: string[4]);
Var x,i,y:    integer;
Begin
     //**** Restrições ****
     restricoesnumero[1] := 'q';
     restricoesnumero[2] := 'Q';
     restricoesnumero[3] := 'a';
     restricoesnumero[4] := 'A';
     restricoesnumero[5] := 'z';
     restricoesnumero[6] := 'Z';
     restricoesnumero[7] := 'w';
     restricoesnumero[8] := 'W';
     restricoesnumero[9] := 's';
     restricoesnumero[10] := 'S';
     restricoesnumero[11] := '!';
     restricoesnumero[12] := '"';
     restricoesnumero[13] := '#';
     restricoesnumero[14] := '$';
     restricoesnumero[15] := '%';
     restricoesnumero[16] := '&';
     restricoesnumero[17] := '/';
     restricoesnumero[18] := '(';
     restricoesnumero[19] := ')';
     restricoesnumero[20] := '=';
     restricoesnumero[21] := '?';
     restricoesnumero[22] := '»';
     restricoesnumero[23] := '«';
     restricoesnumero[24] := '\';
     restricoesnumero[25] := '|';
     restricoesnumero[26] := '+';
     restricoesnumero[27] := '*';
     restricoesnumero[28] := '-';
     restricoesnumero[29] := '_';
     restricoesnumero[30] := '.';
     restricoesnumero[31] := ':';
     restricoesnumero[32] := ',';
     restricoesnumero[33] := ';';
     restricoesnumero[34] := 'º';
     restricoesnumero[35] := 'ª';
     restricoesnumero[36] := '<';
     restricoesnumero[37] := '>';
     restricoesnumero[38] := '@';
     restricoesnumero[39] := '£';
     restricoesnumero[40] := '§';
     restricoesnumero[41] := '€';
     restricoesnumero[42] := '{';
     restricoesnumero[43] := '[';
     restricoesnumero[44] := ']';
     restricoesnumero[45] := '}';
     restricoesnumero[46] := 'x';
     restricoesnumero[47] := 'X';
     restricoesnumero[48] := 'e';
     restricoesnumero[49] := 'E';
     restricoesnumero[50] := 'd';
     restricoesnumero[51] := 'D';
     restricoesnumero[52] := 'c';
     restricoesnumero[53] := 'C';
     restricoesnumero[54] := 'r';
     restricoesnumero[55] := 'R';
     restricoesnumero[56] := 'f';
     restricoesnumero[57] := 'F';
     restricoesnumero[58] := 'v';
     restricoesnumero[59] := 'V';
     restricoesnumero[60] := 't';
     restricoesnumero[61] := 'T';
     restricoesnumero[62] := 'g';
     restricoesnumero[63] := 'G';
     restricoesnumero[64] := 'b';
     restricoesnumero[65] := 'B';
     restricoesnumero[66] := 'y';
     restricoesnumero[67] := 'Y';
     restricoesnumero[68] := 'h';
     restricoesnumero[69] := 'H';
     restricoesnumero[70] := 'n';
     restricoesnumero[71] := 'N';
     restricoesnumero[72] := 'u';
     restricoesnumero[73] := 'U';
     restricoesnumero[74] := 'j';
     restricoesnumero[75] := 'J';
     restricoesnumero[76] := 'm';
     restricoesnumero[77] := 'M';
     restricoesnumero[78] := 'i';
     restricoesnumero[79] := 'I';
     restricoesnumero[80] := 'k';
     restricoesnumero[81] := 'K';
     restricoesnumero[82] := 'o';
     restricoesnumero[83] := 'O';
     restricoesnumero[84] := 'l';
     restricoesnumero[85] := 'L';
     restricoesnumero[86] := 'p';
     restricoesnumero[87] := 'P';
     restricoesnumero[88] := 'ç';
     restricoesnumero[89] := 'Ç';
     //********************

     Repeat
       x := 0;
           For i:=1 to 89 do
             Begin
               For y:=1 to 3 do
                 Begin
                   If ((length(tam_idade) > 3) OR (tam_idade[y] = restricoesnumero[i]))
                   Then
                     Begin
                       gotoxy(25,24);
                       write('                                            ');
                       tam_idade := '                                            ';
                       gotoxy(25,54);
                       write('Inserir apenas números!');
                       gotoxy(25,24);
                       readln(tam_idade);
                       x := x + 1;
                     End;
                 End;
             End;
     Until (x = 0);
End;

//*********************************//
//********* VALIDAR O SEXO ********//
//*********************************//
Procedure validar_sexo (Var tam_sexo: string[10]);
Var x,i,y:    integer;
Begin
     //**** Restrições ****
     restricoes[1] := '1';
     restricoes[2] := '2';
     restricoes[3] := '3';
     restricoes[4] := '4';
     restricoes[5] := '5';
     restricoes[6] := '6';
     restricoes[7] := '7';
     restricoes[8] := '8';
     restricoes[9] := '9';
     restricoes[10] := '0';
     restricoes[11] := '!';
     restricoes[12] := '"';
     restricoes[13] := '#';
     restricoes[14] := '$';
     restricoes[15] := '%';
     restricoes[16] := '&';
     restricoes[17] := '/';
     restricoes[18] := '(';
     restricoes[19] := ')';
     restricoes[20] := '=';
     restricoes[21] := '?';
     restricoes[22] := '»';
     restricoes[23] := '«';
     restricoes[24] := '\';
     restricoes[25] := '|';
     restricoes[26] := '+';
     restricoes[27] := '*';
     restricoes[28] := '-';
     restricoes[29] := '_';
     restricoes[30] := '.';
     restricoes[31] := ':';
     restricoes[32] := ',';
     restricoes[33] := ';';
     restricoes[34] := 'º';
     restricoes[35] := 'ª';
     restricoes[36] := '<';
     restricoes[37] := '>';
     restricoes[38] := '@';
     restricoes[39] := '£';
     restricoes[40] := '§';
     restricoes[41] := '€';
     restricoes[42] := '{';
     restricoes[43] := '[';
     restricoes[44] := ']';
     restricoes[45] := '}';
     //********************

     Repeat
       x := 0;
           For i:=1 to 45 do
             Begin
               For y:=1 to 20 do
                 Begin
                   If ((length(tam_sexo) > 9) OR (tam_sexo[y] = restricoes[i]))
                   Then
                     Begin
                       gotoxy(25,30);
                       write('                                            ');
                       tam_sexo := '                                            ';
                       gotoxy(25,54);
                       write('Apenas Letras!');
                       gotoxy(25,30);
                       readln(tam_sexo);
                       x := x + 1;
                     End;
                 End;
             End;
     Until (x = 0);
End;

//*********************************//
//**** VALIDAR A NACIONALIDADE ****//
//*********************************//
Procedure validar_nacionalidade (Var tam_nacionalidade: string[15]);
Var x,i,y:    integer;
Begin
     //**** Restrições ****
     restricoes[1] := '1';
     restricoes[2] := '2';
     restricoes[3] := '3';
     restricoes[4] := '4';
     restricoes[5] := '5';
     restricoes[6] := '6';
     restricoes[7] := '7';
     restricoes[8] := '8';
     restricoes[9] := '9';
     restricoes[10] := '0';
     restricoes[11] := '!';
     restricoes[12] := '"';
     restricoes[13] := '#';
     restricoes[14] := '$';
     restricoes[15] := '%';
     restricoes[16] := '&';
     restricoes[17] := '/';
     restricoes[18] := '(';
     restricoes[19] := ')';
     restricoes[20] := '=';
     restricoes[21] := '?';
     restricoes[22] := '»';
     restricoes[23] := '«';
     restricoes[24] := '\';
     restricoes[25] := '|';
     restricoes[26] := '+';
     restricoes[27] := '*';
     restricoes[28] := '-';
     restricoes[29] := '_';
     restricoes[30] := '.';
     restricoes[31] := ':';
     restricoes[32] := ',';
     restricoes[33] := ';';
     restricoes[34] := 'º';
     restricoes[35] := 'ª';
     restricoes[36] := '<';
     restricoes[37] := '>';
     restricoes[38] := '@';
     restricoes[39] := '£';
     restricoes[40] := '§';
     restricoes[41] := '€';
     restricoes[42] := '{';
     restricoes[43] := '[';
     restricoes[44] := ']';
     restricoes[45] := '}';
     //********************

     Repeat
       x := 0;
           For i:=1 to 45 do
             Begin
               For y:=1 to 20 do
                 Begin
                   If ((length(tam_nacionalidade) > 15) OR (tam_nacionalidade[y] = restricoes[i]))
                   Then
                     Begin
                       gotoxy(25,36);
                       write('                                            ');
                       tam_nacionalidade := '                                            ';
                       gotoxy(25,54);
                       write('Apenas letras!');
                       gotoxy(25,36);
                       readln(tam_nacionalidade);
                       x := x + 1;
                     End;
                 End;
             End;
     Until (x = 0);
End;

//*********************************//
//*****PROCEDURE INSERIR DADOS*****//
//*********************************//
Procedure inserir_info;
VAR
z, num_x: integer;
Begin
     quadro_inserir; //Chama o quadro para inserir dados
     pos:=0;         //Começar variável "pos" a 0
     z:=1;           //Começar variável "z" a 1
     num_x:=0;       //Começar variável "num_x" a 0

     New(NovoReg);

     Repeat
      //**** Atribuir hora e data do sistema aos ponteiros ****
        GetTime(hora,min,seg,mil);
        GetDate(ano,mes,dia,semana);

        NovoReg^.tempo.horas := hora;
        NovoReg^.tempo.minutos := min;
        NovoReg^.tempo.segundos := seg;
        NovoReg^.tempo.milesimos := mil;
        NovoReg^.tempo.anos := ano;
        NovoReg^.tempo.meses := mes;
        NovoReg^.tempo.dias := dia;
        NovoReg^.tempo.semanas := semana;
      //*******************************************************

        gotoxy(6,12);
        write(pos+1,''+ char(#166) +' POSI'+ char(#128) + char(#199) +'O');

        gotoxy(25,12);
        write('Registo do atleta que chegou na ',pos+1,''+ char(#166) +' Posi'+ char(#135) + char(#198) +'o!');

        //Ler Nome
        gotoxy(25,18);
        readln(NovoReg^.nome);

        //***** Validar o nome *****
        tam_n := NovoReg^.nome;
        validar_nome(tam_n);

        gotoxy(25,54);
        write('                                                ');

        NovoReg^.nome := tam_n;
        //**************************

        //Ler Idade
        gotoxy(25,24);
        readln(NovoReg^.idade);

        //***** Validar a idade *****
        tam_i := NovoReg^.idade;
        validar_idade(tam_i);

        gotoxy(25,54);
        write('                                                ');

        NovoReg^.idade := tam_i;
        //***************************

        //Ler Sexo
        gotoxy(25,30);
        readln(NovoReg^.sexo);

        //***** Validar o sexo *****
        tam_s := NovoReg^.sexo;
        validar_sexo(tam_s);

        gotoxy(25,54);
        write('                                                ');

        NovoReg^.sexo := tam_s;
        //**************************

        //Ler Nacionalidade
        gotoxy(25,36);
        readln(NovoReg^.nacionalidade);

        //*** Validar a nacionalidade ***
        tam_na := NovoReg^.nacionalidade;
        validar_nacionalidade(tam_na);

        gotoxy(25,54);
        write('                                                ');

        NovoReg^.nacionalidade := tam_na;
        //*******************************

        //****************** Random do Dorsal ******************
        sairam := true;

        While sairam do
          Begin
            Randomize;
            ramdom_dorsal:=Random(8999)+1000;
            sairam := false;

            For z:=1 to num_x do
              Begin
                If ramdom_dorsal = ja_sairam[z]
                Then sairam := true;
              End;
          End;

        inc(num_x);
        ja_sairam[num_x]:=ramdom_dorsal;
        NovoReg^.dorsal:=ja_sairam[num_x];

        gotoxy(25,42);
        write(NovoReg^.dorsal);
        //******************************************************

        //**************** Hora do Sistema *********************
        Case NovoReg^.tempo.semanas of
           0: DiaSemana := 'Domingo';
           1: DiaSemana := 'Segunda-Feira';
           2: DiaSemana := 'Ter'+ char(#135) +'a-Feira';
           3: DiaSemana := 'Quarta-Feira';
           4: DiaSemana := 'Quinta-Feira';
           5: DiaSemana := 'Sexta-Feira';
           6: DiaSemana := 'S'+ char(#160) +'bado';
        End;

        gotoxy(25,48);
        write(NovoReg^.tempo.horas,':',NovoReg^.tempo.minutos,':',NovoReg^.tempo.segundos,':',NovoReg^.tempo.milesimos,' --> ',NovoReg^.tempo.dias,'/',NovoReg^.tempo.meses,'/',NovoReg^.tempo.anos,' --> ',DiaSemana);
        //*******************************************************

        //***** Perguntar se quer introduzir novo registo *******
        gotoxy(25, 54);
        write('Deseja inserir um novo registo? (S/N)');
        readln(resp);
        //*******************************************************

        If (Inicio = nil)
        Then
          Begin
            Inicio := NovoReg;
            NovoReg^.next := nil;
          End
        Else
          Begin
            ap := Inicio;

            While (ap^.next <> nil) do
              Begin
                ap := ap^.next;
              End;

            ap^.next := NovoReg;
            NovoReg^.next := nil;
          End;

        pos := pos + 1;
        Inc(NovoReg,1);
        limpar;

     Until ((resp = 'N') or (resp = 'n'));
End;


//*********************************//
//******PROCEDURE QUADRO MENU******//
//*********************************//
{METER AQUI QUADRO DO MENU}

//*********************************//
//*********PROCEDURE MENU**********//
//*********************************//
Procedure menu;
Begin
     Repeat
     clrscr;

     writeln('1 - Inserir Dados');
     writeln('2 - Mostrar Dados');
     writeln('3 - Eliminar Dados');

     write('Opção:');
     readln(op);

       Case op of
         1: inserir_info;  //Chama procedure inserir_dados
         2: begin          //Chama procedure mostrar
              mostrar_dados;
              readkey;
            end;
         3: eliminar_dados;
       End;

     Until (op = 8);
End;

//*********************************//
//*******PROGRAMA PRINCIPAL********//
//*********************************//

BEGIN
     //Chamar Procedure "MENU"
     menu;
END.

Share this post


Link to post
Share on other sites
thoga31

Antes de mais, onde está a ocorrer o erro? É na compilação? É na execução?


Knowledge is free!

Share this post


Link to post
Share on other sites
HelderT

É na execução ... eu não compreendo o que se está a passar, ele não apresenta erros nenhuns na compilação.

Mas depois na execução não compreendo o que se passa.

Desculpa pela falta de informação.

Share this post


Link to post
Share on other sites
nunopicado

Estou um bocado (muito) enferrujado com ponteiros, mas parece-me que o teu problema pode estar no procedimento inserir_info, mas propriamente, no seguinte código:

If (Inicio = nil)
        Then
          Begin
            Inicio := NovoReg;
            NovoReg^.next := nil;
          End
        Else
          Begin
            ap := Inicio;

            While (ap^.next <> nil) do
              Begin
                ap := ap^.next;
              End;

            ap^.next := NovoReg;
            NovoReg^.next := nil;
          End;

Estás a dizer que o ap^.next é igual a NovoReg, e só depois dizes que o NovoReg^.net é igual a nil.

Deste modo, o ap^.next não chega a ser nil.

o que vai acontecer é que, ao eliminar, ele faz um while ap^.next <> nil, e como esta condição nunca é verificada, e estamos a lidar directamente com a memória (ponteiros), vai haver um crash.

Experimenta mudar este trecho de código pelo seguinte:

If (Inicio = nil)
        Then
          Begin
            NovoReg^.next := nil;
            Inicio := NovoReg;
          End
        Else
          Begin
            ap := Inicio;

            While (ap^.next <> nil) do
              Begin
                ap := ap^.next;
              End;

            NovoReg^.next := nil;
            ap^.next := NovoReg;
      End;

Depois diz o resultado...


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
nunopicado

que compilador estás a usar? não consigo que os teus quadros apareçam correctamente, nem com o fpc nem com o delphi... Aliás, nem compila sequer, por causa dos "string[xx]" que tens em baixo...


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
nunopicado

Segundo o Delphi, ele crasha exactamente nesta linha: while ap <> NIL do (dentro do eliminar)


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
nunopicado

1. O bloco de eliminação

Não estava a compreender bem o que fizeste (mais uma vez, os meus ponteiros estão muito perros  ;)), pelo que resolvi refazer. Testa com este, que me parece funcionar:

if Inicio^.dorsal=delete
        then begin
                  Inicio:=nil;
                  ap:=nil;
             end
        else begin
                  aux:=Inicio;
                  NovoReg:=Inicio;
                  while (NovoReg<>nil) and (NovoReg^.Dorsal<>Delete) do
                        begin
                             aux:=NovoReg;
                             NovoReg:=NovoReg^.next;
                        end;
                  if NovoReg^.dorsal=delete then aux.next:=novoreg.next;
             end;

(dentro do procedimento de eliminar, depois de ler qual o dorsal a eliminar)

EDIT: Mete em stand-by! Estava aqui a testar, e apaga bem se for o primeiro, mas os outros ainda não! Um momento que já volto...

Agora, com isto, surge outro bug:

Ao mostrar os dados, se não houver nenhum dorsal, há outro crash. Isto deve-se à linha write(ap^.dorsal); no procedimento mostrar_dados; pois não há teste nenhum se ap é nil ou não.

Sugiro que, logo no inicio do mostrar_dados, coloques a linha:

if ap=nil then exit;

Assim, se não houver dados, ele termina logo ao inicio o procedimento, pelo que não chega a escrever nada e claro, nem dar erro...

Testa isso...


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
pwseo

Que confusão. O programa aqui nem compila (Free Pascal).

Tentei ver o código mas sinceramente nem sei o que é suposto ele fazer.

Tens demasiadas variáveis globais, tens definição de novos tipos de dados dentro dos cabeçalhos dos procedimentos, e tens uma forma peculiar de atribuir valores às strings restricoes e restricoesnumeros.

Não sei qual é a pressa que tens neste projecto, mas eu aconselhava-te a tentares separar o código de uma forma mais lógica... procedimentos que lidam com as tuas estruturas numa unit e procedimentos para mostrar dados no ecrã noutra unit. Mais ainda, seria boa ideia utilizares funções nalguns casos (e não procedimentos). Outra boa ideia seria começares com um interface de texto sem a unit crt. Quanto menos tralha o código tiver nas fases iniciais, mais simples é de corrigir.

Sei que tens aí uma lista ligada, mas da forma que fizeste o código (onde os procedimentos estão constantemente a ir buscar variáveis globais) torna-se muito difícil saber o que está mal, visto que eu estou a olhar para o procedimento eliminar mas não sei quantos mais procedimentos andam a mexer nas variáveis sem eu saber...

EDIT: Parece-me mais um caso do "Síndrome dos ficheiros com milhares de linhas de código".

Share this post


Link to post
Share on other sites
nunopicado

Sim, eu sei... Tenho de ver melhor aqui onde anda o gato, mas olha, já não vai ser hoje...

Amanhã é feriado, a ver se te consigo ver isso!

Ou então pode ser que o passarito ou o pedro-kun que estão mais batidos com ponteiros possam ver o que se passa...

EDIT: Pedro, parece-me que o problema é mesmo esse...

Quando acaba de inserir dados, a lista ligada está perfeita: Inseri 3 registos e a lista ficou com 3 niveis como é suposto.

Mas assim que entra no procedimento delete, a variavel inicio^.next já só tem lixo, até o proprio texto que ele mandou escrever no ecrã lá aparece...


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
passarito

Helder,

vou dar uma vista de olhos nesse teu programa mais logo quando tiver tempo disponivel.

Mas podes-me ajudar... diz- onde encontras erros

1. Insere pelo menos 5 registos.

2. Lista-os.

3. Apaga o 1 registo da lista

4. Lista-os.

5. Apaga o último registo da lista

6. Lista-os.

7. Apaga o registo do meio da lista

8. Lista-os.

Diz-me o que concluiste

Share this post


Link to post
Share on other sites
nunopicado

Passarito: O programa dá-lhe erro no eliminar, à segunda passagem do ciclo while.

Tanto com o 1º registo como no meio ou no fim, é igual!

Aquilo parece-me que anda lá algo a mexer-lhe nos valores, pois quando ele sai do "inserir" a lista está completa e correcta, mas quando entra no "eliminar", só o primeiro registo (o inicio) é que está correcto, o resto da lista é lixo sem sentido...


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
passarito

Isto corre em quê? (que pascal?)

Tentei compilar aquilo mas nem consigo inserir.....

Será que é desta que tenho de instalar o Free Pascal? :nono: :wallbash:

Share this post


Link to post
Share on other sites
thoga31

Isto corre em quê? (que pascal?)

Tentei compilar aquilo mas nem consigo inserir.....

Será que é desta que tenho de instalar o Free Pascal? :nono: :wallbash:

Mas ainda estás no TP? Ele foi muito bom... em anos idos. :D

O FP não é o best-of, contudo é muitíssimo bom e cheio de funcionalidades porreiras. Instala-o! ;)


Knowledge is free!

Share this post


Link to post
Share on other sites
nunopicado

Sim passarito, instala o FPC que é suficientemente bom para não sentires muito a falta do TP. ;)

Mas no caso deste programa, está em Dev-Pascal.

Das duas uma, ou instalas também o dev-pascal (sem debugger??  😲) ou tiras os limites das strings nos cabeçalhos dos procedimentos (ex. xpto:String[10] - tira o [10])


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
passarito

PRONTO... JÁ ESTÁ... 😡

Mas contrariado....

é que afinal aquilo tb é modo DOS!!!  😡

@Thoga, agora que estou a cortar a direirto, diz-me lá qual é o melhor..... sem me fazeres ir à procura do tópico X que o pessoal falou nisso..

O que eu queria era um em modo windows sem muitos "requintes".... ;)

Share this post


Link to post
Share on other sites
passarito
Das duas uma, ou instalas também o dev-pascal (sem debugger??  ) ou tiras os limites das strings nos cabeçalhos dos procedimentos (ex. xpto:String[10] - tira o [10])

Achas que foi só isso que tive de alterar?

este simbolo // não é nada para o BP.. tive de substituir aquilo tudo por { e } ou (* e *)  😡

Além do mais os quadros ou estão mal feitos ou não sei... vou ter de analisar akilo!!!!

Share this post


Link to post
Share on other sites
nunopicado

PRONTO... JÁ ESTÁ... 😡

Mas contrariado....

é que afinal aquilo tb é modo DOS!!!  😡

@Thoga, agora que estou a cortar a direirto, diz-me lá qual é o melhor..... sem me fazeres ir à procura do tópico X que o pessoal falou nisso..

O que eu queria era um em modo windows sem muitos "requintes".... ;)

Estou a fazer um IDE para o FPC em windows... :D Se esperares, pode ser que tenhas sorte! heheheh

O // já funciona em FPC, Dev-Pascal, Delphi, etc, etc... :) Tinha sido mais rapido! lol

Os quadros... Eu apaguei-os todos, fiquei só com o texto! Mas ainda não tive tempo de olhar mais para o programa, desde o primeiro dia que tentei!


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
thoga31

@passarito, olha a linguagem. Nem com símbolos posso aceitar. No máximo com estrelinhas e só a letra inicial. Mas procura sempre que possível palavras "mais-melhores" ;)

Não te vou encaminhar para outro tópico, mas peço a todos que não falemos aqui disso, se não é um off-topic dos diabos. New topic ou então procura um semelhante e muito recente :D


@HelderT. Também não consegui compilar. Que compilador (e IDE, já agora) utilizas?

O código também não é lá muito romântico, como diz o meu prof de Matemática :)


Knowledge is free!

Share this post


Link to post
Share on other sites
passarito

@nuno

Sentado? ou ainda dá pra aqui um bocadito? LOL

@Thoga

e moderaste-me o meu post... mostrava muito melhor o que eu queria dizer e não tinha vogal nenhuma!!!!LOL... mas também te percebo, isto para descambar basta uma ponta solta e um faz sempre um pouco pior que o anterior!!! OK TU é que está perdoado!!!! LOL

Share this post


Link to post
Share on other sites
nunopicado

@nuno

Sentado? ou ainda dá para aqui um bocadito? LOL

;) Pelo sim pelo não, senta-te... :D Tenho dois projetos em mãos, esse e um outro a sério (trabalho), e este ultimo tenho de o entregar o mais tardar daqui a 15 dias, para ir a aprovação e se aprovado, formação, pois a ideia seria se possível começar a usa-lo no dia 1 de janeiro. E para ajudar, ainda hoje me pediram que incluisse mais funcionalidades (Arghhhh  😲)

Dadas as condições, adivinha qual é que estou a dar prioridade... :)

Mas para não aumentar o offtopic, vai a este post e segue os passos: http://www.portugal-a-programar.pt/forums/topic/0-find-topic/?do=findComment&comment=424044


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

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.