Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2013, 10:28   #1
марфаз
Новичок
Джуниор
 
Регистрация: 27.11.2013
Сообщений: 94
По умолчанию Даны три матрицы A, B, C. Решить квадратное уравнение Amin*x^2 + Bmin*x + Cmin = 0 (Pascal ABC.NET)

Код:
program b8; type vector= array [ 1..10,1..10] of real;
var A:vector;
B: vector;
c: vector;
e, min1,min2,min3 : real;
i,j: integer;
function S ( m1,m2,m3: real): real;
var d,x,x1,x2:real;
begin
if (m2*m2)-(4*m1*m3)=0
then x:=(-m2)/(2*m1)else
if (m2*m2)-(4*m1*m3)>0 then
begin
d:=(m2*m2)-(4*m1*m3);
x1:=((-m2)+sqrt(d))/(2*m1);
x2:=((-m2)-sqrt(d))/(2*m1);
end;
end;
begin 
for i:=1 to 5 do 
begin
for j:= 1 to 3 do
 read (A[i,j]);
 writeln; end; min1:= A[i,j];
 for i:= 1 to 3 do begin
 for j:= 1 to 3 do 
 read (B[i,j]); writeln ; end; min2:= B[i,j];
 for i:= 1 to 4 do begin
 for j:= 1 to 4 do
 read ( C [i,j]); writeln; end; min3:= C[i,j];
 for i:=1 to 5 do
 for j:=1 to 3 do 
 if A[i,j]< min1 then min1:=A[i,j];
 for i:= 1 to 3 do
 for j:= 1 to 3 do
 if B[i,j]< min2 then min2:= B[i,j];
 for i:= 1 to 4 do
 for j:= 1 to 4 do
 if C [i,j]< min3 then min3:= C[i,j];
 writeln( S (min1,min2,min3));
 
