Пилим псевдокоды основных структур данных

Научно-технические вопросы применения русского языка в программировании. Проекты с сайта программирование-по-русски.рф, кроме ЯОС . Информация об организациях и людях, использующих или изучающих русский язык в программировании. Сравнение операционных систем.
Ответить
Тихонович
Сообщения: 54
Зарегистрирован: 21.11.23 22:43

Пилим псевдокоды основных структур данных

Сообщение Тихонович » 13.12.23 03:24

Ничего хитрого, пишем связанный список, бинарное дерево, хэш-таблицу


Аватара пользователя
Лис [Вежливый]
Сообщения: 563
Зарегистрирован: 08.10.18 13:32

Re: Пилим псевдокоды основных структур данных

Сообщение Лис [Вежливый] » 13.12.23 21:07

Собеседник (топикстартер) сообщил о том, какие работы ведутся.
"Пилим" в этом контексте является синонимом словам "программируем"/"разрабатываем".

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



Тихонович
Сообщения: 54
Зарегистрирован: 21.11.23 22:43

Re: Пилим псевдокоды основных структур данных

Сообщение Тихонович » 14.12.23 20:39

Код: Выделить всё

//======================================================================
// Значимые и ссылчные конструкции.
// Ссылочные это всегда классы.
// Значимые - это состав или примитивные типы, на вроде целое, чипт.
// чипт - число с плавющей точкой. 
// Значимые могут быть помещены в куче, тогда следует используют ссылки. 
//   Узел* - ссылочный тип на Узел.
//======================================================================

включи Системные
обозначения БинарноеДерево // обозначения - это логическое выделение, а модуль это физическое. 
                           // Когда мы говорим о модулях, мы имеем ввиду какой-то файл, здесь же речь не о файлах.

класс Дерево
  закрой:          // - инструкция указывающая доступно ли экземпляру данное поля для вызова.
  Узел* корень
  
  // После знака ":" указывается тип возвращаемого значения.
  Сверь(целое число, Узел* узел): логик
    если (число < узел.значение)
      верни истина
    верни ложь
  
  открой:
  Дерево(целое число):
    корень = дай Узел(число)  // - инструкция дай делает запрос памяти для размещении в куче.
    
  Добавь(целое число):
    Узел* текущий = корень
    пока (истина)
      если (Сверь(число, текущий) == ложь && текущий.левый != 0)
        текущий = текущий.левый
      иначе (Сверь(число, текущий) == истина && текущий.правый != 0)
         текущий = текущий.правый
      то
        стоп
      
    если (Сверь(число, текущий) == ложь)
      текущий.левый = дай Узел(число)
    то
      текущий.правый = дай Узел(число)



// Данная конструкция объявление состава указывает, что его имя находится в рамка обозначения Дерево.
состав Дерево.Узел
  Узел* левый, правый, остов
  целое значение
  Узел(целое число):
  	значение =  число 

Начни(строка арг): целое
  Дерево числовое = дай Дерево(4)
  числовое.Добавь(7)
  числовое.Добавь(3)
  числовое.Добавь(11)
  Консоль.Пиши("Привет друзья!")
  верни 0
  
Ну примерно как-то так.
Последний раз редактировалось Тихонович 14.12.23 22:09, всего редактировалось 1 раз.


Тихонович
Сообщения: 54
Зарегистрирован: 21.11.23 22:43

Re: Пилим псевдокоды основных структур данных

Сообщение Тихонович » 05.01.24 02:56

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

Код: Выделить всё

подключи Системные
обозначения Сортировки

Выведи(целое[] массив):
    пройди массив как целое число
        Консоль.Пиши(число)

Смени(целое[] массив, целое одно, целое другое):
        целое времянка = массив[одно]
        массив[одно] = массив[другое]
        массив[другое] = времянка

/// Пузырьковая сортировка.
Выстрой(целое[] массив, целое всего) : целое[]
    целое проход, место
    проход = 0
    пока(проход < всего - 1)
        место = 0
        пока(место < всего - проход - 1)
            если (массив[место] > массив[место + 1])
                Смени(массив, место, место + 1)
            место++
        проход++
    верни массив

Стань(строка[] аргументы): целое
    целое[10] массив = {9, 6, 4, 5, 1, 0, 7, 8, 3, 2}
    Выведи(массив)
    массив = Выстрой(массив, 10)
    Выведи(массив)
    верни 0

Тихонович
Сообщения: 54
Зарегистрирован: 21.11.23 22:43

Re: Пилим псевдокоды основных структур данных

Сообщение Тихонович » 05.01.24 23:32

Сортировка перемешиванием

Код: Выделить всё

подключи Системные
обозначения Сортировки

