Справочник от Автор24
Поделись лекцией за скидку на Автор24

Массивы

  • 👀 214 просмотров
  • 📌 145 загрузок
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Массивы» pdf
Лекция 4 Массивы При решении задач с большим количеством данных, имеющих одинаковый тип, трудно работать с отдельными переменными. Для этого и существуют массивы. Массив — это непрерывный участок памяти, содержащий последовательность одного типа и обозначается одним именем. Массив разделен на элементы. Каждый элемент — это как отдельная переменная типа. Весь же массив представляет уже другой тип данных, с которым привычные действия могут работать не так, как вы себе представляете. int mas[] = {1,2,3,4,5}; Легально: mas[0] + mas[1]; //Сумма двух элементов mas[0]++; //инкремент первого элемента Неверно: mas++; // И чего вы ожидаете от программы? В массиве нумерация элементов начинается с нуля. Помните, я говорил о том, что циклы лучше начинать с 0? Если вы послушали совета, то вас уже не смутит работа с массивами. Сама переменная mas «указывает» на адрес в памяти. Вы позже поймете, что это значит, пока мы не будем производить с ней никаких действий, считая, что и не должны этого делать. Будем считать, что mas просто имя массива. Следует выделить также понятие размера массива. Размер mas, как нетрудно догадаться, равен 5. Т.е. пять элементов содержится в нем. Задать размер массива - обязательное условие для объявления статического массива. В будущем мы узнаем о динамических массивах, но сейчас мы работаем только со статическими, значит размер нужно определить уже на этапе объявления переменной. int mas[] = {1,2,3,4,5}; //Мы инициализировали массив 5-ю элементами, значит его размер 5. int mas[5]; //Мы объявили массив размером 5 элементов int mas[5] = {0,1}; //Частичная инициализация: размер 5 элементов, строго заданы первые 2 В языке Си есть проблема, дело в том, что он не как не сохраняет размер массива, что было бы очень удобно. В действительности переменная mas не знает, что ее размер ограничен, и ничего не мешает программисту написать mas[6]. Он даже получит какой-то результат, в худшем случае программа вылетит с ошибкой Segmentation fault (иногда эта запись как-то сокращается, в зависимости от компилятора/ос). Так что вам предстоит самостоятельно следить за размером массива и выходом за границы. На самом деле, это не является проблемой, иначе бы ее просто устранили, Си просто не тратит место, чтобы хранить размер массива, и, заодно, не проверяет выход за границы диапазона, как некоторые другие языки. Чем экономит уйму времени в сложных алгоритмах, которые часто дергает элементы массива. Мы научились создавать одномерные массивы. Их в математике называют вектора (не те вектора, что в геометрии обозначаются стрелкой) Но, как вам должно быть известно из курса алгебры, перемножение векторов дает матрицу, т. е. двумерный массив. Пример матрицы: 123 456 789 Матрицы часто используются в программировании, особенно в 3D. Но бывают и более простые применения: допустим у вас есть 2D уровень в виде лабиринта, по нему должен проходить персонаж до точки выхода. Как запомнить такой уровень? Ответ — матрица. 00000000000 11111011111 11101011111 00001000000 01111011111 В данном случае нули обозначают свободный проход, единицы - стену. Объявление двумерных массивов мало чем отличается от объявления одномерных, достаточно прибавить еще одну размерность: int mas[5][5]; //Двумерный массив 5х5 элементов (всего 25) printf(“%i”, mas[0][3]); // вывести 3-тий элемент 0-ой строки Если вы хотите задать и вывести двумерный массив на экран, очевидно, что одним циклом тут не обойтись, нужно использовать два. int mas[3][3]={0}; for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) { printf("%i ",mas[i][j]); } printf("\n"); } Побитовые операции Интересно, что само число можно считать массивом из нулей и единиц. И существуют даже операции, которые выполняются над каждым битом. Они и называются побитовыми. & - побитовое «и» | - побитовое «или» ~ - побитовое «не» ^ - побитовое «исключающее или» << - сдвиг влево. >> - сдвиг вправо. Оператор & часто используется для обнуления некоторой группы разрядов. Например n = n & 0177; обнуляет в n все разряды, кроме младших семи. Число 0177 записано в восьмеричной системе, в двоичной выглядит, как 0111 1111 для 8 бит. Для 16 — еще 8 нулей добавить спереди. Таким образом, получается умножение битов одного числа на биты другого. 10010 = 0110 01002 Тогда 100 & 7 = 4 (остаются только 3 младших бита) По аналогии, оператор «или» можно применить для установки разрядов в единицу. Например: 1010 = 10102 510 = 01012 Тогда, 10 | 5 = 15 В данном случае сработало, как сложение. Но результат будет отличным от сложения, если в разряде первого числа и так уже единица. 15 | 5 = 15 // в четырех разрядах и так все единицы Оператор «не» самый простой, он просто меняет биты на противоположные: ~15 = -16 ~ 0000 1111 = 1111 0000 Оператор ^ (побитовое исключающее ИЛИ) в каждом разряде установит 1, если соответствующие разряды операндов имеют различные значения, и 0, когда они совпадают. 1111 ^ 1111 = 0000 15 ^ 15 = 0 Сдвиг влево << сдвигает разряды влево на Х позиций, правые разряды после этого заполняются нулями. Пример: 0000 0001 << 1 = 0000 0010 //единица сдвинулась на 1 разряд влево Это эквивалентно умножению на 2. Сдвиг вправо >> сдвигает разряды вправо на Х позиций: 0111 1111 >> 1 = 0011 1111 Это эквивалентно делению на 2. Лабораторная работа №4 Задание 0. Дан массив случайных чисел. Вывести все положительные числа, затем все отрицательные числа. Дан массив случайных чисел, посчитать в одном цикле сумму положительных и сумму отрицательных чисел (по модулю) и вывести на экран. Задание 1. Осуществить удаление элемента из массива. Пример, дан массив [1,2,3,4,5,6,7,8,9,10], нужно удалить 5-ый элемент. Выходные данные: [1,2,3,4,6,7,8,9,10,0] Программа должна удалять любое количество элементов из массива. Номера элементов задаются с клавиатуры. Нуль появляется при удалении элемента в конце массива. Дополнительное задание: построить график функции на http://yotx.ru/ Расчетные данные для графика должна вычислить ваша программа. Задание 2. Создать игру лабиринт, сделать управление на клавиатуре. Нулем можете обозначить свободный проход, единицей стены, тройкой точку входа, четверкой точку выхода и пятеркой — самого игрока.
«Массивы» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ

Тебе могут подойти лекции

Смотреть все 493 лекции
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot