Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
gen3
4 / 4 / 3
Регистрация: 30.04.2013
Сообщений: 31
1

Вводить с клавиатуры целые числа, пока не нарушается возрастание этой последовательности

12.08.2014, 11:39. Просмотров 1118. Ответов 9
Метки нет (Все метки)

Составьте программу, позволяющую пользователю вводить с клавиатуры
целые числа, пока не нарушается возрастание этой последовательности
или пока пользователь не введет число, равное 100.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int val = 0;
            int x = 0;
            do
            {
            metka:
                    try
                    {
                        x = val;
                        Console.Write("Введите целое число: ");
                        val = int.Parse(Console.ReadLine());
                        Console.WriteLine("x = {0}, val = {1}", x, val);
                    }
                    catch (FormatException e)
                    {
                        Console.WriteLine(e.Message);
                        goto metka;
                    }                               
            }
            while(val != 100 && x < val);
Ничего сложного в программе нет, но я не могу понять почему в куске кода while(val != 100 && x < val); используется &&? Когда я писал, то использовал ||, т.е. даже если одно из этих уловий выполняется, то цикл прерывается, но с || не работает, почему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2014, 11:39
Ответы с готовыми решениями:

Создать текстовое поле, в которое можно вводить только целые числа
Всем привет. Мне надо создать текстовое поле, в которое можно вводить только...

Вводить числа, пока не будет введено число, по модулю больше 5. Найти произведение чисел.
код и коменты к нему Написать программу, которая будет вводить числа и...

Найдите сумму элементов двумерного массива, больше заданного числа А (А вводить с клавиатуры)
Найдите сумму элементов двумерного массива, больше заданного числа А (А вводить...

Проверка на возрастание числовой последовательности
доброго времени суток, возникает ошибка при решении задачи : сделал так :...

С клавиатуры вводятся числа, пока не будет введен 0. Подсчитать сумму всех нечетных положительных чисел;
Как сделать так, чтобы с клавиатуры вводятся числа, пока не будет введен 0. А...

9
Learx
1045 / 852 / 194
Регистрация: 31.03.2010
Сообщений: 2,487
12.08.2014, 12:06 2
C#
1
2
3
4
5
6
7
int x=0;
do
{
   
      Console.WriteLine("Введите целое число: ");
}
while(!int.TryParse(Console.ReadLine(), out x))
1
tarasalk
1196 / 711 / 285
Регистрация: 13.06.2013
Сообщений: 2,498
12.08.2014, 12:26 3
gen3, почитайте внимательно как работают операторы &, &&, |, ||.
Цитата Сообщение от gen3 Посмотреть сообщение
даже если одно из этих условий выполняется, то цикл прерывается
Наоборот не прерывается. Когда выполняется while? до тех пор пока условие верно. А ваше условие val != 100 || x < val возвращает верно, когда верно хотя бы одно из подусловий. Программа остановится только если ввести два раза подряд 100, тогда нарушатся сразу оба условия.
1
Learx
1045 / 852 / 194
Регистрация: 31.03.2010
Сообщений: 2,487
12.08.2014, 12:52 4
прошу прощения, недочитал
C#
1
2
3
4
5
6
7
int x=0, val;
do
{   
      val = x;
      Console.WriteLine("Введите целое число: ");
}
while((!int.TryParse(Console.ReadLine(), out x) || x>val) && x!=100)
0
gen3
4 / 4 / 3
Регистрация: 30.04.2013
Сообщений: 31
12.08.2014, 13:14  [ТС] 5
Learx,
Цитата Сообщение от Learx Посмотреть сообщение
while((!int.TryParse(Console.ReadLine(), out x) || x>val) && x!=100)
можно подробнее про эту строчку?
0
Learx
1045 / 852 / 194
Регистрация: 31.03.2010
Сообщений: 2,487
12.08.2014, 14:48 6
gen3,
обозначим A=!int.TryParse(Console.ReadLine(), out x) (истина, если не получилось получить число)
B = x>val (Новое число больше предыдущего)
и C = x!=100 (х не равен 100)
если x=100, то C будет ложью и все выражение (A||B) && C будет ложь
если введеное число не удастся перевести, то А вернет истину и выражения B и C даже не будут вычислятся(ленивая проверка уловия) и цикл повторится
если число счталось, то выполняется проверка В.
если число не больше предыдущего, то В будет ложь и ввод прервется
если же больше, то В истина и цикл повторится
2
elfrei
6 / 4 / 0
Регистрация: 07.02.2014
Сообщений: 17
12.08.2014, 15:46 7
Learx,
По поводу, если число не удастся перевести, то... . Если я не ошибаюсь B не выполнится(ввиду оператора ||), а C все таки пройдет проверку. Исправьте если я не прав.
0
tarasalk
1196 / 711 / 285
Регистрация: 13.06.2013
Сообщений: 2,498
12.08.2014, 16:39 8
У меня вообще код Learx не запустился. Хотя возможно дело в онлайн компиляторе
В любом случае, мне кажется пихать все подряд в while(...) не очень хорошая идея. Малочитабельно, малорасширяемо. Вместо перехвата ошибок программа считает цикл завершенным.
У автора лично мне не понравилось использование goto. Я бы оформил это в виде метода+рекурсия.
0
Learx
1045 / 852 / 194
Регистрация: 31.03.2010
Сообщений: 2,487
12.08.2014, 16:55 9
elfrei, да,вы правы... но в данном случае это не критично.

Добавлено через 5 минут
tarasalk, можно и так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int x=0, val; bool f=true;
do
{   
      val = x;
      Console.WriteLine("Введите целое число: ");
      f = !int.TryParse(Console.ReadLine(), out x);
      if(f)
      {
          Console.WriteLine("Это не целое число!!!");
          continue;
      }
      if(x<=val)
      {
          Console.WriteLine("Должна быть возрастающая последовательность!!!");
          continue;
      }
      if(x>=100) break;
}
while(true)
1
elfrei
6 / 4 / 0
Регистрация: 07.02.2014
Сообщений: 17
12.08.2014, 17:20 10
Learx, спасибо, это я для самопонимания
0
12.08.2014, 17:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2014, 17:20

C# - Даны целые числа a1, …, an. Имеются ли в данной последовательности три идущих подряд нулевых члена
Помогите найти ошибку в программе: static void Main(string args) { ...

Вводить с клавиатуры целые числа пока их сумма меньше 100
Вводить с клавиатуры целые числа пока их сумма меньше 100 (запоминать введённые...

Вводить с клавиатуры целые положительные числа до тех пор, пока не будут введены два одинаковых числа подряд
Вводить с клавиатуры целые положительные числа до тех пор, пока не будут...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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