Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 07.11.2018
Сообщений: 22
1

Поиск минимального нечётного элемента строки матрицы

07.11.2018, 16:33. Показов 1059. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написал программу для получения одномерного массива, состоящего из индексов минимальных нечётных элементов каждой строки матрицы, которую задаёт пользователь. Если в строке матрицы есть нечётное число, то в мой массив почему-то попадает индекс последнего элемента, а не того, который нужен. Ошибки никак не могу найти. Помогите, пожалуйста!

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
program lab2;
uses crt;
const nmax = 10;
type 
  matrix = array [1..nmax, 1..nmax] of integer;
  vector = array [1..nmax] of integer;
  
var
  A: matrix;
  V: vector;
  n, m, i, j, min, ij, nz, first: integer;
  min1, null, i_s, j_s, index1: string;
  
procedure InputMatr(var A: matrix; n, m: integer);
  var i, j: integer;
  begin
    for i := 1 to n do
      for j := 1 to m do begin
        gotoxy(6 * j, 6 + i);
        readln(A[i,j]);
      end;
  end;      
  
begin
  writeln('Введите количество строк матрицы:');
  readln(n);
  writeln('Введите количество столбцов матрицы:');
  readln(m);
  writeln('Введите элементы матрицы');
  InputMatr(A, n, m);
  writeln();
  writeln('Получим из введённой матрицы вектор, состоящий из номеров');
  writeln('индексов минимальных нечётных элементов каждой строки.');
  writeln();
  
 
  for i := 1 to n do begin
    if A[i,1] mod 2 = 1 then min := A[i,1]
    else
      for j := 2 to n do begin
        if A[i,j] mod 2 = 1 then begin
        min := A[i,j];
        break;
        end
        else min := 2;
      end;
    for j := 1 to m do begin
      if (A[i,j] mod 2 = 1) and (A[i,j] < min) then min := A[i,j]
    end;
    if (min mod 2 = 1) then begin
      for j := 1 to m do begin
        if (A[i,j] = min) then
        str(i, i_s); str(j, j_s);
        index1 := i_s + j_s;
        val(index1, ij, nz);
        V[i] := ij;
      end;
    end
    else V[i] := 0;
  end;
  for i := 1 to n do
    write(V[i]:5);
  
  writeln();
  writeln();
  writeln('Количество векторных элементов, равных предыдущему элементу:');
  writeln();
  
  for i := 2 to n do begin
    first := 0;
    if V[i] = V[i-1] then first := first + 1;
  end;
  writeln('Количество элементов, равных предыдущему: ' + first);
  writeln();
  
end.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2018, 16:33
Ответы с готовыми решениями:

Рекурсивный поиск минимального нечетного элемента в массива
Описать рекурсивную функцию min(x,n) (где x - массив, n - размер) поиска минимального нечетного...

