Pascal/Turbo Pascal - Obtener mediana de un array no ordenado (no se permite ordenar)

 
Vista:

Obtener mediana de un array no ordenado (no se permite ordenar)

Publicado por Yisus (1 intervención) el 05/06/2015 00:29:38
Hola,

después de darle al coco, no he encontrado solución a mi problema.

Me gustaría saber cómo se puede conocer la mediana de un array que no esté ordenado, y a su vez no se permita que se ordene para conseguirlo (me recomendaron utilizar el algoritmo Quicksort ya que aparentemente te guía para alcanzar el objetivo, el cual no he conseguido)

Un saludo y gracias de antemano.
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

Obtener mediana de un array no ordenado (no se permite ordenar)

Publicado por ramon (2158 intervenciones) el 07/06/2015 00:01:09
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
{Mira esto fíjate bien }
 
program mediarray;
 uses
    crt;
  type
     datos = array[1..40] of integer;
 
   var
     dato : datos;
     min, max, med : integer;
     n : integer;
 
 
     procedure cargavalor;
     var
       h : integer;
     begin
         randomize;
         for h := 1 to 40 do
         begin
           n := random(80) + 1;
           dato[h] := n;
         end;
     end;
 
     procedure media;
     var
       t : integer;
       si : boolean;
       begin
          min := 4;
          max := 0;
          si := false;
          for t := 1 to 40 do
          begin
          if min > dato[t] then
          min := dato[t];
          if max < dato[t] then
          max := dato[t];
          end;
          med :=  max div 2;
          for t := 1 to 40 do
          begin
             if med = dato[t] then
             begin
                med := dato[t];
                si := true;
                break;
             end;
          end;
          if si = false then
          begin
              for t := 1 to 40 do
              begin
                 if ((med - 1) = dato[t]) or ((med - 2) = dato[t])  or
                 ((med - 3) = dato[t]) then
                 begin
                   med := dato[t];
                   break;
                 end;
              end;
          end;
          writeln;
          writeln('    La Media Es = ',med);
       end;
 
    procedure presenta;
    var
       r : integer;
     begin
        for r := 1 to 40 do
        write(' ',dato[r]);
     end;
 
     procedure presentaordenado;
     var
        t, v, m : integer;
        begin
          for m := 1 to 39 do
            for v := 40 downto m + 1 do
            if dato[m] > dato[v] then
            begin
               t := dato[m];
               dato[m] := dato[v];
               dato[v] := t;
            end;
            writeln;
            for t := 1 to 40 do
             write(' ',dato[t]);
        end;
 
 
    begin
       clrscr;
       cargavalor;
       media;
       writeln;
       presenta;
       writeln;
       presentaordenado;
       readkey;
    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