Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4_1_2_3 Разработка программ со структурой вложе...doc
Скачиваний:
4
Добавлен:
23.11.2019
Размер:
335.36 Кб
Скачать

Пример 1 выполнения задания на матрицы

В матрице A(m,n), m12, n10, поменять местами строки с наибольшей и наименьшей суммами элементов.

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

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

  1. program matr1;

  2. {$APPTYPE CONSOLE}

  3. uses

  4. SysUtils;

  5. const

  6. Mm=12; Nn=10;

  7. type

  8. matr=array[1..Mm,1..Nn] of Real;

  9. var

  10. A:matr;S,Smax,Smin,B:Real;

  11. Imax,Imin,I,J,M,N:Integer;

  12. .....................

  13. begin

  14. WriteLn('Введите количество строк и столбцов');

  15. ReadLn(M,N);

  16. WriteLn('Введите матрицу по строкам');

  17. for I:=1 to M do

  18. begin

  19. for J:=1 to N do

  20. Read(A[I,J]);

  21. ReadLn;

  22. end;

  23. WriteLn('Исходная матрица');

  24. for I:=1 to M do

  25. begin

  26. for J:=1 to N do

  27. Write(A[I,J]:6:1,' ');

  28. WriteLn;

  29. end;

  30. //задание начальных значений

  31. Smax:=-1e30; //очень маленькое число

  32. Smin:=1e30; //очень большое число

  33. //строго говоря, свмое маленькое и самое большое

  34. //значения для используемого типа данных)

  35. {Другой вариант – нахождение суммы элементов первой строки и задание этого значения для максимума и минимума:

  36. S:=0;

  37. for J:=1 to N do

  38. S:=S+A[1,J];

  39. Smax:=S; Imax:=1;

  40. Smin:=S; Imin:=1;

  41. Далее строки можно рассматривать начиная со второй}

  42. //цикл поиска строк с максимальной и минимальной

  43. //суммами элементов

  44. for I:=1 to M do

  45. begin

  46. S:=0; //задание начального значение суммы

  47. // цикл вычисления суммы элементов очередной строки

  48. for J:=1 to N do

  49. S:=S+A[I,J];

  50. if S>Smax then

  51. begin

  52. Smax:=S;

  53. Imax:=I;

  54. end

  55. else

  56. if S<Smin then

  57. begin

  58. Smin:=S;

  59. Imin:=I;

  60. end;

  61. end;

  62. for J:=1 to N do //цикл обмена местами найденных строк

  63. begin

  64. B:=A[Imin,J];

  65. A[Imin,J]:=A[Imax,J];

  66. A[Imax,J]:=B;

  67. end;

  68. WriteLn('Полученная матрица');

  69. for I:=1 to M do

  70. begin

  71. for J:=1 to N do

  72. Write(A[I,J]:6:1,' ');

  73. WriteLn;

  74. end;

  75. WriteLn('imin=',Imin:2,' imax=',Imax);

  76. ReadLn;

  77. end.

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

  1. type mas=array[1..Nn] of Real;

  2. matr=array[1..Mm] of mas;

  3. var A:matr; S,Smax,Smin:Real; B:mas;

  4. .................

  5. B:=A[Imin];

  6. A[Imin]:=A[Imax];

  7. A[Imax]:=B;

  8. ..............

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]