Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
67 / 5 / 3
Регистрация: 30.11.2015
Сообщений: 170

Написать модульную программу расчета и печати оплаты за парковку

20.01.2016, 19:25. Показов 3028. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Изучаю функции...написал такой код на задачу, как его можно упростить за счет возможностей языка именно с помощью функцияй, никаких классов ничего. Ну как-бы не знаю на первых порах вот так написал, и он какой-то как дилетанство какое-то, понимаю я сам дилетант еще, что нужно учить и учить, но как можно еще его представить?...просто как подсказку дайте, даже ненадо его представлять тут, ну как-то намекните что можно с ним сделать, чтоб он был более "взрослым" ну и ошибки может какие есть?
Условие задачи:
За стоянку до 3 часов парковочный гараж запрашивает минимум 2.00 долларов. В случае стоянки более 3 часов нараж дополнительно запрашивает 0.50 долларов. за каждый полный или неполный час сверх трех часов. Максимальная плата за сутки составляет 10.00.Допустим что никто не паркуется более чем на сутки за раз. Напишите программу расчета и печати оплаты за парковку для каждого из трех клиентов.
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
50
51
52
53
54
55
double calculateCharges(double);
//--------------------------------------------------
int main()
{
    setlocale(LC_ALL, "Russian");
    system("mode con cols=100 lines=60");
//--------------------------------------------------
    double Longtermparking1=0.00;
    double Longtermparking2=0.00;
    double Longtermparking3=0.00;
//--------------------------------------------------
    std::cout<<"Клиент №1: ";
    while(std::cin>>Longtermparking1){
    std::cout<<"Клиент №2: ";
    std::cin>>Longtermparking2;
    std::cout<<"Клиент №3: ";
    std::cin>>Longtermparking3;
    
    std::cout<<"Автомобиль";
    std::cout<<'\t';
    std::cout<<"Часы";
    std::cout<<'\t';
    std::cout<<"Плата"<<std::endl;
    std::cout<<"1";
    std::cout<<'\t'<<'\t';
    std::cout<<Longtermparking1<<'\t';
    std::cout<<calculateCharges(Longtermparking1)<<std::endl;
    
    std::cout<<"2";
    std::cout<<'\t'<<'\t';
    std::cout<<Longtermparking2<<'\t';
    std::cout<<calculateCharges(Longtermparking2)<<std::endl;
    
    std::cout<<"3";
    std::cout<<'\t'<<'\t';
    std::cout<<Longtermparking3<<'\t';
    std::cout<<calculateCharges(Longtermparking3)<<std::endl;
    std::cout<<"Клиент №1: ";}
//----------------------------------------------------------------
return 0;
}
//----------------------------------------------------------------
double calculateCharges(double longparking)
{
    double r=0.00;
    if(longparking<=3.00 && longparking>=1)
    r+=2.00;
    if(longparking>3.00)
    r=((longparking-3.00)*0.50+2.00);
    if(r>10.00)
    r=10.00;
    std::cout.setf(std::ios::fixed);
    std::cout.precision(2);
    return r;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.01.2016, 19:25
Ответы с готовыми решениями:

Разработать алгоритм и тесты, написать и отладить модульную программу с использованием подпрограммы для организации!
Вычислить суммы элементов векторов У(k) и X(L), находящиеся в интервале от а до b.

Составить программу расчёта и печати значений функции
Составить программу расчёта и печати значений функции: k = m s + t l, при данных m, s, t, l. При k = 1 расчёт по...

Составить программу расчёта и печати значений функции
Составить программу расчёта и печати значений функции: k = m s + t l, при данных m, s, t, l. При k = 1 расчёт по...

14
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
20.01.2016, 20:27
Лучший ответ Сообщение было отмечено vikiroy как решение

Решение

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
50
51
52
53
54
55
56
57
58
59
60
61
62
//Самое главное - отступы :)
double calculateCharges(double);
//--------------------------------------------------
int main()
{
    setlocale(LC_ALL, "Russian");
    system("mode con cols=100 lines=60");
//--------------------------------------------------
    double Longtermparking1 = 0.00;
    double Longtermparking2 = 0.00;
    double Longtermparking3 = 0.00;
//--------------------------------------------------
//А не лучше ли спросить окличество автомобилей на парковке и для этого количества посчитать искомое?
    std::cout << "Клиент №1: ";
    while (std::cin >> Longtermparking1)
    {
        std::cout << "Клиент №2: ";
        std::cin >> Longtermparking2;
        std::cout << "Клиент №3: ";
        std::cin >> Longtermparking3;
 
        std::cout << "Автомобиль" << '\t' << "Часы" << '\t' << "Плата"
                << std::endl;
 
        // Бесполезную копипасту/оформление лучше писать короче, т.е. в "одну" строку.
        // А ещё лучше "спросить окличество автомобилей"
        std::cout << "1" << '\t' << '\t' << Longtermparking1 << '\t'
                << calculateCharges(Longtermparking1) << std::endl;
 
        // Бесполезную копипасту/оформление лучше писать короче, т.е. в "одну" строку.
        // А ещё лучше "спросить окличество автомобилей"
        std::cout << "2" << '\t' << '\t' << Longtermparking2 << '\t'
                << calculateCharges(Longtermparking2) << std::endl;
 
        // Бесполезную копипасту/оформление лучше писать короче, т.е. в "одну" строку.
        // А ещё лучше "спросить окличество автомобилей"
        std::cout << "3" << '\t' << '\t' << Longtermparking3 << '\t'
                << calculateCharges(Longtermparking3) << std::endl;
 
        std::cout << "Клиент №1: ";
    }
//----------------------------------------------------------------
    return 0;
}
//----------------------------------------------------------------
double calculateCharges(double longparking)
{
    double r = 0.00;
    if (longparking <= 3.00 && longparking >= 1)
        r += 2.00;
    if (longparking > 3.00)
        r = ((longparking - 3.00) * 0.50 + 2.00);
    if (r > 10.00)
        r = 10.00;
// побочные эффекты в функциях лучше не выпускать наружу но сейчас мы так не можем.
//  auto oldFlag = std::cout.flags();
    std::cout.setf(std::ios::fixed);
    std::cout.precision(2);
// побочные эффекты в функциях лучше не выпускать наружу но сейчас мы так не можем.
//  std::cout.flags(oldFlag);
    return r;
}
0
67 / 5 / 3
Регистрация: 30.11.2015
Сообщений: 170
20.01.2016, 20:39  [ТС]
Спасибо за советы! А что вы имеет ввиду насчет спросить кол-во автомобилей? там просто по условию отдельно для каждого клиента нужно писать время парковки. ну а по модульности? И еще мне интересно как написать так, чтоб вводить кол-во часов в консоли сразу в табличку, ну чтоб не переходить на новую строку при каждом вводе числа, а сразу в ту табличку где и вывод идет, чтоб убрать ненужный хлам типа введите для клиент №1 и так далее...
0
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
20.01.2016, 20:44
Лучший ответ Сообщение было отмечено vikiroy как решение

Решение

Вынести в функции:
void printHeader();
void printCar(int carId, double Longtermparking);
В функциях соответственно и переходить на новую строку и т.д.
1
67 / 5 / 3
Регистрация: 30.11.2015
Сообщений: 170
20.01.2016, 20:46  [ТС]
Спасибо! А как , чтоб при вводе числа и нажатии ентер результат печатался в этой же строке?
0
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
20.01.2016, 20:49
Лучший ответ Сообщение было отмечено vikiroy как решение

Решение

Цитата Сообщение от vikiroy Посмотреть сообщение
А как , чтоб при вводе числа и нажатии ентер результат печатался в этой же строке?
Я считаю что никак, и вам тоже советую так считать
1
67 / 5 / 3
Регистрация: 30.11.2015
Сообщений: 170
20.01.2016, 20:56  [ТС]
Спасибо за ответы! Но вы говорите вам тоже советую так считать, значит наверное можно как-то, но я типа не знаком с этими вещами?

Добавлено через 2 минуты
Я чего спрашиваю, просто по условию написано как должно все выглядеть и табличка такая как у меня на выводе я сделал, но там как-то двояко так поставлено условие, что я подумал не должен ли я как-то сделать так чтоб вводить данные в табличку эту, потом там сразу после ввода печатается результат в этой же строке, и переход на новую для следующего ввода, наверное я просто так подумал себе, а так не стоит по условию?
0
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
20.01.2016, 21:06
Цитата Сообщение от vikiroy Посмотреть сообщение
Но вы говорите вам тоже советую так считать, значит наверное можно как-то, но я типа не знаком с этими вещами?
Это платформенно зависимые штуки которые я не знаю, и я очень сомневаюсь что в задании это требовалось.
У вас всё правильно.
1
67 / 5 / 3
Регистрация: 30.11.2015
Сообщений: 170
20.01.2016, 21:12  [ТС]
Благодарю! Спасибо!

Добавлено через 4 минуты
А можно еще вопрос? Чтоб ввести несколько чисел и к примеру над каждым провести операцию...но сделать так чтоб введенные числа были в одной переменной, а результат выводился в самом конце как-будто это несколько переменных, это надо массивы и вектора учить или с помощью функций там всяких шаблонов можно уже делать?
0
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
20.01.2016, 21:28
vikiroy, Не экономьте переменные.
Можно вектора, можно массивы, можно классы.
C++
1
2
3
4
const std::size_t N = 3;
double arr[N];
std::cin >> arr[0] >> arr[1] >> arr[2];
std::cout << arr[0] << arr[1] << arr[2];
1
67 / 5 / 3
Регистрация: 30.11.2015
Сообщений: 170
20.01.2016, 21:36  [ТС]
Спасибо! я просто еще не учил классы и массивы и вектора! а по-поводу экономии переменных учту! Просто я вот как-бы вижу что есть шаблоны и перегрузка функций, обращение к функции или к ее аргументу по по ссылке, и кажется что в этих вещах тоже где-то есть решение на этот вопрос, может ошибаюсь конечно?!
0
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
20.01.2016, 21:46
Цитата Сообщение от vikiroy Посмотреть сообщение
Просто я вот как-бы вижу что есть шаблоны и перегрузка функций, обращение к функции или к ее аргументу по по ссылке, и кажется что в этих вещах тоже где-то есть решение на этот вопрос, может ошибаюсь конечно?!
Придумал , рекурсией можно, только вывод будет обратный(начиная с третьей машины). И преподу понравится

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void foo(int depth)
{
    double Longtermparking;
    std::cin >> Longtermparking;
    if (depth > 1)
    {
        foo(depth - 1);
    }
    std::cout << "посчитать результат и вывести:" << Longtermparking << std::endl;
}
 
int main()
{
    foo(3);
    return 0;
}
Другого варианта нет, да и этот извращение )
1
67 / 5 / 3
Регистрация: 30.11.2015
Сообщений: 170
20.01.2016, 21:55  [ТС]
Спасибо, точно есть еще рекурсия! Препода у меня нет к сожалению) чисто интересно было, как можно так сделать, читал что очень богат язык своей выразительностью, просто хочется знать все детали! Спасибо Вам!
1
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
20.01.2016, 21:59
Цитата Сообщение от vikiroy Посмотреть сообщение
Препода у меня нет к сожалению)
Ну тогда можно ещё рекурсию в компайлтайме провернуть на шаблонах. Но это будет таже рекурсия только извращенность в квадрат возведётся, потом попробуйте сделать, но потом.
Удачи.
Цитата Сообщение от vikiroy Посмотреть сообщение
чисто интересно было, как можно так сделать
1
67 / 5 / 3
Регистрация: 30.11.2015
Сообщений: 170
20.01.2016, 22:01  [ТС]
СПАСИБО!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.01.2016, 22:01
Помогаю со студенческими работами здесь

Не могу собрать модульную программу
скомпилировал несколько маленьких программ(для сортировки основной программы) плюс есть основная программа вот код #define...

Транспонирование матрицы с подпрограммами: преобразовать программу в модульную
В программе должна быть основная функция из которой идёт вызов всех подпрограмм, подпрограмма транспонирования и подпрограмма вывода...

Написать программу для расчета pH
Пожалуйста, помагите с написанием программы! Написать программу для расчета pH буферного раствора при добавлении к нему сильного...

Написать программу для расчета y=3x^3
Помогите решить задачку Написать программу для расчета y. y=3x^3

Написать программу расчета функции
Написать блок схему и программу расчета функции для всех вариантов переменных. Даны географические координаты точки A(\varphi ,\lambda)...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru