Александр005 0 / 0 / 0 Регистрация: 08.11.2014 Сообщений: 30 |
||||||||
1 |
||||||||
22.01.2015, 23:51. Показов 5626. Ответов 8 Метки нет (Все метки)
Есть такой кусок кода, не могу сделать вот эту операцию…
0 |
JokeR.BY CAPITAL OF ROCK! 1281 / 708 / 982 Регистрация: 03.03.2010 Сообщений: 2,286 |
||||||||
23.01.2015, 00:02 |
2 |
|||||||
Сообщение было отмечено Александр005 как решение Решениепотому что использование имени функции в теле функции в операциях присвоения есть либо точка возврата оной функции (если с левой стороны), либо вызов оной функции внутри самой себя, то бишь рекурсия (с правой; но тогда и параметры должны задаваться в скобках, чего как бы нет).
имя функции не есть переменная. для этих целей нужно свою переменную объявлять
1 |
Александр005 0 / 0 / 0 Регистрация: 08.11.2014 Сообщений: 30 |
||||
23.01.2015, 00:19 [ТС] |
3 |
|||
JokeR.BY,
матерится:
0 |
Александр005 0 / 0 / 0 Регистрация: 08.11.2014 Сообщений: 30 |
||||||||
23.01.2015, 00:29 [ТС] |
4 |
|||||||
Есть код,помогите.
0 |
JokeR.BY CAPITAL OF ROCK! 1281 / 708 / 982 Регистрация: 03.03.2010 Сообщений: 2,286 |
||||
23.01.2015, 01:05 |
5 |
|||
Александр005, вы вызываете функцию work только с одним параметром. а она у вас описана только в одном варианте, то бишь с двумя.
0 |
0 / 0 / 0 Регистрация: 08.11.2014 Сообщений: 30 |
|
23.01.2015, 01:10 [ТС] |
6 |
JokeR.BY,
0 |
CAPITAL OF ROCK! 1281 / 708 / 982 Регистрация: 03.03.2010 Сообщений: 2,286 |
|
23.01.2015, 01:52 |
7 |
Александр005, а сколько у вашей функции параметров?
0 |
0 / 0 / 0 Регистрация: 08.11.2014 Сообщений: 30 |
|
23.01.2015, 02:24 [ТС] |
8 |
JokeR.BY, параметра 2,но выводит только К и то 0. Тоесть массив не выводит.
0 |
CAPITAL OF ROCK! 1281 / 708 / 982 Регистрация: 03.03.2010 Сообщений: 2,286 |
|
23.01.2015, 02:57 |
9 |
Александр005, вы нигде оный параметр не используете. просто удалите.
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
23.01.2015, 02:57 |
9 |
Вот код
var
n, i: integer;
begin
write('Введите число: ');
read(n);
while n <> 1 do
if n mod 2 = 0 then
n := n / 2
else
n:=(n* 3 + 1) / 2;
end.
Задача такая, что если число чётное, то его нужно разделить на два, а если нет, то умножить на 3, прибавить 1 и разделить на два. И делать так, пока в итоге не получится 1. В 5 строчке пишет: нельзя преобразовать тип real к integer. Я не пойму где тут real. Помогите пожалуйста.
задан 9 янв 2020 в 15:11
В результате операции n / 2
получается значение типа real, т.к. /
— обычное не целочисленное деление, результат которого может быть нецелым числом. Вы же записываете результат этой операции в переменную n
, которая имеет тип integer. Из-за несоответствия типов возникает ошибка.
Вам нужно использовать целочисленное деление, которое отбрасывает остаток и даёт в результате целое число:
n := n div 2
ответ дан 9 янв 2020 в 15:20
Кирилл МалышевКирилл Малышев
10.8k1 золотой знак18 серебряных знаков34 бронзовых знака
1
Во-первых, форматируйте ваш код! Во-вторых, ваша проблема
в использовании оператора /
вместо DIV
. Вот
так:
PROGRAM main;
VAR n, i: Integer;
BEGIN
Write('Введите число: ');
Read(n);
WHILE n <> 1 DO
IF n MOD 2 = 0 THEN
n := n DIV 2
ELSE
n := (n * 3 + 1) DIV 2;
END.
ответ дан 9 янв 2020 в 15:24
Ainar-GAinar-G
15.9k3 золотых знака24 серебряных знака41 бронзовый знак
2
Формулировка задачи:
Дана целочисленная матрица В размером 5х8. Получить массив С из 0 и 1, в котором Ci=1, если в i –ой строке матрицы есть хотя бы один отрицательный элемент, и Ci=0 в противном случае.
Program1.pas(22) : Нельзя преобразовать тип array [1..8] of integer к integer.
Какая ошибка допущена в 22 строке?
Код к задаче: «Ошибка : Нельзя преобразовать тип array [1..8] of integer к integer»
Полезно ли:
13 голосов , оценка 4.077 из 5
Загрузка…
Неописанная переменная
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: Программы и алгоритмы для начинающих