Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal] Программа "Театр" 
:(
    Опции темы
Прога
Дата 27.10.2006, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 25.10.2006

Репутация: нет
Всего: нет



Значит условие таково:
В театре N мест.Некоторые зрители опоздали, поэтому те зрители, которые сидели на неудобных местах пресели на места опоздавших.Затем пришли опоздавшие, и сели на на свободные места.На антракте 1 зритель решил пересесьть на своё место, если его место было занято, то тот кто там сидел пересаживался на своё и тд. Необходимо подсчитать сколько людей в результате были вынужденны поменять своё место, включая человека, инициировающего процесс.
Входные данные:
N-кол-во мест в зале(например:10).
Последовательность N целых чисел, если место свободно, то в последовательности записывается число 0(Например:0253400000).
Номер билета у человека которые первый решил занять свое место(например:4).
Выходные данные:
КОЛ-ВО ЧЕЛОВЕК, ПОМЕНЯВШИХ СВОИ МЕСТА(Например:3)
Подскажите как решить?ПОЖАЛУЙСТА!!!.
PM MAIL   Вверх
Snowy
Дата 27.10.2006, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 4
Всего: 484



Модератор: Перенесено из паскаля!
Просьба свои задачи размещать в Центре помощи!

PM MAIL   Вверх
darkart
Дата 27.10.2006, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: 26
Всего: 31



Простейший случай, известна вместимость зала(не более MAX_SIZE):
Код

program Theatre;
const
  MAX_SIZE=100;{вместимость зала}
type
  TArr=array[1..MAX_SIZE] of integer;{массив мест}
procedure InputArray(var Arr:TArr;n:integer);{процедура ввода информации о занятых местах}
var
  i:integer;{i - счетчик}
begin
  for i:=1 to n-1 do
    read(Arr[i]);{читаем очередной элемент массива}
  readln(Arr[n]);{читаем последний элемент и переводим курсор на новую стороку}
end;
procedure PrintArray(var Arr:TArr;n:integer);{процедура печати информации о занятых местах}
var
  i:integer;
begin
  for i:=1 to n-1 do
    write(Arr[i], ' ');{печать очередного элемента}
   writeln(Arr[n]);{печать последнего элемента с переводом курсора на новую строку}
end;
function GetResult(var Arr:TArr;Ticket:integer):integer;{рекурсивная функция получения результата - кол-во пересаживаний}
var
  tmp:integer;{вспомогательная переменная}
begin
  if Arr[Ticket]=Ticket then{если зритель с билетом сидит на своем месте}
    GetResult:=0
  else
    if Arr[Ticket]=0 then{если место зрителя не занято}
      GetResult:=1
    else
    begin
      tmp:=Arr[Ticket];{запоминаем сидящего на месте зрителя с билетом Ticket}
      Arr[Ticket]:=Ticket;{сажаем зрителя на его место}
      GetResult:=1+GetResult(Arr,tmp);{выполняем процесс для нового зрителя}
    end;
end;
var
  n,Ticket:integer;{n - кол-во мест в зале, Ticket - номер билета зрителя, захотевшего пересесть}
  Arr:TArr;{массив информации о заполнении мест}
begin
  writeln('Please enter N:');
  readln(n);{ввод n}
  writeln('Please enter a numbers of tickets:');
  InputArray(Arr,n);{ввод данных}
  writeln('Source array:');
  PrintArray(Arr,n);{печать исходных данных}
  writeln('Please enter a ticket number:');
  readln(Ticket);{читаем номер билета "беспокойного" зрителя}
  writeln('Result=',GetResult(Arr,Ticket));{печать результата}
  readln;
end.

PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0416 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.