Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2009, 22:16   #1
igoreha
Пользователь
 
Регистрация: 24.01.2009
Сообщений: 10
По умолчанию Паскаль. Задача по сортировке

Есть задача: Имеется N транспортных средств (ТС). Каждое ТС характеризуется ценой, мощностью двигателя и грузоподъемностью. Упорядочить список ТС: по мощности двигателя, по грузоподъемности.
Код:
const
 n = 5; { количество ТС }
 t = 3; { количество показателей ТС }
var
 i, j, m, s: integer;
ts: array[1..n+1, 1..t] of integer; {хар-ки транспортных средств} 
  
begin
 writeln(' Для каждого транспортного средства введите его Цену,');
 writeln(' Мощность двигателя и Грузоподъемность, подтверждая ввод');
 writeln(' нажатием клавиши <Enter> ');		
   for i:= 1 to n do
     begin
	write (i,'-е транспортное средство -> ');
	for j:= 1 to t do
	read(ts[i,j]);
	end;

writeln ( 'Для сортировки ТС по Мощности двигателя введите с клавиатуры <2> ');	
writeln ( 'или для сортировки ТС по Грузоподьемности введите с клавиатуры <3> ');		
write( ' и нажмите клавишу <Enter>  -> ');	
	readln (s);
	
	for i:=1 to n-1 do
	  begin
		m:=i;
		for j:=i+1 to n do
		if ts[j,s]>ts[m,s] then m:=j;
			for j:=1 to t do
			begin
			ts[n+1, j] :=ts[i, j];
			ts[i, j] :=ts[m, j];
			ts[m, j] :=ts[n+1, j];
			end;
	  end;				    

writeln;
writeln('          Цена  Мощность двигателя  Грузоподъемность');
	for i := 1 to n do
	begin	
	for j:=1 to t do
	write(ts [i, j] : 13) ;
	writeln;
end;	
readln
end.
Как сделать: а) чтобы количество ТС n задавалось пользователем,
б) чтобы при вводе данные показателей ТС отображались строчкой
igoreha вне форума Ответить с цитированием
Старый 05.04.2009, 22:25   #2
Veselyn
Форумчанин
 
Аватар для Veselyn
 
Регистрация: 29.01.2009
Сообщений: 175
По умолчанию

Цитата:
Сообщение от igoreha Посмотреть сообщение
а) чтобы количество ТС n задавалось пользователем
Можно сделать через record. Пример, просто подставе свое условие
Цитата:
Сообщение от igoreha Посмотреть сообщение
б) чтобы при вводе данные показателей ТС отображались строчкой
Вместо writeln нужно писать write, а вместо readln нужно read. В этих словах окончание -ln перебрасывают курсор на следуйщую строку.
Все люди делятся на 10 типов: те, кто понимают двоичную систему счисления и те, кто нет.

Последний раз редактировалось Veselyn; 06.04.2009 в 01:21. Причина: уточнил
Veselyn вне форума Ответить с цитированием
Старый 06.04.2009, 09:58   #3
igoreha
Пользователь
 
Регистрация: 24.01.2009
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Veselyn Посмотреть сообщение
Вместо writeln нужно писать write, а вместо readln нужно read. В этих словах окончание -ln перебрасывают курсор на следуйщую строку.
В том-то и дело, что написано без -ln, а выводит каждый раз в новой строчке
igoreha вне форума Ответить с цитированием
Старый 06.04.2009, 12:00   #4
Veselyn
Форумчанин
 
Аватар для Veselyn
 
Регистрация: 29.01.2009
Сообщений: 175
По умолчанию

Если при вводе, то возможно на переход влияет цикл for
Цитата:
Сообщение от igoreha Посмотреть сообщение
Код:
	
   for i:= 1 to n do
     begin
	write (i,'-е транспортное средство -> ');
	for j:= 1 to t do
	read(ts[i,j]);
	end;
Все люди делятся на 10 типов: те, кто понимают двоичную систему счисления и те, кто нет.

Последний раз редактировалось Veselyn; 06.04.2009 в 12:03.
Veselyn вне форума Ответить с цитированием
Старый 06.04.2009, 20:29   #5
igoreha
Пользователь
 
Регистрация: 24.01.2009
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Veselyn Посмотреть сообщение
Если при вводе, то возможно на переход влияет цикл for
И как это обойти?
igoreha вне форума Ответить с цитированием
Старый 07.04.2009, 01:18   #6
Veselyn
Форумчанин
 
Аватар для Veselyn
 
Регистрация: 29.01.2009
Сообщений: 175
По умолчанию

Цитата:
Сообщение от Veselyn Посмотреть сообщение
Можно сделать через record. Пример, просто подставе свое условие
На слове ример, есть ссылка на пример(...
Обойти все это можно следующим образом

Код:
program lab;
type d1:string;
        d2:string;
          d3:string;
           d4:string;
    baza=record
model:d1;
  price:d2;
      force:d3;
          force2:d4;
end;
var
a : array[1..5] of baza;
   i, m, s : integer;
begin
writeln('vvedite kolithectvo automobiley : ');
 read(m);
    for i:=1 to m do
begin
write('auto ',i);
write(',     model ');
     read(a[i].model);
write(',     price ');
     read(a[i].price);
write(',     мощность двигателя ');
     read(a[i].force);
write(',     грузоподъемность ');
     read(a[i].force2);
writeln;
end;
writeln ( 'Для сортировки ТС по Мощности двигателя введите с клавиатуры <2> ');	
writeln ( 'или для сортировки ТС по Грузоподьемности введите с клавиатуры <3> ');		
write( ' и нажмите клавишу <Enter>  -> ');	
readln (s);
if s=2 then
for i:=1
..................... 
//Сортитуете
......................
//И теперь можно вывести
for i:=1 to m do begin
write('model ',a[i].model);
write(',     price ',a[i].price);
write(',     мощность двигателя ',a[i].force);
write(',     грузоподъемность ',a[i].force2);
writeln;
end;
readln;
end.
Все люди делятся на 10 типов: те, кто понимают двоичную систему счисления и те, кто нет.
Veselyn вне форума Ответить с цитированием
Старый 07.04.2009, 09:15   #7
igoreha
Пользователь
 
Регистрация: 24.01.2009
Сообщений: 10
По умолчанию

большое спасибо, но вопросы
Код:
var
a : array[1..5] of baza;
это значит, что количество авто не должно превышать 5?
и не проще ли вместо
Код:
type d1:string;
        d2:string;
          d3:string;
           d4:string;
    baza=record
model:d1;
  price:d2;
      force:d3;
          force2:d4;
написать
Код:
type 
    baza=record
model:string;
  price:string;
      force:string;
          force2:string;

Последний раз редактировалось igoreha; 07.04.2009 в 11:03.
igoreha вне форума Ответить с цитированием
Старый 07.04.2009, 12:02   #8
Veselyn
Форумчанин
 
Аватар для Veselyn
 
Регистрация: 29.01.2009
Сообщений: 175
По умолчанию

Это значит, что количество авто не должно превышать m
var
a : array[1..m] of baza;
Цитата:
Сообщение от igoreha Посмотреть сообщение
и не проще ли вместо
Код:
type d1:string;
        d2:string;
          d3:string;
           d4:string;
    baza=record
model:d1;
  price:d2;
      force:d3;
          force2:d4;
написать
Код:
type 
    baza=record
model:string;
  price:string;
      force:string;
          force2:string;
Проще, просто я только учус, И когда мне в первые попался тип Record? то там было все росписано как у меня. Сделал пару програм по-аналогии и пивык росписывать.
Все люди делятся на 10 типов: те, кто понимают двоичную систему счисления и те, кто нет.
Veselyn вне форума Ответить с цитированием
Старый 07.04.2009, 14:20   #9
igoreha
Пользователь
 
Регистрация: 24.01.2009
Сообщений: 10
По умолчанию

Если я заранее не задаю значение количества, как константу а так
a : array[1..m] of baza;
то выскакивает собщение об ошибке
igoreha вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скажите, в чем моя ошибка в сортировке, или напишите, как правильно сортировать. язык Паскаль. Devo4ka Паскаль, Turbo Pascal, PascalABC.NET 0 26.11.2008 00:19
Двумерный массив в сортировке anco Паскаль, Turbo Pascal, PascalABC.NET 21 21.06.2008 00:49
Вопрос по сортировке Ermiss БД в Delphi 5 17.02.2008 17:32
Ошибка в сортировке Veiron Общие вопросы Delphi 14 21.01.2008 21:35