Поиск минимального нечетного элемента в заданном целочисленном массиве из 50 элементов
Уважаемые форумчане! Для вас не будет сложным решить 4 простейшие программки (они действительно...

Заменить значение каждого элемента Ci значением минимального элемента i-ой строки матрицы A
Разработать алгоритм и программу нисходящим способом, предполагая заданной матрицу A из 5 строк и 5...

Построить вектор из сумм максимального элемента і-ой строки и минимального элемента і-ого столбца матрицы
Дано целочисленную квадратную матрицу A, і,j=1,...,n. Получить суму чисел c1,...,cn, где cі - сума...

3
5079 / 2651 / 2349
Регистрация: 10.12.2014
Сообщений: 10,028
07.11.2018, 17:00 2
Лучший ответ Сообщение было отмечено Unit8379 как решение

Решение

А зачем такие изыски в поиске минимума?
Ведь для достаточно пройтись один раз по каждой строке…

А при поиске равных предыдущему, вы на каждом шаге обнуляете результат!
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
//program lab2;
//uses crt;
const nmax = 10;
type 
  matrix = array [1..nmax, 1..nmax] of integer;
  vector = array [1..nmax] of integer;
  
var
  A: matrix;
  V: vector;
  n, m, i, j, min, ij, nz, first: integer;
  min1, null, i_s, j_s, index1: string;
  
procedure InputMatr(var A: matrix; n, m: integer);
  var i, j: integer;
  begin
    for i := 1 to n do
      for j := 1 to m do begin
        //gotoxy(6 * j, 6 + i);
        a[i,j]:=Random(-10,10);//readln(A[i,j]);
      end;
      
    for var row := 1 to n do
      begin
        for var col := 1 to m do
          Write(a[row, col]:3);
        WriteLn;
      end;
  end;      
  
begin
  writeln('Введите количество строк матрицы:');
  n:=5;//readln(n);
  writeln('Введите количество столбцов матрицы:');
  m:=7;//readln(m);
  writeln('Введите элементы матрицы');
  InputMatr(A, n, m);
  writeln();
  writeln('Получим из введённой матрицы вектор, состоящий из номеров');
  writeln('индексов минимальных нечётных элементов каждой строки.');
  writeln();
  
 
  for var row := 1 to n do
    begin
      v[row] := 0; // предположим, что нет нечётных
      for var col := 1 to m do
        if odd(a[row, col]) then // встретили нечётный
          if v[row] = 0 then // это первый нечётный
            v[row] := col
          else
            if a[row, v[row]] > a[row, col] then // а этот меньше
              v[row] := col;
    end;
    
  for i := 1 to n do
    write(V[i]:5);
  
  writeln();
  writeln();
  writeln('Количество векторных элементов, равных предыдущему элементу:');
  writeln();
  
  var count := 0;
  for i := 2 to n do
    if V[i] = V[i-1] then
      count += 1;
  writeln('Количество элементов, равных предыдущему: ' + count);
  writeln();
  
end.
P.S. Использование CRT затрудняет отладку.
Украшательства можно „навешивать“ только после того, как основной алгоритм программы отлажен.
1
1 / 1 / 0
Регистрация: 07.11.2018
Сообщений: 22
07.11.2018, 19:14  [ТС] 3
Цитата Сообщение от JuriiMW Посмотреть сообщение
А зачем такие изыски в поиске минимума?
Ведь для достаточно пройтись один раз по каждой строке…

А при поиске равных предыдущему, вы на каждом шаге обнуляете результат!
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
//program lab2;
//uses crt;
const nmax = 10;
type 
  matrix = array [1..nmax, 1..nmax] of integer;
  vector = array [1..nmax] of integer;
  
var
  A: matrix;
  V: vector;
  n, m, i, j, min, ij, nz, first: integer;
  min1, null, i_s, j_s, index1: string;
  
procedure InputMatr(var A: matrix; n, m: integer);
  var i, j: integer;
  begin
    for i := 1 to n do
      for j := 1 to m do begin
        //gotoxy(6 * j, 6 + i);
        a[i,j]:=Random(-10,10);//readln(A[i,j]);
      end;
      
    for var row := 1 to n do
      begin
        for var col := 1 to m do
          Write(a[row, col]:3);
        WriteLn;
      end;
  end;      
  
begin
  writeln('Введите количество строк матрицы:');
  n:=5;//readln(n);
  writeln('Введите количество столбцов матрицы:');
  m:=7;//readln(m);
  writeln('Введите элементы матрицы');
  InputMatr(A, n, m);
  writeln();
  writeln('Получим из введённой матрицы вектор, состоящий из номеров');
  writeln('индексов минимальных нечётных элементов каждой строки.');
  writeln();
  
 
  for var row := 1 to n do
    begin
      v[row] := 0; // предположим, что нет нечётных
      for var col := 1 to m do
        if odd(a[row, col]) then // встретили нечётный
          if v[row] = 0 then // это первый нечётный
            v[row] := col
          else
            if a[row, v[row]] > a[row, col] then // а этот меньше
              v[row] := col;
    end;
    
  for i := 1 to n do
    write(V[i]:5);
  
  writeln();
  writeln();
  writeln('Количество векторных элементов, равных предыдущему элементу:');
  writeln();
  
  var count := 0;
  for i := 2 to n do
    if V[i] = V[i-1] then
      count += 1;
  writeln('Количество элементов, равных предыдущему: ' + count);
  writeln();
  
end.
P.S. Использование CRT затрудняет отладку.
Украшательства можно „навешивать“ только после того, как основной алгоритм программы отлажен.
Спасибо огромное за алгоритм! Всё отлично работает, но я всё-таки хочу получить в одномерном массиве индексы элементов в виде "row,col", т.е. получить в качестве элемента двузначное число, показывающее строку и номер столбца минимального нечётного элемента матрицы. Я не пытаюсь заставить вас помочь мне, но в нужном мне виде массив я всё ещё не могу получить, но за алгоритм нахождения спасибо!
0
5079 / 2651 / 2349
Регистрация: 10.12.2014
Сообщений: 10,028
08.11.2018, 04:59 4
Цитата Сообщение от Unit8379 Посмотреть сообщение
получить в качестве элемента двузначное число, показывающее строку и номер столбца
— Ни чё не понял! /Приключения колобков/

У вас ведь каждый элемент вектора однозначно относится к конкретной строке массива.
Так зачем хранить координаты, когда достаточно именно индекс в строке…

P.S. Я описываю переменные row и col именно так, чтобы не путать какая из них к чему относится, в отличие от ваших i и j.
1
08.11.2018, 04:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2018, 04:59
Помогаю со студенческими работами здесь

Поиск минимального элемента матрицы и его адреса
Написать подпрограмму min элемента матрицы и его адресов. Для проверки подпрограммы создать...

Поиск минимального элемента в заданной строке матрицы
Поиск минимального элемента в заданной строке.....Разработать алгоритм и программу обработки...

Нахождение минимального элемента строки матрицы
Дано масив А. Скласти програму пошуку всіх елементів масиву А мінімальних у свому рядку

Строки максимального и минимального элемента матрицы не меняются
помогите исправить программу program lab7; const nmax=100; var a: array of integer; ...

Создать массив, в который поместить отрицательные элементы расположенные после минимального нечетного элемента массива
Пользователь вводит размерность массива и его элементы создать новый массив в котором поместить все...

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru