Advertisement
S1L1R

Записи

Feb 6th, 2021 (edited)
976
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.91 KB | None | 0 0
  1. const c_n = 10;
  2.  
  3. type dat = record    
  4.     day     : 1..31;
  5.     month   : 1..12;
  6.     year    : 1..2021;
  7. end;
  8.  
  9. main_data = record    
  10.     name    : string;
  11.     date    : dat;
  12.     amount  : integer;
  13. end;
  14. m_vector = array [1..5] of real;
  15. vec = array [1..c_n] of main_data;
  16.  
  17. var list_size, a_count: integer;
  18.     d_count, _weight: m_vector;
  19.     v: vec;
  20.    
  21. function c_str(a, b, c: integer): string;
  22. begin
  23.   result := a.tostring + '.' + b.tostring + '.' + c.tostring;
  24. end;
  25.  
  26. procedure draw_default_table(size: integer; dat: vec; title: string);
  27. const msg: array of string = (
  28.         '+----------------------------------+-------------------+--------+', { 34, 19, 8}
  29.         '|               ФИО                | Дата производства | кол-во |',
  30.         '|'
  31.       );  
  32. begin
  33.   /// Title + Head
  34.   writeln(' '*(msg[0].length div 2 - title.length div 2) + title);
  35.   println($'{msg[0]}{#13}{msg[1]}{#13}{msg[0]}');
  36.  
  37.   /// Body
  38.   for var i := 0 to size-1 do
  39.   begin
  40.     writeln(msg[2], (i+1).ToString:3, msg[2], ' ' + dat[i+1].name + ' ' * (29 - dat[i+1].name.length), msg[2], c_str(dat[i+1].date.day, dat[i+1].date.month, dat[i+1].date.year):19, msg[2],dat[i+1].amount:8, msg[2]);
  41.     writeln(msg[0]);
  42.   end;
  43.  
  44.   writeln;
  45. end;
  46.  
  47. procedure draw_final_table(size: integer; v: vec; title: string; cnt, wht: m_vector);
  48. const msg: array of string = (
  49.         '+---------+--------------------+--------------+', { 9, 20, 14}
  50.         '| Квартал | Количество деталей | Удельный вес |',
  51.         '|',
  52.         '1', '2', '3', '4', 'Итог:'
  53.       );
  54. begin
  55.   /// Title + Head
  56.   writeln(' '*(msg[0].length div 2 - title.length div 2) + title);
  57.   println($'{msg[0]}{#13}{msg[1]}{#13}{msg[0]}');
  58.  
  59.   /// Body
  60.   for var i := 1 to 5 do
  61.   begin
  62.     writeln(msg[2], msg[i+2] + ' ' * (9 - msg[i+2].ToString.length), msg[2], cnt[i]:20, msg[2], wht[i]:14:6, msg[2]);
  63.     writeln(msg[0]);
  64.   end;
  65. end;
  66.  
  67. begin
  68.   list_size := readinteger('list_size:');
  69.    
  70.   if list_size >= 10 then
  71.   begin
  72.     v[1].name        := 'Абрамов Редис Абакумович';
  73.     v[1].date.day    := 5;
  74.     v[1].date.month  := 9;
  75.     v[1].date.year   := 1976;
  76.     v[1].amount      := 1233;
  77.    
  78.     v[2].name        := 'Ансимова Елизавета Андреевна';
  79.     v[2].date.day    := 21;
  80.     v[2].date.month  := 2;
  81.     v[2].date.year   := 2020;
  82.     v[2].amount      := 1172;
  83.    
  84.     v[3].name        := 'Беляев Матвей Артёмович';
  85.     v[3].date.day    := 11;
  86.     v[3].date.month  := 12;
  87.     v[3].date.year   := 2021;
  88.     v[3].amount      := 172;
  89.    
  90.     v[4].name        := 'Горбушин Виталий Валерьевич';
  91.     v[4].date.day    := 7;
  92.     v[4].date.month  := 8;
  93.     v[4].date.year   := 2001;
  94.     v[4].amount      := 546;
  95.    
  96.     v[5].name        := 'Гриненко Алексей Алексеевич';
  97.     v[5].date.day    := 19;
  98.     v[5].date.month  := 10;
  99.     v[5].date.year   := 2007;
  100.     v[5].amount      := 3;
  101.    
  102.     v[6].name        := 'Грунталь Марк Альбертович';
  103.     v[6].date.day    := 20;
  104.     v[6].date.month  := 11;
  105.     v[6].date.year   := 1994;
  106.     v[6].amount      := 466;
  107.    
  108.     v[7].name        := 'Гурский Георгий Валентинович';
  109.     v[7].date.day    := 5;
  110.     v[7].date.month  := 7;
  111.     v[7].date.year   := 2004;
  112.     v[7].amount      := 345;
  113.    
  114.     v[8].name        := 'Джемгиров Очир Санджиевич';
  115.     v[8].date.day    := 20;
  116.     v[8].date.month  := 1;
  117.     v[8].date.year   := 1953;
  118.     v[8].amount      := 769;
  119.  
  120.     v[9].name        := 'Дунаев Ярослав Александрович';
  121.     v[9].date.day    := 2;
  122.     v[9].date.month  := 6;
  123.     v[9].date.year   := 1912;
  124.     v[9].amount      := 2313;
  125.    
  126.     v[10].name        := 'Исхаков Даниил Рамильевич';
  127.     v[10].date.day    := 30;
  128.     v[10].date.month  := 3;
  129.     v[10].date.year   := 1890;
  130.     v[10].amount      := 456;
  131.    
  132.     /// Unserted table
  133.     draw_default_table(list_size, v, 'Unsorted Table');
  134.    
  135.     /// Sorting by month
  136.     for var i := list_size-1 downto 1 do
  137.       for var j := 1 to i do
  138.         if v[j].date.month > v[j+1].date.month then
  139.            (v[j], v[j+1]) := (v[j+1], v[j]);
  140.        
  141.     /// Sorted table
  142.     draw_default_table(list_size, v, 'Sorted Table');
  143.    
  144.     /// Sorting method
  145.     for var i := 1 to list_size do
  146.     begin
  147.       d_count[v[i].date.month mod 3 = 0 ? (v[i].date.month div 3) : (v[i].date.month div 3 + 1)] += v[i].amount;
  148.       a_count += v[i].amount;
  149.     end;    
  150.    
  151.     /// Final results
  152.     for var i := 1 to 4 do
  153.     begin
  154.       _weight[i] := d_count[i] / a_count;
  155.       _weight[5] += _weight[i];
  156.     end;
  157.     d_count[5] := a_count;
  158.    
  159.     /// Final table
  160.     draw_final_table(list_size, v, 'Final Results', d_count, _weight);
  161.   end;
  162. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement