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

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

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

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

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)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.11.2018, 16:33
Ответы с готовыми решениями:

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

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

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

3
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
07.11.2018, 17:00
Лучший ответ Сообщение было отмечено 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  [ТС]
Цитата Сообщение от 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
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
08.11.2018, 04:59
Цитата Сообщение от Unit8379 Посмотреть сообщение
получить в качестве элемента двузначное число, показывающее строку и номер столбца
— Ни чё не понял! /Приключения колобков/

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

P.S. Я описываю переменные row и col именно так, чтобы не путать какая из них к чему относится, в отличие от ваших i и j.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.11.2018, 04:59
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru