09.06.2012, 08:39 | #1 (permalink) |
Member
Регистрация: 25.07.2011
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Программа на Паскале
Используя эту функцию определить номер строк матрицы вещественных чисел,в которых содержится ровно 2 элемента равных 0 с погрешностью 10 в -4. |
09.06.2012, 08:39 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Эти темы могут вам помочь Программа вычисления интеграла на Паскале Программа на Паскале Программа на паскале |
09.06.2012, 09:56 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Код:
Const Nmax=8; Eps=0.0001; Type Vector=Array[1..Nmax] of Real; Var A:Array[1..Nmax] of Vector; i,j,N,p:Byte; Function N_zero(D:Vector;M:Byte):Byte; var k,Nz:byte; begin Nz:=0; For k:=1 to M do If Abs(D[k])<Eps then Inc(Nz); N_zero:=Nz; end; Begin Randomize; Write('N= '); Readln(N); For i:=1 to N do begin For j:=1 to N do begin A[i][j]:=(Random-0.5)/1000; Write(A[i][j]:9:5); end; Writeln; end; Writeln; Writeln('Numbers of lines containing 2 zero elements:'); p:=0; For i:=1 to N do If N_zero(A[i],N)=2 then begin Inc(p); Write(' ',i); end; If p=0 then Writeln('No such lines!'); Readln End. |
|
13.06.2012, 15:34 | #4 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
1. Задаются константы: а) Nmax - максимальный размер массива б) Eps - точность 2. Вводится тип Vector - одномерный массив вещественных чисел длиной Nmax. 3. Определяются переменные: а) А - матрица размерности Nmax x Nmax, причем задается она не как двумерный массив, а как одномерный массив векторов-строк. б) всякие переменные типа Byte (реальный размер массива, переменные циклов и т.п.) 4. Задается функция N_zero, входными параметрами которой являются вектор и его длина, а возвращает она количество нулевых элементов в векторе. 5. Запускается генератор случайных чисел. 6. По запросу программы вводится реальная (N) размерность матрицы. 7. Матрица заполняется случайными числами в диапазоне от -0.0005 до +0.0005. 8. На экран выводится заголовок: "Номера строк, содержащих 2 нулевых элемента:". 9. Флажку p присваивается значение, равное 0. 10. Организуется цикл по вектор-строкам матрицы. Если число, возвращаемое функцией N_zero, аргументом которой является текущая строка, равно 2 (т.е. строка содержит 2 нулевых элемента), то номер такой строки выводится на экран и значение флажка p увеличивается на 1. 11. Если по окончании цикла значение p по-прежнему равно нулю, то выводится сообщение "таких строк нет!". 12. Дается команда остановки выполнения, чтобы можно было увидеть результат. 13. Всё! |
|
13.06.2012, 18:29 | #5 (permalink) |
Member
Регистрация: 25.07.2011
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Nz это значение переменной,это я понял,а К это что?
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
13.06.2012, 19:50 | #7 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Очень странное требование. В условии задачи четко указана величина погрешности - так причем тут пользователь? И потом - диапазон изменения значений элементов массива у меня подобран именно исходя из предложенного значения погрешности, так, чтобы для некоторой части строк условие с высокой вероятностью выполнялось - а тут как быть прикажете? Дурдом полный... Ну ладно, сейчас выдам два варианта с коррекцией диапазона и без таковой. Сами выберите, что Вам надо.
|
13.06.2012, 20:03 | #8 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Значит, так. Со вторым вариантом ничего не выходит - подобрать диапазон так, чтобы получалось разумное количество строк с двумя нулями практически невозможно. Поэтому вот вам первый вариант, в котором диапазон значений элементов матрицы определяется через вводимую пользователем погрешность:
Код:
Const Nmax=8; Type Vector=Array[1..Nmax] of Real; Var A:Array[1..Nmax] of Vector; i,j,N,p:Byte; Eps:Real; Function N_zero(D:Vector;M:Byte):Byte; var k,Nz:byte; begin Nz:=0; For k:=1 to M do If Abs(D[k])<Eps then Inc(Nz); N_zero:=Nz; end; Begin Randomize; Write('N= '); Readln(N); Write('Eps= '); Readln(Eps); For i:=1 to N do begin For j:=1 to N do begin A[i][j]:=(Random-0.5)*Eps*10; Write(A[i][j]:9:5); end; Writeln; end; Writeln; Writeln('Numbers of lines containing 2 zero elements:'); p:=0; For i:=1 to N do If N_zero(A[i],N)=2 then begin Inc(p); Write(' ',i); end; If p=0 then Writeln('No such lines!'); Readln End. |
14.06.2012, 10:51 | #9 (permalink) |
Member
Регистрация: 25.07.2011
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо за помощь,но я начинаю осознавать,что мой преподаватель тупее меня. Требует он,чтобы эта погрешность была в самой функции.Я возможно написал чушь,т.к. с информатикой не дружу вообще.Вообщем она должна быть входным параметром,вроде так.
|
14.06.2012, 11:16 | #10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Да пожалуйста:
Код:
Const Nmax=8; Type Vector=Array[1..Nmax] of Real; Var A:Array[1..Nmax] of Vector; i,j,N,p:Byte; Eps:Real; Function N_zero(D:Vector;M:Byte;E:real):Byte; var k,Nz:byte; begin Nz:=0; For k:=1 to M do If Abs(D[k])<E then Inc(Nz); N_zero:=Nz; end; Begin Randomize; Write('N= '); Readln(N); Write('Eps= '); Readln(Eps); For i:=1 to N do begin For j:=1 to N do begin A[i][j]:=(Random-0.5)*Eps*10; Write(A[i][j]:9:5); end; Writeln; end; Writeln; Writeln('Numbers of lines containing 2 zero elements:'); p:=0; For i:=1 to N do If N_zero(A[i],N,Eps)=2 then begin Inc(p); Write(' ',i); end; If p=0 then Writeln('No such lines!'); Readln End. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|