Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Osnovy_C# Yakimova.docx
Скачиваний:
6
Добавлен:
12.11.2019
Размер:
758.74 Кб
Скачать

Задания для лабораторной работы № 4

Исходным является текстовый файл. В текст могут входить слова из латинских букв, цифры, знаки арифметических операций, точка, запятая, пробел. Требуется считать текст из файла, вывести его на экран, после решения задачи вывести на экран результат. Группой букв будем называть такую совокупность последовательно расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует буква. Аналогично определяется группа цифр и группа знаков.

  1. Найти число тех групп букв, которые заканчиваются той же буквой, что и первая группа букв.

  2. Если в данном тексте есть группа знаков, начинающаяся знаком «*», то в следующей по порядку группе знаков( если она существует) заменить каждый из знаков нулем.

  3. Вывести на экран те слова, которые отличны от последнего слова текста и все буквы этого слова различны.

  4. Если в тексте нет символа «+», то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению знака «+», заменить на «*».

  5. Вывести на экран текст, составленный из последних букв всех групп букв данного файла.

  6. Выяснить, встречается ли в данном тексте группа букв «one».

Лабораторная работа № 5. Графические построения при решении геометрических задач

Цель работы. Решить задачу, применяя методы аналитической геометрии, и отобразить решение графически на экране. Исходные данные прочитать из текстового файла.

Выполнение этой лабораторной работы состоит из двух этапов: первый – решение геометрической задачи и второй – отображение решения графически. Одновременное программирование обеих частей задачи, как правило, приводит к большему числу ошибок.

Пример 5.1. Дана прямая, проходящая через точки (0, y1 ) и (x2, y2). Даны n квадратов со сторонами параллельными осям координат. Найти число квадратов, имеющих общую точку с прямой.

Для хранения исходных данных нам потребуются:

  1. целочисленные переменные для координат точек, задающих прямую( int x1=0, y1, x2, y2;) и действительные переменные для коэффициентов прямой( float a, b,c;);

  2. некоторая структура данных для хранения квадратов. Квадрат задается кординатами ( x, y ) четырех своих вершин. Удобно будет использовать двумерные массивы для хранения x и y координат соответственно для каждого квадрата( int[,] kvx, kvy; ).

Кроме того, нам потребуется индексная переменная для перебора квадратов ( int i;), целочисленная переменная-счетчик для хранения результата( int sq_counter;).

Алгоритм решения данной задачи основан на том факте, что прямая ax+ by+ c =0 делит плоскость на две полуплоскости, в одной из которых ax+ by+ c >0 для всех точек полуплоскости, а в другой ax+ by + c <0. Если для всех вершин квадрата выполняется одно из этих неравенств, то квадрат лежит в одной полуплоскости и точек пересечения с прямой не имеет, в противном случае – имеет.

static void Main()

{

int[,] kvx, kvy; // двумерные массивы координат квадрата

int i = 0; // индексная переменная

string line; // строка

char[] delimiterChars = {' ', ',','\t' }; // символы-разделители

int sq_counter = 0; // кол-во квадратов, пересек. прямую

kvy = new int[10,4];

kvx = new int[10,4];

int x1=0, y1, x2, y2; // координаты точек

float a, b, c; // коэффициенты прямой

// ввод данных

using (StreamReader file = new StreamReader("test.txt"))

{

line = file.ReadLine(); // чтение строки из файла

// разбиваем строку на подстроки- числа

string[] numbers = line.Split(delimiterChars);

// выделение координат точек, через кот. проходит прямая

y1= int.Parse(numbers[0]);

x2= int.Parse(numbers[1]);

y2 = int.Parse(numbers[2]);

// пока файл не пуст, читаем строки, для каждой пары строк

// в верхней строке - х-координаты вершин квадрата

// в нижней - у -координаты соответствующих вершин квадрата

// xfull - показывает, что верхнюю строку прочитали

bool xfull = false;

while ((line = file.ReadLine()) != null)

{

Console.WriteLine(line);

// выделяем числа

numbers = line.Split(delimiterChars);

//занесение в массив у-координат iго квадрата

if (xfull)

{ kvy[i,0]= int.Parse(numbers[0]);

kvy[i,1]= int.Parse(numbers[1]);

kvy[i,2]= int.Parse(numbers[2]);

kvy[i,3]= int.Parse(numbers[3]);

xfull=false; i++;

} //занесение в массив х-координат iго квадрата

else {

kvx[i,0]= int.Parse(numbers[0]);

kvx[i,1]= int.Parse(numbers[1]);

kvx[i,2]= int.Parse(numbers[2]);

kvx[i,3]= int.Parse(numbers[3]);

xfull=true;

}

}

}

int n = i; // количество квадратов

Console.WriteLine("Всего квадратов = {0}.", n);

// нахождение коэффициентов прямой

a = y2-y1;

b=-x2;

c=x2*y1;

// перебираем все квадраты и подставляем их координаты

// в уравнение прямой. Если квадрат лежит в одной // полуплоскости, то счетчик увеличивается

float v1=0, v2=0, v3=0, v4=0;

for( i=0; i<n; i++)

{

v1=a*kvx[i,0]+b*kvy[i,0]+c;

v2=a*kvx[i,1]+b*kvy[i,1]+c;

v3=a*kvx[i,2]+b*kvy[i,2]+c;

v4=a*kvx[i,3]+b*kvy[i,3]+c;

if(((v1>0)&&(v2>0)&&(v3>0)&&(v4>0))||

((v1<0)&&(v2<0)&&(v3<0)&&(v4<0)))

sq_counter++;

}

sq_counter=n-sq_counter;

Console.WriteLine("Количество квадратов ={0}", sq_counter);

Console.ReadLine();

}

