Работа с одномерными и многомерными массивами в программных средах Borland Delphi 7 и MS Visual Studio2008



МИНИСТЕРСТВО ОБРАЗОВАНИЯ РФ

Государственное образовательное учреждение

высшего профессионального образования

«РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ИННОВАЦИОННЫХ ТЕХНОЛОГИЙ И ПРЕДПРИНИМАТЕЛЬСТВА»

Пензенский филиал 

 

Факультет информационных технологий

 

КАФЕДРА «УПРАВЛЕНИЕ ИНФОРМАЦИОННЫМИ РЕСУРСАМИ»

 

Курсовая работа

по дисциплине «Высокоуровневые методы информатики и программирования»

Тема:

«Работа с одномерными и многомерными массивами в программных средах Borland Delphi 7 и MS Visual Studio2008 »

 

                                                                   

 

 

 

                                                                 Выполнил:

                                                            студентка

                                                               гр. 09c1

                                                                                          Е.Л.Никулина

                                                                       

                                                                                        ______________

                                                                                                               (подпись, дата)

 

 

                                                                 Проверил:

                                                                        преподаватель

                                                                                          А.Н. Конова

 

                                                                                                                                 ______________

                                                                                                                                 (подпись, дата)

 

 

 

 

 

Пенза 2011

 

СОДЕРЖАНИЕ

 

Введение

3

1 ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

4

2 Работа с массивами на С#

8

    2.1  Работа с многомерными массивами

9

    2.2  Условие задачи

10

3 Работа с массивами на Delphi

11

    3.1 Работа с многомерными массивами

12

     3.2 Условие задачи

13

Заключение

14

Список использованной литературы

15

Приложение  №1

16

Приложение  №2

17

Приложение  №3

18

Приложение  №4

19

Приложение  №5

26

Приложение  №6

27

 

 

 

 


Введение

 

Язык программирования С# был создан в конце 1990-х годов и стал частью общей .NET-стратегии Microsoft. Впервые он увидел свет в качестве b-версии в середине 2000 года. Главным архитектором С# был Андерс Хейлсберг - один из ведущих специалистов в области языков программирования, получивший признание во всем мире. Достаточно сказать, что в 1980-х он был автором весьма успешного продукта Turbo Pascal, изящная реализация которого установила стандарт для всех будущих компиляторов. С# непосредственно связан с С, C++ и Java. Эти три языка - самые популярные и самые любимые языки программирования в мире. Более того, почти все профессиональные программисты сегодня знают С и C++, и большинство знает Java. Поскольку С# построен на прочном, понятном фундаменте, то переход от этих "фундаментальных" языков к "надстройке" происходит без особых усилий со стороны программистов. Так как Андерс Хейлсберг не собирался изобретать свое "колесо", он сосредоточился на введении усовершенствований и новшеств.

Родоначальником С# является язык С. От С язык С# унаследовал синтаксис, многие ключевые слова и операторы. Кроме того, С# построен на улучшенной объектной модели, определенной в C++. Если вы знаете С или C++, то с С# вы сразу станете друзьями. С# и Java связаны между собой несколько сложнее. Как упоминалось выше, Java также является потомком С и C++. У него тоже общий с ними синтаксис и сходная объектная модель. Подобно Java C# предназначен для создания переносимого кода. Однако С# -- не потомок Java. Скорее С# и Java можно считать двоюродными братьями, имеющими общих предков, но получившими от родителей разные наборы "генов".

 

 

 

1 ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

 

В последнее время  С и С++ является наиболее используемым языком для разработки коммерческих и бизнес приложений. Эти языки устраивают многих разработчиков, но в действительности не обеспечивают должной продуктивности разработки. К примеру, процесс написания приложения на С++ зачастую занимает значительно больше времени, чем разработка эквивалентного приложения, скажем, на Visual Basic. Сейчас существуют языки, увеличивающие продуктивность разработки за счет потери в гибкости, которая так привычна и необходима программистам на С/С++. Подобные решения являются весьма неудобными для разработчиков и зачастую предлагают значительно меньшие возможности. Эти языки также не ориентированы на взаимодействие с появляющимися сегодня системами и очень часто они не соответствуют существующей практике программирования для Web. Многие разработчики хотели бы использовать современный язык, который позволял бы писать, читать и сопровождать программы с простотой Visual Basic и в то же время давал мощь и гибкость C++, обеспечивал доступ ко всем функциональным возможностям системы, взаимодействовал бы с существующими программами и легко работал с возникающими Web стандартами.

