Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.73
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
#1

Сколько клиентов обслужит мастер за смену продолжительностью T? - C++

01.10.2011, 16:22. Просмотров 2772. Ответов 47
Метки нет (Все метки)

Задали задачи на Си.
Для каждого посетителя парикмахерской (с одним мастером) известны t - момент его прихода и to – продолжительность его обслуживания. Сколько клиентов обслужит мастер за смену продолжительностью T?
Я так понял что тут нужно использовать циклы.Но написать прогу не могу.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <math.h.>
using namespace std; 
int main(void)
{ int t;  // момент прихода посетителя
  int to; // продолжительность его обслуживания
  int T;  // продолжительность смены
cout << "\nVvedite vremya prihoda kazhdogo klienta po poraydku:";
cin >> t;
cout << "\nVvedite prodolghitelnost obslughivaniya";
cin >>to;
Добавлено через 1 минуту
Подскажите как дальше прогу писать.... а то запутался капитально)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2011, 16:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сколько клиентов обслужит мастер за смену продолжительностью T? (C++):

Сколько клиентов обслужит мастер за смену? - C++
Для каждого посетителя парикмахерской с одним мастером известны следующие величины: t - момент его прихода, r - продолжительность его...

Определить сколько деталей можно изготовить за смену - C++
Продолжительность смены и время,требуемое на изготовление одной детали.Определить сколько деталей можно изготовить за смену. ...

Скольких обслужит мастер за смену - Pascal ABC
Спасайте с зачетом Для каждого посетителя парикмахерской(с одним мастром) известны слелующие величины: t-время его прихода,...

Сколько клиентов? - MySQL
Привет. Есть серверок на котором MySQL и программы получающие данные по сети или через rs 232 их 8 штук. Они все (программы) скидывают...

сколько клиентов выдержит хостинг - Linux
Извените, если не в том разделе, скажите сколько такой сервер: Сервер выдержит клиентов если на 1 профиль клиента будет 1 гб , 3 домена?...

Определить, сколько клиентов пользуются услугами определенного банка - Pascal ABC
1. Создать массив записей в соответствии с заданной структурой. Количество записей не больше 10. Определить, сколько клиентов пользуются...

47
kostja
1 / 1 / 0
Регистрация: 01.10.2011
Сообщений: 6
01.10.2011, 16:43 #2
Парень, иди лучше книги почитай по С++ тут тебе вряд ли кто поможет...
0
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
01.10.2011, 16:46  [ТС] #3
Почему же? Мне тут пару раз помогали)))
0
kostja
1 / 1 / 0
Регистрация: 01.10.2011
Сообщений: 6
01.10.2011, 16:54 #4
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
{ for Don, BarberShop, ver.06, 05/12/06 }
{ by Lapp }
 
var
  TimeIn:array[1..100]of real;   {время прихода кждого клиента}
  ServiceTime:array[1..100] of Real; {время обслуживания каждого клиента}
  t,t1,t2,TWork,TOpen,TClose:real;
  n,i,k: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);
 
  t:=TOpen;      {текущее время по часам мастера, начинается с открытия}
  TWork:=0;      {рабочее время, подготавливаем}
  k:=0;          {счетчик обслуженных клиентов, подготавливаем}
  for i:=1 to n do begin {вызываем следующего по очереди}
    {начало обслуживания клиента - это либо время его прихода...}
    t1:=TimeIn[i];
    {.. либо время, когда мастер освободился, если он был занят}
    if t>t1 then t1:=t;
    {выводим время простоя, если оно было}
    if t1>t then WriteLn('Vremya prostoya ',t1-t:4:2,' chasov');
    {вычисляем время окончания сеанса:}
    t2:=t1+ServiceTime[i];
    if t2<=TClose then begin  {если хватает рабочего времени ..}
      t:=t2;                       {.. то обновляем текущее время концом сеанса (стрижем)}
      TWork:=TWork+ServiceTime[i]; {увеличиваем счетчик рабочего времени}
      Inc(k);                      {увеличиваем счетчик обслуженных клиентов}
      {выводим информацию об обслуживании клиента и время сеанса}
      WriteLn('Klient #',i,' byl obsluzhen s ',t1:4:2,' do ',t2:4:2)
    end
    {.. если не хватает времени - выводим информацию об отказе}
    else WriteLn('Klientu #',i,' bylo otkazano v servise')
  end;
  {esli v konce rabochego dnya ne bylo clientov, vyvodim vremya prostoya}
  if t<TClose then WriteLn('Vremya prostoya ',tClose-t:4:2,' chasov');
  WriteLn('Za vesj denj bylo obsluzheno ',k,' klientov');
  WriteLn('Rabochee vremya sostavilo ',tWork:4:2,' chasov');
  ReadLn
end.
0
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
01.10.2011, 16:56  [ТС] #5
Эта не та задача!))) и не на СИ++)))))))))) хотя сходство безусловно есть)
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
01.10.2011, 16:58 #6
Вася1q, время обслуживания и "прихода" могут пересекаться?
1
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
01.10.2011, 17:01  [ТС] #7
fasked, я не знаю((( Наверное нет. Ведь только когда клиент пришел, сразу начинается стрижка.
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
01.10.2011, 17:05 #8
Вася1q, в таком случае, можно отсортировать клиентов по времени прихода. Найти последнего клиента, которого мастер успевает обслужить и сложить время обслуживания клиентов от первого до последнего.
0
kostja
1 / 1 / 0
Регистрация: 01.10.2011
Сообщений: 6
01.10.2011, 17:07 #9
fasked, ахаах что ты ему объясняешь. Он С++ учит только месяц. Почитай его посты)
0
fasked
01.10.2011, 17:13
  #10

Не по теме:

Цитата Сообщение от kostja Посмотреть сообщение
что ты ему объясняешь.
Я ему объясняю алгоритм. Форум и существует для помощи. А Вам я бы посоветовал быть сдержаннее и не оффтопить, если нечего по делу сказать, иначе схватите предупреждение .

0
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
01.10.2011, 17:17  [ТС] #11
Да нет.
kostja, прав((( я не могу во всем этом разобраться. И кроме шапки программы не написал ничего стоящего. Просто задача тяжела для моего сознания.

Добавлено через 36 секунд
fasked, спасибо за алгоритм. Может он мне хоть чем-то поможет.
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.10.2011, 18:25 #12
Цитата Сообщение от Вася1q Посмотреть сообщение
Для каждого посетителя парикмахерской (с одним мастером) известны t - момент его прихода и to – продолжительность его обслуживания. Сколько клиентов обслужит мастер за смену продолжительностью T?
Как-то это на одну
олимпиадную задачку
Ну не гномы, а наказание какое-то! Подумала Белоснежка, в очередной раз пытаясь уложить гномов спать. Одного уложишь, другой уже проснулся! И так всю ночь. У Белоснежки n гномов, и все они очень разные. Она знает, что для того, чтобы уложить спать i-го гнома нужно ai минут, и после этого он будет спать ровно bi минут. Помогите Белоснежке узнать, может ли она получить хотя бы минутку отдыха, когда все гномы будут спать, и если да, то в каком порядке для этого нужно укладывать гномов спать.

Например, пусть есть всего два гнома, a1=1, b1=10, a2=10, b2=20. Если Белоснежка сначала начнет укладывать первого гнома, то потом ей потребуется целых 10 минут, чтобы уложить второго, а за это время проснется первый. Если же она начнет со второго гнома, то затем она успеет уложить первого и получит целых 10 минут отдыха.

Входные данные

Первая строка входного файла INPUT.TXT содержит число n (1 ≤ n ≤ 105), вторая строка содержит числа a1, a2, . . . an, третья - числа b1, b2, . . . bn (1 ≤ ai, bi ≤ 109).

Выходные данные

В выходной файл OUTPUT.TXT выведите n чисел – порядок, в котором нужно укладывать гномов спать. Если Белоснежке отдохнуть не удастся, выведите число −1.
смахивает...
Я там просто сортил по различным критериями(больше всего правильных ответов было при сортировке по убыванию времени укладывания), за счет этого 67 баллов из 100 набрал.
Поэтому есть серьезные сомнения в этом алгоритме
Вася1q, в таком случае, можно отсортировать клиентов по времени прихода. Найти последнего клиента, которого мастер успевает обслужить и сложить время обслуживания клиентов от первого до последнего.
Хотя, возможно, тут нельзя посылать подальше особо заросших клиентов, и обслуживать приходиться всех, кого возможно. Условие кривое, в общем.
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
01.10.2011, 18:34 #13
Цитата Сообщение от diagon Посмотреть сообщение
Поэтому есть серьезные сомнения в этом алгоритме
Я же специально уточнял выше о возможности пересечения времени. Если время пересекается, то можно вспомнить какой-нибудь из алгоритмов планировая процессов в ОС, суть та же самая
0
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
01.10.2011, 23:35 #14
Помоему тут всё проще. Мастер один. Кто первый пришёл,тот и будет обслужен, и так далее до конца очереди. Поэтому вроде так:
1) Ввести все данные. Можно сделать в виде массивов.
2) Отсортировать клиентов по времени прихода. Если меняем местами время прихода - меняем по этому же индексу время обслуживания во втором массиве.
3) Складывать времена их обслуживания после сортировки пока не достигнем общего времени работы парикмахера. После чего выводим значение счётчика цикла.
0
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
02.10.2011, 22:00  [ТС] #15
#pragma, можешь пожалуйста показать, как это ввести данные в виде массива?

Добавлено через 20 секунд
Помогите, кому не сложно.

Добавлено через 4 часа 25 минут
=( ребята, ну как это отсортировать массивы?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2011, 22:00
Привет! Вот еще темы с ответами:

Сгенерировать 10 звуковых сигналов продолжительностью 0,2 секунды с задержкой 0,2 - Assembler
Задание1: Сгенерировать 10 звуковых сигналов продолжительностью 0,2 секунды с задержкой 0,2 секунды между их воспроизведением. ...

Оптимизация запроса - однотипные выборки выполняются с различной продолжительностью - SQL Server
Есть проблема с функцией. В функции делается несколько похожих друг на друга выборок. Все делаются достаточно быстро (&lt;= 1 секунды) кроме...

Генератор прямоугольных импульсов. Таймер с фиксированной паузой и продолжительностью - Visual Basic
Доброго времени суток форумчани. Пишу генератор импульсов. Как зделать так чтобы в таймера было фиксированое время выполнения и паузы? ...

Найти максимальное число участников среди проектов продолжительностью год - C#
Написать свойство int, возвращающее максимальное число участников среди проектов продолжительностью год. Есть класс Researcher ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
02.10.2011, 22:00
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru