Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
9 / 10 / 5
Регистрация: 29.09.2016
Сообщений: 81
1

За сколько шагов человек пройдет N метров?

30.11.2016, 07:54. Показов 1670. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
1 шаг Руслана равно 75 см. Если он путешествует пешком 5 шагов вперед и один шаг
назад, тогда за сколько шагов, он должен достичь до 24 метров?
Заранее спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2016, 07:54
Ответы с готовыми решениями:

Сколько нужно рулонов обоев для оклейки комнаты длиной m метров, шириной n метров и высотой h метров?
1. Одна задача - одна тема. Тем более что картинку вы не вложили. 2.Сколько нужно рулонов обоев...

Сколько метров от дома до магазина, если человек идет со скоростью V м/мин, а весь путь она проходит за T ч?
4.Сколько метров от дома до магазина, если человек идет со скоростью V м / мин, а весь путь она...

Сколько должно быть обои для наклеивания помещения длиной М, шириной И метров и высотой Х метров, ширина рулона 10 см
Даны числа A, B, Sub, удовлетворяющие аксиомы треугольника и число P.Выполните следующие...

Определить, какое расстояние пройдет человек за время t
Задача 3.1. Составить программу, которая определяет, какое расстояние пройдет человек за время t,...

17
Си-решеточник
140 / 134 / 60
Регистрация: 07.02.2011
Сообщений: 669
30.11.2016, 10:08 2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static void Main(string[] args)
        {
            float stepSize = 0.75f;
            int targetLength = 24;
 
            float currentLength = 0;
            float currentStepsCount = 0;
 
            while (targetLength > currentLength)
            {
                currentLength += 5 * stepSize - stepSize;
                currentStepsCount++;
            }
            Console.WriteLine("Руслану понадобиться сделать {0} шагов, чтобы достичь {1} метров.", currentStepsCount, targetLength);
            Console.ReadKey();
        }
0
27 / 27 / 16
Регистрация: 22.04.2016
Сообщений: 86
30.11.2016, 11:04 3
Лучший ответ Сообщение было отмечено Otabek_Mansurov как решение

Решение

Руслан слегка своеобразный молодой человек, а у вас, Rameron, подсчитывает количество циклов из 5 шагов вперед и 1 назад..

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static void Main(string[] args)
        {
            
            float stepSize = 0.75f;
            float targetLength = 24.0f;
 
            float currentLength = 0.0f;
            int currentStepsCount = 0;
 
            do
            {
                currentLength += 4*stepSize;
                currentStepsCount += 6;
            } while (currentLength < targetLength);
            currentStepsCount -= 6;
            currentLength-= 4*stepSize;
            currentStepsCount += (int)((targetLength - currentLength)/stepSize);
 
            Console.WriteLine("Руслану понадобиться сделать {0} шагов, чтобы достичь {1} метров.", currentStepsCount, targetLength);
            Console.ReadKey();
        }
1
Си-решеточник
140 / 134 / 60
Регистрация: 07.02.2011
Сообщений: 669
30.11.2016, 11:09 4
Таки да, что-то я не в адеквате был, когда это писал...
0
9 / 10 / 5
Регистрация: 29.09.2016
Сообщений: 81
30.11.2016, 20:26  [ТС] 5
Можете прокомментировая код объяснить это все мне?
0
Си-решеточник
140 / 134 / 60
Регистрация: 07.02.2011
Сообщений: 669
30.11.2016, 22:34 6
Simbiont, кстати, у вас тоже не без косяков. Ведь в условии задачи сказано, что Руслан после 5 шагов вперед, делает 1 назад, а у вас получается, что пройденное расстояние проверяется только после того, как он сделал все 6 шагов. А что, если Руслан достигает указанной длинны за количество шагов, не кратное 6?
И зачем делать цикл с после-условием, если вы всё равно после него возвращаете переменные в состояние, которое было в начале цикла?

Добавлено через 2 часа 0 минут
Цитата Сообщение от Otabek_Mansurov Посмотреть сообщение
Можете прокомментировая код объяснить это все мне?
Вот код, который я переделал и, кажется, логически он правильный, с комментариями:
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
static void Main(string[] args)
        {
            float stepSize = 0.75f;             //Длина шага
            float targetLength = 24.0f;         //Требуемое расстояние
 
            float currentLength = 0.0f;         //Пройденное расстояние
            int stepsCount = 0;                 //Пройденное количество шагов
 
            bool isLengthReached = false;       //Флаг, определяющий, было ли достигнуто
 
            while(!isLengthReached)             //Выполнять цикл, пока флаг не станет истинным
            {
                stepsCount++;                   //Увеличиваем количество уже пройденных шагов на 1
 
                if (stepsCount != 1 && (stepsCount - 1) % 5 == 0)   //Если номер текущего шага не равен 1 (ибо остача деления 0 на 5 ноль) и номер предыдущего шага кратный 5, то от пройденного расстояния отнимаем расстояние одного шага
                    currentLength -= stepSize;
                else                                                //Иначе увеличиваем пройденной расстояния на расстояние одного шага
                    currentLength += stepSize;
                if (currentLength >= targetLength)                  //Если требуемое расстояние пройдено, то установить значение флага в истину
                    isLengthReached = true;                   
            }
 
            Console.WriteLine("Руслану понадобиться сделать {0} шагов, чтобы достичь {1} метров.", stepsCount, targetLength);   //Выводим информацию
            Console.ReadKey();  //Ждём нажатия любой кнопки от пользователя перед выходом из программы
        }
Проследите за логикой, может я не так понял условие задачи.
0
27 / 27 / 16
Регистрация: 22.04.2016
Сообщений: 86
01.12.2016, 10:00 7
Согласен, отчасти.
После цикла ведь возвращается назад и уже подсчитывает конкретно сколько еще шагов осталось до достижения.
То есть то, о чем как раз вы говорите. - если за цикл достигается длина, то цикл прерывается, после чего, последний этап уже пошагово оценивается.
0
Си-решеточник
140 / 134 / 60
Регистрация: 07.02.2011
Сообщений: 669
01.12.2016, 10:05 8
Цитата Сообщение от Simbiont Посмотреть сообщение
если за цикл достигается длина, то цикл прерывается, после чего, последний этап уже пошагово оценивается.
Именно. В любом случае, по условию задачи сложно определить "уровень своеобразности" главного героя, но нигде не сказано, что цикл не может прерываться.
0
27 / 27 / 16
Регистрация: 22.04.2016
Сообщений: 86
01.12.2016, 11:58 9
ну тогда корректнее было бы использовать break при описании полного цикла.
типа так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
while (currentLength < targetLength)
            {
                //5 шагов вперед
                for (int i = 1; i<=5; i++)
                   {
                    if(currentLength <= targetLength)
                       {
                          currentLength += stepSize;
                          currentStepsCount++;
                        }
                     else break;
                    }
                   //1 шаг назад
                  if(currentLength <= targetLength)
                       {
                          currentLength -= stepSize;
                          currentStepsCount++;
                        }
                     else break;
                    
            }
0
Си-решеточник
140 / 134 / 60
Регистрация: 07.02.2011
Сообщений: 669
01.12.2016, 12:05 10
Цитата Сообщение от Simbiont Посмотреть сообщение
ну тогда корректнее было бы использовать break при описании полного цикла.
Не скажу, что корректнее, но понятнее.
0
309 / 317 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
01.12.2016, 14:00 11
Было бы красиво сделать это без циклов уравнением
Была помню в школе такая олимпиадная задачка вроде)
0
Си-решеточник
140 / 134 / 60
Регистрация: 07.02.2011
Сообщений: 669
01.12.2016, 16:03 12
Цитата Сообщение от sldp Посмотреть сообщение
Было бы красиво сделать это без циклов уравнением
Только в таком случае весь смысл реализации данной задачи на C# теряется в ноль. Продумать уравнение и в пару строки написать программу, которая просчитает его результат вместе с выводом в консоль? Это уже не программирование, а математика какая-то.
0
309 / 317 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
01.12.2016, 19:24 13
Rameron, Это называется оптимальное решение. Программист и отличается от кодогенератора тем, что способен думать и находить такие решения.
0
Си-решеточник
140 / 134 / 60
Регистрация: 07.02.2011
Сообщений: 669
02.12.2016, 00:01 14
Цитата Сообщение от sldp Посмотреть сообщение
Это называется оптимальное решение
Только проблема этого решения в том, что без труда почти наверняка его поймёт именно тот, кто его написал, в ту очередь как остальным людям придется потратить на это время. Стоит придерживаться принципа KISS и всё будет хорошо.
0
309 / 317 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
02.12.2016, 11:27 15
Rameron, Так а что может быть проще простого уравнения?

Да и проще не всегда лучше. Помню видел кусок кода, который должен был переводить буквы в числа(порядковый номер в алфавите). Сделано это было 33 ифами. Просто? Да! Понятно? Да! Но я думаю не стоит объяснять на сколько это "грамотно".
0
Си-решеточник
140 / 134 / 60
Регистрация: 07.02.2011
Сообщений: 669
02.12.2016, 11:32 16
Цитата Сообщение от sldp Посмотреть сообщение
Сделано это было 33 ифами.
Ну вы уже путаете простоту и откровенное извращение сродни индусскому коду Да и у меня нету 33 ифов, а вполне компактный код с нормальными названиями переменных и избыточным комментированием по просьбе автора.
0
309 / 317 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
02.12.2016, 11:37 17
Rameron, Ничего против вашего кода не имею. И поскольку скорее всего это учебное задание, то его и нужно было так сделать. Но красивее было бы в парочку арифметических операций, если конечно такое вообще возможно
0
Си-решеточник
140 / 134 / 60
Регистрация: 07.02.2011
Сообщений: 669
02.12.2016, 11:53 18
Цитата Сообщение от sldp Посмотреть сообщение
Но красивее было бы в парочку арифметических операций
Ну да, вроде как возможно:
C#
1
float nStepCounts = targetLength * totalStepsByOnce / (stepSize * forwardStepsByOnce - stepSize * backwardStepsByOnce);
1
02.12.2016, 11:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2016, 11:53
Помогаю со студенческими работами здесь

Сколько шагов до старницы?
У меня есть блог. Пробился в миралинкс. готов размещать статьи. надо указать в скольки кликах от...

А4 - это сколько метров?
все программы в метрах, а вот А4 - это сколько?

Сколько метров проскользит сумка?
Здравствуйте, помогите решить бытовую задачку. Человек ударил ногой сумку и передал ей 1000Н силы...

Имеются сведения об обеспеченности жильем N работников предприятия: фамилия работника, количество человек в семье, количество кв. метров жилой площади
Имеются сведения об обеспеченности жильем N работников предприятия: фамилия работника, количество...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru