Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2014, 01:08   #1
veronika55214
Пользователь
 
Регистрация: 14.12.2013
Сообщений: 26
По умолчанию массив цикл-пока или цикл-до в PascalABC

Дан целочисленный массив размера N. Если он является перестановкой, то есть содержит все числа от 1 до N, то вывести 0, в противном случае вывести номер первого недопустимого элемента.
veronika55214 вне форума Ответить с цитированием
Старый 16.01.2014, 09:01   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

покажите, как Вы описываете и заполняете массив?

а, насколько я понимаю условия задачи, задачка очень проста.
возникает только вопрос неоднозначности формулировки "первого" недопустимого элемента. Что есть "первый" недопустимый элемент в понимании автора задачи, сие только ему и ведомо!
например, пусть N = 4
есть массив {3, 4, 1, 4 }
Какой номер у первого недопустимого элемента?
а в массиве
{4, 3, 7, 2}
какой номер первого недопустимого элемента?

Поэтому, либо, если возможно, уточняйте у преподавателя, либо, интерпретируйте это так, как Вам понятнее и проще.

например, могу предложить такой вариант.
вводим ДОПОЛНИТЕЛЬНЫЙ массив такой же размерности.
заполняем его числами от 1 до N
далее в цикле идём по исходному массиву A. Каждое число A[i] проверяем, что оно входит в диапазон [1..N] - если нет, то: стоп-машина - нашли первый недопустимый элемент. Если число в нужном диапазоне, то проверяем наличие данного числа в доп массиве (по его номеру. Если в доп массиве на позиции, равной проверяемому числу стоит это число, то всё хорошо. Заменяем число в доп.массиве на нолик (признак, что число отработано). Если же на позиции в доп.массиве УЖЕ ноль (это признак, что данное число встречалось в проверяемом массиве ранее) - то: стоп-машина - нашли первый недопустимый элемент.
как-то так...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.01.2014, 21:10   #3
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
вводим ДОПОЛНИТЕЛЬНЫЙ массив такой же размерности.
заполняем его числами от 1 до N
Не понял.. Массив-то зачем? Почему бы просто не :
Код:
i := 1;
while Condition(i) and (i <= n) do Inc(i);
WriteLn(i mod (n+1));
Poma][a вне форума Ответить с цитированием
Старый 16.01.2014, 22:08   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Не понял.. Массив-то зачем? Почему бы просто не :
Код:
i := 1;
while Condition(i) and (i <= n) do Inc(i);
WriteLn(i mod (n+1));
для того, чтобы найти в заданном массиве первое не подходящее число.
Заметьте, не число, которого нет, а
Цитата:
номер первого недопустимого элемента.
посмотрите на приведённые выше мной примеры. Постарайтесь найти в массиве номер первого не подходящего числа.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.01.2014, 22:13   #5
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Ладно.. Тогда я за множество..
Poma][a вне форума Ответить с цитированием
Старый 16.01.2014, 22:26   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Ладно.. Тогда я за множество..
ну, это уже лучше!

можно и так.
ведь ограничение размерности N в 255 элементов вполне допустимо (имхо).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.01.2014, 22:36   #7
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Вариант без доп памяти.. Сортировка! (Пусть кусок.. N*logN.. и потом еще пробежка по массиву..) Можно еще цикл в цикле.. но там будет хуже..

Цитата:
ну, это уже лучше!
Стараемся

Цитата:
ведь ограничение размерности N в 255 элементов вполне допустимо (имхо).
Как утверждает поисковик, ограничения на N - 10..
Poma][a вне форума Ответить с цитированием
Старый 16.01.2014, 22:52   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Poma][a, при сортировке нужно будет еще запоминать исходную позицию числа в массиве.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 16.01.2014, 22:57   #9
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Poma][a, при сортировке нужно будет еще запоминать исходную позицию числа в массиве.
Не понял..
Цитата:
есть массив {3, 4, 1, 4 }
Сортируем, получаем 1, 3, 4, 4

И тут уже выводим или 2 или 4 или что-то еще..

UPDATE
Прозрел.. Мы должны выводить №элемента.. надо все же читать условия..
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
цикл или массив wasabi Фриланс 11 27.01.2010 21:23
Задачка на цикл 'пока'... Андрю)(@ Паскаль, Turbo Pascal, PascalABC.NET 5 15.01.2009 17:07
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34