Помогите с программой
Вычислить количество ненулевых элементов матрицы, лежащих выше, ниже и на главной диагонали.
вот кое-что пытался составить Выше главной: for i:=1 to n-1 do for j:=i+1 to n do if x[i,j] = 0 then k := k+1; ниже главной: for i:=2 to n do for j:=1 to i-1 do if x[i,j] = 0 then inc(k); На главной: for i:=1 to n do for j:=1 to n do if (i=j) and (x[i,j] = 0) then inc(k); проверьте и дополните что не хватает.заранее спасибо! |
1. Вместо ненулевых, как требуется в условии, Вы считаете нулевые элементы. Поэтому условие должно быть if x[i,j]<>0 then...
2. Если результаты подсчета выводятся сразу после обработки каждого из условий (выше... ниже... на...), то нормально, не забываем только обнулить k перед циклом. А вот если в конце, то для каждого из условий нужен свой идентификатор счетчика, например k1, k2, k3. 3. Не ошибка, но излишняя громоздкость. При подсчете ненулевых элементов на главной диагонали, двойной цикл не нужен, достаточно однократного. Выглядит так: for i:=1 to n do if x[i,i]<>0 then inc(k); |
А можно всю программу с самого начала?с раздела описания переменных
|
Цитата:
|
да я хочу понять всё и научиться!я не ищу халявы, просто хочу во всем разобраться))
вот не знаю, что не так выше главной: program LabWork6; const nmax=10; {максимальное число строк и столбцов} type Telem=real; {Тип элементов матрицы} Tindex=1..nmax; {Тип индексов матрицы} TArr=array[Tindex,Tindex] of Telem; {тип-матрица элементов типаTelem} {размером nmax*nmax} var x:TArr {исходная матрица} n, k:Telem; i,j:Tindex; begin for i:=1 to n do if x[i,i]<>0 then inc(k) then k := k+1; end. не пойму в разделе описания(((что и как |
Цитата:
Вот Вы, якобы самостоятельно решая задачу о количестве ненулевых элементов матрицы, понаопределяли и понавводили кучу собственных пользовательских типов. Вопрос - зачем? Ответ я, кажется, знаю - затем, что так было сделано в некоей программе, откуда Вы это тупо скатали. Но там-то наверняка автор перешел к динамическим переменным, указателям, стекам и прочему такому разному, до чего Вам пока, как до звёзд, поэтому ему и понадобились переопределения типов. А Вам они ровно ни к чему. В общем так. Вот Вам вариант решения задачки, попробуйте разобраться. А лучше - читайте книжки и пособия по Паскалю и пишите, пишите, пишите программки. Сами! Вот что главное. Только так чему-нибудь научитесь. Код:
CONST |
мне вот это непонятно:
N_higher,N_lower,N_on:Byte; что значит это? |
Это строка определения 3-х числовых переменных типа Byte, они могут принимать значения от 0 до 255. В листинге используются для хранения количества ненулевых элементов соответственно выше, ниже и на главной диагонали. Данный тип, вероятно, выбран автором в целях оптимизации использования памяти, так как массив он определил в 100 элементов и в нем подсчитанные количества не превысят допустимые верхние значения этого типа.
Что вам ещё непонятно? |
Цитата:
|
хорошо))
вот пытался изменить эту программу.хотел, чтобы матрицу надо было вводить самому, а не через random.но не могу найти ошибку.помогите пожалуйста! uses crt; VAR a:Array[1..4,1..4] of Integer; N1,N2,N3, N:integer; i,j:byte; BEGIN clrscr; writeln('Введите размер матрицы'); readln(N); writeln('Введите элементы матрицы'); For i:=1 to N do For j:=1 to N do begin readln(a[i,j]); end; WriteLn; N1:=0; N3:=0; N2:=0; For i:=1 to N do For j:=1 to N do begin If (j>i) and (A[i,j]<>0) then Inc(N1); If (j=i) and (A[i,j]<>0) then Inc(N2); If (j<i) and (A[i,j]<>0) then Inc(N3); end; WriteLn('N1= ',N1); WriteLn('N2= ',N2); WriteLn('N3= ',N3); ReadLn; END. |
Часовой пояс GMT +4, время: 16:46. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.