После тестирования первой части программы можно подключать графику. Аналогом библиотеки OpenGL для .NET является Tao Framework. Это свободно-распространяемая библиотека, с открытым исходным кодом, предназначенная для быстрой и удобной разработки кросс-платформенного мультимедийного программного обеспечения в среде .NET. Об установке этой библиотеки на компьютер можно почитать здесь [7]. Рассмотрим, какие изменения нужно внести в код программы. Во-первых, указать, что мы будем использовать графические библиотеки:

using Tao.FreeGlut;

using Tao.OpenGl;

Во-вторых, установить на них ссылку. В окне Solution Explorer правой кнопкой мышки щелкнуть по пункту References и выбрать Add Reference ( см. рис. 4).

Рисунок 4. Добавление ссылки на библиотеку

В появившемся окне выбрать две библиотеки Tao FreeGlut и Tao OpenGL, как показано на рисунке 5, и щелкнуть по кнопке ОК. Теперь можно пользоваться возможностями графических библиотек.

После вывода сообщения о количестве квадратов вставим следующий кусок кода:

//Инициализация графики

Glut.glutInit();

// для окна изображения будет использоваться один буфер

// регенерации для выбора цветовых значений режим

// RGB(красный зеленый синий)

Glut.glutInitDisplayMode(Glut.GLUT_SINGLE | Glut.GLUT_RGB);

// установка размера графического окна

Glut.glutInitWindowSize(800, 800);

// создание окна для вывода графики с заголовком

Glut.glutCreateWindow(" Квадраты и прямая");

Рисунок 5. Выбор библиотек для добавления

Init(); // собств. процедура инициализации

// посылает графическое изображение в созданное окно

Glut.glutDisplayFunc(new Glut.DisplayCallback(Display));

// перерисовка изображения в цикле

Glut.glutMainLoop();

// Задержка экрана

Console.ReadLine();

После метода Main разместим подпрограммы рисования и инициализации:

private static void Init()

{

// задает белый цвет фона окна графики

Gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);

// задает диапазон координат в окне

Glu.gluOrtho2D(-15.0, (double)15, -15.0, (double)15);

Gl.glMatrixMode(Gl.GL_PROJECTION);

}

// подпрограмма рисования прямой по координатам точек

private static void DrawOneLine(int x1, int y1, int x2, int y2)

{

Gl.glBegin(Gl.GL_LINES);

Gl.glVertex2i(x1, y1);

Gl.glVertex2i(x2, y2);

Gl.glEnd();

}

// подпрограмма рисования квадрата по координатам вершин

private static void DrawOneRectangle(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)

{

Gl.glBegin(Gl.GL_LINE_LOOP);

Gl.glVertex2f(x1, y1);

Gl.glVertex2f(x2, y2);

Gl.glVertex2f(x3, y3);

Gl.glVertex2f(x4, y4);

Gl.glEnd();

}

// подпрограмма, формирующая изображение на экране

private static void Display()

{ // очистка окна

Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);

// выбор черного цвета для рисования

Gl.glColor3f(0.0f, 0.0f, 0.0f);

// вызов процедуры рисования прямой

DrawOneLine(-15, 0, 15, 0); // ось х

DrawOneLine(0, -15, 0, 15); // ось y

// исходная прямая

Gl.glColor3f(0.0f, 0.0f, 1.0f);

if (b != 0)

{

int y1 = (int)((-1) * (a * (-15) + c) / b);

int y2 = (int)((-1) * (a * (15) + c) / b);

DrawOneLine(-15, y1, 15, y2);

}

else DrawOneLine((int)((-1) * (c / a)), 15, (int)((-1) * (c / a)), -15);

// рисование квадратов красным цветом

Gl.glColor3f(1.0f, 0.0f, 0.0f);

for (int i = 0; i < kvx.GetLength(0); i++)

{

DrawOneRectangle(kvx[i, 0], kvy[i, 0], kvx[i, 1], kvy[i, 1],

kvx[i, 2], kvy[i, 2], kvx[i, 3], kvy[i, 3]);

}

Gl.glFlush();

}

В подпрограммах рисования мы используем координаты вершин квадратов и коэффициенты прямой. Поэтому перенесем описание этих переменных выше начала метода Main с атрибутом static:

static int[,] kvx, kvy; // двумерные массивы координат квадрата

static float a, b, c; // коэффициенты прямой

static void Main()

{

int i = 0; // индексная переменная

}

Пример 5.2. Окружность на плоскости может быть задана координатами x, y ее центра и радиусом r. Даны n окружностей с характеристиками x1, y1, r1, x2, y2,r2, … xn, yn, rn. Определить имеются среди этих окружностей три попарно пересекающиеся.

Обсудим алгоритм решения этой задачи. Две окружности пересекаются, если расстояние между их центрами меньше или равно суммы их радиусов и больше или равно разности радиусов. Будем в цикле рассматривать все возможные тройки окружностей. Как только пересекающиеся окружности будут найдены, запомним их номера и выйдем из цикла. В дальнейшем выведем на экран их изображение другим цветом.

static int[] x, y, r; // массивы характеристик окружностей

static int p, q, s; // номера искомых окружностей

static void Main()

{

int i = 0, j, k; // индексные переменные

string line; // строка

char[] delimiterChars = {' ', ',','\t' };

double d_ij, d_jk, d_ik; // расстояния между центрами

y = new int[10]; // определение массивов

r = new int [10];

x = new int[10];

// ввод данных

using (StreamReader file = new StreamReader("test.txt"))

{

// пока файл не пуст, читаем строки

while ((line = file.ReadLine()) != null)

{

// печатаем, что прочитали

Console.WriteLine(line);

// выделяем числа

string[] numbers = line.Split(delimiterChars);

//занесение в массивы координат i-й окружности

x[i]= int.Parse(numbers[0]);

y[i]= int.Parse(numbers[1]);

r[i]= int.Parse(numbers[2]);

i++;

}

}

int n = i; // количество окружностей

Console.WriteLine("Всего окружностей = {0}.", n);

// поиск попарно пересекающихся окружностей

bool find = true; // флаг неуспешного поиска

for (i = 0; (i < n-2) && find; i++)

{

for (j = i + 1; (j < n - 1)&& find; j++)

{

d_ij = Math.Sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));

if ((d_ij <= r[i] + r[j]) && (d_ij >= Math.Abs(r[i] - r[j])))

{ // если найдены две пересекающиеся окружности,

// то в цикле ищем третью

for(k=j+1; (k< n)&&find; k++)

{

d_ik = Math.Sqrt((x[i]-x[k])*(x[i]-x[k])+(y[i]-y[k])*(y[i]-y[k]));

if ((d_ik <= r[i] + r[k]) && (d_ik >= Math.Abs(r[i] - r[k])))

{

d_jk=Math.Sqrt((x[k]-x[j])*(x[k]-x[j])+(y[k]-y[j])*(y[k]-y[j]));

if ((d_jk <= r[j] + r[k]) && (d_jk >= Math.Abs(r[j] - r[k])))

{ // запоминаем номера найденных окружностей

p = i; q = j; s = k;

find = false; // флаг = успеху

}

}

} // к циклу по k

}

} // к циклу по j

} // к циклу по i

if (p == q)

Console.WriteLine("Таких окружностей нет");

else Console.WriteLine("Номера окружностей: {0} {1} {2}", p,q,s );

// инициализация библиотеки Glut

Glut.glutInit();

Glut.glutInitDisplayMode(Glut.GLUT_SINGLE | Glut.GLUT_RGB);

