Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.10;
Скачать: CL | DM;

Вниз

Задача на сортировку.   Найти похожие ветки 

 
Pascal96   (2009-11-17 18:06) [0]

Это опять я.

Вроде бы всё правильно по уму, а результат не верный.


Задание:

Имеется рост Отца и 3-х его сыновей.
Нужно найти "номер" сына, который МИНИМАЛЬНО выше отца.



Var
 i: byte;
 N: array [0..3] of byte;
begin
 Writeln("Рост отца      >: "); Readln(N[0]);
 Writeln("Рост 1-го сына >: "); Readln(N[1]);
 Writeln("Рост 2-го сына >: "); Readln(N[2]);
 Writeln("Рост 3-го сына >: "); Readln(N[3]);

 For i:= 1 to 3 do
   If (N[i] - N[0] > 0) then Break;

 Writeln("Ответ: ", i,"-й сын.");
 Readln;
End.



 
clickmaker ©   (2009-11-17 18:08) [1]

> Вроде бы всё правильно по уму

не-а
условие не то


 
Pascal96   (2009-11-17 18:11) [2]

Например:
Рост отца - 180.
1-го сына - 100.
2-го сына - 200.
3-го сына - 210.

Ответ: 2. (2-й сын выше Отца на чуть-чуть)


 
clickmaker ©   (2009-11-17 18:13) [3]

> [2] Pascal96   (17.11.09 18:11)

для того, чтобы условие в [0] работало, нужно сначала отсортировать сыновей по росту


 
Pascal96   (2009-11-17 18:18) [4]


> для того, чтобы условие в [0] работало, нужно сначала отсортировать
> сыновей по росту


Давай-те разберём по подробнее след. примеры.
(Для простоты взята семью лилипутов ))
1)
Отец     - 10,
1-й сын - 20,     1 - элемент массива.
2-й сын - 30,     2 - элемент массива.
3-й сын - 40.     3 - элемент массива.

Начитается цикл.
Возраст 1-го сына МИНУС возраст отца, получается положительное
число. Выходим из цикла.
В переменной i должно быть значение - 1 (Т.к. первый сын)

А в программе почему-то выдаёт 2-го сына!!!


 
Pascal96   (2009-11-17 18:19) [5]

2)
Отец     - 30,
1-й сын - 10,     1 - элемент массива.
2-й сын - 30,     2 - элемент массива.
3-й сын - 40.     3 - элемент массива.

Начитается цикл.
Возраст 1-го сына МИНУС возраст отца, получается отрицательное число
- запускаем след. иттерацию.
Возраст 2-го сына МИНУС возраст отца, получается положительное число
- выходим из цикл.

В переменной i должно быть значение - 2 (Т.к. Второй сын)

А в программе почему-то выдаёт 3-го сына!!!


 
oldman ©   (2009-11-17 19:40) [6]


> Возраст 2-го сына МИНУС возраст отца, получается положительное
> число
> - выходим из цикл.
>
> В переменной i должно быть значение - 2 (Т.к. Второй сын)
>
> А в программе почему-то выдаёт 3-го сына!!!


Видимо, при выходе из цикла счетчик таки увеличивается.
Попробуй Writeln("Ответ: ", i,"-й сын."); вставить внутрь цикла перед Break
:)


 
Pascal96   (2009-11-17 20:21) [7]

Алгоритм у меня не правильный:
Если будет так:

Отец     - 30,
1-й сын - 60,     1 - элемент массива.
2-й сын - 50,     2 - элемент массива.
3-й сын - 40.     3 - элемент массива.

То выйдет, что подходит 1-й сын. (А правильно 3-й).

P.S. Задача лёгкая, а чО-то не могу не как сообразить, её правильного и ПРОСТОГО решения.


 
oldman ©   (2009-11-17 20:35) [8]

Блин.
а - возраст отца
b[c] - массив возрастов сыновей в любом порядке

i:=b[1]-a
for j=2 to c do  
 if i=<0 then i:=b[j]-a
 else (if (b[j]-a)<i) and ((b[j]-a)>0) then i=j;

В i будет результат.

Если i<0 then ОтецМладшеВсехСыновей
:))))))))))))))))))))))))))


 
Pascal96   (2009-11-17 20:43) [9]


> :))))))))))))))))))))))))))
> <Цитата>


МосК. )))))))


 
oldman ©   (2009-11-17 20:46) [10]

Блин 2.
Забыл, что ты про рост.
В первых вариантах было про возраст.

Действительно - МосК.


 
oldman ©   (2009-11-17 20:54) [11]


> Задача на сортировку.


Ну так и сортируй. Рост сыновей. Любым способом.
А вот потом просто.

А в коде [0] сортировкой не пахнет. И в [8] тоже.
Не сдашь ты зачет\лабу\курсовик\иличетамутебя


 
Омлет ©   (2009-11-17 21:31) [12]

Я фигею, как можно заблудиться в четырех числах? Какая сортировка, нафик она нужна?
Детский сад.


 
Омлет ©   (2009-11-17 21:33) [13]

> P.S. Задача лёгкая, а чО-то не могу не как сообразить, её
> правильного и ПРОСТОГО решения.

Нужно найти минимальную положительную разницу в росте сыновей и отца. Че тут трудного?


 
Juice ©   (2009-11-18 00:24) [14]

Он по-ходу хочет готовый код :-)


 
Pascal96   (2009-11-18 03:44) [15]

Удалено модератором
Примечание: Offtopic


 
clickmaker ©   (2009-11-18 11:04) [16]

> Он по-ходу хочет готовый код :-)

Writeln("Pascal96 хочет готовый код, а никто не дает. Поэтому вводите рост сыновей строго по возрастанию, иначе мега-алгоритм выдаст неверный результат.");
Writeln("Рост отца      >: "); Readln(N[0]);
...


 
GOD   (2009-11-18 11:59) [17]

Лови:


procedure TForm2.Button1Click(Sender: TObject);
const
 arr_height: array [0..3] of Integer = (176, 153, 188, 194);
var
 I, Old: Integer;
 P: TPoint;
begin
 P := Point(0, MaxInt);
 for I := 1 to High(arr_height) do
   if (arr_height[I] - arr_height[0]) > 0 then begin
     Old := P.Y;
     P.Y := Min(P.Y, arr_height[I]);
     if P.Y <> Old then P.X := I;
   end;
 if P.X <> 0 then
   ShowMessageFmt("Сын %d минимально выше отца", [P.X]);
end;


 
Pascal96   (2009-11-18 12:14) [18]

О спасибо.
Я был на верном пути.
Мне не в лом учиться!!!

P.S. GOD вот ты точно мосК. )))))))))))))))


 
GOD   (2009-11-18 12:17) [19]

а вот так еще лучше

procedure TForm2.Button1Click(Sender: TObject);
const
 arr_height: array [0..3] of Integer = (30, 10, 30, 40);
var
 I: Integer;
 P: TPoint;
begin
 P := Point(0, MaxInt);
 for I := 1 to High(arr_height) do
   if ((arr_height[I] - arr_height[0]) > 0) and (P.Y > arr_height[I]) then
     P := Point(I, arr_height[I]);
 if P.X <> 0 then
   ShowMessageFmt("Сын %d минимально выше отца", [P.X]);
end;


 
@!!ex ©   (2009-11-18 12:21) [20]

по спецификации значение итератора после выхода из цикла for неопределенно. Это значит, что его использовать НЕЛЬЗЯ.



Страницы: 1 вся ветка

Текущий архив: 2010.01.10;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
15-1257924086
@!!ex
2009-11-11 10:21
2010.01.10
Почему мы всегда пытаемся "догонять"??


15-1257627991
Омлет
2009-11-08 00:06
2010.01.10
Убойная статистика


2-1258647145
donar19
2009-11-19 19:12
2010.01.10
Как нарисовать круг в делфи по пикселям?


2-1258432086
&#8467;o&#8467;
2009-11-17 07:28
2010.01.10
Вопрос о переводе кода (CTL_CODE)


2-1258473755
6699
2009-11-17 19:02
2010.01.10
Файлы