Заполнение массива заданными числами - 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д