Uploaded by Yusuf Esanov

DASTURLASH

advertisement
МНОГОМЕРНЫЕ МАССИВЫ. РВАНЫЕ МАССИВА
ПЛАН
ВВЕДЕНИЕ
1.
МАССИВЫ В ЯЗЫКЕ C#
2.
МНОГОМЕРНЫЕ МАССИВЫ
3.
РВАНЫЕ МАССИВЫ (СТУПЕНЧАТЫЕ)
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
ВВЕДЕНИЕ
Язык
несомненных
С#
как
средство
достоинств.
Он
обучения
хорошо
программированию
организован,
строг,
обладает
рядом
большинство
его
конструкций логичны и удобны. Развитые средства диагностики и редактирования кода
делают процесс программирования приятным и эффективным.
Немаловажно, что С# является не учебным, а профессиональным языком,
предназначенным для решения широкого спектра задач, и в первую очередь - в быстро
развивающейся области создания распределенных приложений. Поэтому базовый курс
программирования, построенный на основе языка С#, позволит студентам быстрее
стать востребованными специалистами-профессионалами.
Целью исследования, проводимого в рамках настоящей курсовой работы,
является разработка и реализация на языках высокого уровня алгоритмов решения
задач, представленных в задании курсовой работы.
Объектами исследования настоящей курсовой работы являются методы и
технологии разработки программных продуктов.
Предметами исследования настоящей курсовой работы являются методы,
алгоритмы и приёмы разработки программ обработки двумерных массивов, файлов,
строк.
Информационной
базой
исследования
является
учебная
литература
по
информатике и программированию, техническая документация по языку С#
инструментальной среды MS Visual Studio 2010.
МАССИВЫ В ЯЗЫКЕ C#
Массив
- это составной объект, состоящий из элементов одного типа. Простейшей
разновидностью
массива является
одномерный массив,
который можно рассматривать как информационную модель
вектора в многомерном пространстве.
Чтобы определить
переменную
для одномерного массива, нужно указать тип элементов массива и
имя переменной массива:
тип [] имя;
В результате такого объявления для переменной массива выделяется ячейка в
области оперативной
памяти - «стек»
(stack)
. Эта ячейка предназначена для хранения адреса элементов массива.
Сами элементы массива хранятся в другой области оперативной памяти, которая
называется «куча»
(heap)
. Для
резервирования
в этой области используется оператор
new
, после которого указывается
тип элементов массива и число этих элементов в квадратных скобках:
new
тип [размер];
Значением оператора
new
является адрес области для хранения элементов массива. Этот адрес
может быть присвоен переменной массива. Вместо оператора
new
можно перечислить в фигурных
скобках значения элементов массива: компилятор подсчитает их количество,
определит тип,
выделит необходимую область в куче и инициализирует элементы массива
указанными в фигурных
скобках значениями. При использовании оператора
new
элементы массива инициализируются
автоматически.
Массивы в языке
C
# являются статическими, то есть число элементов массива нельзя изменить в
процессе выполнения программы. Однако с помощью оператора
new
можно выделить для
элементов массива другую область в памяти с другим количеством элементов.
Прежняя область
памяти в куче при этом объявляется «мусором» и посредством «сборщика мусора»
впоследствии
передается в область свободной памяти. Из-за особенности выделения памяти для
элементов
массива их относят к ссылочным типам (
reference
types
). Все рассмотренные ранее типы относятся к
типам значений (
value
types
). Для значений переменных этих типов выделяются ячейки памяти
непосредственно в стеке.
using System;
class Test
{
public static void Main()
{
int[] a;
int[] b = new int[5];
int[] c = { 0, 1, 4, 9, 16 };
a = new int[5];
for (int j = 0; j < c.Length; j++)
Console.Write(c[j] + "\t");
Console.WriteLine();
}
}
Многомерные массивы
1. Какой массив называется многомерным?
Многомерный массив – это массив, который имеет два и более измерений. Для
доступа к элементу многомерного массива используется комбинация из двух и более
индексов.
2. Какая общая форма объявления многомерного массива?
Общая форма объявления многомерного массива следующая:
тип[,...,] имя_массива = new тип[размер1, размер2, ..., размерN];
где

тип – непосредственно тип элементов массива;

размер1,
размер2,
размерN
–
размерность
каждого
измерения
массива.
Значение N означает, что массив N-мерный.
3. Пример объявления и использования двумерного массива вещественных
чисел размером 3×4
В примере объявляется двумерный массив вещественных чисел, которые имеют
тип float
// объявление и использование массива вещественных чисел размером 3*4
float[,] M = new float[3, 4]; // выделить память для массива
// заполнение массива произвольными значениями
for (int i = 0; i < 3; i++)
for (int j = 0; j < 4; j++)
M[i, j] = (float)(i * 0.2 + j * 0.3);
// запись значений в отдельные ячейки массива
M[0, 1] = 0.35f;
M[2, 2] = 1.45f;
4. Пример объявления и использования трехмерного массива целых чисел
размером 3×4×5
// объявление трехмерного массива целых чисел размером 3*4*5
ulong[, ,] A; // описать переменную (ссылку) типа "трехмерный массив целых
чисел"
A = new ulong[3, 4, 5]; // выделить память для массива
// записать в отдельные ячейки массива значение
A[0, 2, 3] = 232;
A[0, 0, 1] = 300;
A[2, 3, 1] = 20000;
5. Как выглядит общая форма инициализации многомерного массива?
Инициализация массива позволяет записать значения в ячейки массива в момент
его объявления в программе.
Общая форма инициализации многомерного массива имеет следующий вид:
тип[,] имя_массива = { { значение, значение, ..., значение },
{ значение, значение, ..., значение },
...
{ значение, значение, ..., значение } };
6. Пример инициализации двумерного массива размером 5×3. Элементы
массива имеют тип char

тип – тип элементов массива;

значение – значение, которыми инициализируются элементы массива.
// инициализация двумерного массива
char[,] M = { { 'A', 'B', 'C', 'D', 'E' },
{ '8', '-', '=', '>', '+' },
{ '~', 'U', '&', '\\', '@' } };
7. Пример инициализации трехмерного массива целых чисел размером 2×3×4
// инициализация трехмерного массива целых чисел
short[, ,] B = {
{
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }
},
{
{ 13, 14, 15, 16 },
{ 17, 18, 19, 20 },
{ 21, 22, 23, 24 }
}
};
8. Что такое ступенчатый массив? Какая общая форма объявления
ступенчатого массива?
Двумерные массивы могут быть двух видов:

прямоугольный массив в виде таблицы;

ступенчатый массив. В этом массиве количество элементов каждой строки
(массива) может отличаться. Ступенчатый массив еще называют массивом
массивов.
Общая форма объявления ступенчатого массива:
тип [][] имя_массива = new тип[размер][];
где

тип – тип элементов массива;

размер – количество строк в массиве.
9. Пример объявления и использования ступенчатого массива
// ступенчатые массивы
// объявление массива из 4-х строк, элементы которого имеют тип ulong
ulong[][] A = new ulong[4][];
// выделение памяти для каждой строки
A[0] = new ulong[5]; // в строке с индексом 0 есть 5 элементов
A[1] = new ulong[3]; // в строке с индексом 1 есть 3 элемента
A[2] = new ulong[6];
A[3] = new ulong[4];
// демонстрация доступа к элементам массива A
A[0][0] = 2003;
A[0][4] = 199008;
A[1][2] = 302909;
A[3][3] = 10000000;
for (int i = 0; i < 6; i++)
A[2][i] = (ulong)(i * i * i);
Как видно из примера, доступ к элементам ступенчатого массива происходит
иначе чем в прямоугольном массиве.
10. В каких случаях целесообразно использовать ступенчатые массивы?
Ступенчатые массивы являются эффективными в случаях, если у двумерных
прямоугольных массивов есть много элементов, которые вообще не используются. Это
позволяет сэкономить память за счет выделения только необходимого объема памяти
(количества элементов) для каждой строки ступенчатого массива.
На рисунке 1 отображено преимущество применения ступенчатых массивов в
сравнении с прямоугольными. Продемонстрирована возможная экономия памяти в
случае, когда данные представляются прямоугольным массивом в котором все
элементы некоторых строк (0, 2, 3, 4) не используются.
Способ 1. Объявление прямоугольного массива с именем M.
// объявление прямоугольного массива
int[,] M = new int[5,100]; // выделяется 500 ячеек типа int
Способ 2. Объявление ступенчатого массива.
// объявление ступенчатого массива
int[][] M = new int[5][];
// выделяется 50+100+30+60+40 = 280 ячеек типа int
M[0] = new int[50];
M[1] = new int[100];
M[2] = new int[30];
M[3] = new int[60];
M[4] = new int[40];
Рис. 1. Пример экономии памяти с помощью ступенчатого массива из 5 строк в
сравнении с прямоугольным массивом размером 5×100
11. Каким образом реализовать массив двумерных массивов? Пример
В примере реализуется массив двумерных массивов с именем M. Массив имеет 10
строк. В каждой строке формируется двумерный массив размером 3×4.
// объявление массива из 10 двумерных массивов вещественных чисел, каждый из
которых имеет размер 3*4
float[][,] M; // объявление переменной типа "массив двумерных массивов"
// выделение памяти для 10 двумерных массивов типа float
M = new float[10][,];
// выделение памяти для каждого массива размером 3*4
for (int i = 0; i < 10; i++)
M[i] = new float[3, 4];
// заполнение массивов произвольными значениями
for (int i = 0; i < 10; i++)
for (int j = 0; j < 3; j++)
for (int k = 0; k < 4; k++)
M[i][j, k] = i * 10 + j * 3 + k;
// заполнить конкретные ячейки
M[0][2, 1] = 20.44f;
M[2][0, 2] = 100.08f;
Рваные массивы (ступенчатые)
Двумерный массив можно представить в виде таблицы, в которой длина каждой
строки остается неизменной по всему массиву. Но в C# можно также создавать
специальный
тип
двумерного
массива,
называемый
ступенчатым
массивом.
Ступенчатый массив представляет собой массив массивов, в котором длина каждого
массива может быть разной. Следовательно, ступенчатый массив может быть
использован для составления таблицы из строк разной длины.
Ступенчатые массивы объявляются с помощью ряда квадратных скобок, в которых
указывается их размерность. Например, для объявления двумерного ступенчатого
массива служит следующая общая форма:
тип [][] имя массива = new тип[размер] [];
где размер обозначает число строк в массиве. Память для самих строк
распределяется индивидуально, и поэтому длина строк может быть разной.
Давайте рассмотрим пример использования ступенчатого массива:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int i = 0;
// Объявляем ступенчатый массив
int[][] myArr = new int[4][];
myArr[0] = new int[4];
myArr[1] = new int[6];
myArr[2] = new int[3];
myArr[3] = new int[4];
// Инициализируем ступенчатый массив
for (; i < 4; i++)
{
myArr[0][i] = i;
Console.Write("{0}\t",myArr[0][i]);
}
Console.WriteLine();
for (i = 0; i < 6; i++)
{
myArr[1][i] = i;
Console.Write("{0}\t", myArr[1][i]);
}
Console.WriteLine();
for (i = 0; i < 3; i++)
{
myArr[2][i] = i;
Console.Write("{0}\t", myArr[2][i]);
}
Console.WriteLine();
for (i = 0; i < 4; i++)
{
myArr[3][i] = i;
Console.Write("{0}\t", myArr[3][i]);
}
Console.ReadLine();
}
}
}
int [] [] jagged = new int[4][];
jagged [0] = new int[6];
jagged [1] = new int[2];
jagged [2] = new int[4];
jagged [3] = new int[11];
После создания «рваного» массива в программе выводится на печать индекс
максимального четного значения в массиве.
Конкретно не получается определить максимальный четный элемент.
Из наработок есть только это:
C#
int[][] jagged = new int[4][];
jagged[0] = new int[6];
jagged[1] = new int[2];
jagged[2] = new int[4];
jagged[3] = new int[11];
int[] mas = new int[100];
for (int i = 0; i < 6; i++)
{
jagged[0][i] = i;
if (jagged[0][i] % 2 == 0)
jagged[0][i] = mas[i];
}
for (int i = 0; i < 2; i++)
{
jagged[1][i] = i;
}
for (int i = 0; i < 4; i++)
{
jagged[2][i] = i;
}
for (int i = 0; i < 11; i++)
{
jagged[3][i] = i;
ЗАКЛЮЧЕНИЕ
При выполнении настоящей курсовой работы были освоены основные принципы
разработки алгоритмов и программ, методы отладки и решения задач на ЭВМ в
различных режимах. Так же были разобраны основы системного программирования и
основы объектно-ориентированного подхода к программированию.
В процессе решения поставленных задач курсовой работы использовались
прикладные системы программирования и необходимые методы решения заданий.
Иинструментальной средой разработки программ стала MS Visual Studio 2010.
В первом задании курсовой работы были рассмотрены такие методы решения
задач как матрицы. Заданная матрица элементов должна быть заполнена определенным
образом и выведена на экран. При выполнении данного задания использовались
массивы и соответствующие расчеты.
Условием второго задания курсовой работы было ннайти наименьший номер
члена последовательности, для которого выполняется условие an- an-1 <е. При
решении поставленной задачи использовался цикл с предусловием.
В третьем задании курсовой работы были рассмотрены строки. При выполнении
данного задания были применены необходимые операции со строками, а именно
строковый массив, нахождение длины строки и т.д.
Темой четвертого задания курсовой работы стала работа с методами. При
выполнении задания была составлена программа вызова метода с помощью которого
было решено условие данного задания.
Темой заключительного задания курсовой работы была работа с файлами. При
решении задания использовались одномерные массивы.
По окончанию курсовой работы можно сказать, что нами были изучены и
закреплены следующие задачи:
-ставить задачу и разрабатывать алгоритм её решения;
-использовать прикладные системы программирования;
-разрабатывать основные программные документы;
-работать с современными системами программирования, включая объектноориентированные;
-языками процедурного и объектно-ориентированного программирования,
навыками разработки и отладки программ не менее, чем на одном из алгоритмических
процедурных языков программирования высокого уровня,
-методами и средствами разработки и оформления технической документации.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
1.
Павловская Т. А. C#. Программирование на языке высокого уровня: Учебник для
вузов. - СПб.: БХВ-Петербург. 2007.
2.
Попов И. И., Партыка Т. Л. Языки программирования: Учебное пособие. - М.:
ФОРУМ: ИНФРА-М, 2008.
3.
Голицина О. Л., Попов И. И. Основы алгоритмизации и программирования:
Учебное пособие. - М.: ФОРУМ: ИНФРА-М, 2005.
4.
Фаронов В. В., Создание приложений с помощью C#: Руководство программиста. -
М.: Эксмо, 2008.
5.
Свердлов С. З. Языки программирования и методы трансляции. Учебное пособие.
- СПб.: Питер, 2007.
6.
Павловская Т. А. С/С++ Программирование на языке высокого уровня. - СПб.:
Питер, 2005.
7.
Нортроп Тони, Уилдермьюс Шон, Райан Билл. Основы разработки приложений на
платформе Microsoft .Net Framework. Учебный курс Microsoft / Пер. с англ. - М.:
«Русская редакция», СПб.: «Питер», 2007.
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
1.
МАССИВЫ В ЯЗЫКЕ C#.....................................................................2
2.
МНОГОМЕРНЫЕ МАССИВЫ............................................................3
3.
РВАНЫЕ МАССИВЫ (СТУПЕНЧАТЫЕ)........................................13
ЗАКЛЮЧЕНИЕ.......................................................................................17
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ............................18
Related documents
Download