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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2011, 14:15   #1
zmey1
Пользователь
 
Регистрация: 15.08.2011
Сообщений: 30
По умолчанию Матрицы действительных чисел. Паскаль.

Всем привет.

Помогите сделать программку с матрицами на паскале.
Я читал тут тему про матрицы, но там описывают только матрицы действительных чисел размерности N*N.
А у меня размерность M*N. То есть не обязательно квадратная.

И координаты не фиксированные, а должны быть введены с помощью readln.
Вообщем процедура должна обеспечить получение суммы элементов матрицы по столбцам, строкам и диагоналям, параллельным главной диагонали. Результаты всего этого добра должны появиться в матрице в соответствующих столбцах и строках.

Помогите плиз, добрые программисты=)
zmey1 вне форума Ответить с цитированием
Старый 16.11.2011, 14:30   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

Цитата:
Я читал тут тему про матрицы, но там описывают только матрицы действительных чисел размерности N*N.
А у меня размерность M*N. То есть не обязательно квадратная.
И чо? Как это повлияет на код, кроме замены в одном из циклов второй границы с N на M?
p51x вне форума Ответить с цитированием
Старый 16.11.2011, 15:00   #3
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Вообщем процедура должна обеспечить получение суммы элементов матрицы по столбцам, строкам и диагоналям, параллельным главной диагонали. Результаты всего этого добра должны появиться в матрице в соответствующих столбцах и строках.
а где должны появиться суммы диагоналей?
Вадим Мошев вне форума Ответить с цитированием
Старый 16.11.2011, 15:07   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Очевидно на диагоналях, перпендикулярных главной
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 16.11.2011, 16:53   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А у меня размерность M*N. То есть не обязательно квадратная.

И координаты не фиксированные, а должны быть введены с помощью readln.
Вообщем процедура должна обеспечить получение суммы элементов матрицы по столбцам, строкам и диагоналям, параллельным главной диагонали.
Вы очень сильно заблуждаетесь. Понятие "главной" (как, впрочем и "побочной") диагонали определено исключительно для КВАДРАТНОЙ матрицы.
отсюда и пляшите...

а в остальном я согласен с p51x - хоть N на N, хоть M на L - принципиально это ничего не меняет, те же самые циклы...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.11.2011, 17:01   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

ну любят преподы даже не в квадратных матрицах выделять диагонали.... что тут сделаешь
p51x вне форума Ответить с цитированием
Старый 16.11.2011, 17:25   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
ну любят преподы даже не в квадратных матрицах выделять диагонали.... что тут сделаешь
ладно. допустим, мы забыли про математические правила и определения.
Но тогда, вот меня всегда интересовало, с точки зрения таких "преподавателей",
если матрица (допустим!) m=3 n=8:
Код:
1   2  3  4  5  6  7  8
21 22 23 24 25 26 27 28
31 32 33 34 35 36 37 38
напишите, пожалуйста, сколько элементов входит в главную диагональ матрицы?
и какие именно элементы матрицы составляют главную диагональ (и поясните, почему именно они. /ну, по какому правилу они попали в эту главную диагональ...)

Последний раз редактировалось Serge_Bliznykov; 16.11.2011 в 17:29.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.11.2011, 18:23   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

есть два варианта:
1. диагональ с 1 до 33, как в квадратных
2. и лента из "диагоналей" - первая начинается с 1, последняя заканчивается 38

почему? а фих его знает... наверное так похоже на квадратные

П.С. все по опыту, а не по математике....
p51x вне форума Ответить с цитированием
Старый 17.11.2011, 12:34   #9
zmey1
Пользователь
 
Регистрация: 15.08.2011
Сообщений: 30
По умолчанию Получилось, но не все

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы очень сильно заблуждаетесь. Понятие "главной" (как, впрочем и "побочной") диагонали определено исключительно для КВАДРАТНОЙ матрицы.
отсюда и пляшите...
Спасибо, а то я чет уже зашугался=))

У меня получилось вычислить сумму строк и столбцов, но никак не получается вычислить сумму элементов параллельных главной диагонали.
И проблема в том, что количество строк и столбцов должен вводить пользователь.
Подскажите, пожалуйста, че нужно дописать.

Вот код:
Код:
Program  matrix;
uses crt;

const n=5;m=5;
Var a:array[1..n,1..m] of integer;
s,w,d,i,j:integer;
Begin
Randomize;



For i:=1 to n do
begin
For j:=1 to m do
begin
a[i,j]:=random(6); 
write(a[I,j]:4);
end;
writeln;
end;
{Считаем сумму строк}
For i:=1 to n do
Begin
s:=0;
For j:=1 to m do
s:=s+a[i,j];
writeln ('Сумма ',I,' строки ',s);
end;


{Считаем сумму столбцов}
readln;
For j:=1 to m do
Begin
d:=0;
For i:=1 to n do
d:=d+a[i,j];
writeln ('Сумма ',j,' столбца ',d);
end;
readln;



end.


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

Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 17.11.2011 в 13:26.
zmey1 вне форума Ответить с цитированием
Старый 17.11.2011, 13:52   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) в задании у Вас сказано, матрицы действительных чисел. Если мне не изменяет память, то это ВЕЩЕСТВЕННЫЕ числа.
Вы же описываете массив ЦЕЛЫХ чисел. Это неверно.


2)
Цитата:
И проблема в том, что количество строк и столбцов должен вводить пользователь.
по строчке uses CRT; я вижу, что Вы используете TurboPascal.
в нём не было реальных динамических массивов.

Был ряд способов как можно обойтись без динамических массивов:

создать тип массив из одного элемента, сделать на него указатель и выделить нужное количество памяти (этакий хакерский способ с "обманом" компилятора), потом через указатель разименовыывать и работать с этими данными.

либо использовать связанные списки, куда добавлять элементы, выдяляя память динамически, по мере необходимости,

либо, САМЫЙ ПРОСТОЙ способ - объявить массив заведомо большего, чем может быть размера (например, 100), обязательно хранить размер реально используемый размер массива, который вводится оператором и которые не может превышать максимально-заданное программистом значение.
выглядеть это может так:
Код:
Const
   MaxN = 100;
   MaxM = 100;
var A : array[1..MaxN,1..MAxM] of real;
  n. m : integer;
  .....
begin
  repeat
    WriteLn('Введите число строк матрицы: ');
    Readln(n);
    if (n<1) or (n>MaxN) then WriteLn('Ошибка. Число строк должно быть от 1 до ',MaxN);
  until (n>=1) and (n<=MaxN);
  repeat
    WriteLn('Введите число столцов матрицы: ');
    Readln(m);
    if (m<1) or (m>MaxM) then WriteLn('Ошибка. Число строк должно быть от 1 до ',MaxM);
  until (m>=1) and (m<=MaxM);

  ВНИМАНИЕ! 
   Здесь ввод числа столбцов показан исключительно 
    в общем случае.
  Т.к. у Вас матрица квадратная, то число столбцов вводить НЕ НУЖНО!
  Достаточно вместо этого написать:
  m := n; 
  и всё!

  Дальше Ваш код...

  ....
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Методом простых включений произвести сортировку (упорядочивание в порядке возрастания) массива из N действительных чисел СашаСаша Помощь студентам 1 04.07.2011 18:41
Нужно ввести 5 действительных чисел, и посчитать их сумму, арифмитическое значение........ Ksu9304 Помощь студентам 1 15.03.2011 23:43
Паскаль. среднее арифметическое простых чисел матрицы валёна Помощь студентам 2 28.01.2010 12:15
Найти последовательность действительных чисел,получающихся при чтении данной матрицы по СПИРАЛИ. anta Общие вопросы C/C++ 17 02.06.2009 18:07