Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 19.11.2019
Сообщений: 4

Исправить код (работа с матрицей)

19.11.2019, 20:43. Показов 2160. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана целочисленная матрица Aij i=1...n;j=1..n , n<=100. Если в матрице нет строк с нулевой суммой элементов,
и в каждом столбце есть простые числа, упорядочить элементы столбцов по не возрастанию суммы цифр.
Использовать процедуры и функции.
Написал код, но видимо где-то в функции Prostota накосячил, возможно ещё где нибудь, поправьте пожалуйста.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
const
  nmax = 10000;
 
var
  prost: boolean;
 
type
  Tmas = array[1..nmax, 1..nmax] of Integer;
 
 
 
procedure Vvod(var a: Tmas; var n, m: Integer);
var
  i: integer;
  j: integer;
begin
  writeln('Введите количество строк:');
  read(n);
  writeln('Введите количество столбцов:');
  read(m);
  writeln('Введите последовательность элементов через пробел:');
  for i := 1 to n do 
  begin
    for j := 1 to m do 
    begin
      read(a[i][j]);
    end;
    j := 1;
  end;
end;
 
 
 
 
function Sum(a: Tmas;  n, m: Integer): Boolean;
var
  i, j, d: integer;
  b: boolean;
begin
  b := false;
  for i := 1 to n do  
  begin
    for j := 1 to m do  
    begin
      d := a[i][j] + d;
    end;
    j := 1;
    if(d = 0) then begin
      b := true;
    end;
    if(b = true) then begin
      break;
    end;
    Sum := b;
  end;
end;
 
 
 
function Prostota(a: Tmas;  n, m: Integer): Boolean;
var
  k, i, j: Integer ;
var
  c: Boolean;
begin
  prost := true;
  i := 1;
  while (i < n) do  
  begin
    while (j < m) do  
    begin
      if (abs(a[i][j]) < 2) then begin
        c := false;
      end
      else begin
        for k := 2 to round(sqrt(a[i][j])) do
          if a[i][j] mod k <> 0 then begin
            c := true;
          end
          else begin
            c := false;
            break;
          end;
        if(c = true) then begin
          if(i = n) then begin
            prost := true;
          end
          else begin
            i := i + 1;
            j := 1;
            prost := true;
          end;
        end;
        if(c = false) then begin
          prost := false;
        end;
      end;
    end;
    j := j + 1;
  end;
  j := 1;
  i := i + 1;
  Prostota := prost;
end;
 
function SumCh(x: Integer): Integer;
var
  c, z: Integer;
begin
  z := 0;
  while(c <> 0) do 
  begin
    c := x mod 10;
    z := z + c;
    x := x div 10;
  end;
  SumCh := z;
end;
 
 
procedure Sortirovka(var a: Tmas; n, m: Integer; var h, g: Boolean);
begin
  var j, i: Integer;
  if(h=true) and (g=false)  then begin
    for j := 1 to m do
    begin
      for i := 1 to n do
      begin
        if(SumCh (a[i][j]) < SumCh(a[i][j + 1])) then 
          swap(A[i][j], A[i][j + 1]);
      end;
    end;
  end;
end;
 
 
 
procedure Vivod(var a: Tmas; var n, m: Integer);
var
  i, j: integer;
begin
  writeln('Результат:');
  for i := 1 to n do  
  begin
    for j := 1 to m do  
    begin
      write(a[i][j], ' ');
    end;
    writeln('');
    j := 1;
  end;
end;
 
 
 
 
var
  a: Tmas;
  n, m: integer;
  h, g: Boolean;
 
begin
  Vvod(a, n, m);
  
  h := Prostota(a, n, m);
  g := Sum(a, n, m);
  
  Sortirovka(a, n, m, h, g);
  
  Vivod(a, n, m);
end.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.11.2019, 20:43
Ответы с готовыми решениями:

Пояснить код работы с матрицей
Доброго времени суток. Учусь писать на Pascale, интересно, но есть много непонятных вещей... Расщитываю на помощь :) Вот, к примеру,...

Работа с матрицей
Помогите решить ошибку в коде, в строке 31 Const n = 5; m = 5; {n-строка, m-столбец} Var A: array of integer; i, j,...