// задание размера и создание окна

Glut.glutInitWindowSize(600, 600);

Glut.glutCreateWindow("Окружности");

// инициализация

Init();

// отображение графики

Glut.glutDisplayFunc(new Glut.DisplayCallback(Display));

Glut.glutMainLoop();

// задержка экрана

Console.ReadLine();

}

// процедура инициализации

private static void Init()

{

// задает белый цвет фона окна изображения

Gl.glClearColor(1.0f, 1.0f, 1.0f, 0.0f);

Gl.glMatrixMode(Gl.GL_PROJECTION);

Glu.gluOrtho2D(-200.0, (double)200, -200.0, (double)200);

}

// подпрограмма рисования прямой по координатам точек

private static void DrawOneLine(int x1, int y1, int x2, int y2)

{

Gl.glBegin(Gl.GL_LINES);

Gl.glVertex2i(x1, y1);

Gl.glVertex2i(x2, y2);

Gl.glEnd();

}

// метод изображения точек в каждом из 8 октантов

static void circlePlotPoints(int xc, int yc, int xt, int yt)

{

Gl.glBegin(Gl.GL_POINTS);

Gl.glVertex2i(xc + xt, yc + yt);

Gl.glVertex2i(xc - xt, yc + yt);

Gl.glVertex2i(xc + xt, yc - yt);

Gl.glVertex2i(xc - xt, yc - yt);

Gl.glVertex2i(xc + yt, yc + xt);

Gl.glVertex2i(xc - yt, yc + xt);

Gl.glVertex2i(xc + yt, yc - xt);

Gl.glVertex2i(xc - yt, yc - xt);

Gl.glEnd();

}

// метод рисования окружности "средней точки"

// на входе координаты центра и радиус

static void circleMidpoint(int xc, int yc, int radius)

{

int p = 1 - radius; // начальное значение параметра

int xt = 0, // нач. значения точки на окружности

yt = radius;

//рисуем в каждом квадранте первую точку

circlePlotPoints(xc, yc, xt, yt);

//цикл, вычисляющий положение очередной точки на окружности

while (xt < yt)

{

xt++;

if (p < 0)

p = p + 2 * xt + 1;

else

{

yt--;

p = p + 2 * (xt - yt) + 1;

}

circlePlotPoints(xc, yc, xt, yt);

}

}

// метод формирующий изображение

private static void Display()

{

int i;

// очистка окна изображения

Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);

// выбор черного цвета для рисования

Gl.glColor3f(0.0f, 0.0f, 0.0f);

// вызов процедуры рисования прямой

DrawOneLine(-200, 0, 200, 0); // ось х

DrawOneLine(0, -200, 0, 200); // ось y

// выбор красного цвета для рисования

Gl.glColor3f(1.0f, 0.0f, 0.0f);

// рисуем окружности

for (i = 0; i < x.Length; i++)

{

// вызов метода рисования окружности

circleMidpoint(x[i], y[i],r[i]);

}

// если есть пересекающиеся окружности,

// то рисуем их синим цветом

if ((p != q) && (p != s))

{

Gl.glColor3f(0.0f, 0.0f, 1.0f);

circleMidpoint(x[p], y[p], r[p]);

circleMidpoint(x[q], y[q], r[q]);

circleMidpoint(x[s], y[s], r[s]);

}

// метод, ускоряющий работу библиотеки OpenGL

Gl.glFlush();

}

Задания для лабораторной работы № 5

  1. Многоугольник на плоскости задается координатами своих N вершин в порядке обхода их по контуру по часовой стрелке (контур самопересечений не имеет). Для заданной точки Z(x,y) определить, принадлежит ли она стороне многоугольника или лежит внутри или вне его.

  2. Построить множество всех различных остроугольных треугольников с вершинами в заданном множестве точек на плоскости.

  3. На плоскости задано множество точек А и множество прямых B. Найти две такие различные точки из А, которые бы определяли прямую, параллельную наибольшему количеству прямых из B.

  4. Окружность на плоскости может быть задана координатами x, y ее центра и радиусом r. Даны n окружностей с характеристиками x1, y1, r1, x2, y2,r2, … xn, yn, rn. Найти среди этих окружностей все уединенные, то есть такие, которые не имеют общих точек ни с одной другой, не лежат целиком внутри и не содержат внутри себя никакую окружность.

  5. Из заданного множества точек на плоскости выбрать две различные точки так, чтобы количество точек, лежащих по разные стороны прямой, проходящей через эти две точки, различались наименьшим образом.

  6. Задано множество прямых на плоскости. Подсчитать количество точек пересечения этих прямых.

