
Язык: Паскаль Почему при f=true не выводится то,что записано в условии? const n=3; var C:
array[1..n] of real; A: array[1..n,1..n] of real; X: array[1..n] of real; F:boolean; P,T:real; i,j:integer; begin writeln('Vvedite matricu A:'); for i:=1 to n do for j:=1 to n do read(A[i,j]); writeln('Vvedite massiv C:'); for i:=1 to n do read(C[i]); writeln('Vvedite znacheniya P,T:'); write('P='); readln(P); write('T='); read(T); x[i]:=0; F:=false; repeat if (P else F:=false; until (i>n) or (F=false); if F then begin for i:=1 to n do for j:=1 to n do x[i]:=x[i]+a[i,j]; writeln('X[',i,']=',x[i]); end else writeln('elementy massiva C ne lezhat v intervale P,T'); end.

Ответы на вопрос

Во-первых хотелось бы узнать, почему у тебя в 24 строчке странная запись:
if (P else F:=false;
Здесь непонятно, к чему написана скобка, а также непонятно, куда затерялся синтаксический then.
Во-вторых - почему в той же строчке сравниваешь тип real с типом boolean? На это ругается даже компилятор.
В-третьих - если мы опустим эти недочёты и вникнем в алгоритм, то поймём, что ты зациклил условие проверки P на истинность до тех пор, пока i не будет больше n или пока F не станет ложью. Но тут подвох в чём? В этом цикле ты не производишь никаких действий над операторами в условии, кроме как присваивание булевой переменной F значение false, чему оно и равно изначально. То есть можно сказать, что у тебя здесь происходит бесконечное зацикливание. Скорее всего именно поэтому у тебя не выводится массив, потому что компилятор не в состоянии дойти до строчки вывода. Чтобы хотя бы часть условия выполнилась, тебе нужно в условии if..then..else присваивать F не false, а true. Но это только в том случае, если ты исправишь конструкцию условия.



В предоставленном коде существуют несколько проблем, из-за которых он не работает должным образом. Давайте разберем эти проблемы и исправим код.
Неправильное использование переменной "i": Переменная "i" используется в нескольких местах без объявления и без изменения значения. Это может привести к непредсказуемому поведению и ошибкам.
Ошибка в условии внутри цикла "repeat": Условие внутри цикла "repeat" не сформулировано правильно. Оно должно проверять, находится ли элемент массива C в интервале [P, T], но вместо этого оно содержит непонятное выражение.
Некорректное обращение к "x[i]": Обращение к "x[i]" происходит вне цикла, где переменная "i" уже принимает значение "n+1", что вызывает ошибку.
Давайте исправим код с учетом указанных проблем:
pascalconst n = 3; var C: array[1..n] of real; A: array[1..n, 1..n] of real; X: array[1..n] of real; F: boolean; P, T: real; i, j: integer; begin writeln('Vvedite matricu A:'); for i := 1 to n do for j := 1 to n do read(A[i, j]); writeln('Vvedite massiv C:'); for i := 1 to n do read(C[i]); writeln('Vvedite znacheniya P,T:'); write('P='); readln(P); write('T='); readln(T); for i := 1 to n do X[i] := 0; F := false; for i := 1 to n do begin if (C[i] >= P) and (C[i] <= T) then F := true; end; if F then begin for i := 1 to n do for j := 1 to n do X[i] := X[i] + A[i, j]; for i := 1 to n do writeln('X[', i, ']=', X[i]); end else writeln('elementy massiva C ne lezhat v intervale P,T'); end.
Теперь код должен работать правильно. Он сначала проверяет, находятся ли элементы массива C в интервале [P, T], и если хотя бы один элемент удовлетворяет этому условию, то переменная F становится true. Затем, если F равно true, суммируются элементы матрицы A в массив X, и результат выводится на экран. Если F равно false, выводится соответствующее сообщение.


Похожие вопросы
Топ вопросов за вчера в категории Информатика








Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili