IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Программа завершает работу при выполнении
avp
сообщение 16.10.2005 20:29
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Женский

Репутация: -  0  +


В этой задаче при вводе всех одинаковых элементов она завершается. Что не верно? Помогите?
Код

const
 MaxSize=100;
var
 A: array[1..MaxSize] of integer; {Массив элементов}
 I,
 MinElem,  {Минимальный искомый элемент}
 MinElemN,    {Сколько раз встретился этот элемент}
 GranElem,    {Граничный минимальный элемент.
 Требуется в случае если в первом поиске ElemN>1}
 MaxN: integer;  {Количество элементов в массиве A}

begin
{Ввод массива}
writeln('Найти минимальный элемент, встречающийся в массиве один раз');
repeat
 write('Задайте число элементов в массиве <1..',MaxSize,') ');
 readln(MaxN);
 if (MaxN <= 0) or (MaxN > MaxSize) then
 writeln('Вы ошиблись! Повторите!');
until (MaxN > 0) and (MaxN <= MaxSize);
for  I := 1 to MaxN do
 begin
 writeln('Введите числа:');
 for i := 1 to MaxN do
  begin
   write(i:4,': ');
   readln(A[i]);
  end;
    {Первоначальный поиск находит минимальный элемент MinElem. Здесь же проверка,
    однократно ли он встречается в массиве.
    Если элемент встречается неоднократно, повторный поиск.
    Теперь в поиске участвуют только элементы большие, чем GranElem с учетом знака}
    MinElem:=A[1];
    for i:=2 to MaxN do
    if A[i]<MinElem then
    MinElem:=A[i];
    for i:=1 to MaxN do
 if A[i]=MinElem then
 MinElemN:=MinElemN+1;
    {Вывод результата если минимальный элемент только однажды}
    if MinElemN>1 then
 begin {если с первого раза не нашли}
 {Пока "как бы минимальный" элемент встречается более одного раза, повторяем.}
 while MinElemN > 1  do
  begin
   writeln('Отбрасываем промежутчный минимальный элемент ',MinElem);
   MinElemN:=0;
   GranElem:=MinElem;
   MinElem:=MAXINT;
   {"Двойные" элементы не участвуют в поиск, они отсекаются условием  A[i]>GranElem }
   for i:=1 to MaxN do
   if (A[i]<MinElem) and (A[i]>GranElem) then
   MinElem:=A[i];
   for i:=1 to MaxN do
   if A[i]=MinElem then
   MinElemN:=MinElemN+1;
  end; {while}
    end; {Для условия "если с первого раза не нашли"}
    writeln('Минимальный элемент равен ',MinElem);
    readln;
 end;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Altair
сообщение 17.10.2005 17:42
Сообщение #2


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
Впринципе еще можно вот так :

А теперь оцени сложность твоего и моего алгоритма..
ГРУБО - у меня 2 вложенных цикла,в каждом по ветвлению
У тебя цикл уже для сортированного, а сортировка ... кхм, промолчу.
ну разве что с быстрой может и выкарабкаешься на сравнимые скорости.

При том - мойалгоритм еще и совершеннееможно реализовать,если сократить количество итераций до вида:
for i:=1 ton-1 do
for j:=i+1 to n
,
и поставив соотв. условия, которые надо додумать.


rolleyes.gif


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 24.07.2025 20:12
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"