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

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

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

Не по теме:

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

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

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

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

Добавлено через 4 часа 25 минут
=( ребята, ну как это отсортировать массивы?
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
03.10.2011, 10:27     Сколько клиентов обслужит мастер за смену продолжительностью T? #16
C
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
#include <stdio.h>
/* -------------------------------------------------------------------------- */
#define MAX_CLIENTS 10
#define INPUT_STREAM  stdin
#define OUTPUT_STREAM stdout
#define ERRORS_STREAM stderr
/* -------------------------------------------------------------------------- */
int main()
{
    int arriving_time [MAX_CLIENTS]; /* time t  */
    int serving_time  [MAX_CLIENTS]; /* time to */
    int working_time;                /* time T  */
    int i;                         
    int result;
 
    fprintf(OUTPUT_STREAM, "[ INFO: Please input data for each client ]\n");
 
    for (i = 0; i < MAX_CLIENTS; ++i) {
 
       result = fscanf(INPUT_STREAM,"%d %d",&arriving_time[i],&serving_time[i]);
 
       if (result != 2) {
          fprintf(ERRORS_STREAM, "[ ERROR: fscanf returned an error ]\n");
          return 1;
       }
    }
 
    fprintf(OUTPUT_STREAM, "[ INFO: Please input working time T of barber ]\n");
 
    result = fscanf (INPUT_STREAM, "%d", &working_time);
 
    if (result != 1) {
       fprintf(ERRORS_STREAM, "[ ERROR: fscanf returned an error ]\n");
       return 1;
    }
 
    /* Далее тут идёт код сортировки (про сортировку поищи по форуму, есть куча
     * материала, а после сортировки цикл сложения.
     */
 
    return 0;
}
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.10.2011, 11:40     Сколько клиентов обслужит мастер за смену продолжительностью T? #17
Цитата Сообщение от diagon Посмотреть сообщение
Как-то это на одну олимпиадную задачку смахивает...
Стыдно такие задачи для олимпиады давать. Особенно, если время прихода и обслуживания не пересекается.
Но задача с подвохом, ибо:

Цитата Сообщение от Вася1q Посмотреть сообщение
Для каждого посетителя парикмахерской (с одним мастером) известны t - момент его прихода и to – продолжительность его обслуживания.
Т.е. уже в условии задачи оговорено количество клиентов (массив времён приходов).
В противном случае, в задаче не хватает времени начала смены и времени обеденного перерыва.
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
05.10.2011, 04:41  [ТС]     Сколько клиентов обслужит мастер за смену продолжительностью T? #18
ахах обеденный перерыв точно не помешал бы)))

Добавлено через 1 минуту
Ребята, а что означает INPUT_STREAM и ERRORS_STREAM и например еще "%d. Мы просто пока это не учили. Это случайно не на языке СИ? Просто мы си ++ учим. Там немножко по-другому. Растолкуйте кому не сложно)

Добавлено через 6 часов 25 минут
Цитата Сообщение от #pragma Посмотреть сообщение
return 0
а это как я понял пауза?
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
05.10.2011, 06:22     Сколько клиентов обслужит мастер за смену продолжительностью T? #19
Цитата Сообщение от Вася1q Посмотреть сообщение
а это как я понял пауза?
это не пауза. это код окончания команды "stop", которая завершает команду "play" и сигнализирует что "play" завершена без ошибок. вроде получилось решить задачу. сначала условие не мог понять...
программа не учитывает случай когда стрижка последней бороды выходит за рамки рабочего дня, но... "кто платит женщину, тот её и танцует".
C
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
#include <stdio.h>
#include <stdlib.h>
 
int compare(const void *i, const void *j){
    return *(int *)i - *(int *)j;
}
 
int main(){
    int to = 30, T, beginwork, count = 0;
    int t[50], i;
 
    srand(time(0));
    T = (24 * 60) / 2; //длина рабочего дня 12 часов (в суточных минутах), как на плантациях
    beginwork = 0;     //сдвиг начала рабочего дня. начинаем трудиться в 00:00 как реальный линуксойд, который "всю ночь gentoo пилил"
 
    //генерируем время прихода овечков
    //условно считаем его относительно начала рабочего дня
    for (i = 0; i < 50; ++i)
        t[i] = rand() % T + 15;
 
    qsort(t, 50, sizeof(int), compare);
    i = 0;
 
    while(beginwork < T && i < 50){
 
        if (i == 0){
            beginwork += t[i] + to;
            ++count;
        }
        else{
            if (beginwork >= t[i]){
                beginwork += to;
                ++count;
            }
            else{
                beginwork += (t[i] - beginwork + to);
                ++count;
            }
        }
        ++i;
    }
    printf("\nвремя приходов посетителей в минутах относительно начала работы\n\n");
    for (i = 0; i < 50; ++i)
        printf("%d ", t[i]);
    printf("\n\n");
    printf("успели подстичь посетителей %d", count);
    printf("\n\n");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2011, 10:59     Сколько клиентов обслужит мастер за смену продолжительностью T?
Еще ссылки по теме:

Определить, сколько среди чисел четных и сколько нечетных C++
C++ Определить сколько деталей можно изготовить за смену
C++ Как серверу выборочно посылать сообщения одному из клиентов?

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

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.10.2011, 10:59     Сколько клиентов обслужит мастер за смену продолжительностью T? #20
Цитата Сообщение от Вася1q Посмотреть сообщение
а это как я понял пауза?
Это означает, что функция возвращает нулевое значение. Точнее в данном случае эта запись ничего не делает и не несет никакой смысловой нагрузки.
Yandex
Объявления
05.10.2011, 10:59     Сколько клиентов обслужит мастер за смену продолжительностью T?
Ответ Создать тему
Опции темы

Текущее время: 16:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru