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

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

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

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


Новичок
*

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

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


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

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


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

 





- Текстовая версия 26.06.2024 21:56
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name