Форум: "Начинающим";
Текущий архив: 2010.01.10;
Скачать: [xml.tar.bz2];
ВнизЗадача на сортировку. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.005 c