Консультация № 159964
08.02.2009, 21:48
0.00 руб.
0 3 1
Помогите студентке решить задачу на С.
Дана квадратная матрица NxN, где N - четное. Раскрасить элементы матрицы в шахматном порядке белым и серым цветом. Поменять местами минимальный белый элемент с максимальным серым.

Обсуждение

Неизвестный
08.02.2009, 22:40
общий
Именно на C, а не C++?
Неизвестный
08.02.2009, 22:45
общий
да на С
Неизвестный
08.02.2009, 23:23
общий
это ответ
Здравствуйте, Лена Пирамина!
Программа с краткими комментариями.

Приложение:
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include "windows.h"

int main()
{
unsigned int N,i,j;
int *arr,tmp,*iptr,*min,*max;
// Получаем дескриптор консоли
HANDLE hCon;
hCon=GetStdHandle(STD_OUTPUT_HANDLE);
// Инициализируем генератор случайных чисел
srand((unsigned)time(0));
// Вводим размерность матрицы
printf("N=");
scanf("%d",&N);
// Размерность должна быть больше 1
if(N>1)
{
// Выделяем память
arr=malloc(sizeof(int)*N*N);
// Заполняем матрицу случайными числами и печатаем ее
printf("Source matrix:\n");
for(i=0,iptr=arr;i<N;i++)
{
for(j=0;j<N;j++,iptr++)
{
*iptr=rand()%51-25;
// В цвете
SetConsoleTextAttribute(hCon,(i+j)%2?0xf0:0x70);
printf("%3d ",*iptr);
}
printf("\n");
}
// Ищем минимальный на белом и максимальный на сером
for(i=0,iptr=arr;i<N;i++)
{
for(j=0;j<N;j++,iptr++)
{
switch((i+j)%2)
{
case 0:
if(i==0&&j==0)max=iptr;
else if(*max<*iptr)max=iptr;
break;
case 1:
if(i==0&&j==1)min=iptr;
else if(*min>*iptr)min=iptr;
break;
}
}
}
// Меняем местами
tmp=*min;
*min=*max;
*max=tmp;
// Выводим результат
SetConsoleTextAttribute(hCon,15);
printf("Result matrix:\n");
for(i=0,iptr=arr;i<N;i++)
{
for(j=0;j<N;j++,iptr++)
{
SetConsoleTextAttribute(hCon,(i+j)%2?0xf0:0x70);
printf("%3d ",*iptr);
}
printf("\n");
}
// Освобождаем память
free(arr);
SetConsoleTextAttribute(hCon,15);
}
else printf("N must be greater than 1\n");
system("PAUSE");
return 0;
}
Форма ответа