Проверка по первому символу в строке

Дана матрица А(4,4). Если первый элемент строки положительный, то все элементы данной строки переписать в обратном порядке. Построить вектор В из элементов последнего столбца матрицы.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>


int main(void)
{
    setlocale(LC_ALL, "Rus");
    int mas_a[4][4], mas_b[4], k = 0, i, j;
    for (i = 0; i < 4; i++){
        for(j = 0; j < 4; j++){
            printf("Введите mas_a[%d][%d] = ",i,j);
            scanf("%d",&mas_a[i][j]);
        }
    }
    for (i = 0; i < 4; i++){
        printf("\n");
        for(j = 0; j < 4; j++){
            printf("%d\t",mas_a[i][j]);
        }
    }
    printf("\n");
    if(mas_a[i][0] >= 0){
        for(i = 0; i < 4 / 2; ++i){
            int temp = mas_a[0][i];
            mas_a[0][i] = mas_a[0][4 - 1 - i];
            mas_a[0][4 - 1 - i] = temp;
        }
    }

    for(i = 0; i < 4; ++i){
        printf("\n");
        for(j = 0; j < 4; ++j){
            printf("%d\t", mas_a[i][j]);
        }
    }

    return 0;
}

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


Ответы (1 шт):

Автор решения: NkL322

Вам нужно в цикле использовать условие mas_a[i][0] >= 0. Хорошей практикой является объявление переменных-счётчиков внутри циклов, чтобы не запутаться в коде (у вас i, j, k объявляются в main). Также, чтобы не дублировать код, можно вывод матрицы выполнять при помощи функции, но это на будущее :)

Переписал вот так:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>

int main()
{
    setlocale(LC_ALL, "Rus");
    int mas_a[4][4], mas_b[4];
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            printf("Введите mas_a[%d][%d] = ", i, j);
            scanf("%d", &mas_a[i][j]);
        }
    }
    
    for (int i = 0; i < 4; i++)
    {
        printf("\n");
        for (int j = 0; j < 4; j++)
        {
            printf("%d\t", mas_a[i][j]);
        }
    }
    
    printf("\n\n");
    for (int i = 0; i < 4; i++) 
    {
        if (mas_a[i][0] >= 0)
        {
            // Записываем во временный массив, 
            // чтобы не потерять данные
            for (int j = 0; j < 4; j++) 
            {
                mas_b[j] = mas_a[i][j];
            }
            // Записываем задом наперёд
            for (int j = 0, k = 3; j < 4; j++, k--) 
            {
                mas_a[i][j] = mas_b[k];
            }
        }
    }

    printf("\n\n");
    for (int i = 0; i < 4; i++)
    {
        printf("\n");
        for (int j = 0; j < 4; j++)
        {
            printf("%d\t", mas_a[i][j]);
        }
    }

    return 0;
}
→ Ссылка