14.03.2015, 14:15 | #1 (permalink) |
Новичок
Регистрация: 14.03.2015
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Паскаль. Решение четырёх взаимосвязанных задач
Разработать программу решения четырех взаимосвязанных задач частой работы: 1)расчета элементов квадратной матрицы A = (ai,j ), i,j = 1,2,...,n по заданной формуле; 2)вычисления элементов вектора X = (xi), i = 1,2,...,n по заданному правилу; 3)требуемого упорядочения элементов матрицы А или вектора Х; 4)вычисления значения y по заданной формуле. Размерность задачи n назначается преподавателем 1) аij=( 2.2 +j*(8.4*i + 1)^1/2)/(10^ln(i*j) +5) 2) xi=(сигма от n до j=1) ln(bji) где bji - элементы матрицы полученной заменой аij на сумму элементов i-й строки; 3)Упорядочить элементы строк матрицы А по убыванию значений; 4) y=(сигма от (n-1) до (i=2)) (x(i-1))/xi)+(xi/(x(i+1)); |
14.03.2015, 14:15 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Пока вам не дали ответов вы можете полистать аналогичные темы Решение задач по Pascal Решение задач на подпрограммы с рекурсиями, Паскаль ABC |
14.03.2015, 17:28 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
ПолучИте:
Код:
Uses CRT; Const Nmax=9; Var N,i,j:Integer; A,B:Array[1..Nmax,1..Nmax] of Real; X:Array[1..Nmax] of Real; Y:Real; Procedure Matrix_A; begin for i:=1 to N do begin for j:=1 to N do begin A[i,j]:=(2.2+Sqrt(8.4*i+1)*j)/(Exp(Ln(i*j)*Ln(10))+5); Write(A[i,j]:8:3); end; Writeln; end; end; Procedure Matrix_B; var S:Real; begin for i:=1 to N do begin S:=0; for j:=1 to N do S:=S+A[i,j]; for j:=1 to N do begin B[i,j]:=S; Write(B[i,j]:8:3); end; Writeln; end; end; Procedure Vector_X; begin for i:=1 to N do begin X[i]:=0; for j:=N downto 1 do X[i]:=X[i]+Ln(B[i,j]); Write(X[i]:8:3); end; Writeln; end; Procedure Ordering; var k:Integer; D:Real; begin for i:=1 to N do begin for j:=1 to N-1 do for k:=1 to N-j do if A[i,k]<A[i,k+1] then begin D:=A[i,k]; A[i,k]:=A[i,k+1]; A[i,k+1]:=D; end; end; for i:=1 to N do begin for j:=1 to N do Write(A[i,j]:8:3); Writeln; end; end; Procedure Find_Y; begin Y:=0; for i:=N-1 downto 2 do Y:=Y+(X[i-1]/X[i]+X[i]/X[i+1]); Writeln('Y = ',Y:0:3); end; Begin ClrScr; Repeat Write('N = '); Readln(N); If N>Nmax then Writeln('N must be < ',Nmax+1,'!'); Until N<Nmax+1; ClrScr; Writeln('Matrix A:'); Writeln; Matrix_A; Writeln; Writeln('Press any key to continue...'); ReadKey; ClrScr; Writeln('Matrix B:'); Writeln; Matrix_B; Writeln; Writeln('Press any key to continue...'); ReadKey; ClrScr; Writeln('Vector X:'); Writeln; Vector_X; Writeln; Writeln('Press any key to continue...'); ReadKey; ClrScr; Writeln('Ordered matrix A:'); Writeln; Ordering; Writeln; Writeln('Press any key to continue...'); ReadKey; ClrScr; Writeln('Y value:'); Writeln; Find_Y; ReadKey End. |
14.03.2015, 18:37 | #5 (permalink) |
Новичок
Регистрация: 14.03.2015
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
я не совсем разбираюсь, можете по подробнее объяснить
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
14.03.2015, 18:50 | #7 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
А для этого нам нужно знать, что у Вас за Паскаль. Паскали - они ведь разные бывают. Tubo, Free, Borland, ABC, Lazarus...
Ладно, вот Вам вариант без CRT. Попробуйте: Код:
Const Nmax=9; Var N,i,j:Integer; A,B:Array[1..Nmax,1..Nmax] of Real; X:Array[1..Nmax] of Real; Y:Real; Procedure Matrix_A; begin for i:=1 to N do begin for j:=1 to N do begin A[i,j]:=(2.2+Sqrt(8.4*i+1)*j)/(Exp(Ln(i*j)*Ln(10))+5); Write(A[i,j]:8:3); end; Writeln; end; end; Procedure Matrix_B; var S:Real; begin for i:=1 to N do begin S:=0; for j:=1 to N do S:=S+A[i,j]; for j:=1 to N do begin B[i,j]:=S; Write(B[i,j]:8:3); end; Writeln; end; end; Procedure Vector_X; begin for i:=1 to N do begin X[i]:=0; for j:=N downto 1 do X[i]:=X[i]+Ln(B[i,j]); Write(X[i]:8:3); end; Writeln; end; Procedure Ordering; var k:Integer; D:Real; begin for i:=1 to N do begin for j:=1 to N-1 do for k:=1 to N-j do if A[i,k]<A[i,k+1] then begin D:=A[i,k]; A[i,k]:=A[i,k+1]; A[i,k+1]:=D; end; end; for i:=1 to N do begin for j:=1 to N do Write(A[i,j]:8:3); Writeln; end; end; Procedure Find_Y; begin Y:=0; for i:=N-1 downto 2 do Y:=Y+(X[i-1]/X[i]+X[i]/X[i+1]); Writeln('Y = ',Y:0:3); end; Begin Repeat Write('N = '); Readln(N); If N>Nmax then Writeln('N must be < ',Nmax+1,'!'); Until N<Nmax+1; Writeln('Matrix A:'); Writeln; Matrix_A; Writeln; Writeln('Press "Enter" to continue...'); Readln; Writeln('Matrix B:'); Writeln; Matrix_B; Writeln; Writeln('Press "Enter" to continue...'); Readln; Writeln('Vector X:'); Writeln; Vector_X; Writeln; Writeln('Press "Enter" to continue...'); Readln; Writeln('Ordered matrix A:'); Writeln; Ordering; Writeln; Writeln('Press "Enter" to continue...'); Readln; Writeln('Y value:'); Writeln; Find_Y; Readln End. |
14.03.2015, 18:55 | #9 (permalink) |
Новичок
Регистрация: 14.03.2015
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Владимир простите за назойливость
но почему то снова необъяснимая ошибка Program1.pas(12,6): Переменная цикла for должна описываться в том же блоке, что и цикл for |
14.03.2015, 18:56 | #10 (permalink) |
Новичок
Регистрация: 14.03.2015
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
вот в этом месте
for i:=1 to N do begin for j:=1 to N do |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|