end.
очень нужна помощь почему не считает(((((((((бесконечный ввод ((((((проверьте пожалуйста программу((((((
ВОТ ЗАДАНИЕ:
заданы три матрицы A[5,3] B[3,3] C[4,4] . Решить уравнение A min * x^2 + B min * x + C min = 0 , где A min , B min и C min - минимальные элементы матрицы A, B , C




___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 17.12.2013 в 10:54.
марфаз вне форума Ответить с цитированием
Старый 17.12.2013, 10:59   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Вы во всех циклах используете одни и те же переменные ...
Естественно что их значения постоянно изменяются ...
Каждый цикл должен использовать уникальный символ счетчика.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 17.12.2013, 11:18   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

в программе много ошибок, поэтому и не работает.

Код лучше форматировать.
Это РЕЗКО повышает его наглядность и читаемость!

решение может выглядеть примерно так:
Код:
program b8;
type vector = array[1..10, 1..10] of real;

function S(a, b, c: real; var x1, x2 : real): boolean;
var d: real;
begin
  x1 := 0; x2 := 0;
  d := (b * b) - (4 * a * c);

  if d = 0
    then begin
    x1 := (-b) / (2 * a);
    x2 := x1;
    S := true
  end
  else
    if d > 0 then
    begin
      x1 := ((-b) + sqrt(d)) / (2 * a);
      x2 := ((-b) - sqrt(d)) / (2 * a);
      S := true
    end
    else
      S := false; {нет вещественных корней}
end;

function MinVector(const V: vector; const N, M: integer): real;
var minV: real;
  i,j : integer;
begin
  minV := V[1, 1];
  for i := 1 to N do
    for j := 1 to M do
      if V[i, j] < minV then minV := V[i, j];
  MinVector := minV;
end;

var
  A, B, C: vector;
  min1, min2, min3: real;
  x1, x2: real;
  i, j: integer;

begin
  for i := 1 to 5 do
  begin
    for j := 1 to 3 do
      read(A[i, j]);
    writeln;
  end;
  for i := 1 to 3 do
  begin
    for j := 1 to 3 do
      read(B[i, j]);
    writeln;
  end;
  for i := 1 to 4 do
  begin
    for j := 1 to 4 do
      read(C[i, j]);
    writeln; end;

  min1 := MinVector(A, 5, 3);
  min2 := MinVector(B, 3, 3);
  min3 := MinVector(C, 4, 4);

  WriteLn('A min =', min1: 1: 2, 'B min =', min2: 1: 2, 'C min =', min3: 1: 2);

  if S(min1, min2, min3, x1, x2) then
    WriteLn('x1 = ', x1: 1: 2, ' x2 = ', x2: 1: 2)
  else
    writeln('Not found real X (no solution!)');

end.
p.s. код не проверял. Доверяю это сделать Вам!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.12.2013, 16:28   #4
марфаз
Новичок
Джуниор
 
Регистрация: 27.11.2013
Сообщений: 94
По умолчанию

Serge_Bliznykov спасибо,ниче не работает!бесконечный ввод матрицы
марфаз вне форума Ответить с цитированием
Старый 17.12.2013, 16:39   #5
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Нет бесконечного ввода. Вам ввести нужно 15+9+16 элементов матрицы.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 19.12.2013, 07:46   #6
марфаз
Новичок
Джуниор
 
Регистрация: 27.11.2013
Сообщений: 94
По умолчанию

ZX Spectrum-128 три матрицы будет да?
марфаз вне форума Ответить с цитированием
Старый 19.12.2013, 08:55   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от марфаз Посмотреть сообщение
ZX Spectrum-128 три матрицы будет да?
точно так.

А что, код не Вы писали?!

кстати, можно дополнить код, чтобы не возникало впечатление, что он "бесконечно вводит":
Код:
  WriteLn('Введите матрицу A[5x3]: ');
  for i := 1 to 5 do
  begin
    for j := 1 to 3 do
      read(A[i, j]);
    writeln;
  end;
  WriteLn('Введите матрицу B[3x3]: ');
  for i := 1 to 3 do
  begin
    for j := 1 to 3 do
      read(B[i, j]);
    writeln;
  end;
  WriteLn('Введите матрицу C[4x4]: ');
  for i := 1 to 4 do
  begin
    for j := 1 to 4 do
      read(C[i, j]);
    writeln; end;
...

p.s. а вообще, когда нужно ввести такие большие матрицы, то обычно не издеваются над пользователем, заставляя каждый раз вводить десятки чисел, а :
либо заполняют матрицы случайными числами (через генератор ПСЧ),
либо считывают числа из подготовленного заранее (один раз!) файла.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.12.2013, 17:55   #8
марфаз
Новичок
Джуниор
 
Регистрация: 27.11.2013
Сообщений: 94
По умолчанию

бесконечный ввод данных

а как сделать что бы поменьше вводить чисел

Последний раз редактировалось Stilet; 25.12.2013 в 19:13.
марфаз вне форума Ответить с цитированием
Старый 25.12.2013, 18:47   #9
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

В циклах заполнения матрицы уменьшите размерность матрицы до 3.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 25.12.2013, 20:52   #10
марфаз
Новичок
Джуниор
 
Регистрация: 27.11.2013
Сообщений: 94
По умолчанию

program b8;
type vector = array[1..10, 1..10] of real;

function S(a, b, c: real; var x1, x2 : real): boolean;
var d: real;
begin
x1 := 0; x2 := 0;
d := (b * b) - (4 * a * c);

if d = 0
then begin
x1 := (-b) / (2 * a);
x2 := x1;
S := true
end
else
if d > 0 then
begin
x1 := ((-b) + sqrt(d)) / (2 * a);
x2 := ((-b) - sqrt(d)) / (2 * a);
S := true
end
else
S := false; {нет вещественных корней}
end;

function MinVector(const V: vector; const N, M: integer): real;
var minV: real;
i,j : integer;
begin
minV := V[1, 1];
for i := 1 to N do
for j := 1 to M do
if V[i, j] < minV then minV := V[i, j];
MinVector := minV;
end;

var
A, B, C: vector;
min1, min2, min3: real;
x1, x2: real;
i, j: integer;

begin
WriteLn('Введите матрицу A[5x3]: ');
for i := 1 to 5 do
begin
for j := 1 to 3 do
read(A[i, j]);
writeln;
end;
WriteLn('Введите матрицу B[3x3]: ');
for i := 1 to 3 do
begin
for j := 1 to 3 do
read(B[i, j]);
writeln;
end;
WriteLn('Введите матрицу C[4x4]: ');
for i := 1 to 4 do
begin
for j := 1 to 4 do
read(C[i, j]);
writeln; end;

min1 := MinVector(A, 5, 3);
min2 := MinVector(B, 3, 3);
min3 := MinVector(C, 4, 4);

WriteLn('A min =', min1: 1: 2, 'B min =', min2: 1: 2, 'C min =', min3: 1: 2);

if S(min1, min2, min3, x1, x2) then
WriteLn('x1 = ', x1: 1: 2, ' x2 = ', x2: 1: 2)
else
writeln('Not found real X (no solution!)');

end.
это означает : if S(min1, min2, min3, x1, x2) then
WriteLn('x1 = ', x1: 1: 2, ' x2 = ', x2: 1: 2)
else
writeln('Not found real X (no solution!)');
марфаз вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal. Арифметическое выражение. Решить квадратное уравнение и посчитать выражение, используя вычисленные корни. dauletsergazin Паскаль, Turbo Pascal, PascalABC.NET 4 13.11.2017 11:55
Даны три матрицы Елешечка Помощь студентам 1 01.12.2013 20:45
Работа с файлами (Pascal), квадратное уравнение Titovik Помощь студентам 13 28.04.2013 21:35
Даны три матрицы Lizonka-88 Паскаль, Turbo Pascal, PascalABC.NET 1 26.01.2012 10:15