Нельзя преобразовать тип real к boolean как исправить

Ошибка: нельзя преобразовать тип real к boolean Turbo Pascal Решение и ответ на вопрос 1820562

Dasta

0 / 0 / 1

Регистрация: 05.10.2016

Сообщений: 25

1

06.10.2016, 15:31. Показов 5712. Ответов 7

Метки нет (Все метки)


В чем ошибка ? Можете исправить ?
Program1.pas(6) : Нельзя преобразовать тип real к boolean

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
y=frac{x^3}{(x+1)(x+2)}+frac{arcsin (1-x)}{sqrt[3,]{1-ln x}}<br />

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
program das ;
var x, y:real;
begin
writeln('x sanin engiz');
readln(x);
if (exp(3)*ln(x)/(x+1)+(x+2))and (x>0)and (x=0) and arcsin(1-x)/(exp(1/3)and (x=0) and (ln(1-ln(x)))) and (x<>0)
then writeln ('argument tabu');
writeln (y);
y:=(exp(3)*ln(x)/(x+1)+(x+2))+ arcsin(1-x)/(exp(1/3)*(ln(1-ln(x))));
writeln ('y=',y);
readln (x);
end.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

06.10.2016, 15:31

Ответы с готовыми решениями:

Ошибка: нельзя преобразовать тип integer к boolean
Program Example_96_1;
Uses crt;
Var x,y,Max,Min,Rezultat:integer;
Begin
Clrscr;

Practic1.pas(53) : Нельзя преобразовать тип real к integer
Подскажите пожалуйста как проверить число типа real на кратность?


sum := a + a;
sq…

Program4.pas(4) : Нельзя преобразовать тип boolean к real
var a,b,y,x,eps,z:real;
function F(x :real):real;
begin
F := sqrt(1-x)-sin(x)/cos(x)=0;
end;…

Ошибка: Нельзя преобразовать тип real к word
Народ, подскажите, пожалуйста как исправить ошибку ‘Нельзя преобразовать тип real к word’ вот…

7

JokeR.BY

CAPITAL OF ROCK!

1281 / 708 / 982

Регистрация: 03.03.2010

Сообщений: 2,286

06.10.2016, 15:48

2

у вас в этой 6 строке дикое скопление скобок и условий.

Pascal
1
2
3
4
5
6
7
8
9
10
if
    (exp(3)*ln(x)/(x+1)+(x+2))
and
    (x>0)
and
    (x=0)
and
    arcsin(1-x)/(exp(1/3)and (x=0) and (ln(1-ln(x))))
and
    (x<>0)

Добавлено через 1 минуту
не может быть x одновременно больше нуля, равен нулю и не равен нулю.



0



0 / 0 / 1

Регистрация: 05.10.2016

Сообщений: 25

06.10.2016, 15:52

 [ТС]

3

Можешь по конкретнее написать



0



JokeR.BY

CAPITAL OF ROCK!

1281 / 708 / 982

Регистрация: 03.03.2010

Сообщений: 2,286

06.10.2016, 16:18

4

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
const
    EPS = 0.0001;
var
    x: Real;
begin
    Write('x='); ReadLn(x);
    if (x < EPS) Or (Abs(x - 1) < EPS) Or (Abs(x - 2) < EPS) Or (x > 2)
    then
        Write('ERROR!')
    else
        Write('y(', x:0:2, ')=', (Sqr(x) * x / (x + 1) / (x + 2) + ArcTan((1 - x) / Sqrt(1 - Sqr(1 - x))) / Exp(Ln(1 - Ln(x)) / 3)):0:2);
end.



0



0 / 0 / 1

Регистрация: 05.10.2016

Сообщений: 25

06.10.2016, 16:19

 [ТС]

5

Без функций



0



Почетный модератор

64272 / 47571 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

06.10.2016, 16:22

6

А где ты увидел функции кроме стандартных?



0



0 / 0 / 1

Регистрация: 05.10.2016

Сообщений: 25

06.10.2016, 17:16

 [ТС]

7

и без EPS мы не проходили еще



0



Почетный модератор

64272 / 47571 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

06.10.2016, 18:04

8

Иди в первый класс,там вообще ничего не проходили. Ты не путай знания по программированию и математике, в школу нужно было чаще ходить. Сравнение вещественных чисел возможно только с заданной точностью, что здесь и обозначено как EPS.
И вообще чего ты ноешь? Ты что заплатил и тебе обязаны делать как тебе нужно? Да радуйся что за тебя хоть что-то делают, тупица и лодырь.



0



Неописанная переменная

begin
  S := 1; // Неизвестное имя S
end.

Все используемые переменные должны быть предварительно описаны с помощью ключевого слова var (внутри блока begin/end или, что обычно хуже, в разделе описаний вначале программы).

Отсутствующая ;

begin
  var S: integer 
  S := 1;         // Компилятор здесь скажет: Ожидалась ; — имеется ввиду предыдущая строка!
end.
begin
  var S := 1 
  S := S + 1  // Аналогично: проблема на предыдущей строке, а на текущей нет, потому что после неё идёт end.
end.

Очень частая ошибка у начинающих. Курсор, как правило, позиционируется в начале следующей строки.

Несовместимость типов при присваивании

begin
  var S: integer := 1.3; // Нельзя преобразовать тип real к integer
end.

Безболезненно можно присваивать только данные одного типа. Если данные — разных типов, то в редких случаях можно преобразовать данные одного типа в данные другого. Например, целое можно преобразовать в вещественное, а символ — в строку. Обратные преобразования не допускаются.

Чтобы не ошибаться в подобных простых случаях в Паскале есть следующая краткая форма объявления и инициализации переменной:

begin
  var S := 1.3; // Тип real будет выведен компилятором автоматически
end.

Отсутствие закрывающего апострофа литеральной строки

begin
  var x := 2;   // x получает тип integer
  var y := 3;   // y получает тип integer
  writeln('Результат сложения равен =, x + y); // Не хватает закрывающего апострофа
end.

Закрыть апостроф надо на той же строке, где расположен открывающий апостроф

Ошибки расстановки запятых и апострофов при выводе строк и выражений

begin
  var x := 2;   // x получает тип integer
  var y := 3;   // y получает тип integer
  writeln(x, '+,' y, '=', x+y); // Неверная расстановка запятых и апострофов
end.

Слишком много запятых и апострофов рядом, потому начинающие часто путаются  :)
Надо уяснить правила:

  • запятые разделяют разные элементы вывода
  • все, что находится в апострофах, будет выведено на экран без изменений

Ошибка ввода

begin
  var x: integer;
  read(x); // введите блаблабла и посмотрите, что получится
end.

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

Аналогичный фрагмент в более современном и предпочтительном синтаксисе:

begin
  var x := ReadInteger;
end.

Ошибка неинициализированной переменной

begin
  var x: integer;
  // Забыли инициализировать или ввести x
  var r := x * x;  // r получает тип integer
  writeln('Квадрат числа ', x, ' = ', r);
end.

Перед использованием любую переменную надо ввести или присвоить ей начальное значение. Это действие называется инициализацией переменной.

Деление на 0

begin
  var x := 0;
  var c := 666 div x; // Здесь происходит деление на 0
end.

Если во время выполнения программа выполнит деление на 0, то она завершится с ошибкой.

Корень из отрицательного числа

begin
  writeln(sqrt(-1)); // Корень из отрицательного числа 
end.

В обычном Паскале возникает ошибка времени выполнения.
В PascalABC.NET выводится NaN — Not a Number

Ссылки

  • Программы для начинающих
  • Сайт PascalABC.NET: Программы и алгоритмы для начинающих

@izhaks

При попытке компиляции программы:

var some_var: (real, real) := (1, 2);
begin end.

компилятор выдаёт ошибку:

Возможны два преобразования типа: к типу Tuple<real,real> и к типу Tuple<real,real>

Вероятно, имелось в виду: «к типу Tuple<integer,integer> и к типу Tuple<real,real>»,
но в то же время, странно, что здесь вообще есть ошибка, ведь «some_var» явно указан как (real, real).

PascalABC.net версии 3.6.3 сборка 2547 (01/07/2020)

Спасибо.

@SunSerega

У меня в последней (самособранной) версии выдаёт:
Нельзя преобразовать тип Tuple<integer,integer> к Tuple<real,real>.

Вообще всегда лучше писать var some_var := (1.0, 2.0), так на много короче.
Ну, стоит ещё дождаться что скажут разработчики.

Если когда то выдавало Возможны два преобразования типа — значит, наверное, компилятор пытался преобразовать (1,2) в (real,real). То есть алгоритм этого преобразования уже есть в компиляторе, надо только починить.

@izhaks

С простыми, массивами, записями и множествами такой проблемы не наблюдается:

var some_var: real := 1;                            // 1
var some_arr: array of real := (1, 2);              // [1,2]
var some_rec: record a, b: real end := (a:1; b:2);  // (1,2)
var some_set: set of real := [1, 2];                // {2,1} 

Предположу, что с кортежами тоже планировалось автоматическое преобразование компилятором к нужному типу.
Пример MovingFrameBasedTime.pas содержит строки:

Key.Left: c.Direction := (-5, 0);
Key.Right: c.Direction := (5, 0);
Key.Up: c.Direction := (0, -5);
Key.Down: c.Direction := (0, 5);

...

c.Direction := (0, 0);

которые как раз не компилируются теперь (с этой ошибкой).

(P. S. Также нужно добавить uses GraphWPF; в MovingFrameBasedTime.pas)

@miks1965

Скачайте последнюю версию.
Ошибка

Нельзя преобразовать тип Tuple<integer,integer> к Tuple<real,real>

и она правильная. Никто не предполагал делать преобразование между этими типами.

С простыми, массивами, записями и множествами — это специальные инициализаторы, которые работают и в Delphi. Мы делали это для совместимости. С кортежем — другая история. Это NET-тип и Tuple<integer,integer> и Tuple<real,real> неявно друг в друга не преобразуютсчя. Как и List < integer > и List < real >

Пример MovingFrameBasedTime.pas мы немного исправили — работающая версия на сайте. Но вы пишете об ошибке, которая могла быть в ранних версиях — сейчас её нет.

@izhaks

@miks1965
Версия 3.6.3, сборка 2657 (15/08/2020):

image

@SunSerega

А у меня на той же версии компиляция почему то проходит успешно:

image

@izhaks

Я скачал новую версию отсюда:
http://pascalabc.net/downloads/PascalABCNETSetup.exe
Перед установкой удалил старую версию (сделал Uninstall).

В классе ObjectWPF определено свойство Direction:
property Direction: (real,real) read (Dx,Dy) write (Dx,Dy) := (value[0],value[1]);

т.е. если я правильно понял разработчиков, здесь всё-таки будет ошибка:
Нельзя преобразовать тип Tuple<integer,integer> к Tuple<real,real>

Значит, нужно исправить на:
Key.Left: c.Direction := (-5.0, 0.0);

Но почему, в последней версии, у меня осталось старое сообщение об ошибке?

@miks1965

А какая у вас версия .NET установлена? Мы замечали, что эта ошибка как-то с ней связана.

@SunSerega

image

@miks1965

У вас всё понятно — у вас всё работает

@izhaks

@miks1965
У меня установлен и используется .NET версии 4.8.3752.0

image

Понравилась статья? Поделить с друзьями:
  • Неполадки подключения или неверный код ммі на андроид как исправить
  • Неправильное ударение это какая ошибка
  • Неправильно адресованные или оформленные ошибочно вложенные документы
  • Нельзя преобразовать тип integer к integer как исправить паскаль
  • Неполадки подключения или неверный код mmi мегафон как исправить