Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
35 / 35 / 4
Регистрация: 28.11.2012
Сообщений: 164

Интересное задание (Определить стоимость проезда на трамвае)

28.11.2012, 00:31. Показов 1420. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Определить стоимость проезда на трамвае.

Университетское задание для первокурсников, можно сказать первое задание по программированию. По идее, решение должно быть простым, но в голову не приходит ничего путевого (ну не использовать же перебор или не писать же метод для определения кратчайшего пути, но в голову лезут именно такие мысли). У кого какие идеи по решению задачки. Только описывайте алгоритм подробно. Можно и код, и не важно на каком языке, или даже псевдокод.

Задание: Написать программу, которая вычисляет стоимость поездки на трамвае.
Трамвайная сеть имеет следующую структуру:
Существует 5 трамвайных линий, каждая из которых имеет конечную остановку (обозначено красным).
Существует 2 зоны (зеленая область, городская зона; белая микрорайоны). Кроме пяти линий существует еще кольцевой маршрут, который соединяет

между собой каждую вторую остановку каждой из 5 линий.

Остановки обозначаются кодом из двух цифр. Первая цифра обозначает номер линии, вторая номер остановки. Участки дороги, обозначенные пунктиром, закрыты временно на ремонт, по этому не используются.

За каждую поездку берется одноразовый сбор 3 рубля. Если остановки находятся по соседству и проезд между ними не закрыт, стоимость уменьшается до 2 рублей.

Дополнительно берется сбор в 1 рубль за каждое пересечение зон, и за использование конечной станции.

Например:
старт->цель стоимость объяснение
31 -> 32 2 рубля поездка на соседнюю остановку
21 -> 14 4 рубля одноразовый сбор + пересечение границы зон
55 -> 52 5 рублей одноразовый сбор + пересечение границы зон + конечная остановка
Миниатюры
Интересное задание (Определить стоимость проезда на трамвае)  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.11.2012, 00:31
Ответы с готовыми решениями:

По введенному с клавиатуры виду транспорта определить стоимость проезда
Тема «Условный и циклический оператор» По введенному с клавиатуры виду транспорта (маршрутное такси-5руб,транвай-2руб, автобус-3руб,...

Вычислить стоимость проезда
Вычислить стоимость проезда из пункта a в пункт b и обратно.Исходные данные: расстояние s и стоимость поездки в один конец.

Альтернативная стоимость проезда на маршрутке равна
Если стоимость проезда в автобусе равна 18 руб., в маршрутке – 24 руб., на такси – 90 руб., то альтернативная стоимость проезда на...

6
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
28.11.2012, 11:25
Цитата Сообщение от boberjajtsegolo Посмотреть сообщение
метод для определения кратчайшего пути
нет необходимости писать. При внимательном рассмотрении мы увидим, что каким бы длинным не был путь, стоимость проезда не изменится. Завтра накропаю, а щас всем спать.

Добавлено через 9 часов 29 минут
Хотя нет, я может быть поторопился с предыдущим выводом, ибо 00->01 можно добраться несколькими путями и стоимость будет разная. Но не суть. Всё равно кратчайший маршрут это лишнее. Эту задачу надо решать так:

Имеем (условно):

<две_рядом><две_не_рядом><пересечение_зо н><конечная>

Каждую из этих сущностей это назовём "услуга"
Сколько таких услуг мы будем иметь в дороге? Одну или две или три ну и так далее.
Подсчитаем все варианты этих услуг, которые МЫ МОЖЕМ ИМЕТЬ В ДОРОГЕ. Вот они
(Начинаем с одной услуги, потом увеличиваем до двух и так далее)

1 услуга
++++++++++++
<две_рядом>
<две_не_рядом>

2 услуги
++++++++++++
<две_рядом><пересечение_зон>
<две_рядом><конечная>
<две_не_рядом><пересечение_зон>
<две_не_рядом><конечная>

3 услуги
++++++++++++
<две_не_рядом><пересечение_зон><конечная >
<две_не_рядом><пересечение_зон><пересече ние_зон>

4 услуги
++++++++++++
<две_не_рядом><пересечение_зон><пересече ние_зон><конечная>

5 услуг
++++++++++++
<две_не_рядом><пересечение_зон><пересече ние_зон><конечная><конечная>

ВНИМАНИЕ! ДАЛЬШЕ БУДЕТ БАЗИРОВАНИЕ НА ВЫВОДАХ ВЫШЕ! ВРОДЕ ВСЕ ВАРИАНТЫ ПЕРЕБРАЛ, ИСПРАВЛЯЙТЕ, ЕСЛИ ЧТО!

Ну теперь попроще будет. Видим, что там где присутствует услуга <две_рядом>, там нет услуги <две_не_рядом>; Псевдокод:

C++
1
2
if (<две_рядом>)
else
Разберёмся с услугой <две рядом>, видим, что если рядом с <две_рядом> может быть только либо <пересечение_зон>, либо <конечная>; только одно из двух. Псевдокод:

C++
1
2
3
4
5
6
if (<две_рядом>)
 if (<пересечение_зон>)
 //Тут не else! Если тут будем писать else, то тогда получится, что варианта
 //<две_рядом> (с одной услугой то бишь) просто-напросто не существует!
 if<конечная>
else

Пусть одна станция X, другая Y. На практике если они <две_рядом> это будет означать
C++
1
((abs (X%10-Y%10))==1)
Так, а пересечение зон будет означать, что:
C++
1
(((X%10)>=3&&(Y%10)<=3)||((X%10)<=3&&(Y%10)>=3))
А использование конечной будет означать
C++
1
((X%10==5)||(Y%10==5))
ВНИМАНИЕ! ЕСЛИ КТО-ТО МОЖЕТ ПРОЩЕ ОПРЕДЕЛИТЬ, НАХОДЯТСЯ ДВЕ СТАНЦИИ РЯДОМ И ЕСТЬ ПЕРЕСЕЧЕНИЕ ЗОН ИЛИ НЕТ И НА СЧЁТ КОНЕЧНОЙ, ПУСТЬ НАПИШУТ ДРУГИЕ УЛОВИЯ!

Имеем псевдокод то есть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int st_0= X;
int st_1= Y;
int tsena= 0
 
if ((abs (X%10-Y%10))==1) {
 tsena+=2;
 if (((X%10)>=3&&(Y%10)<=3)||((X%10)<=3&&(Y%10)>=3))
  tsena+=1;
 if ((X%10==5)||(Y%10==5))
  tsena+=1;
}
else
Вот так примерно всё это и делается. Два ньюанса: условие, означающее <две_рядом> надо поправить, учитывая, что существуют закрытые перегоны:
C++
1
((abs (X%10-Y%10))==1)&&!((X==21&&Y==00)||(X==00&&Y==21))&&!((X==42&&Y==52)||(X==52&&Y==42))
И помним, что стоимость за использование конечной и за пересечение зон одинаковое; конечный псеводокод:

C++
1
2
3
4
5
6
7
8
9
10
int st_0= X;
int st_1= Y;
int tsena= 0
 
if ((abs (X%10-Y%10))==1)&&!((X==21&&Y==00)||(X==00&&Y==21))&&!((X==42&&Y==52)||(X==52&&Y==42)) {
 tsena+=2;
 if (((X%10)>=3&&(Y%10)<=3)||((X%10)<=3&&(Y%10)>=3))||((X%10==5)||(Y%10==5))
  tsena+=1;
}
else
Ну вот как-то так; в "else" надо вставить всё что касается <две_не_рядом> ; щас попробую рабочий код написать.

Добавлено через 7 минут
В псевдокодах надо писать так:
C++
1
2
int = X;
int = Y;
а не так;
C++
1
2
int st_0= X;
int st_1= Y;
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
28.11.2012, 11:34
Цитата Сообщение от kravam Посмотреть сообщение
Пусть одна станция X, другая Y. На практике если они <две_рядом> это будет означать
C++
1
((abs (X%10-Y%10))==1)
Но ведь остановки 12 и 52 не имеют промежуточных узлов.
C++
1
(((X%10)>=3&&(Y%10)<=3)||((X%10)<=3&&(Y%10)>=3))
И тут не понятка...нужно ли учитывать в проезде двойное пересечение зон? То есть, например, чтобы добраться из 25 до 15, нужно сначала въехать в зеленую зону, потом её покинуть - два пересечения. Да и конечных тоже две.

Добавлено через 3 минуты
И еще закрытые пути тоже нужно учесть.
1
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
28.11.2012, 12:10
Цитата Сообщение от Croessmah Посмотреть сообщение
Но ведь остановки 12 и 52 не имеют промежуточных узлов.
значит нужно поправить условие. Могу и ошибиться, я там крупными буквами написал
ВНИМАНИЕ! ЕСЛИ КТО-ТО МОЖЕТ ПРОЩЕ ОПРЕДЕЛИТЬ, НАХОДЯТСЯ ДВЕ СТАНЦИИ РЯДОМ И ЕСТЬ ПЕРЕСЕЧЕНИЕ ЗОН ИЛИ НЕТ И НА СЧЁТ КОНЕЧНОЙ, ПУСТЬ НАПИШУТ ДРУГИЕ УЛОВИЯ!
Цитата Сообщение от Croessmah Посмотреть сообщение
И тут не понятка...нужно ли учитывать в проезде двойное пересечение зон? То есть, например, чтобы добраться из 25 до 15, нужно сначала въехать в зеленую зону, потом её покинуть - два пересечения. Да и конечных тоже две.
Естессно. Маршрут 15->25 подходит под этот пункт (второй раз пишу), между прочим

5 услуг
++++++++++++
<две_не_рядом><пересечение_зон><пересече ние_зон><конечная><конечная>
Так, всё, что касается <две_рядом> я не рассматривал, я это оговорил. Пусть автор рассматривает.

И еще закрытые пути тоже нужно учесть.
учёл вроде
Цитата Сообщение от kravam Посмотреть сообщение
Два ньюанса: условие, означающее <две_рядом> надо поправить, учитывая, что существуют закрытые перегоны:
1
 Аватар для BumerangSP
4311 / 1423 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
28.11.2012, 13:01
Я вот тут нигде матрицы смежности не вижу. Граф же. Тогда сразу станет видно, где у кого какие связи.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
28.11.2012, 13:20
Тестируй, результаты сюда. Файл для лучшего понимания ниже кода
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
63
64
65
66
67
68
69
70
71
#include <stdio.h>
#include <math.h>
#define X array[i][0]
#define Y array[i][1]
 
 
int main () {                                                              
 
 int tsena;
 bool dve_ne_radom= false;
 
 //Сюда пихай значения и тестируй
 #define kol_vo_strochek 3
 int array [][2]= {{21, 52},{33, 44},{22, 45}};
 
 
 
 for (int i= 0; i < kol_vo_strochek; i++) {
 tsena= 0;
                                //<две_рядом>                
 if (((((fabs (X%10-Y%10))==1)&&(X/10==Y/10))||((fabs(X-Y)==10)&&(X%10==2))) &&!((X==21&&Y==00)||(X==00&&Y==21))&&!((X==42&&Y==52)||(X==52&&Y==42))) 
 {
               tsena+=2;
                               //<пересечение_зон||<конечная>
           if ((((X%10)>=3&&(Y%10)<=3)||((X%10)<=3&&(Y%10)>=3))||((X%10==5)||(Y%10==5)))
               tsena+=1;
 }
                                //<две_не_рядом>             
 else 
 {
           dve_ne_radom= true;                     
               tsena+=3;
 }
 
         //К этому моменту мы имеем: <две_рядом> или <две_не_рядом>. Одно из двух: 
         //Если <две_рядом>, опускаем код ниже, если <две_не_рядом> заходим в него
 printf ("\n+|||||  %d\n", tsena);
 if (dve_ne_radom) {
 
                               //Двойное пересечение          
           if ((X%10>=3)&& (Y%10>=3) && (X/10)!=(Y/10)) {                    
               tsena+=2;
               
                               //одна остановка конечная       
               if (X%10==5)  
               tsena+=2;
                               //другая остановка конечная     
               if (Y%10==5)  
               tsena+=2;
           }   
           
                               //а тут нет двойного пересечения
                               //тут есть одинарное пересечение
                               //и конечная остановка; за всё  
                               //по рублю                      
           else {
               if (((X%10)>=3&&(Y%10)<=3)||((X%10)<=3&&(Y%10)>=3))
               tsena+=1;
               
               if ((X%10==5)||(Y%10==5))
               tsena+=1;
           }
 }
 
 printf ("tsena= %d\n", tsena); 
 }
 
 getchar ();
 
 
}
Кликните здесь для просмотра всего текста
<две_рядом>

/////////////////////////////////////////////////////////////////////

<две_рядом><пересечение_зон>
<две_рядом><конечная>

++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++

<две_не_рядом>

/////////////////////////////////////////////////////////////////////


<две_не_рядом><двойное_пересечение_зон >
<две_не_рядом><двойное_пересечение_зон>< конечная>
<две_не_рядом><двойное_пересечение_зон>< конечная><конечная>
________________________________________ ______________________________

<две_не_рядом><пересечение_зон>
<две_не_рядом><пересечение_зон><конечная >
<две_не_рядом><конечная>

++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++


Добавлено через 56 секунд
Кликните здесь для просмотра всего текста
<две_рядом>

/////////////////////////////////////////////////////////////////////

<две_рядом><пересечение_зон>
<две_рядом><конечная>

++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++

<две_не_рядом>

/////////////////////////////////////////////////////////////////////


<две_не_рядом><двойное_пересечение_зон >
<две_не_рядом><двойное_пересечение_зон>< конечная>
<две_не_рядом><двойное_пересечение_зон>< конечная><конечная>
________________________________________ ______________________________

<две_не_рядом><пересечение_зон>
<две_не_рядом><пересечение_зон><конечная >
<две_не_рядом><конечная>

++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++


Добавлено через 58 секунд
фигня какая-то не удаётся что-то мне сжать это содержание.
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
<две_рядом>
 
/////////////////////////////////////////////////////////////////////
 
<две_рядом><пересечение_зон>
<две_рядом><конечная>
 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
<две_не_рядом>
 
/////////////////////////////////////////////////////////////////////
 
 
<две_не_рядом><двойное_пересечение_зон>
<две_не_рядом><двойное_пересечение_зон><конечная>
<две_не_рядом><двойное_пересечение_зон><конечная><конечная>
______________________________________________________________________
 
<две_не_рядом><пересечение_зон>
<две_не_рядом><пересечение_зон><конечная>
<две_не_рядом><конечная>
 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1
35 / 35 / 4
Регистрация: 28.11.2012
Сообщений: 164
30.11.2012, 19:29  [ТС]
Спасибо большое за помощь, я просмотрел код, уловил мысль, написал сам программу и потом рассмотрел Ваш код детально и сравнил со своим. Я немного по другому if инструкции написал но булевы выражения по сути те же.
Выложу и свой код, может кому то еще пригодится, но выложу на Java.
Java
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
class  Tsena_beleta{  
  public static void main(String[]arg){
    int x = In.readInt();//класс In не стандартный а упрощенный класс для новичков взятый из одной книги
    int y = In.readInt();
    int tsena = 0;
 
    if ((((Math.abs(x%10 - y%10))==1) & ((x!=0 & y!=21)|(y!=21 & x!=0))) | (((x%10 == 2) & (y%10 == 2))& ((x!=42&y!=52)|(y!=52&x!=42))&(x!=y))){
      tsena = tsena + 2;
      System.out.println("Соседние остановки");
    }else {
      tsena = tsena + 3;
      System.out.println("Одноразовый сбор");
    }
    if(x%10==5){
      tsena = tsena + 1;
      System.out.println("Конечная");
    }
    if(y%10==5){
      tsena = tsena + 1;
      System.out.println("Конечная");
    }
    if(((x%10 <= 2)&(y%10>2))|((y%10 <= 2)&(x%10>2))){
      tsena = tsena + 1;
      System.out.println("1xПересечение зон");
    }
    if((x/10 != y/10) & x%10>2 & y%10>2){
      tsena = tsena + 2;
      System.out.println("2xПересечение зон");
    }
    System.out.println(tsena);
  }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.11.2012, 19:29
Помогаю со студенческими работами здесь

Составить программу, которая определяла бы стоимость проезда в один конец между станциями
Стоимость проезда на пригородном поезде составляет 3 рубля за одну зону. Нумерация зон ведётся, начиная с городского вокзала(1 зона)....

Посчитать минимальную и максимальную стоимость проезда в рублях, которую могли заплатить пассажиры автобуса
Цена проезда в автобусах нашего города — один рубль. Однако, не все так просто — каждый взрослый пассажир имеет право провезти бесплатно не...

интересное задание
помогите решить следующую задачу для каждого слова заданного предложения указать долю согласных. Определить слово, в котором доля...

Интересное задание.
Будут ли отличаться и как результаты в следующих случаях mov al, 127 mov al, 127 add al, 125 adc al, 125 Объяснить ответ.

Интересное задание...
Определить какая сумма элементов больше, расположенная до максимального элемента или после. вот что у меня вышло: var a:arrayof...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru