Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.49 MB
Время: 0.006 c
15-1257285891
McSimm
2009-11-04 01:04
2010.01.10
Об упорных червяках и математике


2-1258701942
Андрей Смирнов
2009-11-20 10:25
2010.01.10
D2009 PChar является PWideChar, как правельно?


2-1258649675
Виктор
2009-11-19 19:54
2010.01.10
Использование данных таблицы Paradox в формировании шаблона


1-1232729509
webpauk
2009-01-23 19:51
2010.01.10
Рисование на ListBox.Canvas


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский