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

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

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

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

01.10.2011, 16:22. Просмотров 2740. Ответов 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 минуту
Подскажите как дальше прогу писать.... а то запутался капитально)
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. Определить, сколько клиентов пользуются...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kostja
1 / 1 / 0
Регистрация: 01.10.2011
Сообщений: 6
01.10.2011, 16:43 #2
Парень, иди лучше книги почитай по С++ тут тебе вряд ли кто поможет...
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
01.10.2011, 16:46  [ТС] #3
Почему же? Мне тут пару раз помогали)))
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.
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
01.10.2011, 16:56  [ТС] #5
Эта не та задача!))) и не на СИ++)))))))))) хотя сходство безусловно есть)
fasked
Эксперт С++
4935 / 2515 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
01.10.2011, 16:58 #6
Вася1q, время обслуживания и "прихода" могут пересекаться?
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
01.10.2011, 17:01  [ТС] #7
fasked, я не знаю((( Наверное нет. Ведь только когда клиент пришел, сразу начинается стрижка.
fasked
Эксперт С++
4935 / 2515 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
01.10.2011, 17:05 #8
Вася1q, в таком случае, можно отсортировать клиентов по времени прихода. Найти последнего клиента, которого мастер успевает обслужить и сложить время обслуживания клиентов от первого до последнего.
kostja
1 / 1 / 0
Регистрация: 01.10.2011
Сообщений: 6
01.10.2011, 17:07 #9
fasked, ахаах что ты ему объясняешь. Он С++ учит только месяц. Почитай его посты)
fasked
01.10.2011, 17:13
  #10

Не по теме:

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

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

Добавлено через 36 секунд
fasked, спасибо за алгоритм. Может он мне хоть чем-то поможет.
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, в таком случае, можно отсортировать клиентов по времени прихода. Найти последнего клиента, которого мастер успевает обслужить и сложить время обслуживания клиентов от первого до последнего.
Хотя, возможно, тут нельзя посылать подальше особо заросших клиентов, и обслуживать приходиться всех, кого возможно. Условие кривое, в общем.
fasked
Эксперт С++
4935 / 2515 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
01.10.2011, 18:34 #13
Цитата Сообщение от diagon Посмотреть сообщение
Поэтому есть серьезные сомнения в этом алгоритме
Я же специально уточнял выше о возможности пересечения времени. Если время пересекается, то можно вспомнить какой-нибудь из алгоритмов планировая процессов в ОС, суть та же самая
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
01.10.2011, 23:35 #14
Помоему тут всё проще. Мастер один. Кто первый пришёл,тот и будет обслужен, и так далее до конца очереди. Поэтому вроде так:
1) Ввести все данные. Можно сделать в виде массивов.
2) Отсортировать клиентов по времени прихода. Если меняем местами время прихода - меняем по этому же индексу время обслуживания во втором массиве.
3) Складывать времена их обслуживания после сортировки пока не достигнем общего времени работы парикмахера. После чего выводим значение счётчика цикла.
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
02.10.2011, 22:00  [ТС] #15
#pragma, можешь пожалуйста показать, как это ввести данные в виде массива?

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

Добавлено через 4 часа 25 минут
=( ребята, ну как это отсортировать массивы?
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 ...


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

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

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