Вывести на печать таблицу, в которой будут записаны 10 автомобилей и их характеристики - Pascal

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

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

Есть задание, по которому нужно вывести на печать таблицу, в которой будут записаны 10 автомобилей и их характеристики. Нужно отсортировать эту таблицу так, чтобы автомобиле в ней печатались в порядке убывания мощности. Таблицу я ввести могу, но никак не выходит её отсортировать... Текст программы для ввода таблицы:
Program Machines;
uses crt;
const nmax=10;
type machine=record
          Name:string[15];
          Power:50..1000;
          MaxSpeed:string[10];
          Weight:string[5];
          ExteriorView:string[10];
          CilynderVolume:string[11];
          Price:string[6];
          end;
var a:array[1..nmax] of machine;
    n,i:byte;
begin
clrscr;
repeat
write('Максимальное количество автомобилей до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Введите данные об автомобилях');
for i:=1 to n do
 begin
  writeln('Автомобиль ',i);
  with a[i] do
   begin
    write(' Название атомобиля: ');readln(Name);
    repeat
    write(' Мощность [50..1000]: ');readln(Power);
    until Power in [50..1000];
    write(' Наибольшая скорость: ');readln(MaxSpeed);
    write(' Масса: ');readln(Weight);
    write(' Вид кузова: ');readln(ExteriorView);
    write(' Рабочий объём цилиндра: ');readln(CilynderVolume);
    write(' Цена: ');readln(Price);
   end;
 end;
clrscr;
writeln('Список автомобилей:':40);
writeln;
writeln('-------------------------------------------------------------------------------------');
writeln('|  Назв.модели  |Мощн.|Наиб.скор.|Масса| Вид куз. |Раб.об.цил.| Цена |');
writeln('-------------------------------------------------------------------------------------');
for i:=1 to n do
 with a[i] do
  begin
   gotoXY(1,whereY);write('| ',Name);
   gotoXY(17,whereY);write('| ',Power:4);
   gotoXY(23,whereY);write('| ',MaxSpeed);
   gotoXY(34,whereY);write('|',Weight);
   gotoXY(40,whereY);write('|',ExteriorView);
   gotoXY(51,whereY);write('|',CilynderVolume);
   gotoXY(63,whereY);write('|',Price);
   gotoXY(70,whereY);writeln('|');
   writeln('----------------------------------------------------------------------------------');
  end;
readln
end.

Решение задачи: «Вывести на печать таблицу, в которой будут записаны 10 автомобилей и их характеристики»

textual
Листинг программы
var
  b: array [1..nmax] of Integer;
  t: Integer;
...
  for i:=1 to n do b[i]:=i;
  p:=n-1;
  repeat
    j:=0;
    for i:=1 to p do
      if a[b[i]].power<a[b[i+1]].power then begin
        t:=b[i]; b[i]:=b[i+1]; b[i+1]:=t; j:=i;
      end;
    p:=j;
  until p=0;
  for i:=1 to n do with a[b[i]] do WriteLn({...});

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

В данном коде используется массив b, который содержит числа от 1 до n. Переменная t хранит номер текущего элемента массива b. С помощью цикла for i:=1 to n do b[i]:=i; происходит заполнение массива b числами от 1 до n. Далее, переменная p:=n-1; используется для организации цикла repeat, внутри которого происходит поиск наименьшего элемента в массиве b. Внутри цикла for i:=1 to p do происходит поиск наименьшего элемента в подмассиве, начиная с индекса b[i] и заканчивая индексом b[i+1]. Если текущий элемент имеет меньшую мощность, чем следующий элемент, то происходит обмен их местами. После завершения внутреннего цикла, переменная p обновляется в соответствии с найденным наименьшим элементом. Затем, с помощью цикла for i:=1 to n do с каждым элементом массива a происходит операция записи на печать. Таким образом, данный код выводит на печать таблицу, в которой записаны 10 автомобилей и их характеристики.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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