Учитывая все подобные пожелания, Microsoft разработала новый язык - C#. В него входит много полезных особенностей - простота, объектная ориентированность, типовая защищенность, "сборка мусора", поддержка совместимости версий и многое другое. Данные возможности позволяют быстро и легко разрабатывать приложения, особенно COM+ приложения и Web сервисы. При создании C#, его авторы учитывали достижения многих других языков программирования: C++, C, Java, SmallTalk, Delphi, Visual Basic и т.д. Надо заметить что по причине того, что C# разрабатывался с чистого листа, у его авторов была возможность (которой они явно воспользовались), оставить в прошлом все неудобные и неприятные особенности (существующие, как правило, для обратной совместимости), любого из предшествующих ему языков. В результате получился действительно простой, удобный и современный язык, по мощности не уступающий С++, но существенно повышающий продуктивность разработок.

Очень часто можно проследить такую связь - чем более язык защищен и устойчив к ошибкам, тем меньше производительность программ, написанных на нем. К примеру рассмотрим две крайности - очевидно это Assembler и Java. В первом случае вы можете добиться фантастической быстроты своей программы, но вам придется очень долго заставлять ее работать правильно не на вашем компьютере. В случае же с Java - вы получаете защищенность, независимость от платформы, но, к сожалению, скорость вашей программы вряд ли совместима со сложившимся представлением о скорости, например, какого-либо отдельного клиентского приложения (конечно существуют оговорки - JIT компиляция и прочее).

В C#, как в несомненно современном языке, существуют характерные особенности для обхода возможных ошибок. Например, помимо упомянутой выше "сборки мусора", там все переменные автоматически инициализируются средой и обладают типовой защищенностью, что позволяет избежать неопределенных ситуаций в случае, если программист забудет инициализировать переменную в объекте или попытается произвести недопустимое преобразование типов. Также в C# были предприняты меры для исключения ошибок при обновлении программного обеспечения. Изменение кода, в такой ситуации, может непредсказуемо изменить суть самой программы. Чтобы помочь разработчикам бороться с этой проблемой C# включает в себя поддержку совместимости версий (vesioning). В частности, в отличии от C++ и Java, если метод класса был изменен, это должно быть специально оговорено. Это позволяет обойти ошибки в коде и обеспечить гибкую совместимость версий. Также новой особенностью является native поддержка интерфейсов и наследования интерфейсов. Данные возможности позволяют разрабатывать сложные системы и развивать их со временем.

В C# была унифицирована система типов, теперь вы можете рассматривать каждый тип как объект. Несмотря на то, используете вы класс, структуру, массив или встроенный тип, вы можете обращаться к нему как к объекту. Объекты собраны в пространства имен (namespaces), которые позволяют программно обращаться к чему-либо. Это значит что вместо списка включаемых файлов заголовков в своей программе вы должны написать какие пространства имен, для доступа к объектам и классам внутри них, вы хотите использовать. В C# выражение using позволяет вам не писать каждый раз название пространства имен, когда вы используете класс из него. Например, пространство имен System содержит несколько классов, в том числе и Console. И вы можете писать либо название пространства имен перед каждым обращением к классу, либо использовать using как это было показано в примере выше.

Важной и отличительной от С++ особенностью C# является его простота. К примеру, всегда ли вы помните, когда пишите на С++, где нужно использовать "->", где "::", а где "."? Даже если нет, то компилятор всегда поправляет вас в случае ошибки. Это говорит лишь о том, что в действительности можно обойтись только одним оператором, а компилятор сам будет распознавать его значение. Так в C#, оператор"->" используется очень ограничено (в unsafe блоках, о которых речь пойдет ниже), оператор "::" вообще не существует. Практически всегда вы используете только оператор "." и вам больше не нужно стоять перед выбором.

В C#, также как и в Visual Basic после каждого выражения case в блоке switch подразумевается break. И более не будет происходить странных вещей если вы забыли поставить этот break. Однако если вы действительно хотите чтобы после одного выражения case программа перешла к следующему вы можете переписать свою программу с использованием, например, оператора goto.

Многим программистам (на тот момент, наверное, будущим программистам) было не так легко во время изучения C++ полностью освоиться с механизмом ссылок и указателей. В C# (кто-то сейчас вспомнит о Java) нет указателей. В действительности нетривиальность указателей соответствовала их полезности. Например, порой, трудно себе представить программирование без указателей на функции. В соответствии с этим в C# присутствуют Delegates - как прямой аналог указателя на функцию, но их отличает типовая защищенность, безопасность и полное соответствие концепциям объектно-ориентированного программирования.

Современность C# проявляется и в новых шагах к облегчению процесса отладки программы. Традиционным средством для отладки программ на стадии разработки в C++ является маркировка обширных частей кода директивами #ifdef и т.д. В C#, используя атрибуты, ориентированные на условные слова, вы можете куда быстрее писать отлаживаемый код.

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

 

 

 

 

2 РАБОТА С МАССИВАМИ НА C#

 

Массив - набор элементов одного и того же типа, объединенных общим именем. Массивы в С# можно использовать по аналогии с тем, как они используются в других языках программирования. Однако С# - массивы имеют существенные отличия: они относятся к ссылочным типам данных, более того - реализованы как объекты. Фактически имя массива является ссылкой на область кучи (динамической памяти), в которой последовательно размещается набор элементов определенного типа. Выделение памяти под элементы происходит на этапе инициализации массива. А за освобождением памяти следит система сборки мусора - неиспользуемые массивы автоматически утилизируются данной системой. 

Одномерный массив - это фиксированное количество элементов одного и того же типа, объединенных общим именем, где каждый элемент имеет свой номер. Нумерация элементов массива в С# начинается с нуля, то есть, если массив состоит из 10 элементов, то его элементы будут иметь следующие номера: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. 

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

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

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

 Объявить двумерный массив можно одним из следующих способов:

тип [,] имя__массива;

тип [,] имя__массива = new тип [размер1, размер2];

тип [,] имя__массива={{элементы 1-ой строки}, … , {элементы n-ой строки}};

тип [,] имя__массива= new тип [,]{{элементы 1-ой строки}, … ,{элементы n-ой строки}};

строки}}.

2.1 Работа с многомерными массивами

 

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

На рис. 1  показан пример двумерного массива Array.

             

                           

                                                                                                 

Аrrау[0,0]              Array [0,1]              Array[0,2]

Аrrау[1,0]              Array[1,1]              Array[1,2]

Аrrау[2,0]              Array[2,1]              Array[2,2]

Аrrау[3,0]              Array[3,1]              /Array[3,2]

Аrrау[4,0]              Array[4,1]              Array[4,2]

                                          Ячейка Аrrау[3,2] строка 3, столбец 2              /             

                                       Рис. 1. Двумерный массив Array             

                           

              Такой массив можно представить себе в виде строк и столбцов. Для адресации ячейки двумерного массива нужно указывать два индекса — индекс строки и индекс столбца.

          Чтобы создать двумерный массив, например, целых чисел, используйте конструкцию следующего вида:

int[,] TwoDimArray = new int[2,3];

           Здесь при объявлении массива мы использовали запятую для того, чтобы указать компилятору на необходимость создания ссылки TwoDimArray на двумерный массив. Кроме того, в операторе new мы указали количество строк и столбцов создаваемого двумерного массива.

Если нужно объявить многомерный массив, используйте несколько запятых:

int[,,,] MultiDimArray = new int[2,3,7,2];

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

int[,] TwoDimArray = new int[2,3];

TwoDimArray[0, 0] = 5;

TwoDimArray[1, 0] = 2 ;

TwoDimArray[0, 1] = 15;

TwoDimArray[1, 1] = 5;

TwoDimArray[0, 2] = 52;

TwoDimArray[1, 2] =32;

 

2.2  Условие задачи

 

        Найти сумму положительных элементов матрицы A [n,m] сформированную случайным образом и сумму отрицательных ее элементов. Эту матрицу транспонировать и вывести на экран.

        Скриншоты форм и программные коды  приводятся в :

      Приложении №1.

      Приложении №2.

      Приложении №3.

      Приложении №4.

 

 

 

 

 

 

 

 

 

 

 

 

3 Работа с массивами на Delphi

 

           Массив - набор элементов одного и того же типа, объединенных общим именем.

           Одномерный массив - это фиксированное количество элементов одного и того же типа, объединенных общим именем, где каждый элемент имеет свой номер.

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

           Основные операции с массивами:

      Вывод массива

      Ввод массива

      Поиск необходимого элемента массива

      Сортировка массива и т.д.

 

           Объявление двумерный массива на Delphi задается следующим образом:

Имя: array[НижняяГраница1..ВерхняяГраница1,

НижняяГраница2..ВерхняяГраница2] of Тип

Имя – имя массива;

array – слово языка Delphi, указывающее, что объявляемый элемент данных является массивом;

НижняяГраница1, ВерхняяГраница1, НижпяяГраница2, ВерхняяГраница2 – целые константы, определяющие диапазон изменения индексов и, следовательно, число элементов массива;

Тип – тип элементов массива.

            Пример:

   

itog: array [1..12, 1..6] of integer

 

 

 

 

 

 

 

 

 

3.1 Работа с многомерными массивами

 

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

 

          Формат записи :

