Сформировать вектор из элементов матрицы - C (СИ)
Формулировка задачи:
Даны натуральное число n, целочисленная квадратная матрица порядка n. Получить b1, ..., bn, где bi - это сумма элементов, предшевствующих последнему отрицательному элементу i-строки(если все элементы строки неотрицательны, то принять bi = -1).
Решение задачи: «Сформировать вектор из элементов матрицы»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MATRIXSIZE 10
/* prototype functions */
void addValueMatrix(int [MATRIXSIZE][MATRIXSIZE], int resultArray[MATRIXSIZE]);
void genericRandomMatrix(int [MATRIXSIZE][MATRIXSIZE]);
int main()
{
int matrix[MATRIXSIZE][MATRIXSIZE], resultArray[MATRIXSIZE];
srand(time(NULL));
genericRandomMatrix(matrix);
addValueMatrix(matrix, resultArray);
int index = 0;
for (index = 0; index < MATRIXSIZE; index++){
printf("Line #%2d: %d\n", index, resultArray[index]);
}
return 0;
}
void addValueMatrix(int array[MATRIXSIZE][MATRIXSIZE], int resultArray[MATRIXSIZE]){
int inExt = 0, result = 0, inRes = 0;
for(inExt = 0; inExt < MATRIXSIZE; inExt++){
int inInd = 0, flag = 0;
result = 0;
for(; inInd < MATRIXSIZE; inInd++){
if (array[inExt][inInd] < 0) {
inInd = MATRIXSIZE; // break in loop
resultArray[inRes++] = result;
flag = 1;
} else {
result += array[inExt][inInd];
}
}
if (0 == flag){
resultArray[inRes++] = -1;
}
}
}
void genericRandomMatrix(int matrix[MATRIXSIZE][MATRIXSIZE]){
int inExt = 0;
for(inExt = 0; inExt < MATRIXSIZE; inExt++){
int inInd = 0;
for(; inInd < MATRIXSIZE; inInd++){
matrix[inExt][inInd] = -3 + rand()%99;
}
}
for(inExt = 0; inExt < MATRIXSIZE; inExt++){
int inInd = 0;
printf("#%2d:", inExt);
for(; inInd < MATRIXSIZE; inInd++){
printf("%3d ", matrix[inExt][inInd]);
}
printf("\n");
}
}
Объяснение кода листинга программы
Вот что делает этот код:
- Создает матрицу размером 10x10 и заполняет ее случайными числами от -3 до 96.
- Добавляет значения из матрицы в новый массив, сохраняя только положительные числа и пропуская отрицательные.
- Выводит на консоль значения нового массива по одному в строке.