Заполнение массива заданными числами - C (СИ)
Формулировка задачи:
Доброго времени суток.
Столкнулся с проблемкой. Нужно заполнить две матрицы заданными заранее числами. На пример из файла или заданными в самой программе. Не подскажете как это осуществить?
Программа предназначена для прямого произведения матриц.
Вот пример программы, где матрицы заполняются рандомно:
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
//Прямое произведение матриц
void multiply(int** result, int** m1, int** m2, size_t size)
{
size_t i, j, k, l; //Основная ф-ция
for(i = 0; i < size; ++i)
for(j = 0; j < size; ++j)
for(k = 0; k < size; ++k)
for(l = 0; l < size; ++l)
result[i * size + k][j * size + l] = m1[i][j] * m2[k][l];
}
void dump(int** matrix, size_t size, const char* prompt) //Вывод отформатированной матрицы
{
size_t i, j; //Первая матрица (temp)
if(prompt != NULL)
puts(prompt);
for(i = 0; i < size; ++i, putchar('\n'))
for(j = 0; j < size; ++j)
printf("%5d", matrix[i][j]);
}
void generate(int** matrix, size_t size, int left, int right) //Генерирование матрицы
{
size_t i, j;
for(i = 0; i < size; ++i)
for(j = 0; j < size; ++j)
matrix[i][j] = rand() % (right - left + 1) + left;
}
int** allocate_matrix(size_t size) //Сдвиг/перемещение матрицы
{
size_t i;
int** matrix;
matrix = malloc(size * sizeof(int*));
assert(matrix != NULL);
for(i = 0; i < size; ++i)
{
matrix[i] = malloc(size * sizeof(int));
assert(matrix[i] != NULL);
}
return matrix;
}
void free_matrix(int** matrix, size_t size) //Свободная матрица
{
size_t i;
for(i = 0; i < size; ++i)
free(matrix[i]);
free(matrix);
}
int main(void) //Основная программа
{
size_t size;
int** m1;
int** m2;
int** m3;
srand((size_t) time(NULL));
printf("Введите размерность матрицы: ");
scanf("%zd", &size);
m1 = allocate_matrix(size); //Матрица 1
m2 = allocate_matrix(size); //Матрица 2
m3 = allocate_matrix(size * size); //Итоговая матрица (Размерность n*n)
generate(m1, size, -5, 5); //Генерирование +рандом
generate(m2, size, -5, 5); //Генерирование +рандом
dump(m1, size, "Первая матрица:"); //Вывод отформатированных матриц
dump(m2, size, "Вторая матрица:"); //Вывод отформатированных матриц
multiply(m3, m1, m2, size);
dump(m3, size * size, "Результат:"); //Размерность и вывод итоговой матрицы
free_matrix(m3, size);
free_matrix(m2, size);
free_matrix(m1, size);
exit(0); //Выход при одиночном нажатии клавиши Enter
}Решение задачи: «Заполнение массива заданными числами»
textual
Листинг программы
generate(m1, size, -5, 5);