<имя>: array [н_индекс_1..в_индекс_1, н_индекс_2 ..в_индекс_2] of <тип>

 

Var

 

A: array[1..n,1..m] of integer;

 

Для того чтобы использовать элемент массива, надо указать имя массива и индекс элемента. Первый индекс соответствует номеру строки, второй – номеру столбца.

           Например:

 

for i:=1 to n do

for j:=1 to n do

a[i,j]:= random (100);

 

           При инициализации двумерных массивов каждая строка заключается в дополнительную пару круглых скобок:

 

const a:mas= ((2,3,1,0),

(1,9,1,3),

(3,5,7,0));

 

          Над массивами ,в частности двумерными ,можно производить множество действий и операций для решения поставленной задачи  необходимо рассмотреть :

1.      Транспонирование матрицы – зеркальное отражение ее элементов относительно главной диагонали. Сделать это можно, введя новый массив:

 

for i:= 1 to n do

for j:= 1 to n do

b[i,j]= a[j,i];

 

2.      Замена столбцов осуществляется следующим образом:

col := matr[i, j];

matr[i, j] := matr[j, i];

matr[j, i] := col;

         По мимо матрицы  и необходимых столбцов ,создается  свободная переменная (соответствующего типа) ,которая приравнивает  значение одного из столбцов матрицы.

 

3.2 Условие задачи

 

          Найти сумму положительных элементов матрицы A [n,m] сформированную случайным образом и сумму отрицательных ее элементов. Эту матрицу транспонировать и вывести на экран.

         Скриншоты форм и программные коды  приводятся в:

      Приложении  №5

      Приложение  №6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Заключение

 

Становится очевидным, что судьбу языка программирования С# определили запросы пользователей. Его направлял опыт широкого круга пользователей, работающих в разных областях программирования. За шесть лет, отделяющих нас от первого издания описания С#, число пользователей возросло в сотни раз. За эти годы были усвоены многие уроки, были предложены и подтвердили практикой свое право на существование различные приемы программирования.

Язык C# явился мощным и стремительным рывком в развитии программирования. C# в скором будущем будет  занимать господствующее положение среди языков программирования в мире. Огромное множество профессиональных программистов использует именно его при разработке разного рода проектов. Очевидно, этот язык будет сохранять свое солидное положение ещё много лет, при этом динамично развиваясь и совершенствуясь.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список использованной литературы

 

1. Сивохин А.В., Макурин Ю.Д. Проектирование Windows-приложений в визуальных объектно-ориентированных  средах. Описание лабораторных работ. – Пенза, 2010 – 48 с.

2. Visual C#. NET Step by Step, Microsoft Press, 2003.

3. Вилле К. Представляем Си Шарп. ДМК Пресс, 2001. ISBN 5-94074-039-1.

4. Зыков С.В. Современные языки программирования. Ч.I. Функциональный

подход к программированию. М.:МИФИ – 2003, 230 с.

5. Робинсон У. C# без лишних слов. ДМК Пресс, 2002. ISBN 5-94074-177-0

6. Шилдт Г. С#, учебный курс. Питер, 2003.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение №1

Форма Form1.cs

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение №2

Программный код формы Form1.cs

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace ANTproject

{

    public partial class Form1 : Form

    {

        public Form2 Form2;

        public Form1()

        {

            InitializeComponent();

        }

 

        private void работаСМассивамиToolStripMenuItem_Click(object sender, EventArgs e)

        {

            Form2 = new Form2();

            Form2.Visible = true;

        }

 

        private void вЫХОДToolStripMenuItem_Click(object sender, EventArgs e)

        {

            Application.Exit();

        }

    }  

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение №3

Форма Form2.cs

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение №4

Программный код формы Form2.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace ANTproject

{

    public partial class Form2 : Form

    {

        public const int n = 2;

        public const int m = 4;

        ArrayClass ArrayClass;

 

        public Form2()

        {

            InitializeComponent();

            dataGridView1.Rows.Add(3);

            dataGridView2.Rows.Add(10);

            dataGridView3.Rows.Add(10);

            ArrayClass = new ArrayClass(n, m);

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            ArrayClass.initarray();

            ArrayClass.displayarray(dataGridView1);

 

 

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

            ArrayClass.DrawGraphics(pictureBox1);

        }

 

        private void button4_Click(object sender, EventArgs e)

        {

            ArrayClass.clearArray();

            ArrayClass.displayarray(dataGridView1);

        }

 

        private void button3_Click(object sender, EventArgs e)

Работа с одномерными и многомерными массивами в программных средах Borland Delphi 7 и MS Visual Studio2008