Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/2: Рейтинг темы: голосов - 2, средняя оценка - 5.00
corpsolov
0 / 0 / 1
Регистрация: 01.11.2016
Сообщений: 7
1

Найти в матрице первый столбец, все элементы которого положительны.

05.11.2016, 01:57. Просмотров 423. Ответов 2

Задание: Найти в матрице первый столбец, все элементы которого положительны. Знаки элементов предыдущего столбца изменить на противоположные.
Столбец положительных чисел нашел, но не получается изменить знаки предыдущего. Сразу спасибо за помощь) Вот код, который уже сделал.
C
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
#include<stdio.h>
int main()
{
 
    int n, m;
    printf("Vvedite razmermost' matrici\n");
    scanf_s("%d%d", &n, &m);
    int matr[30][30], stolb;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++) {
            printf("Vvedite [%d;%d] element matrici : ", i + 1, j + 1);
            scanf_s("%d", &matr[i][j]);
        }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++)
            printf(" %d", matr[i][j]);
        printf("\n");
    }
 
    int index = 0;
    int k = 0, j = 0, i = 0;
 
 
    for (int j = 0; j < m; j++)
    {
        for (int i = 0; i < n; i++)
        {
            if (matr[i][j] > 0)
                k++;
            else
 
            {
                k = 0;
 
                break;
            }
        }
        if (k == m) {
            index = j + 1;
            break;
 
        }
    }
    printf("Nomer stolbca so vsemi polojitel'nimi chislami : %d \n", index);
 
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2016, 01:57
Ответы с готовыми решениями:

Найти в матрице первый столбец, все элементы которого положительны
Здравствуйте . Помогите пожалуйста написать код. Уже 3 день бьюсь. не получается. Найти в...

Найти в матрице первый столбец, все элементы которого отрицательны
Найти в матрице первый столбец, все элементы которого отрицательны, и среднее арифметическое этих...

Найти в матрице первый столбец, все элементы которого отрицательны и среднее арифметическое этих столбцов
Вычесть полученное из всех элементов матрицы

Функции: найти в матрице первую строку, все элементы которой положительны, и сумму этих элементов
Найти в матрице первую строку, все элементы которой положительны, и сумму этих элементов....

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

2
user404
0 / 0 / 2
Регистрация: 05.11.2016
Сообщений: 2
05.11.2016, 10:19 2
C
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
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
  // Инициализируем кол-во строк и столбцов
  int rows, cols;
  printf("Enter count of rows: ");
  scanf("%d", &rows);
  if (rows <= 0) exit(1);
  printf("Enter count of columns: ");
  scanf("%d", &cols);
  if (cols <= 0) exit(1);
 
  // Выделяем память под двумерный массив
  int** matrix = malloc(sizeof(int*) * rows);
  for (int i = 0; i < rows; i++)
    matrix[i] = malloc(sizeof(int) * cols);
 
  // Заполняем матрицу значениями
  for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
      printf("Enter value of [%d;%d]: ", i, j);
      scanf("%d", &matrix[i][j]);
    }
  }
 
  // Выводим нашу матрицу
  printf("Matrix:\n");
  for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
      printf("%3d ", matrix[i][j]);
    }
    printf("\n");
  }
 
  // Ищем первый положительный столбец
  int positiveColumn;
  int isPositive = 0;
  for (int j = 0; j < cols; j++) {
    
    for (int i = 0; i < rows; i++) {
      if (matrix[i][j] >= 0) {
        isPositive = 1;
      }
      else {
        isPositive = 0;
        break;
      }
    }
 
    if (isPositive) {
      positiveColumn = j;
      break;
    }
 
  }
 
  // Если положительный столбец найден
  if (isPositive) {
    
    if (positiveColumn > 0) {
      // Если наш положительный столбец не первый
      // инверсируем знаки в предыдущем
      for (int i = 0; i < rows; i++) {
        matrix[i][positiveColumn-1] *= -1;
      }
    }
    else {
      // Если наш положительный столбец первый
      // инверсируем знаки в последнем
      for (int i = 0; i < rows; i++) {
        matrix[i][cols-1] *= -1;
      }
    }
 
    // Выводим результат на экран
    printf("Result:\n");
    for (int i = 0; i < rows; i++) {
      for (int j = 0; j < cols; j++) {
        printf("%3d ", matrix[i][j]);
      }
      printf("\n");
    }
    
  }
  else {
    printf("Matrix doesn't have positive columns.\n");
  }
  
 
  // Освобождаем память
  for (int i = 0; i < rows; i++)
    free(matrix[i]);
  free(matrix);
  return 0;
}
0
shvyrevvg
747 / 556 / 278
Регистрация: 12.05.2016
Сообщений: 1,618
05.11.2016, 11:05 3
C
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
#include <stdio.h>
 
#define ROWS 5
#define COLS 5
 
#define NOTFOUND -1
 
void print_matrix(const int *matrix, const int nRows, const int nCols)
{
    for (int i=0; i<nRows; i++, printf("\n"))
        for (int j=0; j<nCols; j++)
            printf("%d ", *(matrix + i*nRows + j));
}
 
int find_positive_col(const int *matrix, const int nRows, const int nCols)
{
    int j;
    for (int i=0; i<nCols; i++) {
        for (j=0; j<nRows; j++)
           if (*(matrix + i + j*nRows) < 0) break;
        if (j == nRows) return i;   
    }
    return -1;
}
 
void invert_sign_col(int *matrix, const int nRows, const int nCols, const int colNo)
{
    for (int i=0; i<nRows; i++)
        *(matrix + i*nRows + colNo) *= -1;
}
int main(void)
{
    int matrix[ROWS][COLS] = {{3, 0, 4, -4, 0}
                                        , {8, 0, 4,  2, 2}
                                        , {2, 1, 4,  2, 3}
                                        , {3, 0, 4,  2, 0}
                                        , {6, 0, 4,  2, 7}};
 
    print_matrix(&matrix[0][0], ROWS, COLS);
    int ret = find_positive_col(&matrix[0][0], ROWS, COLS);
    if (ret == NOTFOUND) {
        printf("Positive col not found!\n");
    return -1;
    }
    printf("Positive col: %d\n", ret);
    invert_sign_col(&matrix[0][0], ROWS, COLS, (ret == 0) ? COLS-1 : ret); // если первый, инвертируем знак последнего COLS-1
    print_matrix(&matrix[0][0], ROWS, COLS);
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2016, 11:05

Найти первый столбец в котором нет отрицательных элементов, отсортировать элементы столбцов по убыванию
Задание такое, найти первый столбец в котором не содержится отрицательных элементов, и еще...

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

В матрице А[6][6] найти номер столбца, элементы, которого являются монотонной спадающей последовательностью
Гуглил - не нагуглил, смог только вывести матрицу #include &lt;stdio.h&gt; int main() { int a = {...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru