Guest User

Egor's lab2

a guest
Jan 12th, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.75 KB | None | 0 0
  1. type song=record
  2.   name: string;
  3.   minutes: integer;
  4.   seconds: integer;
  5. end;
  6.  
  7. type cd=record
  8.   author:string;
  9.   rating: integer;
  10.   album:string;
  11.   year: integer;
  12.   sales_copies: integer;
  13.   songs_count:integer;
  14.   songs: array [0..20] of song;
  15. end;
  16.  
  17. type cd_arr = array [0..30] of cd;
  18.  
  19. function top_sort(album_count: integer; cds: cd_arr ): cd_arr;
  20. var
  21.   i,k: integer;
  22.   cd_buf: cd;
  23.  
  24. begin
  25.   for i:=1 to album_count-1 do begin
  26.     for k:=1 to album_count-1 do begin
  27.       if cds[k+1].rating>cds[k].rating then begin
  28.          cd_buf:=cds[k];
  29.          cds[k]:=cds[k+1];
  30.          cds[k+1]:=cd_buf;
  31.          //writeln('buf-swap');
  32.       end;
  33.     end;
  34.   end;
  35.  
  36.   top_sort:=cds;
  37. end;
  38.  
  39. var
  40.   input_file_flag,output_file_flag:boolean;
  41.   source:text;
  42.   str,input_file_name,output_file_name: string;
  43.   cds, output_cds: cd_arr;
  44.   cd_num,i,k,buf : integer;
  45.  
  46. begin
  47.   Writeln('input from file or keyboard ?');
  48.   readln(str);
  49.  
  50.   if str='file' then begin
  51.     input_file_flag:=true;
  52.     write('please, get input_file name: ');
  53.     readln(input_file_name);
  54.   end
  55.  
  56.   else
  57.     input_file_flag:=false;
  58.  
  59.  
  60.   Writeln('output to file or screen ?');
  61.   readln(str);
  62.  
  63.   if str='file' then begin
  64.     output_file_flag:=true;
  65.     write('please, get output_file name: ');
  66.     readln(output_file_name);
  67.   end
  68.  
  69.   else
  70.     output_file_flag:=false;
  71.  
  72.  
  73.   if input_file_flag=true then begin//ут можно расхерачить директорию, но мне лень
  74.     assign(source,input_file_name);
  75.     reset(source);
  76.     //file_flag:=true;  
  77.     readln(source,cd_num);
  78.    
  79.     for i:=1 to cd_num do begin
  80.       readln(source,cds[i].album);
  81.       readln(source,cds[i].author);
  82.       readln(source,cds[i].rating,cds[i].sales_copies,cds[i].year);
  83.       readln(source,cds[i].songs_count);
  84.      
  85.       for k:=1 to cds[i].songs_count do begin
  86.          readln(source,cds[i].songs[k].name);
  87.          readln(source,cds[i].songs[k].minutes,cds[i].songs[k].seconds);
  88.       end;
  89.     end;
  90.    
  91.     close(source);
  92.   end
  93.  
  94.   else begin
  95.     writeln('input cd numbers (max=30)');
  96.     readln(cd_num);
  97.  
  98.     for i:=1 to cd_num do begin
  99.       write('album : ');
  100.       readln(cds[i].album);
  101.       write('author : ');
  102.       readln(cds[i].author);
  103.  
  104.       write('rating sales_copies year : ');
  105.       readln(cds[i].rating,cds[i].sales_copies,cds[i].year);
  106.    
  107.       writeln('input songs number (max=20)');
  108.       readln(cds[i].songs_count);
  109.    
  110.       writeln('input song to format "name/n minutes seconds"');
  111.       for k:=1 to cds[i].songs_count do begin    
  112.          readln(cds[i].songs[k].name);
  113.          readln(cds[i].songs[k].minutes,cds[i].songs[k].seconds);
  114.       end;
  115.     end;
  116.   end;
  117.  
  118.   //сразу отсортируем по рейтингу
  119.  
  120.   cds:=top_sort(cd_num,cds);
  121.   writeln('Please push command on format "2015" for top3 of 2015. For exit push "0"');
  122.   buf:=2000;
  123.  
  124.   if output_file_flag=true then begin
  125.    
  126.     assign(source,output_file_name);
  127.     rewrite(source);  
  128.    
  129.     while buf<> 0 do begin
  130.       readln(buf);
  131.       k:=0;//counter of top
  132.      
  133.       for i:=1 to cd_num do begin
  134.         if cds[i].year=buf then begin
  135.            output_cds[k+1]:=cds[i];
  136.            k:=k+1;
  137.         end;
  138.         if k=5 then break;
  139.       end;
  140.      
  141.       writeln(source,k);
  142.      
  143.       for i:=1 to k do begin
  144.            writeln(source,output_cds[i].album);
  145.            writeln(source,output_cds[i].author);
  146.            writeln(source,output_cds[i].rating,' ',output_cds[i].sales_copies,' ',output_cds[i].year);
  147.            writeln(source,output_cds[i].songs_count);
  148.            
  149.            for k:=1 to cds[i].songs_count do begin
  150.               writeln(source,output_cds[i].songs[k].name);
  151.               writeln(source,output_cds[i].songs[k].minutes,' ',output_cds[i].songs[k].seconds);
  152.            end;
  153.       end;
  154.      
  155.     end;
  156.    
  157.     close(source);
  158.   end
  159.  
  160.   else begin  
  161.     while buf <> 0 do begin
  162.      readln(buf);
  163.       k:=0;//counter of top
  164.      
  165.       for i:=1 to cd_num do begin
  166.         if cds[i].year=buf then begin
  167.            output_cds[k+1]:=cds[i];
  168.            k:=k+1;
  169.         end;
  170.        
  171.         if k=5 then break;//первые пять или меньше альбомов за все время
  172.       end;
  173.  
  174.       writeln(k);
  175.      
  176.       for i:=1 to k do begin
  177.            writeln(output_cds[i].album,#10, output_cds[i].author,#10,output_cds[i].rating,' ',output_cds[i].sales_copies,' ',output_cds[i].year,#10,output_cds[i].songs_count);
  178.            
  179.            for k:=1 to cds[i].songs_count do begin
  180.               writeln(output_cds[i].songs[k].name,#10,output_cds[i].songs[k].minutes,' ',output_cds[i].songs[k].seconds);
  181.            end;
  182.       end;
  183.     end;
  184.  
  185.   end;
  186. end.
Advertisement
Add Comment
Please, Sign In to add comment