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

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

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

> Парикмахерская, программа
Дон
сообщение 20.11.2006 22:21
Сообщение #1


Новичок
*

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

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


Парикмахерская. Для каждого посетителя парикмахерской (с одним мастером) известны следующие величины: t – момент его прихода и τ – продолжительность его обслуживания. Сколько клиентов обслужит мастер за смену продолжительностью Т? Сколько рабочего времени он потратит на обслуживание?
Момент прихода и продолжительность обслуживания вводятся пользователем..
Помогите,плизз,если кто может..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Дон
сообщение 1.12.2006 14:49
Сообщение #2


Новичок
*

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

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


Вот уж фигушки...
Ничего я не сдался..стыдно просто...
Просто вы задали вопрос на модернизацию,чтобы не вводить всех посетителей сразу.А я..ну не врублюсь...дурак наверно..но научиться хочу правда!!!!

while not EoF do begin           {регистрация клиентов}
Inc(n);
with Line[n] do ReadLn(TIn,TServ)
end;
WriteLn;
WriteLn('So far we have ',n,' customers');
t:=TOpen; {текущее время начинается с открытия}
TWork:=0; {рабочее время}
k:=0; {счетчик обслуженных клиентов}
for i:=1 to n do with Line[i] do begin {вызываем следующего по очереди}
t1:=Max(t,TIn); {начало обслуживания клиента}
if t1>t then WriteLn('Idle time ',t1-t:4 :2,' hours'); {выводим время простоя, если оно было}
Write('Customer #',i,' was '); {выводим номер клиента}
t2:=t1+TServ; {вычисляем время окончания сеанса}
if t2<=TClose then begin {если хватает рабочего времени ..}
t:=t2; {обновляем текущее время концом сеанса}
TWork:=TWork+TServ; {увеличиваем рабочее время}
Inc(k); {увеличиваем счет клиентов}
WriteLn('served at ',t1:4 :2,' through ',t2:4 :2) {выводим начало и окончание сеанса}
end
else WriteLn(' rejected') {.. если не хватает времени - отказать}
end;
WriteLn('For the whole day ',k,' customers were served');
WriteLn('Work time was ',tWork:4 :2,' hours');
ReadLn
end.


Вот это для меня вообще темный лес..но я хочу разобраться,что к чему...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 1.12.2006 23:48
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Дон @ 1.12.2006 15:49) *

Вот уж фигушки...
Ничего я не сдался..

И правильно! smile.gif
Цитата(Дон @ 1.12.2006 15:49) *

Вот это для меня вообще темный лес..но я хочу разобраться,что к чему...

Не спеши. Время есть пока?
Давай договоримся так: есть основные вопросы, и есть дополнительные. Основные никогда не бывают слишком трудными (типа: запустил? увидел?). На основные вопросы, будь добр, отвечай. Дополнительные могут быть очень трудными. На них отвечать совершенно необязательно. Я просто хочу передать тебе смысл и направление мысли. Результаты будут потом..

Итак, пока будем считать, что последний вариант (ver. 04) у тебя запустился и с ним ты разобрался (хотя, повторяю, ответа на это ты не дал). И если уж ты так увлекся тем вопросом, как сделать ввод клиентов без предварительного ввода их числа, то давай с этим разберемся (хотя без этого можно было бы обойтись).

Для этого потребуется:
1. Заменить цикл FOR на цикл WHILE.
Прочитай про него в Книге. По-простому, он повторяется пока выполняется то условие, которое ты поставишь после оператора while (перед do). Как только условие нарушится, повторение заканчивается и программа идет дальше. Например,
while 2*2=4 do ...
- будет повторяться бесконечно. А этот:
while 2*2=5 do ...
- не выполнится ни разу (здесь и выше идет речь о выполнении того, что стоит на месте многоточия). А вот этот:
i:=1;
while i<50 do i:=i*2;
- выполнится раз. В первый раз i=1, во второй 2, в третий 4, в четвертый 8, потом 16, потом 32 - и все, для i=64 он уже не выполнится, и программа продолжит выполняться дальше, причем значение переменной i при этом уже будет равно 64.

2. Понятие конца файла.
Дело в том, что ввод с клавиатуры вообще-то трактуется программой как ввод из файла. Это так называемый Стандартный Ввод. Как у любого файла, у него может быть конец. В Паскале есть специальная функция, которая говорит, что файл закончился. Это функиция EoF(f), название происходит от End of File. В скобках заключается переменная файла, но в случае стандартного ввода скобки можно опустить. То есть несмотря на то, что EoF выглядит как простая переменная, она все же является функцией. Эта функция входит в модуль System, который описывать в операторе uses не обязательно (и мы не описываем). Эта функция возвращает булево значение, то есть true (правда) или false (ложь). Понятно, что цикл
while not EoF do ...
- будет продолжаться до тех пор, пока не кончится стандартный ввод. А когда же он кончится?.. На этот случай есть некоторая хитрость. В DOS признаком конца текстового файла считается символ ^Z (Ctrl-Z), имеющий номер 26 (как последняя буква английского алфавита). А стандартный ввод трактуется как текстовый файл (в отличие от файлов на диске, которые могут быть разными: и текстовыми, и бинарными - все зависит от того, как ты их открываешь, но об этом потом). Так что по нажатии Ctrl-Z, а потом за ним Enter, функция EoF даст true. Условие в цикле перестанет выполняться ("не" "правда", то есть "неправда"), и повторение оператора (в данном случае группы операторов: ввод двух чисел и увеличение на единицу числа клиентов) прекратится.

Тем самым мы автоматически подстчитываем, сколько клиентов пришло.
Вот новая версия программы. Подтверди, пожалуйста, что она нормально отрабатывает и что тебе все понятно. Или задавай вопросы smile.gif.
{ for Don, BarberShop, ver.05, 01/12/06 }
{ by Lapp }

var
TimeIn:array[1..100]of real; {время прихода кждого клиента}
ServiceTime:array[1..100] of Real; {время обслуживания каждого клиента}
TOpen,TClose:real;
n,i:integer; {общее число клиентов}

begin
TOpen:=9; {время открытия парикмахерской}
TClose:=17; {время закрытия}
WriteLn;
WriteLn('The Barber''s shop is open ',tOpen:4:2,' through ',tClose:4:2);
WriteLn('Vvedite vremya prihoda i obsluzhivaniya kazhdogo klienta po poraydku');
WriteLn('cherez probel po odnomu clientu na stroke.');
WriteLn('V konce nazhmite Ctrl-Z i Enter');
n:=0; {счетчик клиентов в очереди}
while not EoF do begin {регистрация клиентов}
Inc(n);
ReadLn(TimeIn[n],ServiceTime[n])
end;
WriteLn('Barber shop posetili ',n,' klientov. Vremya prihoda i obsluzhivaniya:');
for i:=1 to n do WriteLn(i,': ',TimeIn[i] :4 :2,' ',ServiceTime[i] :4 :2);
ReadLn
end.

А вот пример ее работы.
Код
The Barber's shop is open 9.00 through 17.00
Vvedite vremya prihoda i obsluzhivaniya kazhdogo klienta po poraydku
cherez probel po odnomu clientu na stroke.
V konce nazhmite Ctrl-Z i Enter
8.5 2
9 0.25
10 1
13 0.5
14 1
14.5 2
^Z
Barber shop posetili 6 klientov. Vremya prihoda i obsluzhivaniya:
1: 8.50  2.00
2: 9.00  0.25
3: 10.00  1.00
4: 13.00  0.50
5: 14.00  1.00
6: 14.50  2.00

