С клавиатуры вводятся целые числа ввод должен прекратиться если введено число 0

Обновлено: 16.05.2024

Решение

ты должен использовать cin>>month;
до, если заявление. Потому что, если вы не используете это, ваш ввод с клавиатуры никогда не будет назначен вашему целому числу.

Я также рекомендую использовать switch-case и избегать использования оператора if как можно дольше.

В вашем случае массив строк также применим, но switch-case удобнее

Вы можете ознакомиться с кодом ниже. рекомендую удалите оператор break, затем запустите код или же удалите инструкцию по умолчанию и введите неверный inpu, затем запустите код. Это поможет вам увидеть, как работает коммутатор

Другие решения

Нужно ли иметь строку, которая включает все названия месяцев?

Не строка, а массив строк может быть использован, чтобы сделать ваш код гораздо более компактным, и, как указал Тимур, вы можете использовать cin читать с консоли ввода:

Индексы массива начинаются с 0 в C / C ++, поэтому вам нужно вычесть 1 от числа, введенного пользователем. Возможно, вы также захотите добавить if заявление, чтобы убедиться, что число составляет от 1 до 12 включительно, но я оставлю это в качестве упражнения для читателя.

Вместо того, чтобы делать это самостоятельно, я думаю, что я бы использовал некоторые функции, встроенные в стандартную библиотеку:

Среди прочего, это имеет преимущество в том, что он учитывает локали, поэтому, если (например) вы делаете что-то вроде:

Во-первых, определите переменную для хранения названия месяца:

Затем после каждой команды cout в гнезде if else добавьте следующее:

Например, если месяц = ​​1, строка выше должна быть monthName.assign("January");

В конце программы просто поместите monthName в cout:

Есть несколько способов сделать это. Во-первых, ваш путь верен, однако я бы присвоил строке значение месяца в блоках if и вместо этого прислал бы строку в конце.
Другой, более простой способ, если вы знаете массивы, состоит в том, чтобы создать массив с месяцами и создать массив [monthnumber]. <- (Можете ли вы найти ошибку в этом утверждении).

Кроме того, было бы лучше поместить это в цикл, пока пользователь не введет число от 1 до 12





Как написать, чтоб вводимые с клавиатуры числа записывались в переменные (в неограниченном (для пользователя) количестве.
И что потом с ними делать? Если, например, будешь считать их среднее арифметическое/сумму/еще что-нибудь в этом роде, то тебе вообще их ВСЕ запоминать не нужно. Прочитал число, сделал с ним нужное действие, и читаешь новое. Итого - один цикл
с клавиатуры вводятся целые числа. Признак конца ввода- число 0. Определить число, следующее за последним из отрицательных чисел.
Это надо решить с помощью логики, циклов, процедур-функций. Массивы мы еще не проходили. Использовать строки. Получать от пользователя 1 байт, проверять его значение, если он ввел цифру - добавлять в строку и отображать эту цифру, если введен бэкспейс - удалять последний символ в строке, если еще чего-нибудь - ничего не делать, символ не отображать.



Piroxyline, при чем здесь строки? Вопрос внимательно читал? А если у меня 512 чисел (да еще и трехзначных)?

Gibrid, тебе придется хранить то число, которое ты вводишь (допустим, X), то, которое тебе нужно найти (т.е. введенное после отрицательного, назовем его Res), и логическую переменную (Flag: Boolean) - признак того, что было введено отрицательное число. Все.

Вот алгоритм. Попробуй его запрограммировать самостоятельно (если не получится - обращайся, поможем):

1. Изначально Flag установить в False.
2. Берешь у пользователя очередное число X. Если X = 0, то заканчиваешь обработку, выводишь на печать число Res, и выходишь из программы.

Иначе (X <> 0) алгоритм такой: если Flag = True (т.е. перед этим было введено отрицательное), то запоминаешь значение X еще и в Res, т.е. оно уже модет быть результатом, если больше отрицательных чисел введено не будет. После этого (именно после, а не сразу при вводе очередного X) устанавливаешь новое значение Flag, если X < 0 - то в True, иначе - False (для следующих чисел)

3. Продолжаешь ввод (переходишь к п.2)

Добавлено 21.10.06, 09:54
Да, забыл еще кое-что: Res изначально желательно присвоить какое-то значение, которое будет возвращаться, если не было введено ни одного отрицательного числа, или было только одно отрицательное - последнее, т.е. после него был введен ноль.

Цикл — это многократно повторяющийся фрагмент программы.

В java существует два типа циклов: типа «пока» и типа «n-раз».

Первый тип «пока» предназначен для повторения какого-то действия до тех пор, пока выполняется некоторое условие. Пример: увеличивать число на 5 до тех пор, пока оно не станет трёхзначным.

Второй тип «n-раз» предназначен для повторения каких-то действий заранее известное количество раз. Пример: умножить число само на себя 4 раза.

Цикл типа «пока» (операторы while и do…while)

Оператор while повторяет указанные действия до тех пор, пока его параметр имеет истинное значение.

Например, такой цикл выполнится 4 раза, а на экран будет выведено «1 2 3 4 »:

Такой цикл не выполнится ни разу и на экран ничего не выведется:

Такой цикл будет выполняться бесконечно, а на экран выведется «1 2 3 4 5 6 7 …»:

Условие, определяющее будет ли цикл повторятся снова, проверяется перед каждым шагом цикла, в том числе перед самым первым. Говорят, что происходит предпроверка условия.

Бывает цикл типа «пока» с постпроверкой условия. Для его записи используется конструкция из операторов do…while.

Такой цикл выполнится 4 раза, а на экран будет выведено «2 3 4 5 »:

Такой цикл выполнится 1 раз, а на экран будет выведено «2 »:

Тело цикла do…while выполняется по крайней мере один раз. Этот оператор удобно использовать, когда некоторое действие в программе нужно выполнить по крайней мере единожды, но при некоторых условиях придётся повторять его многократно.

Ознакомьтесь со следующей программой (она загадывает случайное целое число из отрезка [1;10] и просит пользователя его угадать, вводя варианты с клавиатуры, пока пользователь не угадает число, программа будет ему подсказывать, сообщая больше или меньше число загаданное, чем то, что ввёл пользователь):

Внесите в программу следующие доработки:

Программа должна считать количество попыток, которое потребовалось пользователю, чтобы угадать число. И в конце сообщать, сколько было попыток.

Программа должна загадывать число не из отрезка [1;10], а целое число из отрезка от [−10;10], исключая ноль. При этом, постарайтесь, чтобы распределение случайных чисел генерируемых программой было равномерных (т. е. в случае выпадения нуля его нельзя просто заменить на какое-то другое число, например, на 1, ведь тогда 1 будет выпадать с вдвое большей вероятностью, чем остальные числа).

Программа должна подсказывать пользователю, что он ошибся в знаке, если программа загадала положительное число, а пользователь ввёл отрицательное. И наоборот.

Цикл типа «n-раз» (оператор for)

Оператор for содержит три параметра. Первый называется инициализацией, второй — условием повторения, третий — итерацией.

В первом параметре обычно выбирают какую-то переменную, с помощью которой будет подсчитываться количество повторений цикла. Её называют счетчиком. Счётчику задают некоторое начальное значение (указывают, начиная с какого значения он будет изменяться).

Во втором параметре указывают некоторое ограничение на счётчик (указывают, до какого значения он будет изменяться).

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

Перед первым шагом цикла счётчику присваивается начальное значение (выполняется инициализация). Это происходит лишь однажды.

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

После завершения каждого шага цикла и перед началом следующего (и, значит, перед проверкой условия повторения) выполняется итерация.

Представленная программа выводит на экран числа от 1 до 100:

Представленная программа выводит на экран числа от 10 до −10:

Представленная программа выводит на экран нечётные числа от 1 до 33:

Представленная программа вычислит сумму элемнтов фрагмента последовательности 2, 4, 6, 8,… 98, 100. Итак:

Представленная программа будет возводить число из переменной a в натуральную степень из переменной n:

Представленная программа выведет на экран 10 первых элементов последовательности 2n+2, где n=1, 2, 3…:

Представленная программа выведет на экран 10 первых элементов последовательности 2an−1+3, где a1=3:

В одном цикле можно задавать сразу несколько счётчиков. При этом несколько выражений в итерации и в инициализации разделяются запятыми. Условие повторения можно задавать только одно, но оно может быть выражением, содержащим сразу несколько счётчиков.

Представленная программа выведет на экран 10 первых элементов последовательности 2an−1–2, где a1=3:

Представленная программа выведет на экран такую последовательность «0 -1 -4 -9 -16 -25»:

Досрочное завершение цикла (оператор break)

Как цикл типа «пока» так и цикл типа «n-раз» можно завершить досрочно, если внутри тела цикла вызвать оператор break. При этом произойдёт моментальный выход из цикла, не будет закончен даже текущий шаг (т. е. если после break присутствовали какие-то ещё операторы, то они не выполнятся).

В результате работы следующего примера на экран будут выведены только числа «1 2 3 4 Конец»:

Когда программа будет выполнять цикл в пятый раз(войдёт в цикл с счётчиком равным 5), сразу же будет проверено и окажется истинным условие при котором выполнится оператор break. Оставшаяся часть тела цикла (вывод на экран) уже производится не будет: программа сразу перейдёт к выполнению операций указанных после цикла и далее.

C помощью оператор break можно прервать заведомо бесконечный цикл. Пример (на экран выведется «100 50 25 12 6 3 1 0 » и после этого цикл остановится):

Оператор break имеет смысл вызывать только при наступлении какого-то условия, иначе цикл будет завершен досрочно на первом же своём шаге.

Цель работы: получение навыков разработки алгоритмов циклической структуры, их кодирования, отладки и тестирования.

Задания для подготовки к работе

1. Изучите возможности языка Паскаль для организации циклов с заданным числом шагов и итерационных циклов.

2. Разработайте алгоритм для решения задачи соответствующего варианта в соответствии с первым принципом структурного программирования и опишите его блок-схемой в укрупненных блоках с последующей детализацией.

3. Закодируйте алгоритм.

4. Подберите наборы тестовых данных

Задания к работе

1. Наберите программу, отладьте ее, протестируйте.

2. Выполните анализ ошибок, выявленных при отладке программы.

Содержание отчета

1. Формулировка задачи.

2. Ответы на пункты 2 – 4 заданий для подготовки к работе.

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

Варианты заданий

1. Дано целое неотрицательное число n. Определить, входит ли в запись числа n данная цифра ровно 2 раза.

2. Дано целое неотрицательное число n. Установить, является ли данное число n палиндромом.

3. С клавиатуры вводятся вещественные числа. Признак конца
ввода – 0. Определить, является ли вводимая последовательность геометрической прогрессией.

4. Дано целое неотрицательное число n. Определить количество нулей, которыми заканчивается запись числа n. Вывести n в виде a*10 Ù k, где a - целое, не содержащее нуля в конце записи числа; k – количество нулей в конце записи числа n. Например, 130000=13*10 Ù 4.

5. С клавиатуры вводятся целые числа. Признак конца ввода – число 0. Определить число, следующее за последним из отрицательных чисел.

6. Дано целое неотрицательное число n. Найти максимальную цифру в записи этого числа.

7. Дано целое неотрицательное число n. Найти сумму цифр числа n.

8. С клавиатуры вводятся символы. Признаком конца ввода служит точка. Определить сумму введенных цифр.

9. Дано целое неотрицательное число n. Найти произведение отличных от нуля цифр данного числа.

10. Определить, можно ли данное натуральное число представить в виде суммы квадратов двух натуральных чисел. Например, 5=1 2 +2 2 .

11. Определить, в какой степени входит число 3 в разложение на простые множители натурального числа n.

12. С клавиатуры вводятся целые числа. Признак конца ввода – 0. Определить число, следующее за первым из введенных максимальных значений.

13. Вывести целое неотрицательное число n в семеричной системе счисления.

14. Установить, четным или нечетным является число цифр в записи данного натурального числа. Если число цифр нечетно, вывести среднюю цифру.

15. С клавиатуры вводятся целые числа. Признак конца ввода – 0. Определить количество минимальных значений.

16. Найти все простые делители данного натурального числа.

17. С клавиатуры вводятся целые числа. Признак конца ввода – 0. Определить число, следующее за последним из введенных минимальных значений.

18. Определить, является ли данное натуральное число простым числом.

19. Установить, является ли данное натуральное число n равным сумме всех его делителей, меньших n.

20. С клавиатуры вводятся символы. Признак конца ввода – конец файла. Определить максимальную длину подпоследовательности одинаковых следующих друг за другом символов.

21. С клавиатуры вводятся целые числа. Признак конца ввода – 0. Определить число, предшествующее последнему из введенных минимальных значений.

22. С клавиатуры вводятся целые числа. Признак конца ввода – 0. Определить число, предшествующее первому из введенных минимальных значений.

23. С клавиатуры вводятся символы. Признак конца ввода – конец файла. Определить символ, следующий за последним вхождением цифры.

24. С клавиатуры вводятся целые числа. Признак конца ввода – 0. Определить количество введенных нечетных чисел.

25. С клавиатуры вводятся целые числа. Признак конца ввода – 0. Определить, является ли вводимая последовательность упорядоченной по невозрастанию или неубыванию.

26. С клавиатуры вводятся целые числа. Признак конца ввода – 0. Определить, является ли вводимая последовательность арифметической прогрессией.




27. С клавиатуры вводятся целые числа. Признак конца ввода – 0. Определить количество максимальных значений.

28. С клавиатуры вводятся символы. Признак конца ввода – конец файла. Определить символ, предшествующий первому вхождению прописной буквы.

29. С клавиатуры вводятся символы. Признак конца ввода – конец файла. Определить, сколько было введено пар следующих друг за другом символов, которые и в таблице ASCII расположены в таком же порядке.

30. Вывести в возрастающем порядке все целые числа из диапазона 1..10000, представимые в виде суммы квадратов двух целых чисел.

Контрольные вопросы

1. Виды операторов циклов в Паскале.

2. Какие циклы в Паскале являются циклами с предусловием?

3. Перечислите отличия циклов while и repeat.

4. Какой тип может иметь параметр цикла for, а также начальное и конечное выражения в заголовке цикла?

5. Какие действия с параметром цикла for недопустимы в теле цикла?

6. Какое значение имеет параметр цикла for после окончания работы цикла?

7. Можно ли изменять в теле цикла переменные, которые есть в начальном или конечном выражении в заголовке цикла?

8. Какой из циклов является наиболее универсальным?

9. Напишите фрагмент программы, используя цикл с постусловием, эквивалентный циклу
for i:=1 to 10 do

Читайте также: