• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Паскаль. Решение четырёх взаимосвязанных задач

  • Автор темы Автор темы Lion17
  • Дата начала Дата начала

Lion17

Ученик
Регистрация
14 Мар 2015
Сообщения
8
Реакции
0
Баллы
0
Паскаль. Решение четырёх взаимосвязанных задач

Здравствуйте помогите пожалуйста
Разработать программу решения четырех взаимосвязанных задач частой работы:
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));
 
ПолучИте:
Код:
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.
 
выдает ошибку
Program1.pas(1,6): Модуль 'CRT' не найден
 
я не совсем разбираюсь, можете по подробнее объяснить
 
У Вас обычный Турбо/Борланд Паскаль или АВС/Лазарус?
 
я не совсем разбираюсь, можете по подробнее объяснить
А для этого нам нужно знать, что у Вас за Паскаль. Паскали - они ведь разные бывают. 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.
 
Владимир простите за назойливость
но почему то снова необъяснимая ошибка
Program1.pas(12,6): Переменная цикла for должна описываться в том же блоке, что и цикл for
 
вот в этом месте
for i:=1 to N do
begin
for j:=1 to N do
 
убрал begin
выдает след.ошибку : Program1.pas(20,1): FOUND'end'EXPECTEDbegin
курсор вот здесь
Write(A[i,j]:8:3);
end;
Writeln;
end;
end;
 
но почему то снова необъяснимая ошибка
Очень даже объяснимая. Потому что лжеПаскаль АВС - это отвратительное, глючное и гнусное изделие. У себя я эту дрянь не держу. Ладно, попробуйте так:
Код:
Program Blabla;

Const
 Nmax=9;

Var
 N:Integer;
 A,B:Array[1..Nmax,1..Nmax] of Real;
 X:Array[1..Nmax] of Real;
 Y:Real;

Procedure Matrix_A;
var i,j:Integer;
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;
 i,j:Integer;
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;
var i,j:Integer;
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
 i,j,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;
var i:Integer;
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.
 
Ой, а вот это - последнее дело: вслепую курочить программу, абсолютно не понимая смысла своих действий! Ну не будете же Вы чинить компьютер путём выкусывания элементов наугад? А чтобы Вам было ясно, в Паскале begin..end - это так называемые "операторные скобки". Вы убрали "begin" - ну так естественно транслятор тут же вопит: "вижу "end", а где от него "begin""?!!
И вообще мой Вам совет: учитесь, разбирайтесь, пока не поздно. А на тупом бездумном скатывании с форумов далеко не уедете.
 
:trio: хочу выразить огромную благодарность вам Владимир, очень выручили. Спасибо за помощь
 
Заработало? Ну и славно.
Но совет насчет учиться - в силе.
Успехов!
 
Назад
Сверху