Статические и динамические массивы

  • Вид работы:
    Отчет по практике
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    209,93 Кб
  • Опубликовано:
    2013-10-28
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Статические и динамические массивы

Содержание

Введение

Теоретическая часть

Практическая часть

Задание 1

Задание 2

Задание 3

Задание 4

Задание 5

Заключение

Используемые ресурсы

Введение

Целью моей работы было изучение и закрепление теоретических знаний о статических и динамических массивах практическими заданиями.# (произносится си шарп) - объектно-ориентированный язык программирования. Разработан в 1998-2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как язык разработки приложений для платформы Microsoft .NET Framework и впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270.# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения,комментарии в формате XML.

Переняв многое от своих предшественников языков C++, Java, Delphi, Модула и Smalltalk - С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# не поддерживает множественное наследование классов (в отличие от C++).# разрабатывался как язык программирования прикладного уровня для CLR и, как таковой, зависит, прежде всего, от возможностей самой CLR. Это касается, прежде всего, системы типов C#, которая отражает BCL. Присутствие или отсутствие тех или иных выразительных особенностей языка диктуется тем, может ли конкретная языковая особенность быть транслирована в соответствующие конструкции CLR. Так, с развитием CLR от версии 1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует ожидать и в дальнейшем. (Однако эта закономерность была нарушена с выходом C# 3.0, представляющего собой расширения языка, не опирающиеся на расширения платформы .NET.) CLR предоставляет C#, как и всем другим .NET-ориентированным языкам, многие возможности, которых лишены «классические» языки программирования. Например, сборка мусора не реализована в самом C#, а производится CLR для программ, написанных на C# точно так же, как это делается для программ на VB.NET, J# и др.

Теоретическая часть

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

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

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

В языках программирования, допускающих объявления программистом собственных типов, как правило, существует возможность создания типа «массив». В определении такого типа может указываться размер, тип элемента, диапазон значений и типы индексов. В дальнейшем возможно определение переменных созданного типа. Все такие переменные-массивы имеют одну структуру. Некоторые языки поддерживают для переменных-массивов операции присваивания (когда одной операцией всем элементам массива присваиваются значения соответствующих элементов другого массива).

Специфические типы массивов:

Динамические массивы

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

Массивы массивов

Многомерные массивы, как правило, реализованные как одномерные массивы, каждый элемент которых является ссылкой на другой одномерный массив.

Достоинства:

лёгкость вычисления адреса элемента по его индексу (поскольку элементы массива располагаются один за другим)

одинаковое время доступа ко всем элементам

малый размер элементов: они состоят только из информационного поля

Недостатки:

для статического массива - отсутствие динамики, невозможность удаления или добавления элемента без сдвига других

для динамического и/или гетерогенного массива - более низкое (по сравнению с обычным статическим) быстродействие и дополнительные накладные расходы на поддержку динамических свойств и/или гетерогенности.

при работе с массивом в стиле C (с указателями) и при отсутствии дополнительных средств контроля - угроза выхода за границы массива и повреждения данных

Практическая часть

Задание 1

Элементы квадратной матрицы А и В вычисляются по заданным формулам. Составить программу по вычислению произведения этих матриц. Вычисление элементов A[i, j], B[k, l] оформить функциями.

[i, j]=(i-j)/(i+j); [k, l]=kl/(2k+l);

Тип данных int, используется для индексации массива и счетчика: i, j, k, l, x, z, m;

Тип данных float, используется для вычисления элементов массива: A, B, C;

Листинг:

System;System.Collections.Generic;System.Linq;System.Text;ConsoleApplication1

{

class Program

{void Main(string[] args)

{.WriteLine("Введите количество строк и столбцов массива");

int m = int.Parse(Console.ReadLine());i, j, k, l, x, z;[,] A = new float[m, m];[,] B = new float[m, m];[,] C = new float[m, m];.WriteLine("Массив А");(i = 0; i < m; i++)

{(j = 0; j < m; j++)

{

A[i, j] = ((float)(i+1)- (float)(j+1))/((float)(i+1)+ (float)(j+1));.Write("{0:f}", A[i, j]);.Write("; ");

}.WriteLine();

}.WriteLine("Массив В");(k = 0; k < m; k++)

{(l = 0; l < m; l++)

{[k, l] = ((float)(k + 1) * (float)(l + 1)) / (2 * (float)(k + 1) + (float)(l + 1));.Write("{0:f}", B[k, l]);.Write("; ");

}.WriteLine();

}.WriteLine("Матрица С:");(x = 0; x < m; x++)

{(z = 0; z < m; z++)

{[x, z] = 0;(k = 0; k < m; k++)

{[x, z] = C[x, z] + A[x, k] * B[k, z];

}.Write("{0:f}", C[x, z]);.Write("; ");

}.WriteLine();

}

Console.ReadKey();

}

}

}

рис. 3.1 - результат выполнения программы №1

Задание 2

Ввести элементы двумерного массива с клавиатуры. Найти наибольший элемент в массиве номер строки и столбца, в котором он содержится вывести на экран. Поменять строку и столбец местами.

Тип данных int, используется для индексации массива и счетчика: m, i, j, max, maxI, maxJ;

Тип данных Random, используется для создания случайных чисел: p;

Листинг:

System;System.Collections.Generic;System.Linq;System.Text;ConsoleApplication1

{Program

{void Main(string[] args)

{m, i, j, max, maxI, maxJ;p = new Random();= p.Next(3, 6);[,] A = new int[m, m];.WriteLine("Матрица А");(i = 0; i < m; i++)

{(j = 0; j < m; j++)

{[i, j] = p.Next(10);.Write(A[i, j]);.Write("; ");

}.WriteLine();

}= maxI = maxJ = 0;[,] C = new int[m, m];(i = 0; i < m; i++)

{(j = 0; j < m; j++)

{(A[i, j] > max)

{= A[i, j];= i+1;= j+1;

}[i, j] = A[i, j];

}

}.WriteLine("Максимальное значение " + max + ", в строке " + maxI + ", в столбце " + maxJ);

for (j = 0; j < m; j++)

{[maxI-1, j] = A[j, maxJ-1];[j, maxJ-1] = A[maxI-1, j];

}(i = 0; i < m; i++)

{(j = 0; j < m; j++)

{.Write(C[i, j]);.Write("; ");

}.WriteLine();

}

.ReadKey();

}

}

}

рис . 3.2 - результат выполнения программы №2

Задание3

массив произведение матрица число

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

Тип данных int, используется для индексации массива и счетчика:

Тип данных Random, используется для создания случайных чисел: p;

Тип данных int[,], используется для создания массива: А, C;























Рис 3.3-1 - блок-схема алгоритма №3

Листинг:

System;System.Collections.Generic;System.Linq;System.Text;ConsoleApplication1

{Program

{void Main(string[] args)

{m, n, i, j, S;=0;p = new Random();= p.Next(20);= p.Next(20); [,] A = new int[m, n];(i = 0; i < m; i++)

{(j = 0; j < n; j++)

{[i, j] = p.Next(9);

}

}(j=0; j<n; j++)

{(i = 0; i < m; i++)

{= S + A[i, j];.Write(A[i, j]);.Write("; ");

}.WriteLine(" S= " + S);= 0;.WriteLine();

}.ReadKey();

}

}

}

Рис 3.3-2 - результат выполнения программы №3

Задание 4

Имеется некоторая база данных, в которой некоторым английским словам проставлены русские эквиваленты, например “THIS” - “ЭТО”, “IS” - “”, “A” - “”, “TABLE” - “СТОЛ” и т.д. С клавиатуры задается некоторое предложение на английском языке (слова разделяются символами подчеркивания: ‘_’). Программа ищет каждое слова у себя в базе данных и выдает перевод. Если введенное слово в базе не обнаружено, в результирующую строку записывается исходное английское слово.

Допустимые символы - прописные английские буквы; символ - разделитель ‘_’.

Тип данных string, используется для считывания и проверки строки:text, s, input, word;

ЛистингSystem;System.Collections.Generic;System.Linq;System.Text;ConsoleApplication1

{Program

{string text;void Main(string[] args)

{.WriteLine("Введите предложение на английском языке:");

string s = Console.ReadLine();= System.IO.File.ReadAllText(@"Data.txt", System.Text.UTF8Encoding.UTF8);[] input = s.Split('_');= "";(int i = 0; i < input.Length; i++)

{perevod = Perevod(input[i]);+= perevod;(perevod != "" && i != input.Length - 1)+= "_";

}.WriteLine("Перевод:");.WriteLine(s);.ReadKey();

}string Perevod(string word)

{[] table = text.Split(';');(int i = 0; i < table.Length; i++)(table[i].Split('-')[0].ToLower() == word.ToLower())table[i].Split('-')[1];

return word;

}

}

}

Рис 3.4 - результат работы программы № 4

Задание 5


Вычислить различные нормы прямоугольной матрицы A = {aij}:

Тип данных int, используется для индексации массива, счетчика и вычисления норм: i, j, n, t, l, m, k, M, L;

Тип данных Random, используется для создания случайных чисел: p;

Тип данных double, используется для вычисления норм: K























Рис 3.5-1 - блок схема алгоритма программы № 5

Листинг

System;System.Collections.Generic;System.Linq;System.Text;ConsoleApplication1

{Program

{void Main(string[] args)

{i, j, n, t, l, m, k, M, L;= 0;= 0;= 0;= 0;= 0;p = new Random();= p.Next(3, 10);= p.Next(3, 10);[,] A = new int[t, n];.WriteLine("Исходная матрица:");(i = 0; i < t; i++)

{(j = 0; j < n; j++)

{[i, j] = p.Next(10);.Write(A[i, j]);.Write(" ");

}.WriteLine();

}.WriteLine();.Write("l-норма:");(i = 0; i < t; i++)

{(j = 0; j < n; j++)

{[i,j] = Math.Abs(A[i,j]);= k + (A[i, j] * A[i, j]);= l + A[i,j];

}(l > L) L = l;= 0;

}.Write(L);.Write("; ");.WriteLine();.WriteLine();.Write("m-норма:");(j = 0; j < n; j++)

{(i = 0; i < t; i++)

{= m + A[i, j];

}(m > M) M = m;= 0;

}.Write(M);.Write("; ");.WriteLine();K = k;= Math.Sqrt(K);.WriteLine();.WriteLine("k-норма: " + K + ";");

Console.ReadKey();

}

}

}

Рис 3.5-2 результат работы программы № 5

Заключение

В ходе выполнения практики были разработаны программы. В ходе работы я использовала знания о статических и динамических массивах. Разрабатывая программы, я узнала основные способы представления массивов

Используемые ресурсы:

http://msdn.microsoft.com/library/dd831853.aspx

Побдельский В.В., Фомин С.С. Программирование на языке Си

Похожие работы на - Статические и динамические массивы

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!