Как только разберешься, двинемся дальше и начнем саму работу парикмахера smile.gif
Успехов!


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Дон   Парикмахерская   20.11.2006 22:21
lapp   Задачи на моделирование встречаются не очень часто...   21.11.2006 6:49
Дон   Я в паскале очень слаб...он у нас идет первый го...   21.11.2006 13:46
lapp   сегодня-завтра сбегаю за учебником по паскалю и на...   22.11.2006 2:21
lapp   Дон, я понял, что надо не так резко. Начнем с само...   23.11.2006 16:10
Дон   Это мы обьявляем две переменные.Время открытия и...   23.11.2006 18:28
lapp   > Потом мы взяли эти переменные и присвоили им ...   24.11.2006 3:46
Дон   ReadLn считывает данные с экрана.От read отличае...   24.11.2006 21:44
lapp   Привет! > ReadLn считывает данные с экрана....   25.11.2006 11:13
Дон   Попробовал. Да,когда ReadLn отсутствует,то прогр...   25.11.2006 16:58
lapp   Тут ошибку выдал...">" expected.Закл...   26.11.2006 1:09
Дон   Все отлично работает))) { for Don, BarberShop...   26.11.2006 15:07
lapp   И..как задавать как он хочет стричься?допустим у ...   27.11.2006 9:17
Дон   честно говоря не понял...а смысл?если пришел оди...   28.11.2006 21:53
lapp   > честно говоря не понял...а смысл? внимательно...   29.11.2006 2:42
lapp   Дон, ты сдался? надоело?.. Еще одна зарубка в ря...   1.12.2006 5:53
Дон   Вот уж фигушки... Ничего я не сдался..стыдно прост...   1.12.2006 14:49
lapp   Вот уж фигушки... Ничего я не сдался.. И правиль...   1.12.2006 23:48
Дон   В принципе да..курсовую через три дня сдавать) ...   2.12.2006 19:40
lapp   Все работает и пока что все ясно! Это очень х...   6.12.2006 4:04
Дон   Мда..все-таки комментарии вещь хорошая...без них б...   6.12.2006 21:32
Lapp   А как вывести в начале программы большими белыми ...   7.12.2006 7:39
Дон   Можно в принципе и на английсском...я просто хот...   7.12.2006 8:31
Lapp   Можно в принципе и на английсском...я просто хоте...   7.12.2006 9:08
Дон   И цвет фона поменял и текста,только... Нужно что...   7.12.2006 22:24
Lapp   [code]begin TextColor(2); Write(...   8.12.2006 2:49
Дон   Вот какая фигня...текст-то он окрасил... Только ...   8.12.2006 21:25
Lapp   когда я задаю Uses Crt; в начале программы,CTRL-Z...   9.12.2006 11:35
Гость   Зашел,почитал...не разобрался :unsure: мы должн...   9.12.2006 13:20
Lapp   Зашел,почитал...не разобрался :unsure: Такое та...   9.12.2006 13:28
Дон   неа..признаться честно,не нашел.. CheckEof:Bool...   9.12.2006 21:27
Lapp   > неа..признаться честно,не нашел.. Но теперь-т...   10.12.2006 5:08
Дон   нет..признаться,с ними я не знаком.. В раздел...   10.12.2006 16:00
Lapp   В разделе CRT?Нету!я даже поиск давал по глав...   11.12.2006 5:12
Дон   У нас по приложению 4-Типы данных! не могу на...   12.12.2006 0:08
Lapp   > У нас по приложению 4-Типы данных! Это Гл...   12.12.2006 2:16
Дон   Усе..найдено))) спасибо большое :give_rose: ...   12.12.2006 22:35
Lapp   > Усе..найдено))) Вывод: внимательнее относись ...   13.12.2006 4:35
Дон   Прошелся по программе...возникло несколько вопросо...   14.12.2006 17:29
Lapp   > Прошелся по программе...возникло несколько во...   15.12.2006 4:42
Дон   А то... Я почему постоянно переспрашиваю..глупос...   16.12.2006 16:51


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

 



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