Нельзя преобразовать тип integer к boolean как исправить
Перейти к содержимому

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

  • автор:

Ошибка! Нельзя преобразовать тип real к integer

У вас ошибка на ошибке сидит. даже переписывать не хочется. вы ничего не считаете в процедуре, потому что s в ней параметр, так что ваша глобальная переменная s не получает никакого значения; даже если б получала — вы используете power не с теми типами, более того, это power совсем не нужно, как указал @MBo; вы передаете a как параметр k , но тут же его делаете равным 3 (может, так и надо по условию — его-то вы не показали), но зачем при этом вообще передавать параметром a ? Пока хватит.

16 мая 2019 в 4:01

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

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

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

function Calc(x, a: Integer): LongInt; var i: Integer; s: LongInt; begin k := 3; s := 1; r := 1 for i := 1 to a do begin r := - r * x; s := s + r * k; k := k + 3; end; Result := s; < Calc := s в старом Паскале >end; 

Отслеживать
ответ дан 16 мая 2019 в 3:57
54.3k 3 3 золотых знака 20 20 серебряных знаков 43 43 бронзовых знака

А здесь нет возвращения через глобальную переменную, потому что s в процедуре не глобальное, а параметр.

Program1.pas(8) : Нельзя преобразовать тип integer к boolean. Что мне делать? язык паскаль

Засуньте выражение x div 2 в скобки [круглые].
Вообще, во всех двусмысленных выражениях ставьте скобочки.
Вы видите x div 2, а компилятор видит if x и результат этого еще и div 2 после этого.

Голова РоботаПросветленный (36338) 6 лет назад

> Вы видите x div 2, а компилятор видит if x и результат этого еще и div 2 после этого.

Нет, Паскаль так не работает. В данном случае он всё понимает правильно. Но Паскаль хочет видеть выражение логического типа, а получает целое число.

ewe 2e¶ CoЛнЫшКоcBeTиТоЧеНЬяРкО* Высший разум (310945) Да, действительно, вы правы. Но я все равно обрамляю скобками даже если есть только одна интерпретация, типа if($x==4)

Oleh Huz’Просветленный (49548) 6 лет назад
хорошо, что в скопки, а не в жо:)))))))))))
Остальные ответы

readln (x);
if x mod 2 = 0 then
writeln (‘ x — четное число. ‘)
else
writeln (‘ x — нечетное число. ‘);

Валентина БорбатУченик (88) 6 лет назад
спасибо огромное

Там есть и другие ошибки. Лучше так:

program chet;
var x:integer;
begin
readln(x); if odd(x) then writeln(‘нечетное’) else writeln(‘четное’)
end.

Если не хотите использовать стандартную функцию odd(x), ее можно заменить на x mod 2<>0

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

Author24 — интернет-сервис помощи студентам

Ошибка: нельзя преобразовать тип boolean к integer
Program A123; var a,b,X,Y,interval,p:integer; sum,REZ:real; begin writeln(‘Enter variabiles a.

Ошибка «Нельзя преобразовать тип integer к boolean»
при компиляции ошибка "нельзя преобразовать тип integer к boolean’ как исправить, но чтоб код.

Ошибка : Нельзя преобразовать тип array [1..8] of integer к integer
Дана целочисленная матрица В размером 5х8. Получить массив С из 0 и 1, в котором Ci=1, если в i –ой.

Нельзя преобразовать тип integer к array [1.8] of integer
Естественное слияние.pas(116) : Нельзя преобразовать тип integer к array of integer program cal;.

Эксперт Pascal/Delphi

6810 / 4567 / 4819
Регистрация: 05.06.2014
Сообщений: 22,438

1 2 3 4 5 6 7 8 9 10 11 12 13 14
program zadKL; var n: integer; x: integer; begin readln(n); if (n div 2) = 1 then //или чему оно должно быть равно? x := n * (n - 2) else x := n * (n - 1); writeln(x); end.

5079 / 2651 / 2349
Регистрация: 10.12.2014
Сообщений: 10,028

if (n div 2) then

А где логическая операция?

x:=n(n-2)

x булево, а n целое!
Но это ещё не всё. Вот так выражения в паскале не пишутся n(n-2) .
Вроде как вызываете функцию, но во-первых ни какой функции нет, а во-вторых, есть уже такая переменная!
Аналогично со следующим выражением

x:=n(n-1);

Регистрация: 29.12.2019
Сообщений: 6

1 2 3 4 5 6 7 8 9 10 11 12 13
program zadKL; var n:boolean; x:longint; begin read(n); if (n mod 2=0) then x:=n(n-2) else x:=n(n-1); writeln(x); end.

Пишет: Program1.pas(7) : Нельзя преобразовать тип boolean к integer
2313 / 1423 / 519
Регистрация: 07.04.2017
Сообщений: 4,725

ЦитатаСообщение от Ilon Mas Посмотреть сообщение

1. это только в математике умножение. В программирование это вызов подпрограммы с именем n, которой у вас нет.

2. n это boolean, что по вашему должно произойти если отнять от его значения 2 или 1?

3. Дайте условие задачи. Вообще его надо давать в самом начале.

Регистрация: 29.12.2019
Сообщений: 6

В городе, в котором живут друзья Андрей и Борис, метро состоит из единственной кольцевой линии, вдоль которой на равном расстоянии друг от друга расположены n станций, пронумерованных от 1 до n. Участок линии метро между двумя соседними станциями называется перегоном.

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

Друзья заметили, что выполняется следующее условие: если загадать некоторую станцию X и выписать для нее два числа: Da — расстояние от станции, на которой живет Андрей, до станции X и Db — расстояние от станции, на которой живет Борис, до станции X, то полученная пара чисел [Da, Db] будет однозначно задавать станцию X.

Например, если n = 4, Андрей живет на станции 1, а Борис живет на станции 2, то станция 1 задается парой [0, 1], станция 2 — парой [1, 0], станция 3 — парой [2, 1] и станция 4 — парой [1, 2].

Их одноклассник Сергей живет в соседнем городе и не знает, на каких станциях живут Андрей и Борис. Чтобы найти друзей, он заинтересовался, сколько существует вариантов пар станций A, B, таких что если Андрей живет на станции A, а Борис — на станции B, то выполняется описанное выше условие.

Требуется написать программу, которая по числу станций n на кольцевой линии определяет искомое количество вариантов.

Входные данные
Первая строка входного файла содержит одно целое число n (3 ≤ n ≤ 40 000).

Выходные данные
Выходной файл должен содержать одно число — искомое количество вариантов.

Пояснения к примерам
В первом примере подходят следующие варианты:
* Андрей живет на станции 1, а Борис на станции 2;
* Андрей живет на станции 1, а Борис на станции 4;
* Андрей живет на станции 2, а Борис на станции 1;
* Андрей живет на станции 2, а Борис на станции 3;
* Андрей живет на станции 3, а Борис на станции 2;
* Андрей живет на станции 3, а Борис на станции 4;
* Андрей живет на станции 4, а Борис на станции 1;
* Андрей живет на станции 4, а Борис на станции 3.

Примеры
входные данные
4
выходные данные
8
входные данные
5
выходные данные
20

Начало. Возможные ошибки

Все используемые переменные должны быть предварительно описаны с помощью ключевого слова 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: Программы и алгоритмы для начинающих

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *