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

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

05.11.2016, 01:57. Просмотров 1015. Ответов 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
#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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.11.2016, 01:57
Ответы с готовыми решениями:

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

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

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

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

3
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
1590 / 884 / 397
Регистрация: 12.05.2016
Сообщений: 2,323
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);
}
1
0 / 0 / 0
Регистрация: 24.11.2019
Сообщений: 2
28.11.2019, 17:16 4
Просто гений, спасибо от души)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.11.2019, 17:16

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

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

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