Преобразование типа из real в integer
Попытка присвоить переменной типа integer выражение типа real
Здравствуйте форумчане. Написала программу для замены элементов массива после максимального.
Попытка присвоить переменной типа integer выражение типа real
Здравствуйте! Моя задача: Найти сумму всех n-значных чисел, кратных k (1 ≤ п ≤ 4). Я.
преобразование integer в real
Ребята есть элементарная задачка (надо для девушки моей решить, а я Паскаль уже не помню :((.
Метод Симпсона — попытка присвоить значение integer переменной типа real
Как исправить ошибку? В строке N2:= n/2; пишет попытка присвоить значение integer переменной типа.
Basic Pascal Tutorial/Chapter 1/Assignment and Operations/ru
После того, как вы объявили переменную, вы можете хранить в ней значения. Это называется присвоением.
Для присвоения значения переменной используйте следующий синтаксис:
имя_переменной := выражение;
Обратите внимание, что в отличие от других языков, в которых операция присвоения обозначается просто знаком равенства, Pascal использует двоеточие со знаком равенства, как это делается в большинстве систем компьютерной алгебры.
Выражение может быть либо единственным значением:
some_real := 385.385837;
либо арифметической последовательностью:
some_real := 37573.5 * 37593 + 385.8 / 367.1;
Арифметические операции в Pascal:
| Операция | Действие | Операнды | Результат |
|---|---|---|---|
| + | Сложение или унарный плюс | real или integer | real или integer |
| — | Вычитание или унарный минус | real или integer | real или integer |
| * | Умножение | real или integer | real или integer |
| / | Вещественное деление | real или integer | real |
| div | Целочисленное деление | integer | integer |
| mod | Деление по модулю (остаток от деления) | integer | integer |
div и mod работают только с integer.
Вещественное деление / работает как с real, так и с integer, но результат всегда будет real.
Другие операции работают и с real, и с integer. Когда смешиваются integer и real, результат всегда будет real, поскольку в противном случае будет потеря данных. Именно поэтому Pascal использует две разные операции для деления и целочисленного деления. 7 / 2 = 3.5 (real), но 7 div 2 = 3 (и 7 mod 2 = 1, поскольку это остаток).
Каждой переменной может быть присвоено значение только такого-же типа. Таким образом, вы не можете присвоить вещественное значение целочисленной переменной. Однако, некоторые типы данных могут преобразовываться к более высокому типу. Чаще всего это делается, когда присваивается целое значение вещественной переменной. Допустим, вы имеете такую секцию объявлений:
var some_int : integer; some_real : real;
Тогда после выполнения следующего блока операторов:
some_int := 375; some_real := some_int;
some_real будет иметь значение 375.0.
Изменение одного типа данных на другой называется приведением типа. Современные компиляторы Pascal поддерживают явное приведение типа в стиле языка C, с несколько отличающимся синтаксисом. Однако, приведение типов обычно используется в низкоуровневых ситуациях или в связи с объектно-ориентированным программированием, и студенту-новичку в программировании, нет небходимости его использовать. Здесь вы сможете найти информацию о приведении типов в GNU Pascal manual.
В Pascal знак минуса может быть использован, чтобы сделать значение отрицательным. Знак плюса также может быть использован, чтобы сделать значение положительным, но обычно он опускается, поскольку значения по умолчанию положительны.
Не пытайтесь использовать две операции одну за другой, как в следующем примере:
some_real := 37.5 * -2;
Это может иметь правильный смысл для вас, поскольку вы пытаетесь выполнить умножение на отрицательное число -2. Однако, Pascal будет путаться — он не будет знать, что делать: умножать или вычитать. Вы можете избежать этого, используя для проясненя ситуации скобки:
some_real := 37.5 * (-2);
Компьютер соблюдает тот-же порядок операций, который соблюдаете вы, выполняя арифметические операции. Умножение и деление (* / div mod) идут до сложения и вычитания (+ -), а скобки всегда имеют приоритет. Таким образом, например, значение выражения 3.5*(2+3) будет 17.5.
Pascal не может выполнять стандартные арифметические операции с типом Boolean. Есть специальный набор логических операций. Вы также не должны применять арифметические операции к символам.
- Russian
- Basic Pascal Introduction/ru
Как перевести real в integer в pascal
Pascal — Как преобразовать переменную Real в Integer
Но вывод показывает: 9.000000 + EEE или что-то в этом роде.
So- как преобразовать, чтобы быть только 9, а не этой переменной REAL.
Для вывода только целочисленной части:
Вы можете преобразовать в string , получить часть int , e конвертировать в int number!
Или Float to Str чем Str to Int :
Рассмотрим это довольно простое уравнение:
Что вы ожидаете? 6 , правильно? Попробуйте этот код
К сожалению, это число с плавающей запятой, поэтому оно будет представлять собой число, представленное научным способом:
или 6.0000000000 x 10 0 или 6 x 10 o . Что бы то ни было, вам всего лишь 6, кому нужно это странное бессмысленное длинное число? Поэтому идея состоит в том, чтобы отключить десятичную часть и вывести на консоль только целую часть, которая может быть выполнена с помощью этой строки кода:
Хорошо, теперь он выводит красивое число, как ожидалось
Похоже, проблема решена, но вы говорите, что:
Я суммирую некоторые цифры
Пример: 2.3 + 3. 4+ 3.3 = 9
Ох, так что ровно, красивое целое просто случайно появилось? Здесь возникает проблема, как вы ожидаете, что это уравнение выйдет?
Это должно быть 6.1 , верно? Попробуем попробовать обработанную строку кода:
Неожиданно, правда? Итак, как насчет округления до десятичных знаков, например 1 ?
Тогда 3.5 + 2.5 = 6.0 и 3.6 + 2.5 = 6.1 . Но 6.0 может выглядеть довольно долго, так как сделать его выходом 6 для 6.0 и 6.1 для 6.1?
Фактически, вы не можете сделать автоматическое обнаружение программы, если реальная переменная содержит целочисленное значение, потому что способ сохранения реального var полностью отличается от целочисленного var (насколько он отличается от них, обратитесь в Google, но вы можете это сделать вручную, выполняя функцию для выполнения задания).
Поэтому мое решение состоит в том, чтобы легко сделать вывод округленным до нескольких знаков после запятой и что он.
Для того, чтобы показывать на экране хороший результат, вы можете использовать что-то вроде этого:
Результатом на экране будет следующее:
Что это значит, кто-то спросит? Ну, первое число 0 означает, насколько широка подана. если вы говорите это 0, то Паскаль пишет это в самой левой части экрана. Если вы сказали writeln(result:5:2) результат будет:
Другими словами, я бы напечатал форму с правой стороны и оставил 5 символов для этого.
Второе число 2, в этом примере означает, что вы хотите, чтобы результат был напечатан с двумя знаками после запятой. Вы можете разместить его только в том случае, если вы хотите напечатать на экране значение, которое является реальным, одиночным, двойным, расширенным и т.д. Вы можете округлять до любого числа десятичных знаков, и если вы выполняете writeln(result:0:0) вы получите Ouput:
Если вы печатаете целое число и хотите иметь некоторую длину поля, давайте сидим 5, вы бы сделали: writeln(int:5) . Если вы добавили :2 до конца, вы получите ошибку времени компиляции.
Все это также работает примерно так: writeln(5/3.5+sqrt(3):0:3) ,
Вы должны знать, что это не круглая переменная, а просто форматирует выход. Это также является законным:
Что я здесь сделал, я спросил пользователя, если на сколько десятичных знаков и с какой длиной поля он хочет записать введенный номер a. Это может быть полезно, поэтому я указываю это. Спасибо за чтение. Надеюсь, я помог
Contact US
Thanks. We have received your request and will respond promptly.
Come Join Us!
- Talk With Other Members
- Be Notified Of Responses
To Your Posts - Keyword Search
- One-Click Access To Your
Favorite Forums - Automated Signatures
On Your Posts - Best Of All, It’s Free!
Posting Guidelines
Promoting, selling, recruiting, coursework and thesis posting is forbidden.
CONVERT A REAL VALUE TO AN INTEGER
CONVERT A REAL VALUE TO AN INTEGER
CONVERT A REAL VALUE TO AN INTEGER
HOW DO I CONVERT A REAL VALUE TO AN INTEGER?
VAR
LOC : LONGINT;
WORK1 : REAL
GIVES AN ERROR 75 DATA MISMATCH
I KNOW IT MUST BE SIMPLE BUT I O NOT HAVE A GOOD MANUAL & I HAVE TRIED MANY THINGS. ANY HELP WILL BE APPRECIATED.
THANKS IN ADVANCE, I DO SIMPLE THINGS LIKE THIS IN MANY OTHER LANGUAGES BUT NOT IN PASCAL.
RE: CONVERT A REAL VALUE TO AN INTEGER
RE: CONVERT A REAL VALUE TO AN INTEGER
Sorry, I should have made my self clear. I am going to use the value to seek in a direct binary file which requires a longint or integer in the SEEK procedure. It will not accept a real value.
I am developing the location by doing a square of the key, dividing by the number of allocated slots and going directly to the record. I also use a spill forward with space wrap around for synonyms.
I teach and am using a qbasic program to load the file, pascal to update it and cobol to list it with a perl program supporting a cgi inquiry. The class is a program language surver course. This is the only part I am having trouble with.
RE: CONVERT A REAL VALUE TO AN INTEGER
RE: CONVERT A REAL VALUE TO AN INTEGER
I am going to use SEEK and BLOCKREAD PROCEDURES TO BE ABLE TO RANDOM READ FROM A FIXED LENGTH RECORD FILE. THE SEEK REQUIRES INTEGER VALUE FOR THE RECORD LOCATION based on a randomized location
LOC : LONGINT;
BUFFER : ARRAY [1..43] OF CHAR;
BYTES_READ : WORD;
REALWORK1 : REAL;
SLOTS : REAL;
LOC := (INT(REALWORK1 / SLOTS) * SLOTS ) + 1.0;
SEEK(EMP_FILE, LOC);
BYTES_READ := 0;
BLOCKREAD(EMP_FILE, buffer, 1, BYTES_READ);
LOC must be integer type but my calculations are in real numeric values. This type of processing is often used in high performance requirements where record retrieval need to approach 1 SEEK 1 READ per record. Using 1 or more index reads can raise the cost of read performance greatly.
Other languages handle this more easily.
RE: CONVERT A REAL VALUE TO AN INTEGER
RE: CONVERT A REAL VALUE TO AN INTEGER
VAR
LOC : LONGINT;
WORK1 : REAL
RE: CONVERT A REAL VALUE TO AN INTEGER
glenn, THAT WORKED.
Thanks
I wonder why
LOC := INT(WORK1);
Since the value on INT is an integer. So goes the nature of programming languages. I should have tried the answer that stackdump gave me. I was so sure that INT & TRUNC worked the same.
I am sorry stackdump. THANKS to ALL.
RE: CONVERT A REAL VALUE TO AN INTEGER
Int() returns an extended/real value.
loc has to be extended/real, and the answer will be 3.000000000.
RE: CONVERT A REAL VALUE TO AN INTEGER
RE: CONVERT A REAL VALUE TO AN INTEGER
None of the references I had available said that INT returned a long integer. In other languages I have used an INT function took a real/float and returned an integer value and I let myself go down that path.
A routine I had just converted from another language that did not have a remainder function took the key and divided by the number of slots to get a relative file location in a file space. I have done this type of high performance processing for over 40 years. You get a real value and just round off to an integer.
As I said early on I have manuals that are short on internals details. Any recommendations for a great text? There arn’t many options now like with perl, java, etc.
Again THANKS to all. It had been many years since I wrote programs in Pascal except for «Hello World» or simple report listings. It has been interesting. Direct(binary) file processing requires a detailed understanding of disk file management.
Red Flag Submitted
Thank you for helping keep Tek-Tips Forums free from inappropriate posts.
The Tek-Tips staff will check this out and take appropriate action.
Reply To This Thread
Posting in the Tek-Tips forums is a member-only feature.
Click Here to join Tek-Tips and talk with other members! Already a Member? Login
Typecast/ru
Typecasting(приведение типов) — это концепция, позволяющая присваивать значения переменных или выражений, которые не соответствуют типу данных, переменной, фактически перекрывая систему строгой типизации Pascal.
Contents
Определение
Различают два варианта приведения типов:
Неявное приведение типов
Если полный диапазон значений, которые может иметь источник, может быть сохранен целевым операндом, происходит автоматическая — то есть «неявная» — передача типа. Например, все значения типа byte могут быть сохранены в int64 . Присвоение значения типа byte для int64 работает без проблем, поскольку пропущенные нулевые биты заполняются автоматически, то есть неявно. Программист не должен вставлять дополнительный код.
Прим.перев.: иными словами, преобразование переменных с меньшим диапазоном значений в переменные с большим диапазоном значений происходит автоматически (неявное преобразование).
Явное приведение типов
Если диапазон значений источника не вписывается в диапазон целевого операнда, компилятор не скомпилирует программу, если ему не дано [указаний явно] игнорировать это.
Прим.перев.: иначе говоря, преобразование переменных с большим диапазоном значений в переменные с меньшим диапазоном значений осуществляется с помощью явного преобразования путем вызова соответствующей функции. И если значение переменной-источника не соответствует поддерживаемому диапазону значений переменной-приемника, то произойдет потеря данных.
Существует два разных варианта явного приведения типа:
Value typecasts (приведение типа для значения)
Преобразование типов осуществляется путем добавления идентификатора типа данных и заключения выражения для преобразования типов в круглые скобки, например: dataType ( expression ) . Лишние биты просто отбрасываются. Этот подход обычно используется, если есть абсолютная уверенность, что фактическое значение expression будет соответствовать ожидаемому. Иногда этот эффект также используется вместо применения оператора Mod.
Variable typecasts (приведение типа для переменной)
Такое приведение типа обрабатывает переменную, как если бы это был другой тип. Извлечение и сохранение переменной выполняется, как если бы это был указанный тип данных. Так же, как и в случае приведения типа для значения, перед типом данных добавляется идентификатор типа, а в этом случае круглые скобки окружают идентификатор переменной: dataTypeIdentifier ( variableIdentifier ) . В отличие от приведения типа для значения, приведения типа для переменной может происходить с обеих сторон присваивания.
Преобразование в сравнении с приведением типов
Преобразование типов — это упорядоченный процесс отображения значений домена в совместный домен, что может привести к возникновению исключений или ошибок времени выполнения. Это делается с помощью правильно определенных функций. Простое приведение типов, с другой стороны, это всегда грубая сила. Оно обрезает и заталкивает биты 1:1 адресату. Однако вы можете задать перегрузку оператора, переопределяя это поведение.
Pascal нельзя преобразовать тип real к integer
Все используемые переменные должны быть предварительно описаны с помощью ключевого слова var (внутри блока begin/end или, что обычно хуже, в разделе описаний вначале программы).
Отсутствующая ;
Очень частая ошибка у начинающих. Курсор, как правило, позиционируется в начале следующей строки.
Несовместимость типов при присваивании
Безболезненно можно присваивать только данные одного типа. Если данные – разных типов, то в редких случаях можно преобразовать данные одного типа в данные другого. Например, целое можно преобразовать в вещественное, а символ – в строку. Обратные преобразования не допускаются.
Чтобы не ошибаться в подобных простых случаях в Паскале есть следующая краткая форма объявления и инициализации переменной:
Отсутствие закрывающего апострофа литеральной строки
Закрыть апостроф надо на той же строке, где расположен открывающий апостроф
Ошибки расстановки запятых и апострофов при выводе строк и выражений
Слишком много запятых и апострофов рядом, потому начинающие часто путаются Надо уяснить правила:
- запятые разделяют разные элементы вывода
- все, что находится в апострофах, будет выведено на экран без изменений
Ошибка ввода
Это – ошибка во время выполнения. Программа пытается преобразовать введенную строку в число, не может это сделать и завершается с ошибкой.
Аналогичный фрагмент в более современном и предпочтительном синтаксисе:
Ошибка неинициализированной переменной
Перед использованием любую переменную надо ввести или присвоить ей начальное значение. Это действие называется инициализацией переменной.
Деление на 0
Если во время выполнения программа выполнит деление на 0, то она завершится с ошибкой.
Можете написать ещё про какие-либо ошибки, буду благодарен.
1 ответ 1
Для целочисельного деления в паскале используйте div :
Если писать a/5 получается Real .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками pascal или задайте свой вопрос.
Похожие
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2019 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2019.11.15.35459

Ответ

В строке с условиями не хватает скобок. Вот рабочий вариант вашей программы:
program _1;
var
x, y, x1, y1, x2, y2, x3, y3: real;
begin
write(‘Введите координаты точки(х,у)’);read(x, y);
write(‘Введите координаты первой вершины треугольника(х1,у1)’);
read(x1, y1);
write(‘Введите координаты второй вершины треугольника(х2,у2)’);
read(x2, y2);
write(‘Введите координаты третьей вершины треугольника(х3,у3)’);
read(x3, y3);
if (((x – x2) / (x2 – x1) – (y – y2) / (y2 – y1)) = 0)
then writeln(‘Точка с введенными вами координатами принадлежит треугольнику’) else writeln(‘Точка с введенными вами координатами не принадлежит треугольнику’);
end.
Тестовое решение:
Введите координаты точки(х,у)5.2 4.7
Введите координаты первой вершины треугольника(х1,у1)1.1 2.1
Введите координаты второй вершины треугольника(х2,у2)8.3 9.1
Введите координаты третьей вершины треугольника(х3,у3)0.1 10.5
Точка с введенными вами координатами не принадлежит треугольнику
Похожие публикации:
- Как поменять блоки местами в css
- Как поменять цвет иконки svg в css
- Как поместить текст в блок в css
- Как поставить две картинки рядом в css
Char в integer
Нельзя преобразовать тип integer к char
ошибка в 72 строке если еще найдутся, исправьте пожалуйста Program KurRab; Uses crt, GraphABC;.

Нельзя преобразовать тип char к integer
var s:string; first, second, r:string; k:integer; BEGIN writeln(‘Введите строку’); read(s);.
Нельзя преобразовать тип char к integer
Помогите исправить ошибку. Я понимаю в чем заключается ошибка в 16 строке, но понятия не имею, как.
1754 / 1346 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
1 2 3 4 5
var a:char; x:integer; begin a:='2'; x:=ord(a)-48; end.
Супер-модератор
![]()
![]()
32792 / 21132 / 8144
Регистрация: 22.10.2011
Сообщений: 36,393
Записей в блоге: 8
Использовать функцию Ord:
1 2 3 4 5
begin var c : char := 'A'; // заглавная латинская A var i : integer := Ord(c); writeln(i) // ожидаемо выведет 65 end.
Добавлено через 2 минуты
Сообщение от Hitoku 
Зачем? Если нужно именно это — то проще взять StrToInt, которая будет работать с представлением чисел любой длины (которую сможет вместить Integer, разумеется), а не только с одним символом.
1754 / 1346 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
Сообщение от volvo 
volvo, к char это тоже относится?
Регистрация: 27.02.2017
Сообщений: 7
1 2 3 4 5 6 7
var n: char; begin readln(n); writeln(StrToInt(n)); end.
Добавлено через 11 минут
Есть ещё вариант для тех, кто хочет задолбаться. Вот код, который преобразует из char в integer все числа от 0 до 9:
1 2 3 4 5 6 7 8 9
var n: char; i: longint; begin readln(n); i := ord(n) - 48; writeln(i); end.
9693 / 5033 / 3275
Регистрация: 17.08.2012
Сообщений: 15,565
Hitoku, почти цитируя volvo:
1 2 3 4 5
begin var c : char := '5'; // символ '5' var i : integer := StrToInt(c); writeln(i) // ожидаемо выведет 5 end.
1754 / 1346 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
Cyborg Drone, спасибо Просто у меня выскакивала ошибка, что таким способом не может char перевести, вот я и смутился
Регистрация: 23.01.2022
Сообщений: 3
Делал задачу из ЕГЭ, выскочила ошибка Нельзя преобразовать тип char к integer в 4 строке, помогите по возможности, как иначе заполнить строку 207 9
1 2 3 4 5 6 7 8 9 10 11 12
var s: string; var i : integer; begin s:= '9'*207; while s.counte ('333') do begin if s.counte ('9999') then s:=s.replace('9999','3') else s:=s.replace('333','99') end; writeln (s); end.
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
K1r, что Вы пытаетесь сделать в 4-й строке? Сделать строку, где символ ‘9’ будет повторён 207 раз? Тогда, видимо, Вы пришли из питона. В Паскале так нельзя. Поясните.
![]()
12727 / 7041 / 1490
Регистрация: 06.09.2009
Сообщений: 26,055
Zwelenewskiy, Вы удивитесь, но такое возможно в Pascal ABC.NET
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
thyrex, тогда могу человеку посоветовать только использовать IDE для Pascal ABC.NET
![]()
12727 / 7041 / 1490
Регистрация: 06.09.2009
Сообщений: 26,055
Так в том-то и дело, что тема в нужном разделе. Но метода counte нет в помине. Ждем условие задания.
387 / 265 / 117
Регистрация: 09.07.2021
Сообщений: 968
Сообщение от Zwelenewskiy 
Как преобразовать тип Char в Integer?
в каком смысле?
получить код символа? используйте c.Code;
перевести ‘1’ в 1? используйте c.ToDigit;
5067 / 2638 / 2349
Регистрация: 10.12.2014
Сообщений: 10,004
Вероятнее всего так:
1 2 3 4 5 6 7
## var s:='9'*207; var s0:string; repeat s0 := s; s := s.Replace('9999','3'); s := s.Replace('333','99'); until s=s0; s.Println;
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

из char в integer
как присвоить переменной типа чар в интеджер? типа str(s,b)
С Char в integer/real.
Kак перейти с массива (char) в массив (например integer или real)? Чтобы потом можно было бы.
Преобразование из integer в char
каким способом можно конвертировать integer в char?
В тип integer ввод char
Например нам дано: var x:integer; begin . writeln(‘Введите x’); readln(x);

Преобразовать двухзначное число из char в integer
Допустим есть char c = ’24’ // Я знаю что не по-паскалевски написал, но думаю так понятно .
Ошибка, нельзя преобразовать тип Integer к Char
ошибка в 72 строке если еще найдутся, исправьте пожалуйста Program KurRab; Uses crt, GraphABC;.
