Pascal/Turbo Pascal - listas , ayuda!!

 
Vista:

listas , ayuda!!

Publicado por Martin (6 intervenciones) el 04/07/2012 04:57:48
necesito saber alguien me puede resolver los siguientes puntos , el que me pueda ayudar!! . gracias.

1 - Listas simplemente vinculadas
a) Implementar un algoritmo en Pascal que genere una lista dinámica y permita ingresar numeros
b) Implementar un algoritmo en Pascal que recorra la lista del inciso (a) y genere una nueva
lita ordenada de mayor a menor.
c) Implementar un algoritmo en Pascal que dada la lista dinámica obtenida en el inciso (a),
elimine los números pares.
d) Implementar un algoritmo en Pascal que concatene las listas obtenidas en los incisos (a) y
(b).
e) Implementar un algoritmo en Pascal que elimine los elementos, los cuales, sumandos a un
valor ingresado por teclado se encuentran en la lista obtenida en el inciso (d).
f) Implementar en Pascal el método de ordenamiento por selección con listas.
g) Implementar en Pascal el método de ordenamiento por inserción con listas.
h) Implementar en Pascal el método de ordenamiento de burbujeo con listas.
2 - Listas doblemente vinculadas
a) Implementar un algoritmo en Pascal que cree una lista doblemente enlazada con el
nombre de los alumnos de su curso.
b) Implementar un algoritmo en Pascal que dada la lista del inciso (a) elimine, todos los
alumnos cuyos nombres comiencen con una vocal.
c) Implementar un algoritmo en Pascal que dada la lista del inciso (a), cree una nueva lista
doble ordenada en forma alfabética.
3 - Listas Circulares
a) Implementar en Pascal un algoritmo que cree una lista circular con la secuencia de
números enteros {20, 6, 7, 11, 2, 30, 1, 49, 9, 16}, insertándolos en forma ordenada .
b) Implementar en Pascal un algoritmo que dada la lista del inciso (a) elimine, todos los
números impares.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

listas , ayuda!!

Publicado por ramon (2158 intervenciones) el 04/07/2012 21:41:57
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
{A ver esto es largo y sera a trozos dime si te sirve}
 
program listas;
 uses
    crt;
  const
     numri : array[1..10] of integer = (
     20, 6, 7, 11, 2, 30, 1, 49, 9, 16);
 
  type
     tlista = ^lista;
     lista = record
             numero : integer;
             sig : tlista;
           end;
 
  var
    num, inicio, sigient, actual : tlista;
    ini1, sigi1, actu1 : tlista;
    nuev1, nuev2, nuev3 : tlista;
    entint : integer;
    pul : char;
 
 
  function entradas : integer;
  begin
      clrscr;
      entint := 0;
      write('Entre numero Entero : ');
      readln(entint);
      entradas := entint;
  end;
 
  procedure entradalista;
  begin
      if inicio = nil then
      begin
         new(actual);
         new(actu1);
         actual^.numero := entradas;
         actu1^.numero := actual^.numero;
         inicio := actual;
         ini1 := actu1;
         actual^.sig := nil;
         actu1^.sig := nil;
      end
    else
      begin
         sigient := actual;
         sigi1 := actu1;
         new(actual);
         new(actu1);
         actual^.numero := entradas;
         actu1^.numero := actual^.numero;
         sigient^.sig := actual;
         sigi1^.sig := actu1;
         actual^.sig := nil;
         actu1^.sig := nil;
      end;
  end;
 
  procedure ordenamayoemenor(lta : tlista);
  var
    temp : integer;
    lista1, lista2 : tlista;
  begin
      if lta <> nil then
      begin
      lista1 := lta;
      lista2 := lista1^.sig;
     while lista1 <> nil do
     begin
         while lista2 <> nil do
         begin
            if lista1^.numero < lista2^.numero then
            begin
               temp := lista2^.numero;
               lista2^.numero := lista1^.numero;
               lista1^.numero := temp;
            end;
            lista2 := lista2^.sig;
         end;
         lista1 := lista1^.sig;
         lista2 := lista1^.sig;
      end;
    end;
      while lta <> nil do
      begin
         write(' ',lta^.numero);
         lta := lta^.sig;
      end;
  end;
 
  procedure elimonapares(lis : tlista);
  var
    borra, quita, sige : tlista;
  begin
      sige := lis;
      nuev1 := nil;
      while sige <> nil do
      begin
      if nuev1 = nil then
      begin
          new(nuev3);
          nuev3^.numero := sige^.numero;
          nuev1 := nuev3;
          nuev3^.sig := nil;
      end
    else
       begin
          nuev2 := nuev3;
          new(nuev3);
          nuev3^.numero := sige^.numero;
          nuev2^.sig := nuev3;
          nuev3^.sig := nil;
       end;
         sige := sige^.sig;
     end;
      sige := nuev1;
      while sige <> nil do
      begin
          if sige^.numero mod 2 <> 0 then
          begin
            quita := sige;
            sige := sige^.sig;
          end
         else
           begin
              borra := sige;
              sige := sige^.sig;
              dispose(borra);
              quita^.sig := sige;
           end;
        end;
        while nuev1 <> nil do
        begin
          write(' ',nuev1^.numero);
          nuev1 := nuev1^.sig;
      end;
  end;
 
  procedure concadena1_2;
  var
    stri1, stri2 : string[4];
    total : string[8];
    dat, error, ii : integer;
    lis1, lis2 : tlista;
   begin
       lis1 := inicio;
       lis2 := ini1;
       ii := 1;
       while lis1 <> nil do
       begin
           str(lis1^.numero,stri1);
           str(lis2^.numero,stri2);
           total := stri2 + stri1;
           val(total,dat,error);
           write(' ',dat);
           lis1 := lis1^.sig;
           lis2 := lis2^.sig;
       end;
   end;
 
 
 
  begin
      inicio := nil;
      ini1 := nil;
      repeat
      entradalista;
      clrscr;
      writeln('Entra Mas Numeros [S/N]');
      pul := readkey;
      until pul in['n','N'];
      clrscr;
      num := inicio;
      while num <> nil do
      begin
         write(' ',num^.numero);
         num := num^.sig;
      end;
      writeln;
      ordenamayoemenor(inicio);
      writeln;
      elimonapares(inicio);
      writeln;
      concadena1_2;
      readln;
  end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

listas , ayuda!!

Publicado por Martin (6 intervenciones) el 04/07/2012 23:06:53
cargo los numeros y se me sale , me tira un error, porque sera?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

listas , ayuda!!

Publicado por ramon (2158 intervenciones) el 05/07/2012 17:47:29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
{Este es el mismo con complemento de las ordenaciones de selección, burbuja, inserción
esta ultima la tienes implementada en la ordenación de mayor a menor.
 Así mismo tienes la liberación de la memoria ocupada por los punteros, funciona
sin problema en pascal 7 pero dime ei es esto o no .}
 
program listas;
 uses
    crt;
  const
     numri : array[1..10] of integer = (
     20, 6, 7, 11, 2, 30, 1, 49, 9, 16);
 
  type
     tlista = ^lista;
     lista = record
             numero : integer;
             sig : tlista;
           end;
 
  var
    num, inicio, sigient, actual : tlista;
    ini1, sigi1, actu1 : tlista;
    nuev1, nuev2, nuev3 : tlista;
    entint : integer;
    pul : char;
    inic : longint;
 
  function entradas : integer;
  begin
      clrscr;
      entint := 0;
      write('Entre numero Entero : ');
      readln(entint);
      entradas := entint;
  end;
 
  procedure entradalista;
  begin
      if inicio = nil then
      begin
         new(actual);
         new(actu1);
         actual^.numero := entradas;
         actu1^.numero := actual^.numero;
         inicio := actual;
         ini1 := actu1;
         actual^.sig := nil;
         actu1^.sig := nil;
      end
    else
      begin
         sigient := actual;
         sigi1 := actu1;
         new(actual);
         new(actu1);
         actual^.numero := entradas;
         actu1^.numero := actual^.numero;
         sigient^.sig := actual;
         sigi1^.sig := actu1;
         actual^.sig := nil;
         actu1^.sig := nil;
      end;
  end;
 
  procedure ordenamayoemenor(ini : tlista);
  var
    temp : integer;
    lta, lista1, lista2 : tlista;
  begin
      lta := ini;
      if lta <> nil then
      begin
      lista1 := lta;
      lista2 := lista1^.sig;
     while lista1 <> nil do
     begin
         while lista2 <> nil do
         begin
            if lista1^.numero < lista2^.numero then
            begin
               temp := lista2^.numero;
               lista2^.numero := lista1^.numero;
               lista1^.numero := temp;
            end;
            lista2 := lista2^.sig;
         end;
         lista1 := lista1^.sig;
         lista2 := lista1^.sig;
      end;
    end;
      while lta <> nil do
      begin
         write(' ',lta^.numero);
         lta := lta^.sig;
      end;
  end;
 
  procedure elimonapares(lis : tlista);
  var
    pres, borra, quita, sige : tlista;
  begin
      sige := lis;
      nuev1 := nil;
      while sige <> nil do
      begin
      if nuev1 = nil then
      begin
          new(nuev3);
          nuev3^.numero := sige^.numero;
          nuev1 := nuev3;
          nuev3^.sig := nil;
      end
    else
       begin
          nuev2 := nuev3;
          new(nuev3);
          nuev3^.numero := sige^.numero;
          nuev2^.sig := nuev3;
          nuev3^.sig := nil;
       end;
         sige := sige^.sig;
     end;
      sige := nuev1;
      while sige <> nil do
      begin
          if sige^.numero mod 2 <> 0 then
          begin
            quita := sige;
            sige := sige^.sig;
          end
         else
           begin
              borra := sige;
              sige := sige^.sig;
              dispose(borra);
              quita^.sig := sige;
           end;
        end;
        pres := lis;
        while pres <> nil do
        begin
          write(' ',pres^.numero);
          pres := pres^.sig;
      end;
  end;
 
  procedure concadena1_2;
  var
    stri1, stri2 : string[4];
    total : string[8];
    dat, error, ii : integer;
    lis1, lis2 : tlista;
   begin
       lis1 := inicio;
       lis2 := ini1;
       ii := 1;
       while lis1 <> nil do
       begin
           str(lis1^.numero,stri1);
           str(lis2^.numero,stri2);
           total := stri1 + stri2;
           val(total,dat,error);
           write(' ',dat);
           lis1 := lis1^.sig;
           lis2 := lis2^.sig;
       end;
   end;
 
  procedure intercambio(var z, c : integer);
  var
    temp : integer;
    begin
       temp := z;
       z := c;
       c := temp;
    end;
 
  procedure ordenacionseleccion(dd : tlista);
  var
    paso, l1, l2, l3 : tlista;
    anu : array[1..200] of integer;
    zz, cc, vv, dq : integer;
    cont : integer;
   begin
       l2 := nil;
       paso := dd;
       cont := 1;
       while paso <> nil do
       begin
          anu[cont] := paso^.numero;
          paso := paso^.sig;
          cont := cont + 1;
       end;
        zz := (cont - 1) div 2;
        while zz > 0 do
        begin
           for cc := (zz + 1) to cont - 1 do
           begin
               vv := cc - zz;
               while vv > 0 do
               begin
                   dq := vv + zz;
                   if anu[vv] <= anu[dq] then
                   vv := 0
                 else
                    begin
                       intercambio(anu[vv],anu[dq]);
                       vv := vv - zz
                    end;
               end;
           end;
             zz := zz div 2;
        end;
        for dq := 1 to cont - 1 do
        begin
           if l2 = nil then
           begin
              new(l1);
              l1^.numero := anu[dq];
              l2 := l1;
              l1^.sig := nil;
           end
        else
           begin
              l3 := l1;
              new(l1);
              l1^.numero := anu[dq];
              l3^.sig := l1;
              l1^.sig := nil;
           end;
        end;
        while l2 <> nil do
        begin
           write(' ',l2^.numero);
           l2 := l2^.sig;
        end;
        dispose(l1);
   end;
 
   procedure ordenacionburbuja(dd : tlista);
   var
     aa : array[1..200] of integer;
     nn, jj, ii : integer;
     pas, k1, k2, k3 : tlista;
     cont : integer;
    begin
       k2 := nil;
       pas := dd;
       cont := 1;
       while pas <> nil do
       begin
          aa[cont] := pas^.numero;
          pas := pas^.sig;
          cont := cont + 1;
       end;
         for nn := 1 to cont - 1 do
            for jj := (cont - 1) downto nn do
            if aa[jj - 1] > aa[jj] then
            intercambio(aa[jj],aa[jj - 1]);
            k2 := nil;
            for ii := 1 to cont - 1 do
            begin
               if k2 = nil then
               begin
                   new(k3);
                   k3^.numero := aa[ii];
                   k2 := k3;
                   k3^.sig := nil;
               end
            else
               begin
                  k1 := k3;
                  new(k3);
                  k3^.numero := aa[ii];
                  k1^.sig := k3;
                  k3^.sig := nil;
               end;
            end;
           while k2 <> nil do
           begin
              write(' ',k2^.numero);
              k2 := k2^.sig;
           end;
          dispose(k3);
      end;
 
 
 
  begin
      inic := memavail;
      inicio := nil;
      ini1 := nil;
      repeat
      entradalista;
      clrscr;
      writeln('Entra Mas Numeros [S/N]');
      pul := readkey;
      until pul in['n','N'];
      clrscr;
      writeln('Memoria Al Inicio = ',inic / 1024:8:2,'Kb');
      writeln;
      num := inicio;
      while num <> nil do
      begin
         write(' ',num^.numero);
         num := num^.sig;
      end;
      writeln;
      ordenamayoemenor(ini1);
      writeln;
      elimonapares(inicio);
      writeln;
      concadena1_2;
      writeln;
      ordenacionseleccion(inicio);
      writeln;
      ordenacionburbuja(inicio);
      writeln;
      writeln;
      writeln('Memoria Ocupada = ',(inic - memavail) / 1024:8:2,'Kb');
      dispose(actual);
      dispose(actu1);
      dispose(nuev3);
      writeln;
      writeln('Memoria Al Final = ',memavail / 1024:8:2,'Kb');
      readln;
  end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

listas , ayuda!!

Publicado por Martin (6 intervenciones) el 05/07/2012 22:17:27
hola , sos un genio !! , pero yo no vi liberacion de memoria como funciona?? yo uso el fts sera por es que no me anda??? , porque le cargo los numeros y si me sale me dice "Nr:216 General protection fault "
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

listas , ayuda!!

Publicado por ramon (2158 intervenciones) el 06/07/2012 17:24:35
Se protege de los punteros tienes que usar pascal 7.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar