25.08.2011, 12:37 | #1 (permalink) |
Member
Регистрация: 24.08.2011
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Где же баг? Помогите, пожалуйста, уважаемые профи!
var a:array [1..100,1..100] of real; i,j,n:integer; max:real; max_defined:boolean; begin clrscr; max:=-10000; writeln('There is a square real matrix. Count max from x-elements'); writeln(''); writeln('- x x x '); writeln('o - x x '); writeln('o o - x '); writeln('o o o - '); writeln(''); writeln ('Enter the dimension of the square matrix A:'); readln (n); while n<1 do begin writeln('Error! Wrong dimension'); writeln(''); writeln('Enter the correct dimension of the square matrix A:'); readln (n); end; for i:=1 to n do for j:=1 to n do begin writeln ('Enter the value of matrix A element a[',i,',',j,']'); readln (a[i,j]); end; max_defined:=false; for i:=1 to n-1 do for j:=i+1 to n do if max_defined then begin if a[i,j]>max then max:=a[i,j]; else max_defined:=true; end; writeln(''); writeln('Matrix A:'); for i:=1 to n do begin writeln(''); for j:=1 to n do begin write (a[i,j]:0:0); end; end; writeln(''); writeln('max element =',max:4:0); readln; end. Ругается на строчку с else - пишет Error in statement. Где я не права?)) |
25.08.2011, 12:37 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Если поискать по схожим темам, то можно найти это Помогите пожалуйста Evga gtx 460 - вопросы, профи помогите Помогите пожалуйста Помогите, пожалуйста, с CD-ROM Вопрос для профи |
25.08.2011, 12:43 | #3 (permalink) |
Member
Регистрация: 24.08.2011
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
И еще важный момент: я ввела переменную "max_defined", чтобы максимум был либо определён, либо не определён. То есть, если взять матрицу размерностью "1", максимум будет не определён (принять максимум равный 1 - логически не верно).
|
25.08.2011, 15:49 | #5 (permalink) |
Member
Регистрация: 24.08.2011
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Что-то намудрила... Посмотрите, пожалуйста, еще одно:
uses crt; var a:array [1..100,1..100] of real; i,j,n:integer; max:real; max_defined:boolean; begin clrscr; max:=-10000; max_defined:=false; writeln('There is a square real matrix. Count max from x-elements'); writeln(''); writeln('- x x x '); writeln('o - x x '); writeln('o o - x '); writeln('o o o - '); writeln(''); writeln ('Enter the dimension of the square matrix A:'); readln (n); while n<1 do begin writeln('Error! Wrong dimension'); writeln(''); writeln('Enter the correct dimension of the square matrix A:'); readln (n); end; for i:=1 to n do for j:=1 to n do begin writeln ('Enter the value of matrix A element a[',i,',',j,']'); readln (a[i,j]); end; for i:=1 to n-1 do for j:=i+1 to n do if max_defined then if a[i,j]>max then max:=a[i,j] else max_defined:=true; if max_defined=true then begin writeln(''); writeln('Matrix A:'); for i:=1 to n do begin writeln(''); for j:=1 to n do begin write (a[i,j]:0:0); end; end; writeln(''); writeln('max element =',max:4:0); readln; end else writeln('Max not defined!'); readln; end. Сейчас при вводе любых "хороших" (больше единицы) значений размерности матрицы выводится сообщение "Max element not defined!" (Максимальный элемент не определен). |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
25.08.2011, 18:10 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Вы знаете, сколь я голову ни ломал, но так и не сподобился узреть хотя бы малейший оттенок смысла в булевом параметре max_defined, т.е. с моей точки зрения он не только абсолютно лишний, но и вредный, ибо вносит путаницу в код и приводит к ошибкам, в чем Вы имели возможность убедиться. Потому предлагаю работающий вариант без указанного параметра и с некоторой еще косметикой:
Код:
uses crt; var a:array [1..100,1..100] of real; i,j,n:integer; max:real; begin clrscr; max:=-10000; writeln('There is a square real matrix. Count max from x-elements'); writeln(''); writeln('- x x x '); writeln('o - x x '); writeln('o o - x '); writeln('o o o - '); writeln(''); writeln ('Enter the dimension of the square matrix A:'); readln (n); while n<1 do begin writeln('Error! Wrong dimension'); writeln(''); writeln('Enter the correct dimension of the square matrix A:'); readln (n); end; for i:=1 to n do for j:=1 to n do begin write('Enter the value of matrix A element a[',i,',',j,'] '); readln (a[i,j]); end; for i:=1 to n-1 do for j:=i+1 to n do if a[i,j]>max then max:=a[i,j]; writeln(''); writeln('Matrix A:'); for i:=1 to n do begin writeln; for j:=1 to n do write(a[i,j]:8:3); end; writeln; writeln; writeln('max element =',max:4:0); readln; end. |
26.08.2011, 15:00 | #8 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Код:
uses crt; var a:array [1..100,1..100] of real; i,j,n:integer; max:real; begin clrscr; max:=-10000; writeln('There is a square real matrix. Count max from x-elements'); writeln(''); writeln('- x x x '); writeln('o - x x '); writeln('o o - x '); writeln('o o o - '); writeln(''); write('Enter the dimension of the square matrix A: '); readln (n); while n<1 do begin writeln('Error! Wrong dimension'); writeln(''); writeln('Enter the correct dimension of the square matrix A:'); readln (n); end; writeln; for i:=1 to n do for j:=1 to n do begin write('Enter the value of matrix A element a[',i,',',j,'] '); readln (a[i,j]); end; If n=1 then max:=a[1,1] else begin for i:=1 to n-1 do for j:=i+1 to n do if a[i,j]>max then max:=a[i,j]; end; writeln; writeln('Matrix A:'); for i:=1 to n do begin writeln; for j:=1 to n do write(a[i,j]:8:3); end; writeln; writeln; writeln('max element =',max:4:0); readln; end. |
|
29.08.2011, 11:20 | #10 (permalink) |
Member
Регистрация: 24.08.2011
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Решаю следующую задачку, и снова где-то скрылся "неуловимый" баг. Задача похожая - улучшила структуру программы, только сейчас нужно вычислить нижний треугольник матрицы:
о o o o о о о o о о о о о о о о о х о о о х х х о program MaxElement; uses Crt; var Matrix: array [1..100, 1..100] of Real; size: Integer; maxValue: Real; i: Integer; j: Integer; begin clrscr; while True do begin write('Enter the matrix size: '); read(size); if size >= 2 then begin break; end; writeLn('Error: matrix size is too small!'); end; writeLn('Enter the matrix:'); for i:= 1 to size do begin for j:= 1 to size do begin read(Matrix[i, j]); end; end; maxValue:= Matrix[1, 2]; for j:= size+1 to size-1 do begin for i:= size-j to size do begin if Matrix[i, j] > maxValue then begin maxValue:= Matrix[i, j]; end; end; end; writeLn('Max value = ', maxValue:1:2); readLn; readLn; end. Сейчас почему-то вычисляет максимум из "верхнего" треугольника.... tehnari_ru_117: |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|