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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2010, 10:46   #1
laluna
 
Регистрация: 03.06.2010
Сообщений: 4
Сообщение Квадратная матрица

Квадратная матрица, симметричная относительно главной диагонали, задана верхним треугольником в виде одномерного массива. Восстановить исходную матрицу и напечатать по строкам.
laluna вне форума Ответить с цитированием
Старый 03.06.2010, 11:40   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Наработки есть?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.06.2010, 11:50   #3
Ol'ga_new
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 125
По умолчанию

Для поиска количества строк=столбцам:
Код:
s:=0;
while s<N do
begin
s:=s+i;
i:=i+1;
end;{здесь N-количество элиментов одномерного массива,
 i-количество строк }
Ol'ga_new вне форума Ответить с цитированием
Старый 04.06.2010, 18:24   #4
Fuadik
Пользователь
 
Регистрация: 22.01.2010
Сообщений: 37
По умолчанию квадратная матрица

Пусть задан одномерный массив В с числом элементов К. Надо доказать, что из К элементов можно создать верхнюю треугольную матрицу А. Заметьте, что в такой матрице на N-ой строке находится 1 элемент, на N-1 строке 2 элемента, N-2 строке 3 элемента и т.д. На 2 строке N-1 элемент, и на 1-ой строке N элементов. Очевидно, что кол-во элементов по строкам есть арифметическая прогрессия с первым членом а(1)=1 и разностью прогрессии d=1. Сумма членов арифметической прогрессии равна
S(n)=(a(1)+a(n))*n/2. a(n) - последний член арифм. прогрессии
a(n)=a(1)+d*(n-1). Подставляя это варажение в выражение суммы, получим
S(n)=(a(1)+a(1)+d*(n-1))*n/2. Подставляя значения а(1)=1, d=1, получим
квадратное уравнение относительно n: n**2+n-2*S=0. Решив его, получим n. Отрицательные и дробные значения не удовлетворяют условиям задачи. Поэтому решением будет: N:=-0.5+sqrt(0.25+2*K); где K - кол-во элементов заданного массива.

Решение задачи.
#
var K, N, m, i, j: integer;
b: array[1..50] of integer; //Цифры могут быть другие
a: array[1..10, 1..10] of integer;
NN: real;

begin
K:= //кол-во элементов заданного одномерного массива. Элементы задайте сами
b[1]:=
b[2]:=
..............
b[K]:=

NN:=-0.5+sqrt(0.25+2*K);
if Frac(NN)=0 then // если дробная часть равна 0
begin
N:=trunc(NN);
// обнуляем массив А
for i:=1 to N do
for j:=1 to N do
a[i, j]:=0;
m:=0;
// восстанавливаем исходную матрицу
for i:=1 to N do
for j:=i to N do
begin
inc(m);
a[i, j]:=b[m];
end;

// вывод на печать
for i:=1 to N do
begin
for j:=1 to N do
write(a[i,j]:4);
writeln;
end;
end
else
begin
// выводим на печать что-то вроде "невозможно составить треугольную матрицу"
end;

end;
#
Надеюсь, программу составите сами.

Последний раз редактировалось Fuadik; 05.06.2010 в 10:35. Причина: моя ошибка
Fuadik вне форума Ответить с цитированием
Старый 04.06.2010, 20:32   #5
DoDge_VipeR
Форумчанин
 
Аватар для DoDge_VipeR
 
Регистрация: 30.04.2010
Сообщений: 317
По умолчанию

Цитата:
Квадратная матрица, симметричная относительно главной диагонали, задана верхним треугольником в виде одномерного массива. Восстановить исходную матрицу и напечатать по строкам.
Код:
k:=1;
for i:=1 to n do
for j:=i to n do 
begin
a[i,j]:=b[k];a[j,i]:=b[k];k:=k+1;
end;
for i:=1 to n do begin
for j:=1 to n do 
write(a[i,j]:4);
writeln;
end;
icq:627719[сто сорок четыре] - помогу с Pascal & Delphi!
DoDge_VipeR вне форума Ответить с цитированием
Старый 04.06.2010, 20:32   #6
DoDge_VipeR
Форумчанин
 
Аватар для DoDge_VipeR
 
Регистрация: 30.04.2010
Сообщений: 317
По умолчанию

Цитата:
Квадратная матрица, симметричная относительно главной диагонали, задана верхним треугольником в виде одномерного массива. Восстановить исходную матрицу и напечатать по строкам.
Код:
k:=1;
for i:=1 to n do
for j:=i to n do 
begin
a[i,j]:=b[k];a[j,i]:=b[k];k:=k+1;
end;
for i:=1 to n do begin
for j:=1 to n do 
write(a[i,j]:4);
writeln;
end;
icq:627719[сто сорок четыре] - помогу с Pascal & Delphi!
DoDge_VipeR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
квадратная матрица Ольга123456 Паскаль, Turbo Pascal, PascalABC.NET 3 24.05.2010 16:21
квадратная матрица на С++ innaa639 Помощь студентам 1 24.03.2010 14:46
квадратная матрица DartDayring Общие вопросы C/C++ 3 13.03.2010 13:36
Квадратная матрица anna_ Помощь студентам 8 15.12.2009 21:16