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

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

Рубрика Программирование, компьютеры и кибернетика
Вид отчет по практике
Язык русский
Дата добавления 07.01.2014
Размер файла 309,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

Содержание

Введение

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

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

Задание 1

Задание 2

Задание 3

Задание 4

Задание 5

Заключение

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

Введение

Целью моей работы было изучение и закрепление теоретических знаний о статических и динамических массивах практическими заданиями.

C# (произносится си шарп) -- объектно-ориентированный язык программирования. Разработан в 1998--2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как язык разработки приложений для платформы Microsoft .NET Framework и впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270.

C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения,комментарии в формате XML.

Переняв многое от своих предшественников языков C++, Java, Delphi, Модула и Smalltalk -- С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# не поддерживает множественное наследование классов (в отличие от 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] оформить функциями.

A[i, j]=(i-j)/(i+j);

B[k, l]=kl/(2k+l);

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

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

Листинг:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

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

int m = int.Parse(Console.ReadLine());

int i, j, k, l, x, z;

float[,] A = new float[m, m];

float[,] B = new float[m, m];

float[,] C = new float[m, m];

Console.WriteLine("Массив А");

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

{

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

{

A[i, j] = ((float)(i+1)- (float)(j+1))/((float)(i+1)+ (float)(j+1));

Console.Write("{0:f}", A[i, j]);

Console.Write("; ");

}

Console.WriteLine();

}

Console.WriteLine("Массив В");

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

{

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

{

B[k, l] = ((float)(k + 1) * (float)(l + 1)) / (2 * (float)(k + 1) + (float)(l + 1));

Console.Write("{0:f}", B[k, l]);

Console.Write("; ");

}

Console.WriteLine();

}

Console.WriteLine("Матрица С:");

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

{

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

{

C[x, z] = 0;

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

{

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

}

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

Console.Write("; ");

}

Console.WriteLine();

}

Console.ReadKey();

}

}

}

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

Задание 2

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

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

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

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

Листинг:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

int m, i, j, max, maxI, maxJ;

Random p = new Random();

m = p.Next(3, 6);

int[,] A = new int[m, m];

Console.WriteLine("Матрица А");

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

{

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

{

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

Console.Write(A[i, j]);

Console.Write("; ");

}

Console.WriteLine();

}

max = maxI = maxJ = 0;

int[,] C = new int[m, m];

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

{

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

{

if (A[i, j] > max)

{

max = A[i, j];

maxI = i+1;

maxJ = j+1;

}

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

}

}

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

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

{

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

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

}

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

{

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

{

Console.Write(C[i, j]);

Console.Write("; ");

}

Console.WriteLine();

}

Console.ReadKey();

}

}

}

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

Задание3

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

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

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

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

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

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

Листинг:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

int m, n, i, j, S;

S=0;

Random p = new Random();

m = p.Next(20);

n = p.Next(20);

int[,] A = new int[m, n];

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

{

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

{

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

}

}

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

{

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

{

S = S + A[i, j];

Console.Write(A[i, j]);

Console.Write("; ");

}

Console.WriteLine(" S= " + S);

S = 0;

Console.WriteLine();

}

Console.ReadKey();

}

}

}

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

Задание 4

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

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

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

Листинг

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Program

{

static string text;

static void Main(string[] args)

{

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

string s = Console.ReadLine();

text = System.IO.File.ReadAllText(@"Data.txt", System.Text.UTF8Encoding.UTF8);

string[] input = s.Split('_');

s = "";

for (int i = 0; i < input.Length; i++)

{

string perevod = Perevod(input[i]);

s += perevod;

if (perevod != "" && i != input.Length - 1)

s += "_";

}

Console.WriteLine("Перевод:");

Console.WriteLine(s);

Console.ReadKey();

}

static string Perevod(string word)

{

string[] table = text.Split(';');

for (int i = 0; i < table.Length; i++)

if (table[i].Split('-')[0].ToLower() == word.ToLower())

return 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

Листинг

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

int i, j, n, t, l, m, k, M, L;

k = 0;

M = 0;

L = 0;

l = 0;

m = 0;

Random p = new Random();

t = p.Next(3, 10);

n = p.Next(3, 10);

int[,] A = new int[t, n];

Console.WriteLine("Исходная матрица:");

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

{

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

{

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

Console.Write(A[i, j]);

Console.Write(" ");

}

Console.WriteLine();

}

Console.WriteLine();

Console.Write("l-норма:");

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

{

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

{

A[i,j] = Math.Abs(A[i,j]);

k = k + (A[i, j] * A[i, j]);

l = l + A[i,j];

}

if (l > L) L = l;

l = 0;

}

Console.Write(L);

Console.Write("; ");

Console.WriteLine();

Console.WriteLine();

Console.Write("m-норма:");

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

{

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

{

m = m + A[i, j];

}

if (m > M) M = m;

m = 0;

}

Console.Write(M);

Console.Write("; ");

Console.WriteLine();

double K = k;

K = Math.Sqrt(K);

Console.WriteLine();

Console.WriteLine("k-норма: " + K + ";");

Console.ReadKey();

}

}

}

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

Заключение

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

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

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

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

Размещено на Allbest.ru


Подобные документы

  • Изучение понятия и основных видов массивов. Ввод массива с клавиатуры и вывод на экран. Сортировка массивов. Метод простых обменов (пузырьковая сортировка). Сортировка простым выбором и простым включением. Решение задач с использованием массивов Паскаля.

    курсовая работа [82,1 K], добавлен 18.03.2013

  • Одномерные числовые массивы, образование элементами целочисленного массива невозрастающей последовательности. Программное нахождение суммы элементов каждой возможной строки матрицы и формирование массива из найденных сумм, вывод массива-результата.

    лабораторная работа [12,8 K], добавлен 09.01.2011

  • Объявление, выделение, освобождение памяти под динамические массивы. Обращение к элементам. Решение задач с использованием динамических массивов на языке C++. Разработка и реализация программы для формирования и обработки динамического двумерного массива.

    курсовая работа [813,4 K], добавлен 13.06.2014

  • Широкое использование компьютерных и информационных технологий. Концепции типов данных. Алгоритмы сортировки одномерных массивов. Описание двумерного массива Паскаля. Методы доступа к элементам массивов. Индексные, динамические и гетерогенные массивы.

    курсовая работа [66,3 K], добавлен 07.12.2010

  • Поиск коэффициентов кубического уравнения. Расчет количества итераций для заданной погрешности по реккурентному соотношению. Заполнение матрицы по условию. Поиск наибольшего целочисленного элемента массива, не имеющего себе равных в другом массиве.

    контрольная работа [52,7 K], добавлен 20.12.2012

  • Заполнение массива из целых чисел с присвоением элементам разных значений. Варианты программы с использованием различных операторов организации циклов. Определение квадрата максимального из четных элементов массива и общего числа нулевых элементов.

    лабораторная работа [259,3 K], добавлен 14.05.2011

  • Составление программы разветвляющейся структуры для вычисления заданной функции. Нахождение произведения чётных и нечётных первых чисел натурального ряда. Приёмы программирования обработки одномерных массивов. Расчет суммы положительных элементов массива.

    контрольная работа [1,3 M], добавлен 20.12.2012

  • Разработка программы для нахождения минимального и максимального элемента массива, вычисления среднего арифметического строк и столбцов транспортирования матриц. Характеристика основных программных средств. Описание программы, руководство пользователя.

    курсовая работа [2,4 M], добавлен 26.04.2015

  • Аппаратные и программные RAID-массивы. Расчет объема массива. Временные затраты на расчет и запись контрольных сумм. Пример распределения файлов по JBOD-массиву. Вероятности отказа каждого диска в массиве. Сравнение стандартных уровней RAID-массивов.

    курсовая работа [3,0 M], добавлен 28.03.2011

  • Формирование одномерного массива, каждый элемент которого равен наибольшему по модулю элементу соответствующего столбца. Определение столбца, в котором равное количество положительных и отрицательных элементов. Написание программы и ее тестирование.

    контрольная работа [97,2 K], добавлен 21.06.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.