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

Мина Тохова



Ученик

(108),
закрыт



4 года назад

var a,b,c,d,e:integer;
begin
a:=3;
b:=2;
c:=3*2=6;
d:=3+2=5;
e:=3-2=1;
end.

Голова Робота

Просветленный

(36284)


4 года назад

Сначала хорошо бы понять, что ты хочешь написать, какая задача.
Исправить можно так:
var a,b:integer; c,d,e: boolean;
Или можно просто удалить программу целиком, поскольку она всё равно ничего не делает.

Мина ТоховаУченик (108)

4 года назад

3. Прочитайте с экрана последовательно два числа и выведите построчно их произведение, сумму и разность. Обязательно указывайте подсказки при вводе.

Голова Робота
Просветленный
(36284)
Изучи Паскаль, потом пиши.
В твоей программе нет ввода двух чисел. Вообще нет ввода. И вывода тоже.

В городе, в котором живут друзья Андрей и Борис, метро состоит из единственной кольцевой линии, вдоль которой на равном расстоянии друг от друга расположены 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

Условие задачи

Вы не можете напрямую разыграть bool для int:

(int)(nullable.HasValue != nullable1.HasValue) //invalid

но вы можете использовать Convert.ToInt32:

Convert.ToInt32(nullable.HasValue != nullable1.HasValue) //valid

Итак, ваш код должен быть:

if ((nullable.GetValueOrDefault() != nullable1.GetValueOrDefault() ? 1 : Convert.ToInt32(nullable.HasValue != nullable1.HasValue)) != 0)

Тем не менее, я думаю, что вы можете просто сделать прямое сравнение из-за “поднятых” операторов. Из C# Spec:

Для операторов равенства == [и]!= Поднятая форма оператора существует, если оба типа операндов являются необнуляемыми типами значений и если тип результата – bool. Поднятая форма создается путем добавления одного? модификатор для каждого типа операнда. Поднятый оператор считает два нулевых значения равными, а нулевое значение неравным любому ненулевому значению. Если оба операнда не равны NULL, поднятый оператор разворачивает операнды и применяет базовый оператор для получения результата bool.

Так что вы можете просто использовать:

if (nullable != nullable1)

Что, конечно, означает, что вы можете отказаться от nullable а также nullable1 переменные в целом и использовать

if (this._OrderBy != value)

Популярное

Темы

Сообщества

СправкаПоддержкаУсловия© 2023 ООО «Яндекс»

ПрограммированиеПеременныеТип переменной

Селитринников И.

9 ноября 2019  ·

ОтветитьУточнить

Вы знаете ответ на этот вопрос?

Поделитесь своим опытом и знаниями

Войти и ответить на вопрос

uses graphABC;
var c:integer;
    f:boolean;
procedure KeyDown(Key: integer);
begin
 case Key of
  VK_Left:  begin
            c:=1;
            textout(200,200,'c='+inttostr(c));
            end;
  VK_Right: begin
            c:=2;
            textout(200,200,'c='+inttostr(c));
            end;
  VK_Up:    begin
            c:=3;
            textout(200,200,'c='+inttostr(c));
            end;
  VK_Down:  begin
            c:=4;
            textout(200,200,'c='+inttostr(c));
            end;
  VK_Return:halt;
 end;
end;
begin
onkeydown:=KeyDown;
 
end.

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