Работа с матрицей + модуль
Всем доброго времени суток, задача такая: Массив символов. В процедуре отсортировать массив по алфавиту в обратном порядке. составить...

2
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
20.11.2019, 06:02
Pascal
1
2
const
  nmax = 10000;
А не устанете вводить?
По моему, даже 100 будет слишком! Хотя именно эта цифра озвучена в задании.
Вполне бы хватило и 20…

Pascal
51
    if(b = true) then begin
Pascal
84
        if(c = true) then begin
Pascal
94
        if(c = false) then begin
Pascal
124
  if(h=true) and (g=false)  then begin
За такое просто нужно предавать анафеме и полное отлучение от компьютера!
Давать в руки Кнута. И пока не перескажет первые два тома, заставлять держать их на вытянутых вперёд руках… ;–)

Зачем вам по всему коду лишние операторные скобки?
Они только портят читабельность программы!

А ещё, есть такой принцип „разделяй и властвуй“!
Так и нужно разделять программу на элементарные подпрограммы, а не городить огороды.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
const
  nmax = 100;
 
type
  Tmas = array[1..nmax, 1..nmax] of Integer;
 
procedure Vvod(var a: Tmas; var rows, cols: Integer);
begin
  rows := ReadLnInteger('Введите количество строк:');
  cols := ReadLnInteger('Введите количество столбцов:');
  for var row := 1 to rows do 
    for var col := 1 to cols do
      repeat
        a[row,col] := ReadLnInteger($'a[{row},{col}] =');
        if a[row,col] < 0 then WriteLn('Ошибка! Повторите ввод.');
      until a[row,col] >= 0;
end;
 
function RowSumZero(a : Tmas; rows, cols : Integer) : Boolean;
begin
  Result := True; // предположим, что есть такие
  for var row := 1 to rows do
    begin
      var sum := 0;
      for var col := 1 to cols do
        sum += a[row, col];
      if sum = 0 then Exit; // нашли. нет резона дальше проверять
    end;
  Result := False; // дошли до конца, но не нашли
end;
 
function isPrime(n : Integer) : Boolean;
begin
  Result := False; // предположим, что число составное
  if not odd(n) and (n>2) then Exit; // чётное и больше 2
  var(d,q) := (3,Round(sqrt(n)));
  while d<=q do
    begin
      if n mod d=0 then Exit; // делится на d
      d+=2; // следующее нечётное
    end;
  Result := True; // значит оно всё таки простое
end;
 
function PrimeInEveryCols(a : Tmas; rows, cols : Integer) : Boolean;
begin
  Result := False; // Если случится так, что в проверяемом столбце не будет ни одного простого
  for var col := 1 to cols do
    begin
      var find := False; // ещё не найдено простое число
      for var row := 1 to rows do
        begin
          find := isPrime(a[row,col]); // найдено простое
          break; // можно больше не проверять
        end;
      if not find then Exit; // в колонке не найдено простое число
    end;
  Result := True; // Всё сложилось удачно
end;
 
procedure OrderOneCol(var a : Tmas; rows, col : Integer);
begin
  var changes : Integer;
  repeat
    changes := 0;
    for var row := 1 to rows-1 do
      if a[row,col] < a[row+1,col] then
        begin
          Swap(a[row,col], a[row+1,col]);
          changes+=1;
        end;
  until changes = 0;
end;
 
procedure OrderCols(var a : Tmas; rows, cols : Integer);
begin
  for var col := 1 to cols do
    OrderOneCol(a, rows, col);
end;
 
procedure OutArray(a : Tmas; rows, cols : Integer);
begin
  WriteLn('Результат:');
  for var row := 1 to rows do
    begin
      for var col := 1 to cols do
        Write(a[row,col]:5);
      WriteLn;
    end;
end;
 
var
  a: Tmas;
  n, m: integer;
 
begin
  Vvod(a, n, m);
  
  if Not RowSumZero(a, n, m) and PrimeInEveryCols(a, n, m) then
    OrderCols(a, n, m);
  
  OutArray(a, n, m);
end.
1
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
20.11.2019, 09:05
Лучший ответ Сообщение было отмечено LupDiDu как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
const nmax=100;//по условию матрица квадратная A[n,n], nmax=100
type Tmas=array[1..nmax, 1..nmax] of integer;
//сумма в строке k матрицы
function Sum(a:Tmas;n,k:integer):integer;
var i,j,s:integer;
begin
s:=0;
for i:=1 to n do
s:=s+a[k,i];
Sum:=s;
end;
//простое ли число
function Prostota(x:integer):boolean;
var b:boolean;
    i:integer;
begin
if x=2 then b:=true
else if (x<2)or(x mod 2=0) then b:=false
else
 begin
  b:=true;
  i:=3;
  while (i*i<=x)and b do
  if x mod i=0 then b:=false else inc(i,2);
 end;
Prostota:=b;
end;
//есть ли строки с суммой=0
function row_zero(a:Tmas;n:integer):integer;
var i,k:integer;
begin
k:=1;
i:=1;
while(i<=n)and(k=1) do
if Sum(a,n,i)=0 then k:=0
else inc(i);
row_zero:=k;
end;
//есть ли в каждом столбце простое
function col_prst(a:Tmas;n:integer):integer;
var i,j,k,p,s:integer;
begin
k:=1;//пусть простые есть во всех столбцах
j:=1;//идем по столбцам
while(j<=n)and(k=1) do
 begin
  i:=1;//идем по столбцу пока не конец и не простые
  while(i<=n)and not Prostota(a[i,j]) do inc(i);
  if i>n then k:=0//в столбце нет простых
  else inc(j);
 end;
col_prst:=k;
end;
function SumCh(x:integer):integer;
var c,z:integer;
begin
c:=abs(x);
z := 0;
while(c>0) do
 begin
  z:=z+c mod 10;
  c:=c div 10;
 end;
SumCh := z;
end;
//сортировка столбца k
procedure Sortirovka(var a:Tmas;n,k:integer);
var i,j,x:integer;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if SumCh(a[i,k])<SumCh(a[j,k]) then
 begin //не во всех паскалях есть процедура Swap
  x:=a[i,k];
  a[i,k]:=a[j,k];
  a[j,k]:=x;
 end;
end;
procedure Vvod(var a:Tmas;var n:integer);
var i,j:integer;
begin
randomize;
//вводить для тестирования вручную до 10000 чисел мне как-то влом
//но Вы напишите ручной ввод
repeat
write('Введите размер матрицы от 2 до ',nmax,' n=');
readln(n);
until n in [2..nmax];
for i:=1 to n do
for j:=1 to n do
a[i,j]:=-10+random(21);
end;
procedure Vivod(a:Tmas;n:integer;s:string);
var i,j:integer;
begin
writeln(s);
for i:=1 to n do
 begin
  for j:=1 to n do
  write(a[i,j]:4);
  writeln;
 end;
end;
var a:Tmas;
    n,j:integer;
begin
Vvod(a,n);
Vivod(a,n,'Исходная матрица');
if row_zero(a,n)+col_prst(a,n)=2 then
 begin
  writeln('В матрице нет строк с нулевой сумой и в каждом столбце есть простые числа');
  for j:=1 to n do
  Sortirovka(a,n,j);
  Vivod(a,n,'Сортировка столбцов по невозрастанию сумм цифр элементов');
 end
else
 begin
  if row_zero(a,n)=0 then writeln('В матрице есть строки с нулевой суммой');
  if col_prst(a,n)=0 then writeln('Не в каждом столбце есть простые числа');
 end;
end.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.11.2019, 09:05
Помогаю со студенческими работами здесь

Работа с матрицей через процедуры - исправить код
почему не работает? объясните program f; uses crt; type matrix = array of integer; var mass: matrix;

Работа с матрицей - исправить ошибки в коде
работать не хочет... вылетает после 35 строки.(компилит нормально) как быть друзья? #include &lt;stdio.h&gt; #include...

Работа с матрицей. Какой необходим код?
Дан двумерный массив размера 3x4. Найти максимальный элемент во второй строке. Вывести на экран максимальный элемент и номера его строки и...

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

Работа с мышью - исправить код
почему не работает сие творение .386 ;определяем с командами какого процессора работаем code segment 'code' ; определение кодового...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru