1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Есть такая задача: Дано множество А из N точек. Среди всех точек этого множества, лежащих в первой|второй|третьей|четвертой четверти, найти точку, наиболее близкую|удаленную от начала координат. Если таких точек нет, то вывести точку с нулевыми координатами. Я её вроде бы решил:
uses crt; var a : array [1..1000] of Integer; N,i : Integer; min,max : Integer; sec_min,sec_max : Integer; a1_min,a1_max : Integer; a1_sec_min,a1_sec_max : Integer; a2_min,a2_max : Integer; a2_sec_min,a2_sec_max : Integer; a3_min,a3_max : Integer; a3_sec_min,a3_sec_max : Integer; a4_min,a4_max : Integer; a4_sec_min,a4_sec_max : Integer; begin {$R+} Clrscr; Write('Input N:'); ReadLn(N); Write('Input set N:'); for i := 1 to N do Read(a[i]); min := Maxint; sec_min := Maxint; max := -32768; sec_max := -32768; for i := 1 to N do begin if (a[i] > 0) then begin if (a[i] < min ) then begin sec_min := min; min :=a[i]; end else if (a[i] < sec_min) and (a[i] <> min) then sec_min := a[i]; if (a[i] > max) then begin sec_max := max; max := a[i]; end else if (a[i] > sec_max) and (a[i] <> max) then sec_max := a[i]; a1_min := min; a1_max := max; a1_sec_min := sec_min; a1_sec_max := sec_max; a2_min := min; a2_max := max; a4_sec_min := min; a4_sec_max := max; end; end; min := Maxint; sec_min := Maxint; max := -32768; sec_max := -32768; for i := 1 to N do begin if (a[i] < 0) then begin if (a[i] < min ) then begin sec_min := min; min :=a[i]; end else if (a[i] < sec_min) and (a[i] <> min) then sec_min := a[i]; if (a[i] > max) then begin sec_max := max; max := a[i]; end else if (a[i] > sec_max) and (a[i] <> max) then sec_max := a[i]; a3_min := max; a3_max := min; a3_sec_min := sec_max; a3_sec_max := sec_min; a2_sec_min := max; a2_sec_max := min; a4_min := max; a4_max := min; end; end; if (a2_min = 0) or (a2_sec_min = 0) then begin a2_min := 0; a2_sec_min := 0; end; if (a2_max = 0) or (a4_sec_max = 0) then begin a2_max := 0; a2_sec_max := 0; end; if (a4_min = 0) or (a4_sec_min = 0) then begin a4_min := 0; a4_sec_min := 0; end; if (a4_max = 0) or (a4_sec_max = 0) then begin a4_max := 0; a4_sec_max := 0; end; WriteLn; WriteLn('--------------------------'); WriteLn('Nearest points info:'); WriteLn('I quarter nearest:',' (',a1_min,',',a1_sec_min,')'); WriteLn('II quarter nearest:',' (',a2_min,',',a2_sec_min,')'); WriteLn('III quarter nearest:',' (',a3_min,',',a3_sec_min,')'); WriteLn('IV quarter nearest:',' (',a4_min,',',a4_sec_min,')'); WriteLn('***************************'); WriteLn('Farthest points info:'); WriteLn('I quarter farthest:',' (',a1_max,',',a1_sec_max,')'); WriteLn('II quarter farthest:',' (',a2_max,',',a2_sec_max,')'); WriteLn('III quarter farthest:',' (',a3_max,',',a3_sec_max,')'); WriteLn('IV quarter farthest:',' (',a4_max,',',a4_sec_max,')'); WriteLn('----------------------------'); Readkey; end.
Но у меня возникает вопрос если в задаче написано множество то какой тип использовать массив или множество, как будет правильней ? С множествами я пока еще не сделал ни одной задачи, так что мало пока в нем понимаю, поэтому использовал массив.
Сообщение отредактировано: kent - 22.07.2005 10:16