
- •Дополнительный код для представления целых чисел со знаком Числа без знака
- •Числа со знаком
- •Свойства дополнительного кода
- •Ещё два свойства дополнительного кода
- •Перенос и переполнение
- •Почему "дополнительный"
- •Знак числа в дополнительном коде
- •Число двойной точности
- •Определение
- •[Править]Аксиомы
- •[Править]Логические операции
- •[Править]Свойства логических операций
- •Имена (идентификаторы)
- •Объявления переменных
- •Операции присваивания
- •28) Разветвляющийся вычислительный процесс (if else)
- •Блок-схема алгоритма поиска корня уравнения методом половинного деления (дихотомии)
- •34,35) Операторы цикла
- •Цикл с предусловием while
- •Цикл с постусловием repeat
- •Цикл с параметром for
- •Рекомендации по использованию циклов
- •Процедуры передачи управления
- •36) " Массивы в языке с. "
- •2. Поиск минимального и максимального элементов в массиве
- •40) Индексирование
36) " Массивы в языке с. "
1. Цель урока: Сегодня Вы познакомитесь с новым разделом в языке С. Это массивы. Очень интересный раздел. Ваши возможности в языке С намного расширятся в связи с изучением этого раздела. Вы научитесь вводить строки, исправлять их, решать многие сложные задачи и алгоритмы, и вообще это будет более живая работа, чем было до сих пор. Цель нашего очередного урока - разобраться с понятием массива и решить первую задачу на эту тему. Хотя должен Вам сказать, что по идее полагалось бы вначале досканально изучить простые и вложенные циклы прежде чем изучать массивы. Но я думаю, что лучше раньше начать изучение массивов. Тогда ученикам станет в дальнейшем более ясно назначение и необходимость самих циклов и область их применения в информатике. Это мое личное мнение. Я считаю допустимым как можно раньше вводить в школе и использовать это понятие на уроках по программированию, особенно для будущих программистов. 2. Понятие массива. Язык С имеет базовые или встроенные типы данных, которые позволяют строить другие типы и структуры данных. Это, как известно: char (символьные), int (целые), float (с плавающей точкой), double (с плавающей точкой двойной длины), void (пустой, не имеющий значения). На основе этих пяти типов строятся дальнейшие типы данных. Массив - это одна из известных и наиболее простых структур данных. Под массивом в языке С понимают набор данных одного и того же типа, собранных под одним именем. Массив определяется именем массива и порядковым номером каждого своего элемента. Обычно порядковый номер элемента называют индексом. Так будет более кратко. Хотя не значит, что более понятно. Надо запомнить, что индекс (то есть поряковый номер элемента: видите, как длинно?) в языке С всегда целое число. 3. Объявление массива. В каждой программе, использующей массив, он обязательно объявляется. Делается это следующим образом. Пусть массив имеет размерность N. Что это такое? N - это максимальное количество элементов в массиве. Иначе - размерность массива. Итак, основная форма объявления массива следующая: тип<имя массива>[размер1][размер2]...[размер N]; Чаще всего используются одномерные массивы. Их форма описания такова: тип<имя массива>[размер1]; Поясним, что такое тип. Тип - это базовый, то есть основной тип элементов массива. Размер - это, как выше было сказано, количество элементов одномерного массива. Все дело в том, что в двухмерном массиве размер определяется с помощью умножения. При описании двумерного массива его объявление будет таково: тип<имя массива>[размер1][размер2]; Это будет массив массива. То есть массив размера [размер2], элементами которого являются одномерные массивы: <имя массива>[размер1]. Размер массива в языке С задается константой или контантным выражением. Нельзя задавать массив переменного размера. Для этого существует отдельный механизм, называемый динамическим выделением памяти. Вопрос о динамическом выделении памяти и о переменных массивах будет изучаться нами попозже. Но первоначально уделим больше внимания одномерным массивам. 4. Важные сведения о массивах. В языке С нумерация элементов начинается с нуля. То есть миниальный неотрицательный индекс элемента есть число - ноль. Таким образом, всегда первый элемет массива - это элемент с нулевым номером. Предположим, что Вы объявили массив int a[100]; Это означает, что массив содержит следующие элементы: a[0], a[1], a[2],..., и так далее, a[99]. Легко подсчитать, сколько байт памти потребуется под одномерный массив. Количество байт = <размер базового типа> * <количество элементов в массиве> Следует знать, что в языке С под массив всегда выделяется непрерывное место в оперативной памяти. Выход массива за cвои опеределенные командой пределы в С не проверяется. Это следует помнить. То есть, например, если массив имеет 100 элементов и описан как a[100], то при обращении к элементу a[200] язык С не дает программе средств для контроля того факта, что имеется выхода за пределы памяти, отведенной под массив. Программа на языке С не выдаст сообщение об ошибке. Такие возможности разработчиками не предусмотрены. Возможно потому, что в те времена особенно дефицитным ресурсом была память и ее экономили на сам транслятор и потому не уделяли такого внимания анализу ошибок программиста. Отметим, что можно определять массивы любого ранее рассмотренного типа: unsighed arr[40], long double al[1000], char ch[80].
37,38,39) Ввод/вывод элементов массива
Пусть в программе описана переменная-массив:
VAR V : Array [1..100] of Integer;
Значения элементов массива необходимо ввести с клавиатуры. Поскольку с элементами массива можно обращаться как с обычными переменными, мы вправе написать следующие строчки:
Write(‘Введите V[1]: ’); ReadLn(V[1]); Write(‘Введите V[2]: ’); ReadLn(V[2]); . . . . . . . . . Write(‘Введите V[100]: ’); ReadLn(V[100]);
Однако писать сто почти одинаковых строчек занятие весьма утомительное и главное не разумное. Отличие этих строк состоит лишь в индексе элемента массива. Здесь на помощь приходит оператор FOR, так как именно он позволяет самым эффективным образом организовать циклический процесс с заданным числом повторений. Кроме этого параметр цикла можно использовать в качестве индекса массива V. Итак, ввод элементов массива V можно оформить следующим образом:
FOR i:=1 TO 100 DO begin Write(‘Введите V[‘,i,’]: ’); ReadLn(V[i]) end;
Если необходимо вывести все элементы массива на экран (в строчку), то это также можно сделать с помощью оператора FOR:
FOR i:=1 TO 100 DO Write( V[i]:5 );
Примечание: Запись V[i]:5 в процедуре Write означает, что при выводе значения переменной V[i] под число будет отведено 5 знакомест (подробнее о форматах вывода см. здесь).
Ввод и вывод элементов двумерного массива. При вводе и выводе элементов двумерного массива (матрицы) тоже удобно использовать оператор FOR. Только теперь необходимо уже два оператора FOR, так как у матрицы каждый элемент имеет два индекса – номер строки и номер столбца. Ниже приведен пример программы, иллюстрирующей ввод элементов массива размером 5х3 с клавиатуры с последующим выводом элементов массива на экран в виде матрицы.
PROGRAM Array_Input_Output; VAR M : array [1..5, 1..3] of Integer; i, j : Integer; BEGIN Writeln(‘Ввод элементов массива.’); FOR i:=1 TO 5 DO FOR j:=1 TO 3 DO begin Write(‘Введите элемент M[‘, i, ’,’, j, ’]: ’); Readln(M[i,j]) end; Writeln(‘Вывод массива в виде матрицы.’); FOR i:=1 TO 5 DO begin FOR j:=1 TO 3 DO Write( M[i,j]:5 ); Writeln end; END.