Лабораторная работа № 6: Матричные задачи

Цель работы. Использование подпрограмм в задаче на обработку двумерного массива.

Требуется вывести на экран меню, состоящее из следующих пунктов:

  1. ввод матрицы с клавиатуры,

  2. ввод матрицы из файла,

  3. вычисление характеристики,

  4. преобразование матрицы,

  5. печать матрицы,

  6. выход.

и обеспечить его функционирование.

Внутри программы характеристика оформляется в виде метода с передачей параметров по значению, который возвращает значение булевского типа; преобразование в виде метода с передачей параметров по ссылке. Необходимо отслеживать, был ли произведен ввод данных до выбора пунктов меню, которые обрабатывают матрицу.

Рассмотрим сокращенный вариант лабораторной работы № 6. Обеспечим функционирование меню, которое позволяет найти минимальный элемент матрицы и заменять побочную диагональ нулями. Каждое действие будет реализовано ввиде подпрограммы.

Для программной реализации меню удобно использовать оператор ветвления switch. Оператор ветвления может иметь большое количество  альтернатив, выбор которых осуществляется с помощью значения управляющего выражения. Это очень удобный способ реализации кода, когда существует некий параметр, в зависимости от которого должны выполняться те или иные ветви кода. В C# он реализуется следующим образом:

