Вставить в матрицу (в файле) два столбца из единиц: один после К1-го столбца, второй - перед К1-ым - C (СИ)
Формулировка задачи:
дан двумерный массив, вставить в него два столбца из чисел 1: один после К1-го столбца. второй-перед К1-м столбом.
Решение задачи: «Вставить в матрицу (в файле) два столбца из единиц: один после К1-го столбца, второй - перед К1-ым»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "Rus");
printf(" Введите высоту массива: ");
int hight; // Высота >> Строки
scanf("%d", &hight);
printf(" Введите ширину массива: ");
int weight; // Ширина >> Столбцы
scanf("%d", &weight);
int arr[hight][weight]; // Массив
printf("\nИдет заполнение массива из файла...\n\n");
FILE * base = fopen("base.txt", "r"); // base - указатель на файл; base.txt - название файла; r - read(читать)
if(!base) printf("Файл не найден!\n");
else{
int i, j; // Для перебора строк и столбцов
for(i = 0; i < hight; i++){
for(j = 0; j < weight; j++){
if((j == weight-1) || (j == weight-2)) arr[i][j] = 1;
else fscanf(base,"%d", &arr[i][j]); // заполняем числом из файла
printf(" %2d", arr[i][j]); // выводим число
}
printf("\n");
}
fclose(base);
int k = 1;
printf("\nk = %d ( 0 - в массиве )\n\n", k);
/* После k1 столбца */
for( i = 0; i < hight; i++){
int tmp = arr[i][weight-1]; // Сохраняем последняю ячейку строки
for( j = weight -1; j > k; j--){
arr[i][j] = arr[i][j-1]; // Смещаем строку на 1 вправо
}
arr[i][j] = tmp; // Вставляем сохраненую ячейку
}
/* Перед k1 столбца */
for( i = 0; i < hight; i++){ // тут так же...
int tmp = arr[i][weight-1]; // ...
for( j = weight -1; j > k-1; j--){
arr[i][j] = arr[i][j-1]; // ...
}
arr[i][j] = tmp; // ...
}
/* Результат */
for( i = 0; i < hight; i ++){
for( j = 0; j < weight; j++) printf(" %2d", arr[i][j]);
printf("\n");
}
}
return 0;
}
Объяснение кода листинга программы
- Ввод данных:
- Вводятся высота массива и ширина массива с помощью функции scanf().
- Высота представляет собой количество строк в массиве, а ширина - количество столбцов.
- Массив создается с помощью оператора new в куче, чтобы избежать переполнения стека.
- Чтение данных из файла:
- Открывается файл с помощью функции fopen().
- Если файл не найден, выводится сообщение об ошибке.
- Иначе, используется цикл для чтения каждой ячейки массива из файла.
- Вставка двух столбцов из единиц:
- Первый столбец вставляется после последнего столбца массива.
- Второй столбец вставляется перед первым столбцом массива.
- Для этого используются два вложенных цикла.
- Вывод результата:
- Выводится весь массив с помощью двух вложенных циклов.
- Каждая ячейка массива выводится с помощью функции printf().