- Вывести дробную и целую части вещественного числа
- Напишите программу, которая переводит правильную дробь в десятичную, выделив (если нужно), период дроби
- Решение
- Дробная часть числа паскаль
- Целая часть числа
- Дробная часть числа
- Программирование. Стандартные функции Pascal-Паскаль
- Стандартные функции Pascal-Паскаль
- Операторы действия
- Ввод и вывод данных
- Программирование
- Исходники Pascal (127)
- Справочник
- Арифметические операции
- Другие операции с числами
- Выводы :
Вывести дробную и целую части вещественного числа
Учитель с Информатики дал задачу.
Дано действительное число p. В первой строке вывести его закругленное целое значение, во втором — его целую часть, в третьем — его дробную часть (один знак после запятой).
Входные данные.
3.5
Исходные данные.
4
3
0.5
Очень хочу ее решить но не получается.
Только начинаю учить этот язык.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Из вещественного числа выделить целую и дробную части и сохранить их в переменные целого типа
Составить процедуру, которая из вещественного числа выделяет целую и дробную части и сохраняет их в.
Вывести целую часть заданного положительного вещественного числа А
Казалось бы легкие задачи, а не получается. Заранее огромное спасибо. 2. Вывести целую часть.
Поменять местами дробную и целую части числа и вывести полученное значение числа.
19. Дано действительное число R вида nnn. ddd (три цифровых разряда в дробной и целой частях).
Вывести целую и дробную часть вещественного числа
Если целая и дробная часть числа равны — вывести на экран True Нет — False Приведенный ниже код.
Источник
Напишите программу, которая переводит правильную дробь в десятичную, выделив (если нужно), период дроби
Напишите программу, которая переводит правильную дробь в десятичную, выделив (если нужно), период дроби.
Входные данные
Входная строка содержит два числа M и N , разделённых пробелами. Гарантируется, что M 0
Помощь в написании контрольных, курсовых и дипломных работ здесь.
По заданным M и N получить период дроби M/N, если дробь конечная, вывести 0
По заданным M и N получить период дроби M/N, если дробь конечная, выводим 0. Пример: 1/2, выводим.
Написать программу, которая переводит числа с шестнадцатеричной системы в десятичную
С использованием функции hex, а также без неё.
Составить программу, которая переводит число А, заданный в двоичной системе счисления в десятичную
Составить программу, которая переводит число А, заданный в двоичной системе счисления, в число.
Напишите программу, которая переводит гривны в $
напишите программу, которая переводит гривны в $, DM c комментариями?
Решение
Hitoku, я даже и не знаю, что сказать. Не решение. 1/47, например?
Добавлено через 3 часа 5 минут
Hitoku, гляди. Не оптимизировал. Алгоритм в общих чертах:
Любая правильная или неправильная дробь представима в виде c,r(p), где с — целая часть, r — предпериод, p — период дроби. Например, 3/14=0,2142857142857142857. =0,2(142857): 0 — целая часть, 2 — предпериод, 142857 — период. Целая часть есть всегда, а вот есть ли предпериод и / или период — это нужно выяснять.
Сразу выделяем и печатаем целую часть дроби, и сокращаем дробь.
Теперь у нас есть дробь m/n, причём будем считать, что m p и 5 q , которые делят знаменатель. В самом деле, если знаменатель представим в виде n=2 p 5 q z, и пусть с=max(p, q), тогда
Вычисляем длину предпериода и печатаем его.
О периоде. Выяснено, что длина периода равна количеству разрядов числа, составленных из цифры 9, делящегося на z.
Вычисляем длину периода и печатаем его.
Пример: 62/28.
Целая часть: 62 div 28 = 2 — печатаем.
Выделяем целую часть из дроби: 62 mod 28 = 6, получили правильную дробь 6/28.
Сокращаем, НОД(6, 28)=2, получаем 3/14.
Определяем длину предпериода: 14=2 1 5 0 7, максимальная степень при 2 и 5 равна 1, значит, длина предпериода равна 1.
Печатаем предпериод: d = 30 div 14 = 2 — двойку и печатаем, остаток числителя дроби m = 30 mod 14 = 2.
вычисляем длину предпериода, выясняем, что 9, 99, 999, 9999, 99999 на z=7 не делятся, а 999999 делится. Следовательно, длина периода будет 6. Здорово, правда? Только вот есть подводный камень: длина периода может быть очень большой, и эти девятки ни в какой uint64 не влезут. Можно пойти экстенсивным путём, и применить тип BigInteger, но лучше делить по модулю z, умножая на 10 остаток от деления на z, и снова получать остаток от деления на z, пока остаток не станет равным 0, например, для этого случая:
Шаг | Что делим | Остаток | Примечание |
1 | 9 | 2 | считаем, что первый остаток был равен 0, приписываем к нему 9, получаем 9 |
2 | 29 | 1 | предыдущий остаток был 2, приписываем 9, получаем 29 |
3 | 19 | 5 | предыдущий остаток был 1, приписываем 9, получаем 19 |
4 | 59 | 3 | просто, правда? |
5 | 39 | 4 | |
6 | 49 | 0 | ура, наконец-то остаток равен 0 |
Так, для сравнения, с девятками:
Шаг | Что делим | Остаток |
1 | 9 | 2 |
2 | 99 | 1 |
3 | 999 | 5 |
4 | 9999 | 3 |
5 | 99999 | 4 |
6 | 999999 | 0 |
Остатки те же. Но в первом случае «что делим» не превосходит 10(z-1).
Что получилось (для простоты писал для сдачи на проверочный сайт, без контроля ввода и интерфейса):
Наверное, можно немножко соптимизировать, есть повторяющиеся фрагменты, может, в подпрограмму их выделить, может, кое-где ускорить, типа, заменить div 2 на shr 1, ещё всяких блох половить. Неохота.
Проверка. Программа выдерживает прямое попадание дроби maxlongint/(maxlongint div 10)=2147483647/214748364, результат:
10,00(000003259629023297239181761589578396043100938361514130 09134728495533497987
439848435818584396759362506715068618636833945799000359322877 07672594888778756889
621752834401103982333481245985184781198146869235287864637702 19921209737364984070
379227662009103827212392640159996748566615389908162466839561 11535266457256922339
1150025245361124148075)
Виндовый калькулятор нервно курит в сторонке, но как бы намекает, что всё верно:
Ужос. Без применения деления по модулю для выяснения длины периода нужно было бы число из 336 девяток.
Источник
Дробная часть числа паскаль
Функция Int вычисляет целую часть значения с плавающей точкой. Синтаксис:
function Int(X: ValReal) : ValReal;
Функция возвращает целую часть вещественного числа Х. Тип данных возвращаемого значения является также вещественным числом.
О типе ValReal я рассказывал здесь.
Функция Frac возвращает дробную часть числа с плавающей точкой. Синтаксис:
function Frac(X: ValReal) : ValReal;
Целая часть числа
Как известно, вещественное число имеет целую часть и дробную часть. Например, число 3,14 можно произнести словами как “три целых, четырнадцать сотых”.
Соответственно, целая часть числа 3,14 – это число 3.
И, как вы теперь уже знаете, получить целую часть числа в Паскале можно с помощью функции Int:
Дробная часть числа
Если рассмотреть всё то же число 3,14, то его дробной частью будет число 0,14. То есть вещественное число состоит из двух частей, сумма которых и является вещественным числом:
Получить дробную часть числа в Паскале можно с помощью функции Frac:
Пример программы, которая использует функции Int и Frac, приведён ниже:
Программирование. Стандартные функции Pascal-Паскаль
- Скачено бесплатно: 6955
- Куплено: 414
- Pascal-Паскаль->Программирование. Стандартные функции Pascal-Паскаль
Стандартные функции Pascal-Паскаль
Стандартные математические функции Турбо Паскаля | |||
---|---|---|---|
Обращение | Тип аргумента | Тип результата | Примечание |
Abs(x) | Real, integer | Тип аргумента | Модуль аргумента |
ArcTan(x) | Real, integer | Real | Арктангенс (значение в радианах) |
Cos(x) | Real, integer | Real | Косинус, угол в радианах |
Exp(x) | Real, integer | Real | Экспонента |
Frac(x) | Real | Real | Дробная часть числа |
Int(x) | Real, integer | Real | Целая часть числа |
Ln(x) | Real, integer | Real | Логарифм натуральный |
Pi | Нет | Real | 3,141592653 |
Sin(x) | Real, integer | Real | Синус, угол в радианах |
Sqr(x) | Real, integer | Тип аргумента | Квадрат аргумента |
Sqrt(x) | Real, integer | Real | Корень квадратный |
Random | Нет | Real | Псевдослучайное число в интервале [0, 1] |
Random(I) | Integer | Integer | Псевдослучайное число в интервале [0, I] |
Round(x) | Real | Integer | Округление до ближайшего целого |
Trunc(x) | Real | Integer | Отбрасывание дробной части числа |
Порядок вычислений в выражениях следующий:
- вычисляются подвыражения, заключенные в скобки;
- затем выполняются операции с наибольшим приоритетом; обычно используются следующие уровни приоритетов (в порядке убывания):
- возведение в степень;
- мультипликативные операции: * , / , div , mod;
- унарные операции: + , – , abs , not;
- аддитивные операции: +, -;
- операции отношения: = , <>, , =;
- логические операции: and, or, not;
- операции с одинаковым приоритетом выполняются слева направо.
Хотя нет ограничений на сложность выражений, однако выражения, содержащие более 7 операндов, трудны для чтения и понимания и поэтому такие выражения не рекомендуется использовать.
- в Паскале нет стандартной операции или стандартной функции возведения в степень, поэтому используется следующее математическое тождество: x y = e ylnx
- в Паскале существует только стандартная функция вычисления натурального логарифма, поэтому используется следующее математическое тождество: logab= ln b/ln a
Математическое выражение: x 3/2 – 7x + tg (x+2)
Выражение на Паскале: exp(3*ln(x)/2)-7*x+sin(x+2)/cos(x+2)
Операторы действия
Операторы действия – это средства языка, позволяющие изменять в процессе выполнения программы состояние вычислений. Самый простой оператор действия – оператор присваивания.
Пример оператора присваивания
Оператор присваивания, несмотря на кажущуюся простоту, имеет очень важное алгоритмическое значение.
Удобно считать, что выполнение присваивания переменной некоторого значения означает помещение этого значения в выделенный для переменной ящик. При этом каждый запоминающий ящик обладает следующими свойствами.
- В каждый момент времени в ящике может храниться не более одного значения.
- Каждый ящик способен хранить только значения одного и того же типа. Попытка поместить в ящик значение любого другого типа приводит к тому, что ящик отказывается принимать на хранение передаваемое ему значение – это расценивается как ошибка в программе.
- Значение, помещенное в ящик, будет храниться в нем до тех пор, пока в этот ящик не будет помещено новое значение (в момент присваивания соответствующей переменной этого нового значения) – при этом предыдущее содержимое ящика безвозвратно теряется (уничтожается).
- Находящееся в ящике значение считается текущим значением соответствующей переменной. Это текущее значение может быть выдано из ящика для использования сколько угодно раз, но при этом содержимое ящика не меняется: из него каждый раз выдается копия хранящегося значения с сохранением оригинала в ящике без какого-либо изменения.
- К началу выполнения программы содержимое всех запоминающих ящиков считается неопределенным; в частности, их нельзя считать и пустыми, поскольку эти ящики могли использоваться при выполнении предыдущих программ, после чего в ящиках могло что-то остаться.
Еще один оператор действия, хотя его можно лишь условно назвать таковым: он не выполняет никакого действия, это – пустой оператор (в Паскале он обознается знаком «;»). В Паскале оператором действия является также оператор процедуры. Последний из простейших операторов действия – оператор останова, который прерывает работу программы (в Паскале это оператор halt).
Ввод и вывод данных
Ввод данных с клавиатуры производится с помощью стандартной процедуры read( ) или ее разновидности readln( ). Элементы списка ввода – идентификаторы (имена) переменных, перечисляемые через запятую. При выполнении этого оператора пользователь набирает на клавиатуре соответствующую последовательность значений, разделяя их пробелами (это важно!).
Пример ввода данных с клавиатуры
read(a,b,c);
readln(a,b,c);
Вывод данных на экран производится с помощью стандартной процедуры write( ) или ее разновидности writeln( ).
Список вывода может содержать константы, переменные, выражения, формат вывода. Выражения в списке вывода разделяются запятыми.
Пример вывода данных на экран
write(a,b,c);
writeln(a,b,c);
Окончание ln в имени процедуры означает, что курсор автоматически будет переведен в начало следующей строки экрана.
Программирование
Исходники Pascal (127)
Справочник
Справочник по паскалю: директивы, функции, процедуры, операторы и модули по алфавиту
Арифметические операции
Начнем , пожалуй , с самого простого – арифметические операции с числами в паскале. В паскаль встроены многие привычные нам арифметические операции ( Сложение , вычитание , умножение , деление и т.п ).
Как же осуществляются подобные операции с числами ?. Давайте разберем это на примере исходника одной программы.
200?’200px’:”+(this.scrollHeight+5)+’px’);»> program mypascal;
var
a,b:integer;
c:real;
begin
a:= a – b; // a-b = 7 – 4 = 3 , следовательно a = 3 , b = 4 , c = 0
b:= a + b; // a+b = 3 + 4 = 7 , a = 3 , b = 7 , c = 0
a:= b * 2; // b*2 = 7 * 2 = 14 , a = 14 , b = 7 , c = 0
c:= a / b; // a/b = 14 / 7 = 2 , a = 14 , b = 7 , c = 2
Результатом выполнения данной программы будет вывод на экран трех чисел 14 7 2. Разберемся в том , как это работает.
В начале программы мы объявляем 2 целочисленные ( integer ) переменные «a» и «b» , а также 1 переменную «c» вещественного ( real ) типа.
Зачем нам нужна вещественная переменная ? Для записи результата деления целочисленная переменная не подходит , так как у нас получается дробь , а не целое число.
Теперь мы присваиваем переменной «a» значение 7 , а переменной «b» значение 3
. Переменную «c» при этом оставляем нулевой ( она нам пока не понадобится ).
Далее (в блоке begin end) мы расписываем арифметические операции с нашими числами. Обратите внимание на то , что после символов // идет комментарий , который не компилируется программой.
Запомните : Строка a:= a – b; выглядит так a:= 7 – 4; , а не так 7:= 7 – 4;
Другие операции с числами
В паскале предусмотрены и многие другие операции с числами. Давайте разберем самые популярные из них.
1. Как найти квадрат числа в паскале ?
Для нахождения квадрата числа в паскале предусмотрена функция sqr(x) , где x – число.
Пример :
Результат : переменной «а» присваивается значение 25.
2. Как найти корень числа в паскале ?
Для нахождения корня числа в паскале предусмотрена функция sqrt(x) , где x – число.
Пример :
Результат : переменной «а» присваивается значение 5.
3. Как округлить число в паскале ?
Для того , чтобы округлить некоторое число используется операция round(x).
Пример :
Результат : переменной «а» присваивается значение 9.
4. Как убрать дробную часть у числа в паскале ?
Для того , чтобы отбросить дробную часть числа используется операция trunc(x).
Пример :
Результат : переменной «а» присваивается значение 25.
5. Как убрать целую часть у числа в паскале ?
Для того , чтобы отбросить целую часть числа используется операция frac(x).
Пример :
Результат : переменной «а» присваивается значение 0.2.
6. Как получить модуль числа в паскале ?
Чтобы получить модуль некоторого числа используется операция abs(x).
Пример :
Результат : переменной «а» присваивается значение 8.
Это были самые важные и часто используемые операции в паскале для работы с числами ( переменными ). Найти другие вы можете на этой странице.
Выводы :
Для работы с числами в паскале предусмотрено множество различных операций. Мы можем делать с числами все , что угодно ( складывать , умножать , возводить в квадрат и т.п ).
Источник