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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2013, 21:45   #1
Megapol
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 29
По умолчанию Даны пять попарно различных целых чисел a,b,c,d,e . Упорядочить их по возрастанию , используя для этого не более семи сравнений

Даны пять попарно различных целых чисел a,b,c,d,e . Упорядочить их по возрастанию , используя для этого не более семи сравнений.

program zad;
uses crt;
procedure swap (var a,b:integer);
var c:integer;
begin
c:=a; a:=b; b:=c;
end;
var a,b,c,d,e : integer;
begin
clrscr;
writeln('vvedite chisla:');
readln(a, b, c, d, e);
writeln('novie chisla:');
if a>e then swap(a, e);
if b>d then swap(b, d);
if b>c then swap(b, c);
if c>d then swap(c, d);
if d>e then swap(d, e);
if c>d then swap(c, d);
if b>c then swap(b, c);
write(a, ' ', b, ' ', c, ' ', d, ' ', e);
readln
end.
Megapol вне форума Ответить с цитированием
Старый 29.04.2013, 21:46   #2
Megapol
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 29
По умолчанию

не выводит правильно числа : 5 3 1 7 9 ; 22 44 67 87 99
Megapol вне форума Ответить с цитированием
Старый 29.04.2013, 22:15   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Проверьте:
Код:
program zad;
uses crt;
procedure swap (var a,b:integer);
  var c:integer;
begin
  c:=a; a:=b; b:=c;
end;
var a,b,c,d,e : integer;
begin
  clrscr;
  writeln('vvedite chisla:');
  readln(a, b, c, d, e);
  writeln('novie chisla:');
  if a>b then swap(a, b); 
  if b>c then swap(b, c);
  if c>d then swap(c, d);
  if d>e then swap(d, e);
  if c>d then swap(c, d);
  if b>c then swap(b, c);
  if a>b then swap(a, b); 
  write(a, ' ', b, ' ', c, ' ', d, ' ', e);
  readln
end.
Контр пример 5 4 3 2 1
Нужно думать дальше...
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 29.04.2013 в 23:53.
BDA вне форума Ответить с цитированием
Старый 29.04.2013, 22:37   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
5 4 3 2 1
Ответ :
Код:
1 4 3 2 5
Как решить - я не знаю.. Поэтому пошел с начала

Программа для 2-х чисел :
Код:
procedure Swap (var a, b : Integer);
var
	t : Integer;
	
begin
	
	t := a;
	a := b;
	b := t

end;
	
var
	a1, a2 : Integer;
	
begin
	ReadLn (a1, a2);
	
	if a1 > a2 then
		Swap (a1, a2);
		
	WriteLn (a1, ' ', a2)
end.
Для трех :
Код:
procedure Swap (var a, b : Integer);
var
	t : Integer;
	
begin
	
	t := a;
	a := b;
	b := t

end;
	
var
	a1, a2, a3 : Integer;
	
begin
	ReadLn (a1, a2, a3);
	
	if a1 > a2 then
		Swap (a1, a2);
	
	if a2 > a3 then
		Swap (a2, a3);
		
	if a1 > a2 then
		Swap (a1, a2);
	
	WriteLn (a1, ' ', a2, ' ', a3)
end.
Теперь для 4.. Мне не нравится..
Код:
procedure Swap (var a, b : Integer);
var
	t : Integer;
	
begin
	
	t := a;
	a := b;
	b := t

end;
	
var
	a1, a2, a3, a4 : Integer;
	
begin
	ReadLn (a1, a2, a3, a4);
	
	if a1 > a2 then
		Swap (a1, a2);
	if a3 > a4 then
		Swap (a3, a4);
	if a2 > a3 then
		Swap (a2, a3);
	if a1 > a2 then
		Swap (a1, a2);
	if a3 > a4 then
		Swap (a3, a4);
	if a2 > a3 then
		Swap (a2, a3);
		
	
	WriteLn (a1, ' ', a2, ' ', a3, ' ', a4)
end.
Дальше - пока не знаю..
Хочется оптимизировать вариант с 4-мя числами, тогда, возможно, мы получим что-то хорошее


Ура!
Для 4-ых я сделал!
Код:
procedure Swap (var a, b : Integer);
var
	t : Integer;
	
begin
	
	t := a;
	a := b;
	b := t

end;
	
var
	a1, a2, a3, a4 : Integer;
	
begin
	ReadLn (a1, a2, a3, a4);
	
	if a1 < a2 then // да! Именно меньше!
		Swap (a1, a2);
		
	if a4 > a3 then
		Swap (a4, a3);
		
	if a1 > a4 then
		Swap (a1, a4);
		
	if a2 > a3 then
		Swap (a2, a3);
		
	
	WriteLn (a1, ' ', a2, ' ', a3, ' ', a4)
end.

А вот и я до 5 добрался
Код:
procedure Swap (var a, b : Integer);
var
	t : Integer;
	
begin
	
	t := a;
	a := b;
	b := t

end;
	
var
	a1, a2, a3, a4, a5 : Integer;
	
begin
	ReadLn (a1, a2, a3, a4, a5);
	
	if a1 < a2 then 
		Swap (a1, a2);
		
	if a5 > a4 then
		Swap (a4, a5);
		
	if a1 > a5 then
		Swap (a1, a5);
		
	if a2 > a3 then
		Swap (a2, a3);
	
	if a3 > a4 then
		Swap (a3, a4);
		
	if a2 > a3 then
		Swap (a2, a3);
			
	
	WriteLn (a1, ' ', a2, ' ', a3, ' ', a4, ' ', a5)
end.
(Решение валится при тесте : 1 2 3 4 5)
Даже одно сравнение в запасе

Последний раз редактировалось Poma][a; 29.04.2013 в 22:52.
Poma][a вне форума Ответить с цитированием
Старый 29.04.2013, 23:42   #5
Megapol
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 29
По умолчанию

она всервно у тебя не правльно рабтает. та которая передлана првильнее считает
Megapol вне форума Ответить с цитированием
Старый 30.04.2013, 07:32   #6
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Для 5-ти.. Кажется, работает прально..

Код:
procedure Swap (var a, b : Integer);
var
	t : Integer;
	
begin
	
	t := a;
	a := b;
	b := t

end;
	
var
	a1, a2, a3, a4, a5 : Integer;
	
begin
	ReadLn (a1, a2, a3, a4, a5);
	
	if a1 > a5 then
		Swap (a5, a1);
	
	if a2 > a4 then
		Swap (a2, a4);
	
	if a1 > a2 then
		Swap (a1, a2);
	
	if a4 > a5 then
		Swap (a4, a5);
	
	if a2 > a3 then
		Swap (a2, a3);
	
	if a1 > a2 then
		Swap (a1, a2);
	
	if a4 > a5 then
		Swap (a4, a5);
	
	WriteLn (a1, ' ', a2, ' ', a3, ' ', a4, ' ', a5);
end.
Цитата:
та которая передлана првильнее считает
Они обе дают не корректный ответ на каких-либо тестах? О какой правильности может идти речь?
Poma][a вне форума Ответить с цитированием
Старый 30.04.2013, 13:32   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
  if e<a then swap(e,a);
  if d<b then swap(d,b);
  if b<a then begin swap(b,a); swap(e,d); end;
  if c<b then begin
    x:=c; c:=b;
    if x<a then swap(x,a);
    b:=x;
  end
  else if d<c then swap(d,c);
  if e<c then begin
    x:=e; e:=d; d:=c;
    if x<b then begin c:=b; b:=x; end
           else c:=x;
  end
  else if e<d then swap(e,d);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.04.2013, 15:17   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Аватар, а Вам не кажется, что в Вашем варианте больше 7 развилок?
Poma][a вне форума Ответить с цитированием
Старый 30.04.2013, 16:10   #9
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

А какая разница, сколько ветвлений, если по любому пути их встретится не более 7?

PS. Проверил решение на нескольких миллионах примеров, включая повторяющиеся числа.
Ошибок не обнаружено.
s-andriano вне форума Ответить с цитированием
Старый 30.04.2013, 16:15   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Тогда надо спрашивать у автора задачи что он имел ввиду.

А если у Вас так все автоматизированно, не могли бы Вы вариант из поста#6 прогнать(всмысле на тестах) ? Заранее спасибо!
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны три массива. Упорядочить их по возрастанию элементов Новичёк_Delphi Помощь студентам 4 05.12.2012 21:27
Delphi. упорядочить столбцы матрицы по возрастанию сумм элементов этого столбца ДваДваВо7 Помощь студентам 2 09.02.2011 16:40
сортировки одномерного массива целых чисел методом подсчета сравнений [Паскаль] sm0ker Помощь студентам 13 16.12.2010 22:40
В матрице nxm (n, m ≥ 10) целых чисел элементы нечетных строк упорядочить по возрастанию, а элементы четн serafimGroup Помощь студентам 1 01.12.2010 16:45
Найти пять наибольших элементов одномерного массива целых чисел. Serega-ru Помощь студентам 2 20.10.2010 10:10