![]() |
Обработка массивов данных, программа на паскале. Не могу найти ошибку в программе
Помогите пожалуйста глупой студентке-блондинке. не понимаю, где ошибка, не понимаю. ничего не пашет, ни-че-го.
Обработка массивов данных Входной массив А4х4 Формируемый массив В4х4, где b= 2i+j,если i>j i+2j, иначе i=1,…,4 j=1,…,4 Условие задачи Выделить главные диагонали матриц А и В в одномерные массивы (А1 И В1 соответственно). Упорядочить массивы А1 И В1 в порядке убывания значений элементов (массивы А2 и В2 соответственно). Найти среднее арифметическое значение элементов массива А2 (SrB2) Вывести: В, А1, В1, А2, В2, SrA1, SrB2) сама программа: Код:
Program Variant24; |
yulia_hoi, оформи пожалуйста тегом кода, расставь табуляцию и комментарии. А тож не видать ни чего. :(
|
Разобраться с кодом не смог :), может потому, что писала блондинка ))), поэтому написал свое решение
Код:
|
yulia_hoi, e-Hector, насочиняли вы тут конечно ...
e-Hector, обрати внимание как девушка задает массивы. Использование одной константы более правильный подход. yulia_hoi, Ты что-то перемудрила с сортировкой. Зачем-то вписать downto т.е. сравниваешь элементы двигаясь на встречу друг другу. Возьми процедуру e-Hector`а. (Доработав "под себя") Код:
procedure sort(var r, g:ms); {Создание сортированного массива} Вот этого я не понял. Код:
for i:=1 to m do Опять же у e-Hector, это наглядно сделано. Зачем нужен random(10)-1 ? это даст разброс от -1 до 9. Дело хозяйское, я просто интересуюсь. Ошибки тут нет. Общее для всех замечание. Что называется главной диагональю в квадратной матрице? Зачем перебирать весь квадрат совершая n^2-n ненужных операций сравнений? Код:
for i:=1 to m do Код:
for i:=1 to m do |
Код:
procedure sort(var r, g:ms); {Создание сортированного массива} lxa85, а можно подробнее насчет последнего замечания? Объясни саму логику. P. S. Главную диагональ квадратной матрицы образуют элементы с одинаковым индексом строки и столбца |
e-Hector, Смотри, когда в твоем алгоритме перебирается вся матрица.
for i:=1 to m do for j:=1 to m do Потом производится сравнение индексов столбца и строки. if i=j then Если это так, то i = j т.е. при адресация элемента массива a[ I , J ] и a [ I, I ] не имеет различий в силу выполнения означенного условия. Из всего массива размерностью N, содержащего N^2 элементов, выберется только диагональ, т.е. N элементов. N^2 - N сравнений будет проделано впустую. Условие не выполнится. Конечно для современных ПК на малых размерностях это тьфу. Но если мы возьмем куб размерность в пару миллионов, то будет швах! Берем определение главной диагонали. Цитата:
Диагональю мы можем назвать линию начинающуюся с элемента 1;1 и заканчивающуюся элементом N;N. При условии равенства индексов. Если рисовать на листе бумаги, то при стандартном расположении (осей X вправо Y вверх) (заметь матрица будет перевернута) это будет прямая f(y)=x Так может ее проще нарисовать, чем сравнивать все точки плоскости на принадлежность к линии? Наглядный пример: Мы можем нарисовать кривую y=ax^2+bx+c (парабола). А можем анализировать все точки плоскости с точностью отклонения до Е(эпсилон) от заданной кривой. Соотв. порядки трудозатрат будут существенно различны. |
Отлично, тогда нужно исправить процедуру
Код:
procedure gl_diag (var m:mt; var r:ms); {Выделение главной диагонали в массив} Код:
procedure gl_diag (var m:mt; var r:ms); {Выделение главной диагонали в массив} Итого, с учетом замечаний Код:
program OSZone; |
Время: 21:27. |
Время: 21:27.
© OSzone.net 2001-