#18 Явное приведение типа в Паскаль, процедура val() - преобразование строки в число
Primary tabs
В этом уроке речь пойдёт о явном приведении (конвертации, преобразовании) строки в число.
Что нужно знать
Задачи данного урока основаны на умении работать с одномерными массивами, в частности со строками, а также на использовании стандартной процедуры val(), позволяющей делать попытку конвертации строки в число.
Задачи для самостоятельного решения
- Пользователь вводит строку, проверьте является ли она числом, если да, то выведите в ответ это число, иначе сообщите об ошибке.
-
У вас есть массив:
type myArr = array[1..8] of integer; var a: myArr;
-- целочисленный тип из 8 элементов.
Пользователь вводит любые целые числа (после каждого нажимает Enter), до тех пор пока не введет символ решетки #
Задача: сохранить в массив целые числа, которые ввел пользователь (до символа # или до окончания места в массиве) и вывести их на экран, значения не используемых ячеек массива выводиться не должны.
Примечания:
- Изначально эта задача была в более раннем уроке, но в ходе обсуждения решили перенести её в урок, где используется val()
- Есть строка, в которой, среди прочих символов содержатся 3 числа, выделите эти в массив.
Проверьте работу программы на строках:123fdgF34sdf45g 123fdgF34sdfg45 fdg123F34sdfg45
- Пользователь вводит строку произвольных символов, посчитайте количество цифр в ней, численное значение которых больше либо равно $5$.
- Пользователь вводит произвольную строку, посчитайте количество чисел в ней - тех, что больше $125$. Например, в строке:
123ret34#2145esrt5
такое число только одно и это:
2145
(сначала выделите эти числа из строки и запишите их в массив (of integer), а затем уже посчитайте число тех, что больше $125$)
- Пользователь вводит в консоль строку вида:
Имя 123
-- т.е. слева имя и через произвольное количество пробелов число баллов. Разберите эту строку получив имя пользователя как значение в переменной типа string и число баллов в перееменной типа integer;
- Пользователь вводит в консоль строки вида (имя + произвольное число пробелов + балл):
Вася 485 Коля 555 Юра 61 .......... .... end // признак завершения ввода
(пока не введёт строку end) -- где слева указаны имена участников, а справа -- число баллов.
Используя массив строк и массив целых чисел (пусть оба массива будут максимальной длины =3) считайте отдельно имена и баллы и определите победителя, выведя его имя и полученный им балл. -
Решите предыдущую задачу:
Пользователь вводит в консоль строки вида (имя + произвольное число пробелов + балл):
Вася 485 Коля 555 Юра 61 .......... .... end // признак завершения ввода
(пока не введёт строку end) -- где слева указаны имена участников, а справа -- число баллов.
Используя массив строк и массив целых чисел (пусть оба массива будут максимальной длины =3) считайте отдельно имена и баллы и определите победителя, выведя его имя и полученный им балл.С использованием процедуры, которая разбирала бы очередную строку, изменяя по ссылке значения двух перемененных (одна для имени и одна для балла), уже после вызова этой процедуры для очередной строки записывайте очередные значения переменных в массивы (каждую в свой).
-
На вход вашей программы подается строка вида:
<целоечисло><произвольное число пробелов> <арифм.операция> <произвольное число пробелов> <целоечисло>
например:
1 + 3
или
2 - 12
Напишите программу, которая разбирает вычисляет результат этого приложения (сделайте поддержку операций сложения и вычитания).
-
На вход вашей программы подается строка вида:
5 + 6 -34 + 56 - 7 + 2
("сколько угодно" чисел с операциями суммы и разности в любом порядке). Вычислите результат (пробелов между символом операции и числом может и не быть)
-
Задана последовательность символов, имеющая следующий вид: $p_1q_1p_2q_2p_3...q_{n–1}p_{n}$ , где $p_i$ — число, а $q_i$ — знак арифметического действия из набора {+, –, *}. Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики.
- Входные данные: На вход программе подается строка указанного вида, состоящая не более чем из 9 чисел, разделенных символами арифметических операций.
- Выходные данные: Выведите значение арифметического выражения.
Примеры:
Входные данные Результат 5+2 7 1-2*5+2 -7 5*6+7-3*2+11 42 5*6+7-3*2*3+11 30
Как решать: Выделите массив операций и массив значений, сначала посчитайте все умножения, а потом все остальное
(условие задачи взято из книги Е. В. Андреевой)
-
Задана последовательность символов, имеющая следующий вид: $p_1q_1p_2q_2p_3...q_{n–1}p_{n}$ , где $p_i$ — число, а $q_i$ — знак арифметического действия из набора {+, –, *}. Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики.
- Входные данные: На вход программе подается строка указанного вида, состоящая не более чем из 9 чисел, разделенных символами арифметических операций.
- Выходные данные: Выведите значение арифметического выражения.
Примеры:
Входные данные Результат 5+2 7 1-2*5+2 -7 5*6+7-3*2+11 42 5*6+7-3*2*3+11 30
Как решать: Посчитайте результат за одно прочтение строки, без использования массивов (в нашем курсе решение в таком стиле для этой задачки было впервые добавлено участником slavina036).
(условие задачи взято из книги Е. В. Андреевой)
Подсказка: Т.е. такая процедура может иметь следующую сигнатуру:
procedure getData(str: string; var name: string; var ball: integer);
Задачи повышенной сложности:
- Log in to post comments
- 14007 reads
vedro-compota
Tue, 04/25/2017 - 09:51
Permalink
Возврат массива из функции
Возможно, при решении задач будет полезен пример возврата массива из функции.
_____________
матфак вгу и остальная классика =)
fgh
Mon, 04/06/2020 - 11:24
Permalink
Паскаль. Явное приведение типа в Паскаль. Задача номер 3.
Вопрос про задачу "Пользователь вводит произвольную строку, посчитайте количество чисел в ней - тех, что больше 125". Здесь точно массив из целых чисел? А если он состоит из переменных типа string?
vedro-compota
Sat, 05/23/2020 - 10:40
Permalink
да, из строки вы должны
да, из строки вы должны выделить массив целых чисел.
_____________
матфак вгу и остальная классика =)
vedro-compota
Wed, 05/27/2020 - 20:25
Permalink
возможная схема для 9-ой задачи
_____________
матфак вгу и остальная классика =)
Pages