![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Задача на сортировку.
Pascal96 © (2009-11-17 18:06:00)Это опять я.
Вроде бы всё правильно по уму, а результат не верный.
Задание:
Имеется рост Отца и 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.
@!!ex (2009-11-18 12:21:00) [1]по спецификации значение итератора после выхода из цикла for неопределенно. Это значит, что его использовать НЕЛЬЗЯ.
GOD (2009-11-18 12:17:00) [2]а вот так еще лучше
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;
Pascal96 (2009-11-18 12:14:00) [3]О спасибо.
Я был на верном пути.
Мне не в лом учиться!!!
P.S. GOD вот ты точно мосК. )))))))))))))))
GOD (2009-11-18 11:59:00) [4]Лови:
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;
clickmaker (2009-11-18 11:04:00) [5]> Он по-ходу хочет готовый код :-)
Writeln('Pascal96 хочет готовый код, а никто не дает. Поэтому вводите рост сыновей строго по возрастанию, иначе мега-алгоритм выдаст неверный результат.');
Writeln('Рост отца >: '); Readln(N[0]);
...
Pascal96 (2009-11-18 03:44:00) [6]Удалено модератором
Примечание: Offtopic
Juice (2009-11-18 00:24:00) [7]Он по-ходу хочет готовый код :-)
Омлет (2009-11-17 21:33:00) [8]> P.S. Задача лёгкая, а чО-то не могу не как сообразить, её
> правильного и ПРОСТОГО решения.
Нужно найти минимальную положительную разницу в росте сыновей и отца. Че тут трудного?
Омлет (2009-11-17 21:31:00) [9]Я фигею, как можно заблудиться в четырех числах? Какая сортировка, нафик она нужна?
Детский сад.
oldman (2009-11-17 20:54:00) [10]
> Задача на сортировку.
Ну так и сортируй. Рост сыновей. Любым способом.
А вот потом просто.
А в коде [0] сортировкой не пахнет. И в [8] тоже.
Не сдашь ты зачет\лабу\курсовик\иличетамутебя
oldman (2009-11-17 20:46:00) [11]Блин 2.
Забыл, что ты про рост.
В первых вариантах было про возраст.
Действительно - МосК.
Pascal96 (2009-11-17 20:43:00) [12]
> :))))))))))))))))))))))))))
> <Цитата>
МосК. )))))))
oldman (2009-11-17 20:35:00) [13]Блин.
а - возраст отца
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:21:00) [14]Алгоритм у меня не правильный:
Если будет так:
Отец - 30,
1-й сын - 60, 1 - элемент массива.
2-й сын - 50, 2 - элемент массива.
3-й сын - 40. 3 - элемент массива.
То выйдет, что подходит 1-й сын. (А правильно 3-й).
P.S. Задача лёгкая, а чО-то не могу не как сообразить, её правильного и ПРОСТОГО решения.
oldman (2009-11-17 19:40:00) [15]
> Возраст 2-го сына МИНУС возраст отца, получается положительное
> число
> - выходим из цикл.
>
> В переменной i должно быть значение - 2 (Т.к. Второй сын)
>
> А в программе почему-то выдаёт 3-го сына!!!
Видимо, при выходе из цикла счетчик таки увеличивается.
Попробуй Writeln('Ответ: ', i,'-й сын.'); вставить внутрь цикла перед Break
:)
Pascal96 (2009-11-17 18:19:00) [16]2)
Отец - 30,
1-й сын - 10, 1 - элемент массива.
2-й сын - 30, 2 - элемент массива.
3-й сын - 40. 3 - элемент массива.
Начитается цикл.
Возраст 1-го сына МИНУС возраст отца, получается отрицательное число
- запускаем след. иттерацию.
Возраст 2-го сына МИНУС возраст отца, получается положительное число
- выходим из цикл.
В переменной i должно быть значение - 2 (Т.к. Второй сын)
А в программе почему-то выдаёт 3-го сына!!!
Pascal96 (2009-11-17 18:18:00) [17]
> для того, чтобы условие в [0] работало, нужно сначала отсортировать
> сыновей по росту
Давай-те разберём по подробнее след. примеры.
(Для простоты взята семью лилипутов ))
1)
Отец - 10,
1-й сын - 20, 1 - элемент массива.
2-й сын - 30, 2 - элемент массива.
3-й сын - 40. 3 - элемент массива.
Начитается цикл.
Возраст 1-го сына МИНУС возраст отца, получается положительное
число. Выходим из цикла.
В переменной i должно быть значение - 1 (Т.к. первый сын)
А в программе почему-то выдаёт 2-го сына!!!
clickmaker (2009-11-17 18:13:00) [18]> [2] Pascal96 (17.11.09 18:11)
для того, чтобы условие в [0] работало, нужно сначала отсортировать сыновей по росту
Pascal96 (2009-11-17 18:11:00) [19]Например:
Рост отца - 180.
1-го сына - 100.
2-го сына - 200.
3-го сына - 210.
Ответ: 2. (2-й сын выше Отца на чуть-чуть)
clickmaker (2009-11-17 18:08:00) [20]> Вроде бы всё правильно по уму
не-а
условие не то