Смени(целое[] массив, целое одно, целое другое):
        целое мена = массив[одно]
        массив[одно] = массив[другое]
        массив[другое] = мена

/// Сортировка перемешиванием.
Выстрой(целое[] массив, целое всего) : целое[]
    целое лево, право, метка, место
    метка = всего - 1
    лево = 0, право = метка
    иди
        место = лево
        до(место < право, место++)
            если (массив[место] > массив[место + 1])
                Смени(массив, место, место + 1)
                метка = место
        право = метка
        место = право
        до(место > лево, место--)
            если (массив[место] < массив[место - 1])
                Смени(массив, место, место - 1)
                метка = место
        лево = метка
    пока(лево < право)
    верни массив

Стань(строка[] аргументы): целое
    целое[10] массив = {9, 6, 4, 5, 1, 0, 7, 8, 3, 2}
    массив = Выстрой(массив, 10)
    верни 0

Тихонович
Сообщения: 54
Зарегистрирован: 21.11.23 22:43

Re: Пилим псевдокоды основных структур данных

Сообщение Тихонович » 06.01.24 16:30

Сортировка вставками

Код: Выделить всё

/// Сортировка вставками.
Выстрой(целое[] массив, целое всего) : целое[]
    целое проход, метка, место
    проход = 1
    пока(проход < всего)
        метка = массив[проход]
        место = проход - 1
        до(место >= 0 и массив[место] > метка, место--)
            массив[место + 1] = массив[место]
        массив[место + 1] = метка
        проход++
    верни массив

Стань(строка[] аргументы): целое
    целое[10] массив = {9, 6, 4, 5, 1, 0, 7, 8, 3, 2}
    массив = Выстрой(массив, 10)
    верни 0

Тихонович
Сообщения: 54
Зарегистрирован: 21.11.23 22:43

Re: Пилим псевдокоды основных структур данных

Сообщение Тихонович » 07.01.24 13:29

Гномья сортировака

Код: Выделить всё

Смени(целое[] массив, целое одно, целое другое):
        целое мена = массив[одно]
        массив[одно] = массив[другое]
        массив[другое] = мена                
        
// Гномья сортировака                
Выстрой(целое[] массив, целое всего) : целое[]
    целое метка, место
    место = 1, метка = 2
    пока(место < всего)
        если(массив[место - 1] > массив[место])
            место = метка
            метка = метка + 1
        то
            Смени(массив, место - 1, место)
            место = место - 1
            если(место == 0)
                место = метка
                метка = метка + 1
    верни массив

Стань(строка[] аргументы): целое
    целое[10] массив = {9, 6, 4, 5, 1, 0, 7, 8, 3, 2}
    массив = Выстрой(массив, 10)
    верни 0

Тихонович
Сообщения: 54
Зарегистрирован: 21.11.23 22:43

Re: Пилим псевдокоды основных структур данных

Сообщение Тихонович » 07.01.24 18:03

Сортировка слиянием

Код: Выделить всё

// Сортировка слиянием
Выстрой(целое[] верх, целое[] низ, целое лево, целое право) : целое[]
    если (лево == право)
        верх[лево] = низ[лево]
        верни верх

    целое[] итог, л_часть, п_часть
    целое место, центр, дан_л, дан_п

    центр = лево + (право - лево) / 2
    л_часть = Выстрой(верх, низ, лево, центр)
    п_часть = Выстрой(верх, низ, центр + 1, право)

    если (л_часть == верх)
        итог = верх
    то
        итог = низ
    // Слияние стройных половин
    место = лево, дан_л = лево, дан_п = центр + 1
    до(место <= право, место++)
        если(дан_л <= центр и дан_п <= право)
            если(л_часть[дан_л] < п_часть[дан_п])
                итог[место] = л_часть[дан_л]
                дан_л++
            то
                итог[место] = п_часть[дан_п]
                дан_п++
        иначе(дан_л < центр)
            итог[место] = л_часть[дан_л]
            дан_л++
        то
            итог[место] = п_часть[дан_п]
            дан_п++
    верни итог

Стань(строка[] аргументы): целое
    целое[10] массив = {9, 6, 4, 5, 1, 0, 7, 8, 3, 2}
    целое[10] буфер
    массив = Выстрой(массив, буфер, 0, 9)
    верни 0


БудДен
Сообщения: 2873
Зарегистрирован: 07.10.18 14:01

Re: Пилим псевдокоды основных структур данных

Сообщение БудДен » 08.01.24 19:21

Если у Вас есть очередной проект ЯП с русским синтаксисом, то для таких проектов есть специальный форум:

https://вече.программирование-по-русски ... m.php?f=13

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

Ответить