switch ( value ) {

case 1 : { Console.WriteLine("Цифра 1”);

break; }

case 2 : { Console.WriteLine("Цифра 2”); break;

}

. . .

default: { Console.Write("для этого варианта действие”);

Console.WriteLine(“ не определено”);    break; }

}

Теперь разберемся с тем, как устроены подпрограммы или методы. Метод( подпрограмма) представляет собой блок кода, содержащий набор инструкций. Программа инициирует выполнение операторов, вызывая метод и задавая необходимые аргументы метода. В C# методы определяются в рамках объявления класса. Различают статические (со спецификатором static) и нестатические методы (объявляются без спецификатора). Не вдаваясь в подробности ООП, заметим, что для наших целей нужны статические методы.

Определение метода задает имена и типы любых необходимых параметров. Параметры заключаются в круглые скобки и разделяются запятыми. Пустые скобки указывают на то, что у метода нет параметров. Когда код вызова вызывает метод, он предоставляет конкретные значения, называемые аргументами, для каждого параметра. Аргументы должны быть совместимыми с типом параметра, но имя параметра (если таковое имеется), используемое в коде вызова, не должно быть таким же, как параметр с именем, определенным в методе. Пример:

static void Main()

{

int numA = 4;

int productA = Square(numA); // вызов метода с цел. пер-й

int productC = Square(12); // вызов метода с константой

productC = Square(productA * 3); // вызов с целочисл. выраж.

}

static int Square(int input)

{

return input * input;

}

Возвращаемые значения. Методы могут возвращать значения вызывающим их объектам. Если тип возвращаемого значения, указываемый перед именем метода, не равен void, для возвращения значения используется ключевое слово return. Как показано в примере выше, в результате выполнения инструкции return input*input, вызвавшему метод объекту будет возвращено целочисленное значение произведения. Кроме того, ключевое слово return останавливает выполнение метода. Если тип возвращаемого значения void, инструкцию return без значения можно использовать для завершения выполнения метода. Если ключевое слово return отсутствует, выполнение метода завершится, когда будет достигнут конец его блока кода.

Параметры в подпрограмму передаются по ссылке или по значению. Если тип параметра – значимый ( число, символ, булевское значение), то по умолчанию используется передача по значению, при этом передается копия объекта, а не сам объект. Поэтому изменения в аргументе не оказывают влияния на исходную копию в вызывающем методе. Для изменения в методе переменной используют передачу по ссылке с помощью ключевого слова ref. Пример:

static void TwoNumbers(int number1, ref int number2)

{

number1 = number1 * 2; //это изменение только здесь

number2 = number1 + number2;

}

static void Main()

{

int a = 5, b = 1;

Console.WriteLine(“ a={0}, b= {1}”, a, b); // a=5 b=1

TwoNumbers(a, ref b);

Console.WriteLine(“ a={0}, b= {1}”, a, b); // a=5 b=11

}

Если тип параметра – ссылочный ( массив, матрица, строка), то по умолчанию происходит передача адреса объекта и поэтому все изменения, кроме создания нового объекта, в методе отражаются в вызывающей программе. Для полного контроля метода над ссылочным параметром также используется ключевое слово ref. В метод печати матрицы будем передавать матрицу по значению, а в метод замены побочной диагонали – по ссылке.

static void Main()

{

string line;

char[] delimiterChars = { ' ', ',', '\t' };

int n; // кол-во строк матрицы

int[,] matr; // исходная матрица

int i, j; // индексы

// ввод матрицы из файла

using (StreamReader file = new StreamReader("dat.txt"))

{

// ввод размерности

n = int.Parse(file.ReadLine());

matr = new int[n, n]; // определение матрицы

// чтение строки из файла и преобразование в числовые данные

for (i = 0; (i < n) && ((line = file.ReadLine()) != null); i++)

{

string[] numbers = line.Split(delimiterChars);

j = 0;

foreach (string numString in numbers)

{

int x;

bool canConvert = int.TryParse(numString, out x);

if (canConvert == true)

{

matr[i, j] = x;

j++;

}

}

}

}// ввод данных закончен

// создание меню

string choice = "0";

while (choice != "4")

{

Console.WriteLine();

Console.WriteLine("1. Печать матрицы");

Console.WriteLine("2.Нахождение минимального элемента");

Console.WriteLine("3. Замена побочной диагонали нулями");

Console.WriteLine("4. Выход");

Console.WriteLine(" ");

Console.WriteLine(" Введите номер пункта меню ");

choice = Console.ReadLine();

switch (choice)

{

case "1":

Console.WriteLine(" Печать матрицы");

print_matrica(matr);

Console.WriteLine();

break;

case "2":

Console.Write("Мин. элемент = {0}",min_element(matr));

Console.WriteLine();

break;

case "3":

Console.WriteLine(" Произведена замена.");

zamena(ref matr);

Console.WriteLine();

break;

case "4":

Console.WriteLine(" До свидания!.");

break;

default:

Console.WriteLine(" Введите 1, 2, 3 или 4");

Console.WriteLine();

break;

}

}

Console.ReadLine();

}// k Main

// метод нахождения минимального элемента матрицы

static int min_element(int[,] a)

{

int min_elt=a[0,0];

for (int i = 0; i < a.GetLength(0); i++)

{

for(int j=0; j< a.GetLength(1); j++)

{

if (a[i, j] < min_elt)

min_elt = a[i, j];

}

}

return min_elt;

}

// метод замены побочной диагонали нулями

static void zamena(ref int[,] a)

{

int n= a.GetLength(1);

for (int i = 0; i < a.GetLength(0); i++)

{

a[i, n - i - 1] = 0;

}

}

// метод печати матрицы

static void print_matrica(int[,] a)

{

for (int i = 0; i < a.GetLength(0); i++)

{

for (int j = 0; j < a.GetLength(1); j++)

{

Console.Write("{0} \t", a[i, j]);

}

Console.WriteLine();

}

}

Задания для лабораторной работы № 6 ( характеристика/ преобразование)

  1. В матрице существует строка, элементы которой образуют симметричную последовательность.

Преобразование. Удалить из матрицы строку и столбец, на пересечении которых расположен максимальный по модулю элемент (если таких элементов несколько, то максимальный элемент с меньшими коэффициентами).

  1. В строках с отрицательным элементом на главной диагонали найти максимум. Если максимум отрицательный или таких строк нет, ответом является число ноль, иначе единица.

Преобразование. Повернуть внешний контур матрицы на 900 по часовой стрелке, второй контур на 900 против часовой стрелки.

Список литературы

  1. Абрамов С. А., Гнездилова Г. Г., Капустина Е. Н., Селюн М. И. Задачи по программированию. М.: Наука, 1988. 224 с.

  2. Белова Л. Ю., Власов Ю. В., Власова О. В.

  3. Власова О.В., Полякова О.П. Информатика. Лабораторный практикум. Изд. Яросл. гос. ун-т им. П.Г. Демидова. Ярославль, 2005. 28 с.

  4. Троелсен Э. С# и платформа .Net 3.0, специальное издание. –СПб: Питер, 2008. – 1456 с.

  5. Шень А. Программирование: теоремы и задачи. М.: МЦНМО, 1995. – 265 с.

  6. Главная страница MSDN : http://www.msdn.com

  7. www.esate.ru/page/chto-takoe-tao-framework

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]