Массив. Надо поменять одну вещь в программе... - C (СИ)
Формулировка задачи:
Программа,которая представлена ниже работает нормально, без ошибок. Вопрос у меня в следующем: если бы мы с клавиатуры вводили номер столбца(N) и строки(M), которую надо было бы удалить, то как бы она изменилась? В данном случае у нас N=5 ,M=3.
// Z5.cpp : Defines the entry point for the console application.
//В массиве удалить 5 столбец и 3 строчку.
#include "stdafx.h"
#include "stdlib.h"
#include "conio.h"
int _tmain(int argc, _TCHAR* argv[])
{
const int N=6,M=6;
int a[N][M];
float s[N];
srand(2);
for(int i=0;i<N;i++)
{
for(int j=0;j<M;j++)
{
a[i][j]=(rand()*18)/32768-9;
printf ("%3d",a[i][j]);
}
printf("\n");
}
for(int i=2;i<N-1;i++)
{
for(int j=0;j<M;j++)
{
a[i][j]=a[i+1][j];
}
}
for(int i=0;i<N;i++)
{
for(int j=4;j<M-1;j++)
{
a[i][j]=a[i][j+1];
}
}
printf("\n");
for(int i=0;i<N-1;i++)
{
for(int j=0;j<M-1;j++)
{
printf ("%3d",a[i][j]);
}
printf("\n");
}
getch();
return 0;
}Решение задачи: «Массив. Надо поменять одну вещь в программе...»
textual
Листинг программы
int _tmain(int argc, _TCHAR* argv[])
{
const int N=6,M=6;
int a[N][M];
float s[N];
srand(2);
for(int i=0;i<N;i++)
{
for(int j=0;j<M;j++)
{
a[i][j]=(rand()*18)/32768-9;
printf ("%3d",a[i][j]);
}
printf("\n");
}
for(int i=n-1;i<N-1;i++) // for(int i=2;i<N-1;i++)
{
for(int j=0;j<M;j++)
{
a[i][j]=a[i+1][j];
}
}
for(int i=0;i<N-1;i++) // for(int i=0;i<N;i++)
{
for(int j=m-1;j<M-1;j++) // for(int j=4;j<M-1;j++)
{
a[i][j]=a[i][j+1];
}
}
printf("\n");
for(int i=0;i<N-1;i++)
{
for(int j=0;j<M-1;j++)
{
printf ("%3d",a[i][j]);
}
printf("\n");
}
getch();
return 0;
}
Объяснение кода листинга программы
В этом коде выполняется следующая последовательность действий:
- Задаются размеры массива N=6, M=6 и инициализируется массив a[N][M].
- Инициализируется массив s[N] и генерируются случайные числа в диапазоне от -9 до 9 для каждой строки массива a[N][M].
- Выполняется перестановка строк массива a[N][M] с помощью двух вложенных циклов, начиная с последней строки и заканчивая предпоследней.
- Выполняется перестановка столбцов массива a[N][M] с помощью двух вложенных циклов, начиная с последнего столбца и заканчивая предпоследним.
- Выводится обновленный массив a[N][M].
- Программа ожидает нажатия клавиши для завершения работы. Список изменений, которые нужно внести:
- Заменить
getch();наgetchar(); - Убрать комментарии и дополнительные символы, которые не являются частью кода.
- Изменить
printf (%3d,a[i][j]);наprintf (%3d,a[i][j+1]);во втором вложенном цикле, чтобы поменять местами соответствующие элементы. По завершении этих изменений код будет выполнять требуемую задачу.