Язык: Паскаль Почему при f=true не выводится то,что записано в условии? const n=3; var C:...

0 голосов
63 просмотров

Язык: Паскаль Почему при 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.


Информатика (2.5k баллов) | 63 просмотров
Дан 1 ответ
0 голосов

Во-первых хотелось бы узнать, почему у тебя в 24 строчке странная запись:

if (P else F:=false;

Здесь непонятно, к чему написана скобка, а также непонятно, куда затерялся синтаксический then.

Во-вторых - почему в той же строчке сравниваешь тип real с типом boolean? На это ругается даже компилятор.

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

(542 баллов)
0

Я так понимаю, у тебя программа выдаёт elementy massiva C ne lezhat v intervale P,T?

0

Если не входят,то да,если входят должен выдавать значения х

0

Но вместо этого просто завершается программа

0

У тебя вводится 3 элемента массива C. Но в условии ты проверяешь лишь 2 элемента, причём эти элементы одинаковы. Какова логика? Ты используешь для проверки индекс i - тот, который использовался в цикле, то есть после цикла он проработал и остался тройкой.

0

Так, исправил код.

0
0

я так понимаю inc(i) то же самое,что i:=i+1?

0

Да, просто мне такая запись удобнее.

0

Отпишись, если всё хорошо работает.

0

Все работает ;3 Спасибо тебе огромное! А то немало времени я на нахождение ошибки убил)