Ссылки, списки, динамические структуры данных - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

вот основная программа:
как теперь вывести все эти машины, но чтобы объём цилиндра был от большего к меньшему?

Решение задачи: «Ссылки, списки, динамические структуры данных»

textual
Листинг программы
program laba7_5;
 
type
  mashina = record 
    md: string; 
    tx: record 
      moshn: string; 
      km: 1..200; 
      massa: 1..200; 
      vkyz: string; 
      cil: 1..200; 
    end; 
    cena: real; 
  end;
 
const
  max_sz = 10;
 
var
  // r: array[1..max_sz] of mashina;
  ix: array[1..max_sz] of integer;
  r: array[1..max_sz] of mashina := (
    (md: 'model1'; tx: (moshn: ''; km: 1; massa: 1; vkyz: ''; cil: 5); cena: 1),
    (md: 'model2'; tx: (moshn: ''; km: 1; massa: 1; vkyz: ''; cil: 2); cena: 1),
    (md: 'model3'; tx: (moshn: ''; km: 1; massa: 1; vkyz: ''; cil: 7); cena: 1),
    (md: 'model4'; tx: (moshn: ''; km: 1; massa: 1; vkyz: ''; cil: 4); cena: 1),
    (md: 'model5'; tx: (moshn: ''; km: 1; massa: 1; vkyz: ''; cil: 2); cena: 1),
    (md: ''; tx: (moshn: ''; km: 1; massa: 1; vkyz: ''; cil: 1); cena: 1),
    (md: ''; tx: (moshn: ''; km: 1; massa: 1; vkyz: ''; cil: 1); cena: 1),
    (md: ''; tx: (moshn: ''; km: 1; massa: 1; vkyz: ''; cil: 1); cena: 1),
    (md: ''; tx: (moshn: ''; km: 1; massa: 1; vkyz: ''; cil: 1); cena: 1),
    (md: ''; tx: (moshn: ''; km: 1; massa: 1; vkyz: ''; cil: 1); cena: 1)
  );
  
  r1: mashina; 
  i, j, t, n, max: integer;
 
begin
  n := 5; // будем считать,что ввели данные на 5 машин
  (*
  write('Введите кол-во машин: '); 
  readln(n); 
  writeln(); 
  for i := 1 to n do 
  begin
    writeln(); 
    write('модель: '); 
    readln(r[i].md); 
  
    write('мощность: '); 
    readln(r[i].tx.moshn); 
  
    write('скорость: '); 
    readln(r[i].tx.km); 
  
    write('масса: '); 
    readln(r[i].tx.massa); 
  
    write('вид кузова: '); 
    readln(r[i].tx.vkyz); 
  
    write('объем цилиндра: '); 
    readln(r[i].tx.cil); 
  
    write('цена: '); 
    readln(r[i].cena); 
  end; 
  *)
  
  
  for i := 1 to n do ix[i] := i; // индексный массив, чтобы не перетасовывать все время сами структуры
  // сортируем индексный массив так, чтобы при проходе по массиву данных по этим индексам данные были
  // упорядочены по значению определенного поля
  for i := 1 to n do
    for j := n downto i + 1 do
      if r[ix[j - 1]].tx.cil < r[ix[j]].tx.cil then 
      begin
        t := ix[j];ix[j] := ix[j - 1];ix[j - 1] := t; // Swap(ix[j - 1], ix[j]);
      end;
  
  writeln('---------------------------------------------------------------------------------------'); 
  writeln('|           |                   ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ                     |      |'); 
  writeln('| модель    |------------------------------------------------------------------| цена |'); 
  writeln('|           | мощность | скорость | масса | вид кузова | раб. цилиндра         | (руб)|'); 
  writeln('---------------------------------------------------------------------------------------'); 
  
  for i := 1 to n do 
    with r[ix[i]] do // и теперь работаем не напрямую с r[i], а через "прослойку" 
    begin
      write('|', md:11, '|'); 
      write(tx.moshn:10, '|'); 
      write(tx.km:10, '|'); 
      write(tx.massa:7, '|'); 
      write(tx.vkyz:12, '|'); 
      write(tx.cil:23, '|'); 
      writeln(cena:6, '|');
      writeln('---------------------------------------------------------------------------------------');
    end;
end.

Объяснение кода листинга программы

  1. Объявлен тип данных mashina, который представляет собой запись (record) с полями: md (модель), tx (технические характеристики), cena (цена).
  2. Введен массив r типа mashina размером 5, инициализированный некоторыми значениями.
  3. Введен индексный массив ix размером 5, инициализированный значениями от 1 до 5.
  4. Введен переменный массив r1 типа mashina.
  5. Введены переменные n, i, j, t, max типа integer.
  6. Введен цикл, который будет выполняться n раз, где n - количество введенных пользователем машин.
  7. В каждой итерации цикла пользователю предлагается ввести данные для каждой машины.
  8. После ввода данных, происходит сортировка индексного массива ix по убыванию значения поля cil каждой машины.
  9. Выводится отсортированный список машин с их техническими характеристиками и ценой.
  10. Каждая машина выводится в отдельной строке в формате: модель | мощность | скорость | масса | вид кузова | объем цилиндра | цена |.

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы