30.03.2011, 23:45 | #1 (permalink) |
Member
Регистрация: 19.03.2011
Сообщений: 30
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Помогите с программой
вот кое-что пытался составить Выше главной: 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); проверьте и дополните что не хватает.заранее спасибо! |
30.03.2011, 23:45 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Пока в вашей теме нет ответов вы можете обратить внимание на эти ссылки Помогите с программой Помогите с программой в Паскале Помогите с программой на Си |
31.03.2011, 09:59 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
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); |
16.04.2011, 15:57 | #5 (permalink) |
Member
Регистрация: 19.03.2011
Сообщений: 30
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
да я хочу понять всё и научиться!я не ищу халявы, просто хочу во всем разобраться))
вот не знаю, что не так выше главной: 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. не пойму в разделе описания(((что и как Последний раз редактировалось diagen_62; 16.04.2011 в 16:03 |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
16.04.2011, 17:41 | #6 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Вот Вы, якобы самостоятельно решая задачу о количестве ненулевых элементов матрицы, понаопределяли и понавводили кучу собственных пользовательских типов. Вопрос - зачем? Ответ я, кажется, знаю - затем, что так было сделано в некоей программе, откуда Вы это тупо скатали. Но там-то наверняка автор перешел к динамическим переменным, указателям, стекам и прочему такому разному, до чего Вам пока, как до звёзд, поэтому ему и понадобились переопределения типов. А Вам они ровно ни к чему. В общем так. Вот Вам вариант решения задачки, попробуйте разобраться. А лучше - читайте книжки и пособия по Паскалю и пишите, пишите, пишите программки. Сами! Вот что главное. Только так чему-нибудь научитесь. Код:
CONST N=10; VAR A:Array[1..N,1..N] of Integer; N_higher,N_lower,N_on:Byte; i,j:Integer; BEGIN Randomize; For i:=1 to N do For j:=1 to N do A[i,j]:=10-Random(20); For i:=1 to N do begin For j:=1 to N do Write(A[i,j]:4); WriteLn; end; WriteLn; N_higher:=0; N_lower:=0; N_on:=0; For i:=1 to N do For j:=1 to N do begin If (j>i) and (A[i,j]<>0) then Inc(N_higher); If (j=i) and (A[i,j]<>0) then Inc(N_on); If (j<i) and (A[i,j]<>0) then Inc(N_lower); end; WriteLn('N_higher= ',N_higher); WriteLn('N_on= ',N_on); WriteLn('N_lower= ',N_lower); ReadLn; END. |
|
18.04.2011, 07:14 | #8 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Это строка определения 3-х числовых переменных типа Byte, они могут принимать значения от 0 до 255. В листинге используются для хранения количества ненулевых элементов соответственно выше, ниже и на главной диагонали. Данный тип, вероятно, выбран автором в целях оптимизации использования памяти, так как массив он определил в 100 элементов и в нем подсчитанные количества не превысят допустимые верхние значения этого типа.
Что вам ещё непонятно?
__________________
Убить всех человеков! |
24.04.2011, 15:51 | #10 (permalink) |
Member
Регистрация: 19.03.2011
Сообщений: 30
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
хорошо))
вот пытался изменить эту программу.хотел, чтобы матрицу надо было вводить самому, а не через 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. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|