• Безымянный 222304

  • Яма плюс - справочьник - кусок 13.

  • // куски справочьника ...

    // Масивы однородных элементов
    // ----------------- 11

    Важные термины.. Адрес, Указатель, Квиток.

    У каждой созданой переменки есть Адрес в оперативной памяти.
    Это некое цэлое число, которое можно хранить как обычное число.
    Но переменки, которые изначяльно должны хранить Адреса, нужно называть Указателями.
    Указатель на "особые адреса" нужно называть Квиток (в смысле талончик или квитанцыя).

    "Адрес масива" - название консервированого указателя на масив.
    "Квиток масива" - название хитрого указателя на динамический масив.
    // Есть ключевое слово "квиток".

    Ключевое слово "адр" является аналогом текстового знака "собака" (эмэйл)
    и означяет моно-оператор. Если "адр" перед именем готовой переменки, то мы хотим
    прочитать адрес этой переменки. Если "адр" перед названием типажа, то мы хотим создать
    переменку, которая хранит чужые адреса.

    Создать масив (множэство) одинаковых предметов - это один из привычных приёмов.
    Три тарелки, пять бутылок - это могут быть два масива.
    Но самый яркий художэственый образ масива - это жэлезно-дорожный состав вагонов,
    потому-что вагоны плотно сцэплены.
    (в жызни состав можэт быть из разных вагонов, а у нас все вагоны масива одинаковые).
    // Однородный состав. Одинаковые вагоны некого типажа.

    "Вагон масива" это термин, чтобы не путать с "ячейкой памяти типажа"

    "Статик масив" (статичьный) - таким нельзя поменять количество "вагонов".
    А такжэ эти вагоны никогда не двигаются по оперативной памяти.

    // как записывать создание статик-масива..
    чи31 жыли< 25> !! название_масива ={ #всем чи31(0) }; // ={ 0 };

    (типаж элемента)(жыли в количестве)(создать их)(на имя масива)
    (получить изначальное наполнение - все вагоны "законструировать" нолями).

    //Тип размножыли. Создали на имя. Получили им изначальное наполнение.
    Ключевое слово "всем" используется только для "изначального наполнения" и
    более уместно, когда элементом масива является "сложный типаж".

    Теперь "название_масива" и есть масив. (такие названия чють иначе рисуются).
    Такжэ можно говорить, что "название_масива" это "Адрес масива".

    Масив это не тип даных. Но зато имя масива воспринимается как "адрес первого вагона".
    Поэтому "адрес такого-то типажа" можно считать "типажом самого масива".
    Пример вышэ это "Адрес чи31" и подразумеваемые 25 вагонов (с этого адреса).

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

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

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

    // динамическая память "на квиток"
    квиток чи31 !! кви31; // Авто-пом заполняет квитки нолями (при создании).
    чи31 взяли< 25> !! --- кви31;
    // Типаж взяли в таком-то количестве, создали и привязали на имя свободного квитка.

    Оператор (три минуса) "привязать на имя" всегда закрывает выражэние.
    Нельзя задать "изначальное наполнение".
    Теперь "кви31" это "Квиток масива" и на нём ответственость за довереный масив.
    // чи31 взяли< 15> !! --- кви31; // ошыбка - "кви31" ужэ не свободный.

    изменили( кви31, 21); //ключевое слово // Изменили квиток - теперь там 21 вагон.
    Старые вагоны сохранят своё наполнение (но место базирования могут сменить).
    Никакой оптимальности не гарантируется, но переменка "кви31" точьно будет
    содержать правильный адрес.
    Если до этого какие-то другие переменки получяли значение из "кви31", то
    они как-бы хранят устаревшый адрес, но это ужэ проблемы програмиста.

    вернули( кви31); //ключевое слово // Память освободили и квиток авто-получил ноль.
    вернули кви31; // идэнтичьно верхней строке.
    Такое выражэние вызываем, если явно масив нам большэ не нужэн.
    Если мы создали динамический масив и не "вернули" его, то память этого масива
    обязательно освободится лиш при закрытии нашэй програмы.
    // Однако, эти автоматические уловки не помогут, если наша програма должна работать
    // несколько суток без пере-запусков. Рекомендуется не забывать использовать "вернули".

    Есть ешё ключевое слово "передали", чтобы в неких процэдурах создавать дин-масивы и
    передавать "контроль" другому квитку (выдать масив из процэдуры).
    // Локальный квиток после передачи теряет контроль(ответственость) над масивом.

    Любой обычьный указатель можэт получять значение "квитка масива" (адрес 1-го вагона),
    но контроль над этим масивом всегда будет лиш у одного "квитка масива".

    // Важный пример с буквами (и что такое "стринг").
    чи8 жыли<>!! буквы = "трампампам";

    Типаж "чи8" можэт хранить маленькие числа под которыми подразумеваются буквы и
    другие текстовые знаки. Пустые угловые скобки - это указывает авто-помошнику на
    явную зависимость "количества" от "изначяльного наполнения".
    (если здесь изначяльного нет, то будет ошыбка).
    Авто-пом сам насчитает 10 букв и выделит 11 байтов, потому-что "изначальное наполнение"
    представлено в виде текста (тоесть, знаки ради букв, а не ради чисел).
    // Масив "буквы" продублировал в себя литерал-текст "трампампам" + "завершаюший ноль".

    Двойные кавычки заключяют в себе "текст", который многие програмисты называют "стринг".
    Стринг - это полоска, но для програм это "полоска текстовых знаков", с добавленым
    числом "ноль", которое и означяет "конец полоски".
    Пока рекомендацыи по терминам таковы..
    1. Знаки в двойных кавычках (или считываемая литература) пусть называются "текст".
    2. Масивы аля "буквы" лучшэ называть "стринг" (у них полу-невидимый нолик в концэ).
    // Можно настроить визуализацыю, чтобы в редакторе рисовался этот нолик в конце стрингов.
    3. Спец механизмы для хранения текстов можно называть "фраза" (без ноля в концэ).

    // Идэнтично напечятаные "тексты", всё-равно считаются самостоятельными и являются
    // отдельными масивами.

    "Стринг" не является явным типажом, но такая версия масива очень популярна.
    Поэтому есть група процэдур, которые обрабатывают "полоски букв с ноликом в концэ".

    Далее разные отрывочьные примеры для ознакомительного интереса.
    // Весь этот справочьник для ознакомления, а для практики лучшэ осваивать
    // примеры кода, которые должны входить в пакет редактора "Маргинал - Яма плюс".

    // Двумерный масив..
    чи31 жыли< клв * клв2 > !! ст_масив;
    ст_масив.1.1 = 45; // первый этаж, первый вагон // доступ через Номер
    ст_масив.1.2 = 48;
    ст_масив[1][0] = 7; // второй этаж, первый вагон // доступ через "Отступ от первого".
    ст_масив[1][1] = 9; // Отступ такжэ называют "индэкс" или "офсет".
    // Пока отрицательные индэксы и номера запрешены (для тех кто знает Пёрл)

    // Тримерный масив..
    чи31 жыли< 2 * 3 * 4> !! мас ={
    {1,2,3,4} {1,2,3,4} {1,2,3,4} // 1.1.x4 // 1.2.x4 // 1.3.x4
    {1,2,3,4, 1,2,3,4, 1,2,3,4} }; // 2.1.x4 // 2.2.x4 // 2.3.x4
    //нечьто первое из трёх блоков по четыре.
    //второе из трёх блоков по четыре // и не важно что они все в один блок напечатаны.

    // Масив стрингов..
    чи8 жыли<*> !! Имена = {"Коля", "Виктор", "Оля" }; // жыли< 3 * (6 + 1) >
    // Вторая размерность зависит от самого большого стринга (учитывая его ноль).

    // Авто-помошник и масивы..
    Прогер пишэт имя масива и ставит точку - если после идёт число, то
    всё спокойно, а если Пробел, то авто-пом сразу ставит круглые скобки
    и пробел внутри скобок и каретку перед скобкой закрытия.
    Так получяется, что любые внешние переменки-имена удобно записывать.
    А уж прогер пусть сам решает "имена офсетов с квад-скобками рисовать"
    или пользоваться "именами вагонов, которые идут с единицы".
    мас.1.(ш).2 = икс;
    мас.1.1.(ш) = икс;

    // Масив констант (масив постояных значений)
    чи8 жыли<> !! стринг1 ко "консерва";
    чи31 жыли<5> !! мас5 ко {1, 2, 3, 4, 5 /* блок изначяльного наполнения */};

    мас5.1 ко 1; // ошыбка.
    // Ячейку масива можно консервировать только в блоке "изначяльного наполнения".

    Константы не должны быть обоюдно связаны при консервировании..
    чи31 жыли<3> !! мас3 ко {1, 2, некая_константа * 8 };
    //чи31 !! некая_константа ко мас3.3 + 1; // ошыбка.
    чи31 !! некая_константа ко 9 + 1; // нет ошыбки.
    Не важно, что "некая_константа" принимает учястие в операцыях "до строки создания".

    // Конструкторы изначяльного наполнения..
    сложный_тип жыли< 3> !! слож.масив =
    {
    сложный_тип( 1, 4), // формируем первый вагон через "конструктор" (подробности позжэ).
    сложный_тип( 2, 38),// формируем второй вагон.
      { сложный_тип( 3, 12) } // можно нарисовать дополнительные фигурные скобки.
    };
    // точка-запятая не обязательна, но лишняя точка-запятая конец выражэния не испортит.

    // Авто-процэдуры масивов..
    чи31 !! шмасив.колво ко 21;
    чи31 жыли< шмасив.колво> !! шмасив;

    Вышэ мы создали константу, чтобы хранить там количество.
    Но это не обязательно, потому-что у масивов есть три автоматические процэдуры..
      шмасив.1к() // узнать текушее количество вагонов в первой размерности масива.
      шмасив.1а( икс) // получить адрес ближне-встреченого статуса, который балансирует с "икс".
      шмасив.1н( икс) // получить номер ближне-встреченого статуса ...

    Ключевое слово "байтов" помогает узнать "сколько байтов занимает Типаж или Масив".
    чи31 !! энб = байтов шмасив;
    //чи31 !! энб = байтов( шмасив); // так тожэ правильно

    // Попадание индэкса или номерка вагона в размеры масива..
    Есть ключевое слово (как стерео-оператор) "вне" и спец версия для отступов "[вне]".
    п( сНоля [вне] м[0] ) мимо_масива(); // Переменка "сНоля" содержыт не-правильный отступ.
    ип м[0][ сНоля] = 5;

    // Проекцыя масива (это опасно - прогер должэн понимать что он делает)..
    чи16!! эн16 =0;
    чи8 жыли<>!! мас = {0,0,0,0}; // количество опознаётся в фигурных скобках.
    мас.1 = '1111 1111'; // чи7 или чи8 подходят для получения подобного.
    мас.2 = '0000 0001'; // второй байт.
    мас.3 = '0001'; // '0000 0001' // тоесть повтор второго байта.

    эн16 = чи16( адр мас.1); // эн16 получяет 511 (255 + один бит второго байта как 256).
    // "эн16" (получить значение) (как типаж чи16) (с адреса) ("мас" первый вагон).

    эн16 = чи16( адр мас.2); // эн16 получит 257 (1 + один бит второго байта как 256).

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

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

    Такжэ можно сделать статик-масив квитков, чтобы создавать и удалять вагоны "по одному".

    квиток сложный.типаж жыли< 25> !! маскви; // квитки обязательно сначяла будут нолями.
    сложный.типаж взяли< 1> !! --- маскви.1;
    сложный.типаж взяли< 1> !! --- маскви.2;

    Далее можно делать наркут по всем квиткам масива "маскви" и если очередной квиток
    не является нолём, то можно достать через квиток до свойств экзэмпляра "сложный.типаж",
    который привязан имено к этому квитку.

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

    // финиш кусок 11
     

































































































































  • Безымянный 222304

  • Яма плюс - справочьник - кусок 13.