Консультация № 151635
24.11.2008, 13:54
0.00 руб.
0 3 1
Здравствуйте эксперты! Помогите решить задачу: Составить программу, проверяющую, является ли матрица А трехдиагональной. Матрицу А нужно вводить с клавиатуры.

Обсуждение

Неизвестный
24.11.2008, 15:45
общий
это ответ
Здравствуйте, Петров Иван Сергеевич!
Матрица называется трехдиагональной, если все ее элементы, кроме элементов главной и примыкающих к ней диагоналей, равны нулю. Выглядит это примерно так:

Координаты элементов главной диагонали определяются условием равенства номера столбца номеру ряда, т.е i=j. Соседние диагонали можно выразить условиями j=i-1 и j=i+1 для левой и правой диагоналей соответственно. Для того, чтобы проверить условие задачи, достаточно проверить равенство нулю всех элементов, этому условию не удовлетворяющих. Это можно выразить, например, таким условием:
[i] if (not ((i=j) or (j=i+1) or (j=i-1))) and (a[i, j]<>0)[/i] - этот элемент нарушает условие трёхдиагональности
Честно скажу, я не знаю, обязательно ли должны быть ненулевыми элементы на самих диагоналях, поэтому это условие я не проверяю. Если необходимо - достаточно добавить проверку противоположного условия:
[i] if ((i=j) or (j=i+1) or (j=i-1)) and (a[i, j]=0)[/i] - этот элемент нарушает (возможно) условие трёхдиагональности
Для упрощения кода в случае нахождения одного несоответствия программа завершается через halt - чтобы не использовать флаги.
Код в приложении.
Удачи!


Приложение:
uses crt; {модуль для работы процедур clrscr, readkey }
Var a: array [1..10, 1..10] of integer;
i, j, n: integer;
begin
writeln ('Vvedite n:'); {Ввод данных}
readln (n);
writeln ('Vvedite elementi:');
for i:=1 to n do
for j:=1 to n do
readln (a[i, j]);
clrscr; {Очистка экрана}
for i:=1 to n do {контрольный вывод}
begin
for j:=1 to n do
write (a[i, j]:4);
writeln;
end; {проверка условий}
for i:=1 to n do
for j:=1 to n do {тут при необходимости можно добавить ещё проверку}
if (not ((i=j) or (j=i+1) or (j=i-1))) and (a[i, j]<>0) then
begin
writeln ('Net'); {результат проверки}
readkey; {ожидание клавиши}
halt (1); {выход}
end;
writeln ('Da'); {результат проверки}
readkey; {ожидание клавиши}
end.
давно
Старший Модератор
31795
6196
24.11.2008, 16:17
общий
Verena:
Это частный случай ленточной матрицы, с шириной ленты равной 1.
На ленте могут содержатся нулевые элементы.
Условие можно упростить до совсем простого: if (abs(i-j)>1) and (a[ i , j ]=0)
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
24.11.2008, 17:00
общий
Зенченко Константин Николаевич:
О, да, хорошая мысль! Мне в голову не пришло
Форма ответа