Реферат по предмету: «Основы информатики и программирования»

Вид материалаРеферат

Содержание


Этапы создания программ 12
Операторы цикла 19
Типы языков программирования
Процедурное программирование
Функциональное программирование
Логическое программирование
Объектно-ориентированное программирование
Этапы создания программ Этап 1: определение целей программы
Этап 2: проектирование программы
Этап 3: написание кода
Этап 4: компиляция
Этап 5: тестирование и отладка программы
Управляющие структуры
Оператор разветвления (if)
Вложенные (else if) и (if else)
Оператор выбора (switch)
SWITCH (выражение)
ОПЕРАТОРЫ ЦИКЛА Оператор while
Оператор do ... while
Оператор for
...
Полное содержание
Подобный материал:


Министерство образования Республики Беларусь

Белорусский государственный университет


Управляющие структуры языков программирования


Реферат по предмету:

«Основы информатики и программирования»


Выполнил студент 1 курса

экономического факультета

группы «Международный менеджмент»

Синьков Павел Александрович


Проверил

___________________________

___________________________


Минск 2007

Содержание


Содержание 3

Введение 6

Типы языков программирования 8

Процедурное программирование 8

Функциональное программирование 9

Логическое программирование 10

Объектно-ориентированное программирование 11

Этапы создания программ 12

Этап 1: определение целей программы 12

Этап 2: проектирование программы 12

Этап 3: написание кода 12

Этап 4: компиляция 13

Этап 5: тестирование и отладка программы 14

Управляющие структуры 16

Оператор разветвления (if) 16

Вложенные (else if) и (if else) 17

Оператор выбора (switch) 18

ОПЕРАТОРЫ ЦИКЛА 19

Оператор while 19

Оператор do ... while 20

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

Оператор for 20

Операторы break и continue 21

Оператор goto 22

МАССИВЫ 24

Одномерные массивы 24

Примеры программ с использованием массивов 26

Многомерные массивы 27

Примеры программ с использование матриц 29

Заключение 31

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

Предметный указатель 35



Введение


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

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

За прошедшие 15 лет в методологии написания программ для компьютеров произошла радикальная перемена. Она состоит в том, что разработчики перешли от языков программирования системного уровня, таких как С и С++, к языкам описания сценариев, примерами которых могут служить Purl Tell. Хотя в эту перемену оказалось вовлечено огромное количество людей, лишь немногие из них осознают, что в действительности происходит, и еще меньше найдется таких, кто бы смог объяснить причины.

Эти языки создавались для различных целей, что обусловило ряд фундаментальных различий между ним. Системные разрабатывались для построения структур данных и алгоритмов “ с нуля”, начиная от таких примитивных элементов, как слово памяти компьютера. В отличие от этого, языки описания сценариев создавались для связывания готовых программ. Их применение подразумевает наличие достаточного ассортимента мощных компонентов, которые требуется только объединить друг с другом. Языки системного уровня используют строгий контроль типов, что помогает разработчикам приложении справляться со сложными задачами; языки же описания сценариев не используют понятие типа, что упрощает установление связей между компонентами и ускоряет разработку прикладных систем.

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


Типы языков программирования


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

• процедурный,

• функциональный,

• логический,

• объектно-ориентированный.

Процедурное программирование


Процедурное (императивное) программирование является отражением архитектуры традиционных ЭВМ, которая была предложена фон Нейманом в 40-х годах.

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

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

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

К процедурным языкам относятся: язык Ассемблера, С, Basic, Pascal.

Функциональное программирование


Первым таким языком был LISP. Роль основной конструкции в функциональных (аппликативных) языках играет выражение. К выражениям относятся скалярные константы, структурированные объекты, функции, тела функций и вызовы функций.

Аппликативный язык программирования включает следующие элементы:

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

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

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

Логическое программирование


Новую область — логическое, или реляционное программирование, — открыло появление языка PROLOG. Этот язык был создан французским ученым А. Кольмероэ в 1973 году. В настоящее время известны и другие языки, однако наиболее развитым и распространенным языком логического программирования является именно Пролог. Языки логического программирования, в особенности Пролог, широко используются в системах искусственного интеллекта.

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

Объектно-ориентированное программирование


Прототипом объектно-ориентированного программирования послужил ряд средств, входящих в состав языка SIMULA-67. Но в самостоятельный стиль оно оформилось с появлением языка SMALLTALK, разработанного А. Кеем в 1972 году и первоначально предназначенного для реализации функций машинной графики.

Основная цель ООП, как и большинства других подходов к программированию – повышение эффективности разработки программ. Идеи ООП оказались плодотворными и нашли применение не только в языках программирования, но и в других областях Computer Science, например, в области разработки операционных систем.

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

Этапы создания программ

Этап 1: определение целей программы


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

Этап 2: проектирование программы


После того, как станет ясна концептуальная картина того, что ваша программа должна сделать, вы должны решить, как она должна это сделать. Каким должен быть пользовательский интерфейс? Сколько времени потребуется для завершения раз работки программы

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

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

Этап 3: написание кода


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


#include

INT MAIN (VOID)

{

Int dogs;

printf ("Сколько у вас собак?\n");

scanf("%d", &собак) ;

printf ("Следовательно, у вас %d собак(а, и) !\n", dogs);

return 0;

{


Пример 2.1.


К числу работ, которые вы должны выполнить на этом этапе, относится документирование ваших действий.

Этап 4: компиляция


Следующим этапом разработки является компиляция исходного кода. И в этом случае детали зависят от среды программирования. Компилятор представляет собой программу, в обязанности которой входит преобразование исходного кода в исполняемый код. Исполняемый код — это собственный язык машины. Этот язык из подробных команд, представленных в числовом коде. Разные компьютеры имеют разные машинные языки, а компилятор языка программирования транслирует код языка в конкретный машинный язык. Компиляторы языка программирования вставляют также коды из библиотек программ в окончательный вариант программы; упомянутые библиотеки содержат комплект стандартных программ, дабы вы, при необходимости, могли ими воспользоваться. В конечном итоге получается исполняемый файл, который понимает компьютер, и который можно запускать на выполнение.

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

Этап 5: тестирование и отладка программы


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


Управляющие структуры


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

Оператор разветвления (if)


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




if <логическое_выражение> then


-- последовательность инструкций


end if;


if <логическое_выражение> then


-- последовательность инструкций 1


else


-- другая последовательность инструкций 2


end if;



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

Если результат - истина (любое отличное от нуля значение), то выполняется оператор 1.

Если результат анализа условия - ложь (равен 0), то выполняется оператор2. Если слово else отсутствует, то оператор1 пропускается, а управление передается на следующий после if оператор.

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

Если условие задано целым числом или переменной, то условие, не равное 0, всегда истинно, а равное 0, всегда ложно.

Вложенные (else if) и (if else)


При помощи if и else можно составлять else - if конструкции, которые могут осуществляют проверку нескольких выражений.

Свойства конструкции:

- условия проверяются в том порядке, в котором они перечислены в программе;

- если одно из условий истинно, то выполняется оператор соответствующий этому условию, а проверка оставшихся условий не производится;

- если ни одно из проверенных условий не дало истинного результата, то выполняются операторы, относящиеся к последнему else;

- последний else является необязательным, следовательно, он

и относящийся к нему оператор может отсутствовать. Для сокращения инструкций вида "else if ... ", и в целях улучшения читабельности, введена конструкция else if, которая может быть использована столько раз, сколько это будет необходимо.




if <логическое_выражение> then


-- последовательность инструкций 1


elseif <логическое_выражение> then


-- последовательность инструкций 2


elseif <логическое_выражение> then


-- последовательность инструкций 3


else


-- последовательность инструкций


end if;


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

Оператор выбора (switch)


В программировании часто встречается задача выбора одного варианта решения задачи из многих возможных. Это можно сделать с помощью вложенных if…else. Однако более удобный способ - использование оператора SWITCH, общий формат которого следующий:

SWITCH (выражение)

{

case const1: орегаtог1; bгеак;

cаsе count2: орегаtог2; bгеак;

case count3: operator3; bгеак;

default: operator4; bгеак;

}


Свойства:

- выражение должно иметь целочисленный тип.

- оператор, указанный после case выполняется, если значение выражения равно соответствующей константе. Если ни с одной из констант совпадений нет,

то управление передается оператору, стоящему после default, если, конечно, defoult есть, так как его существование не обязательно.

- константы сравниваются с выражением в той последовательности, в какой они перечислены в программе;

- символьные константы в switch автоматически преобразуются в целочисленные;

- break передает управление за пределы оператора switch;

- если после какого-либо из операторов отсутствует break, то константа в следующем case считается подходящей условию и соответствующие операторы выполняются;


- не может быть двух констант в одном операторе switch, имеющих одинаковое значение;

ОПЕРАТОРЫ ЦИКЛА

Оператор while


Оператор while организует повторное выполнение одного оператора или нескольких операторов, заключенных в операторные (фигурные) скобки, до тех пор, пока логическое выражение <условие> не примет значение ЛОЖЬ (0). Оператор while называют оператором цикла с предусловием, так как истинность <условие> проверяется перед входом в цикл. Следовательно, возможна ситуация, когда тело цикла не выполнится ни разу,, если на запрос ввести 0

Оператор do ... while

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


do <оператор> while (<условие>);

или

do {<оператор_1>; <оператор_2>;…<оператор_n>;

} while(<условие>);


Здесь сначала выполняется <оператор> или группа операторов, а затем проверяется значение выражения <условие>. Повторение тела цикла (<оператор>) происходит до тех пор, пока <условие>не примет значение ложь.

Оператор for


При организации цикла, когда его тело должно быть выполнено фиксированное число раз, осуществляются три операции: инициализация счетчика, сравнение его величины с некоторым граничным значением и изменение значения счетчика при каждом прохождении тела цикла. Условное выражение, имеющееся в цикле while,берет на себя заботу о сравнении, а приращение значения счетчика осуществляется с помощью операции увеличения. Так же, как это делалось раньше, можно объединить эти два действия в одно выражение, используя запись i++<=n. Но инициализация счетчика осуществляется вне цикла. Сейчас мы рас смотрим управляющий оператор, использование которого позволяет избежать этих проблем. В операторе for используются три выражения, управляющие работой цикла. Они разделены символами "точка с запятой". Инициализирующее выражение вычисляется только один раз до начала выполнения какого-нибудь из операторов цикла. Рассмотрим детально работу этого оператора.

1. Выполняется поле <инициализация>. Оно служит для присваивания начальных значений переменным, используемым в цикле.

2. Проверяется значение <условие>, если ЛОЖЬ, то завершается выполнение цикла.

3. Выполняется тело цикла (<оператор> или группа операторов).

4. Выполняется поле <изменение параметров>. Служит для изменения значений переменных, используемых в цикле, и значений переменных, управляющих циклом.

5. Далее возвращаемся к пункту 2.

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

Операторы break и continue


Оператор break, стоящий в теле цикла, немедленно прекращает выполнение цикла и передает управление на уровень выше, а точнее на следующий оператор, стоящий после данного цикла, содержащего break. Поэтому для прекращения выполнения многоуровневого цикла по «инициативе» на самом глубоком уровне приходится выполнять не один, а несколько операторов break.

Часто при написании программ необходимо при каком-то условии немедленно завершить данную итерацию и перейти на новую. Для этого служит оператор continue. Оператор continue вызывает пропуск той части цикла, которая находится после записи этого оператора. Необходимо обратите внимание на особенность выполнения оператора continue в циклах for или while. При использовании while часть цикла, располагающаяся, после continue не выполняется, а управление сразу передается на проверку условия в операторе while, что может привести к зацикливанию.

Оператор goto


Оператор goto, одно из важнейших средств ранних версий языков программирования BASIC, FORTRAN, и С. Керниган и Ритчи отзываются об операторе goto как о потенциальном источнике ошибок и советуют использовать его как можно реже, а еще лучше вообще отказаться от его применения.

Оператор goto состоит из двух частей: ключевого слова goto и имени метки. Именование меток производится по тем же правилам, которые соблюдаются именовании переменных, как в показанном ниже примере:

goto part2;

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

part2: printf("Уточненный анализ :\n");

Использование операторов goto в ситуации, когда в операторе if требуется выполнить сразу несколько операторов:


if (size > 12)

goto a;

goto b;

a: cost=cost*1.05;

flag=2;

b: bill=coct*flag


В ранних версиях языков программирования BASIC и FORTRAN к оператору if относился только один оператор, непосредственно следующий за условием. Операторы break и continue, по сути, представляют собой специализированные формы оператора goto. Преимущество их использования заключается в том, что их названия говорят, для чего они предназначены, и в том, что можно не опасаться, что метки будут расставлены не там, где надо, поскольку они вообще не имеют дела с метками.

МАССИВЫ

Одномерные массивы


Массив - это группа расположенных друг за другом в памяти элементов одного типа и имеющих одно общее имя. Определение массива должно включать его имя и содержать информацию о типе и количестве составных элементов. Доступ к элементам массива осуществляется по имени массива и индексу элемента. Индекс - это порядковый номер элемента в массиве; индекс первого элемента всегда 0, далее следуют целые положительные числа (1, 2 и т. д.).

Массивы объявляются так же, как и обычные переменные, но после имени следуют квадратные скобки, в которых может быть заключена константа или константное выражение, которое задает количество элементов массива:

float аггау12]; // массив аггау, содержащий 12 элементов

// типа float

int buffer[10*5]; // массив buffer, содержащий 50 элементов

// типа int

int п=15; int bad[n]; /* ошибочное объявление, так как переменная не может задавать размер массива */

Константное выражение, определяющее размер массива, не может принимать нулевое значение.

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

Char array[5]={'А', 'Е', 'Г, 'О', 'U'};

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

int array[15]={3, 5, 10, 16};

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

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

int array[]={34, 78, 3, 98}; // массив из четырех элементов

Чтобы получить доступ к определенному элементу массива, нужно указать его порядковый номер в массиве, заключенный в квадратные скобки. Самый первый элемент массива имеет порядковый номер 0. В качестве индекса разрешается использовать любое выражение целого типа, а также любое выражение, значение которого можно преобразовать в целый тип. В остальном вы работаете с массивом, как с обычной переменной. Следующий оператор присваивает значение 125 четвертому элементу массива аггау:

array[3]=125;

Так же можно присвоить значение некоторого элемента массива переменной или другому элементу массива, например:

tmp = array[3];

array[0]=array[2];

Здесь значение переменной tmp не определено. Для упрощения контроля границ индекса массива удобно использовать оператор sizeof, который применительно к массивам возвращает количество байт памяти, зарезервированных для массива:

int array[1б];

int quant;

quant = sizeof(array)/sizeof(int); // quant = = 16

Вы не ограничены использованием в индексах массивов только численных выражений. Рассмотрим такой пример.

index=2;

array[index]=5;

Здесь второй оператор ссылается на третий элемент массива. Можно сделать даже так:

array[3]=4;

buffer[array[3]]=7;

Оператор во второй строке присваивает значение пятому элементу массива.

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

Примеры программ с использованием массивов


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

include

void main()

{

signed int I;

int array[10];

cout<<”Введите 10 целых чисел:”;

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

cin>>array[i];

for(i=9;i>=0;i--)

cout<

cout<<”n”

}

Пример в языке С. Ввести массив чисел и вычислить сумму элементов массива.

include

void main()

{

int y[100],i,n,s=0;

cout<<”n=?”;

cin>>n;

for(i=0;i

{

cin>>[i];

s+=i[y]; /* можно и так: s+=y[i] */

}

cont<<”summa=”<

}

Многомерные массивы


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

int array[10][30];

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

int mas[0][7]; // ошибка

int mas[l][7]; // правильно

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

int array[2][2][2]={23, 54, 16, 43, 82, 12, 9, 75}; Проинициализированный массив будет выглядеть так:


[0][0][0]= =23;

[0][0][1]= =54;

[0][1][0]= =16;

……..

[1][1][0]= =9;

[1][1][1]= =75;

Для наглядности при инициализации двухмерного массива список начальных значений следует оформлять в виде таблицы: int array[3][3]={ 34, 23, 67, 38, 56, 73, 37,94,28};

Многомерные массивы могут инициализироваться и без указания одной (самой левой) из размерностей массива. В этом случае количество элементов компилятор определяет по количеству членов в списке инициализации. Например, для массива array будет получен тот же, что и в предыдущем примере результат:

int array[][3]={ 34, 23, 67, 38, 56, 73, 37,94,28};

Если необходимо проинициализировать не все элементы строки, а только несколько первых элементов, то в списке инициализации можно использовать фигурные скобки, охватывающие значения для этой строки. Например, если необходимо для массива array задать начальные значения для элементов array[0][0], array[l][0], array[l][l], array[2][0], array[2][l], array[2][2], то это можно сделать следующим образом:

int array[][3]={{0}, {Ю,П}, {21,21,22}};

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

tmp = array[l][2];

Здесь переменной tmp присваивается значение третьего элемента второй строки.

Примеры программ с использование матриц


Пример на языке С. Транспонировать матрицу (на том же месте), используя оператор do ... while.

#include

void main()

{

int mat[20][20]; // матрица целых чисел, максимум 20*20 ]

int size, i, j, temp;

do{

coun<<"\n\nВведите размерность матрицы: ";

cin>>size;

} while( size > 20 );

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

{

coun<<"\пВведите строку номер : "«i+1;

for(j=0; j

cin>>mat[i][j];

}

// само транспонирование i=1;

do{

j=0;

do{

temp = mat[i][j]; mat[i][j] = mat[j][i]; mat[j++][i ] = temp;

} while (j < i);

} while ( ++i < size );

// вывод результата

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

{ cout<<"\n\n";

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

cout<< mat[i][j];

}

}


Заключение


В настоящее время разработано большое количество языков программирования. Их условно можно разделить па следующие группы: машинно-ориентированные (Assembler): процедурно-ориентированные (Соbо1, Раsса1, Fortran, С); объектно-ориентированные (С#, C++, Delphi, Java); языки логических программ: языки решения интеллектуальных задач: языки описания сценариев. Assembler используется при разработке системных программ, так как позволяет эффективно учитывать специфику компьютера (драйвера, программы защиты и т. д.). Одной инструкции языка ассемблера в большинстве случаев соответствует одна машинная команда. Раsса1, С, Fortran, PLM языки высокого уровня. Один оператор алгоритмического языка преобразуется в целую совокупность машинных команд. Си используется при разработке системных программ. Для решения экономических задач используется Соbо1. Для решения интеллектуальных задач - Lisp, Ргоlоg, Smalltalk. Языки описания сценариев (Регl, Rехх, Visual Basic) и языки оболочек UNIX, предполагают стиль программирования, отличный от характерного для языков системного уровня. Они предназначаются не для написания приложений с нуля, а для комбинирования компонентов, набор которых создается заранее при помощи других языков.

Оператор присваивания должен быть только там, где есть переменные, однако все языки содержат этот оператор или конструкцию, выполняющую аналогичные функции. If then else условный оператор в том или ином виде необходим в каждом языке программирования. Elsef. Для удобства записи нескольких равнозначных вариантов необходимо, чтобы условный оператор позволял использовать несколько elsif. Цикл с предусловием while выполняется, пока условие истинно. Цикл с параметром for выполняется, пока параметр не превысит конечное значение. Массивов в большинстве новых языков как самостоятельной конструкции нет, вместо них используются списки. Однако в нефункциональных языках можно получить доступ к элементу списка по его номеру, например «k[5]». В этом случае языку начислялся балл за массивы. Массивы из элементов разного типа в традиционных языках называются структурами (С) или записями (Паскаль). В новых языках роль структур, как правило, выполняют классы или списки. В традиционных языках обычно имеется возможность создавать структуры с вариантной частью (когда общая память выделяется под разные наборы полей).. Булевский (логический) тип присутствует во всех языках программирования. В данном случае оценивалось наличие специальных констант «true» и «false». Использование вместо них целочисленных значений 0 и 1 часто приводит к трудно обнаруживаемым ошибкам (в частности, к неверному преобразованию типов в условных выражениях); Поскольку программисты издавна используют отступ (пустые пробелы в начале строки) для улучшения читабельности программ, было бы глупо не воспользоваться этим для определения конца блочного оператора. Однако в обзоре такой механизм имеют только два языка из шести.


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




  1. Демичев Е.М. Основы программирования, 2005
  2. Стивен Прата. Язык программирования С, 2006
  3. Мильвидский А. М. Введение в Java., 1998
  4. М.Плискин Эволюция языков программирования, 2002
  5. Мясников В.А., Майоров С.А. ЭВМ для всех., 1985



Предметный указатель


J

Java 33

б

библиотека 14

в

вариант 12, 14, 16, 31

выражение 9, 16, 17, 18, 19, 20, 24, 25, 27

к

константа 9, 19, 24

м

массив 24, 25, 26, 27, 28, 32

матрица 27, 29

о

оператор 8, 9, 16, 17, 18, 19, 20, 21, 22, 25, 26, 29, 31

п

пример 13, 24, 25, 26, 27, 28, 29

программа 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 22, 26, 31

с

стиль 8, 11, 31

ф

функция 9, 11, 17, 31

э

элемент 9, 10, 24, 25, 26, 27, 28, 31

я

язык 1, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 22, 31