Добавил сортировку, но закралась ошибка, при условии если первая строка больше последующих, то вторая и третья строки не сортируются, что-то запутался совсем. Я так понимаю при второй итерации основного цикла сортировки, вторую строку надо сверять с первой? Но основной цикл то уже на второй строке и первая как бы не учитывается. Подскажите пожалуйста, что не так сделал?
| Код | {Дана целочисленная матрица размером MxN. Пусть для каждой строки матрицы определена функция f(A), равная сумме простых чисел, являющихся элементами строки A. Упорядочить (переставить) строки матрицы по неубыванию в соответствии со следующим критерием: строка A считается «больше» строки B, если f(A) > f(B). Используйте алгоритм простого выбора.}
{Алгоритм 1. Описываем функцию суммирования чисел в строке матрицы 2. Вводим матрицу 3. Выводим исходную матрицу 4. Сортируем строки 5. Выводим отсортированную матрицу}
var matr: array[1..3, 1..4 + 1] of integer; // матрица n, m, x, y, v, w, b: integer;// количество и счетчики строк и столбцов
//функция подсчета суммы элементов простых чисел в строках матрицы function sum(s: integer): integer;
var i, j, a: integer;//последовательно: индекс, счетчик числа, промежуточная переменная f: boolean;//флаг: false=простое, true=составное
begin f := false;//устанавливаем флаг по умолчанию, что число не является составным for i := 1 to m do begin if matr[x, y] < 2 then//все простые числа больше 1 a := 0; if matr[x, y] = 2 then//2 простое число, значит оно всегда считается a := matr[x, y]; if matr[x, y] > 2 then {найдем остаток от деления этого числа на все числа от 2х до искомое число - 1} begin for j := 2 to matr[x, y] - 1 do if matr[x, y] mod j = 0 then f := true else a := matr[x, y]; end; if f then a := 0;//обнуляем промежуточную переменную если составное sum := 0 + a;//считаем сумму чисел a := 0;//обнуляем промежуточную переменную f := false;//вешаем флаг что следующее число простое по умолчанию end; end;
begin n := 3;//пока делаем фиксированную размерность m := 4; for x := 1 to n do begin for y := 1 to m do matr[x, y] := random(10); //заполняем матрицу случайными числами от 0 до 10 end; writeln('Исходная матрица'); for x := 1 to n do begin for y := 1 to m do begin write(matr[x, y]:3); //выводим исходную матрицу на экран matr[x, m + 1] := matr[x, m + 1] + sum(matr[x, m]);//складываем сумму простых чисел в буферный столбец end; writeln(' сумма простых чисел в строке = ', matr[x, m + 1]); end; for x := 1 to n - 1 do//проверяем с первой строки до предпоследней begin v := x;//присваиваем V значение индекса строки, по умолчанию принимаем минимальной for y := x + 1 to n do//проверяем со второй до последней if matr[y, m + 1] < matr[x, m + 1] then v := y;//если сумма в последующих строках буферного столбца меньше чем во 1 то помечаем её минимальной for w := 1 to m + 1 do begin//меняем строки по неубыванию b := matr[x, w];//буферная переменная элемента текущей строки matr[x, w] := matr[v, w];//меняем на элементы строк с меньшей суммой matr[v, w] := b;//заменяем элементы из буфера end; end; writeln(); writeln('Отсортированная матрица'); for x := 1 to n do begin for y := 1 to m do write(matr[x, y]:3); writeln(' сумма простых чисел в строке = ', matr[x, m + 1]); end; end.
|
|