[Logo] Форум DL
  [DL]  На главную страницу 
Индекс форума ->Учебный процесс ГГУ/СШ 27 ->Проектирование цифровых систем 1, 2, 3, ... 25, 26, 27
Автор Сообщение
Михаил Долинский

Темы: 1985
Сообщений: 47268

Мой профиль
С-МПА (Санец и Мельникова)
Файл-помощник: https://docs.google.com/document/d/1XXIAJYC_deoJLiGpabzlk4ZSf6OXnxAs5N5PJO5IrU8/edit?usp=sharing
Используемые чат-боты : https://you.com/ и https://poe.com/

ПО-41     С A H 
Михалёв   + + +
Новиков   + + +
Яковцев   + + +
Ханда     +
Говор     + + + 

Михалёв
Новиков
Яковцев +1
Ханда
Говор С+H A

ПО-21      С A H 
Санец      + 
Мельникова +
Богомазова     +
Лисичкин   +

Санец и Мельникова +1
Богомазова
Лисичкин

ПИ-21      С A H 
Матафонов      + 

Матафонов


Применение ИИ в обучении программированию на 1-ом курсе обсуждается здесь
Учимся с помощью искусственного интеллекта
(здесь же есть URL-ы всех известных нам пока ИИ-ботов, решающих программистские задачи)

И в решении задач по программированию на языках высокого уровня всё более-менее позитивно.

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

Начало положено Андреем Михалёвым, надеюсь на конструктивное продолжение.

Требуется с помощью ИИ решить задачи по
- С-МПА
- ассемблеру Intel 8086
- HLCCAD

Задачу в идеале следует брать такую, которую Вы сами сходу не в состоянии решить.

1. Начать есть смысл с обсуждения алгоритма

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

2. Составить доку по минимуму необходимых знаний и "скормить" её ИИ

- по С-МПА это отличия С-МПА от C.
(по моему, они есть только в объявлении переменных с ключевыми словами __in и __bits)
- по ассемблеру нужно указать явно ассемблер Intel 8086.
если не поможет - дать фрагмент текста из моей лекции "Особенности умножения и деления"
- по HLCCAD пока предложения такие


Новиков Влад, ПО-41:

Для решения задач на HLCCAD ChatGPT не подходит,
в первую очередь из-за того что ChatGPT не знаком с HLCCAD, так как в его наборе данных на которых он обучался не было данных об HLCCAD,
а также из-за того генерирует только текст, но не визуальные схемы.  
На это есть следующие соображения
1. HLCCAD позволяет получить по схеме текстовое описание и наоборот по этому текстовому описанию - схему.
(отметить блок на скеме, скопировать в клипборд, и вставить в текстовый файл, аналогично обратно)
2. Можно попытаться его пообучать предварительно, как Яковцев сделал для С-МПА (см.ниже)
- текстовому HLCCAD-описанию
- функциям элементов из Standard.prj из которых мы строим схему.
- потом возможно сопоставлению текстов и схем - попробовать хотя бы и сообщить что получилось.
3. Есть текстовые языки проектирования VHDL и Verilog - про них он наверно должен знать.
Попросить его сделать программу на этом языке, а уж потом вручную перевести её в схему.
Возможно мы потом автоматизируем этот процесс.


Говор Назар, ПО-41:

Делюсь своим опытом решения задач с помощью ИИ.
Решение задачи на HLCCAD:
Ссылка на задачу: https://dl.gsu.by/task.jsp?nid=2285115&cid=1335
Ссылка на гугл документ со всем диалогом: https://docs.google.com/document/d/13wCSuoQcSTGVi2sLbKZV1lvoPznZ-nVoGNbcrZSJDok/edit?usp=sharing
Спросив у GPT знает ли он что-то об HLCCAD он ответил отрицательно, и я решил спросить это у Google Bard и ответ был положительным(видимо потому что у Bard открытый доступ в интернет). Я спросил сможет ли он помочь мне решить задачу на HLCCAD и он попытался даже составить схему в текстовом виде, но с одной ошибкой, я указал ему на ошибку и он её успешно исправил, он объяснил ход решения задачи и рассказал какие компоненты нужно использовать, так же Bard оставил ссылку на форум DL в котором обсуждается эта задача. 


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

4. Если с решением задачи "целиком" возникают сложности

Надо попробовать разбить задачу на подзадачи,
и, решив с помощью ИИ отдельные подзадачи,
объединить их в решение задачи.

Например для ассемблерной программы условного вычисления выражений это можно сделать так:
1. Сделать с помощью ИИ выбор по условию.
2. Сделать с помощью ИИ просчёт первой ветки
3. Сделать с помощью ИИ просчёт второй ветки
С помощью ИИ или самостоятельно получить полное решение и сдать его на DL.

Есть ещё более кропотливый подход.
Сначала научить ИИ отдельным действиям (+-*/ сравнение) а уж потом пытаться получить с его помощью решение задачи.
 


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

Базовый (условное вычисление выражений)
П. Схема
А. ASM - программа
С. С-МПА - программа
Т. Тестирование

Проектирование (схема в HLCCAD; микропрограмма на С-МПА, по которой генерируется схема)
ЛФ. По логическим функциям
ТИ. По таблицам истинности
КС. Комбинационные схемы
ПА. Схемы с памятью

Программирование (отдельные задачи по ASM и С-МПА)
ПР. Простейшая
ОС. Обработка строк
1М. Одномерный массив
ЦЧ. Цифры числа

Такие задачи можно найти в папках
"Командные олимпиады - тема лекции - контрольный срез"
Допускается выбрать одну и ту же задачу для ассемблера(A), С-МПА(C) и HLCCAD(H).

Моя конечная цель

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

"Не знаю" нового типа!


Как делать
Чаты GPT для юных гениев
Проект МФТИ "Искусственный интеллект: старт в будущее"

Аналоги
Teaching CS-101 at the Dawn of ChatGPT
Caмый умный пoмощник с дocтупoм к СhatGPT на pуcскoм языкe
Гарвардский университет внедрил генеративный ИИ в учебный процесс!
Первый в России ИИ-помощник для подготовки к ЕГЭ по информатике от ЯндексУчебника
Прямая ссылка
Harnessing Rule-Based Chatbots to Support Teaching Python Programming Best Practices
Михаил Долинский

Темы: 1985
Сообщений: 47268

Мой профиль


Степан Степанчиков:

Аналоги чат-ботов, используемые при обучению программированию
Пропуск 29_09
https://useadrenaline.com
https://www.documatic.com/features
https://codeium.com  



Андрей Михалев:

Делюсь своими соображениями насчет решения задач по HLCCAD/ассемблеру/C-MPA с помощью искусственного интеллекта.
Решал задачи с помощью чат-бота Aria, встроенного в браузер Opera. Скачать браузер можно с официального сайта https://www.opera.com/ru. Далее слева будет отображаться панель со значками. Верхний значок и позволит перейти к Aria. Для использования нужно создать/войти в аккаунт Opera и использовать уже встроенный в браузер VPN (включается в настройках браузера), поскольку с территории РБ чат-бот недоступен. Ранее этот чат-бот хорошо себя зарекомендовал в плане помощи с написанием кода на языках высокого уровня (преимущественно, C#, т.к. работаю с ним), а также различных технических/системных вопросах.

Док по ассемблеру: https://docs.google.com/document/d/127-CyoX2zmMX0NzrwICw5I2LuKJ_M0G-/edit?usp=sharing
Краткое резюме: бот не обучается решению задач на ассемблере от слова совсем, допускает значительное количество как логических, так и синтаксических ошибок. Главная беда заключается в том, что с каждым разом допускаются все новые и новые ошибки, старые исправляются нехотя, и логика решения схожих алгоритмических задач реализуется как верно, так и неверно в рамках даже одной и той же программы.

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

Док по C-MPA: https://docs.google.com/document/d/1ySuxGu5_B7aeBAuFCjUoMt23mN5PsqVC/edit?usp=sharing
Краткое резюме: бот неплохо справился с решением задач на C-MPA, но для этого пришлось написать километровый запрос, где были разъяснены основные отличия C от C-MPA. Также пришлось уточнять некоторые особенности по ходу общения с ботом, в результате чего бот успешно исправлялся. Минусом можно считать то, что некоторые особенности C-MPA бот постепенно забывает, но если указать ему на его ошибку, то успешно исправляется. Может периодически неверно интерпретировать условие (как и в случае с ассемблером), но опять же после того, как ткнешь носом бота в его ошибку, он исправляется. В ходе диалога новые ошибки в решении задач не допускаются, а старые исчезают, т.е. в любом случае за конечное и небольшое (для задач уровня DL) время можно получить верное решение 
Михаил Долинский

Темы: 1985
Сообщений: 47268

Мой профиль


Михаил Долинский:

Андрей, огромное спасибо за работу.

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

Теперь по существу дела.

1. А можем ли мы ОБУЧАТЬ бота ассемблеру, так чтобы он ЗАПОМИНАЛ, всё чему его научили ДЛЯ ВСЕХ СТУДЕНТОВ?
Например, как я студентов учу - сначала научим его исполнять отдельные операции +-*/, потом их объединения, а уж потом программы
Может не того бота, с которым ты работал, а какого-то другого?

2. По поводу HLCCAD если на схеме отметить блок и сделать вставить в клипборд, а потом вставить из клипборд в текстовый файл, получим текстовое описание схемы.
Это может помочь?

3. По поводу С-МПА
Твоё мнение - может ли он помочь учиться?
Или пока нужно самому больше знать чем бот? Тогда можно добиться от него решения?
Можешь попробовать взяться за задачу, решения которой ты не знаешь?
И добиться решения от бота?

P.S. У нас протоколах море решений задач и правильных и неправильных
и по ассемблеру, и по HLCCAD, и по C-MPA
Можно эту информацию использовать для обучения бота? 
Михаил Долинский

Темы: 1985
Сообщений: 47268

Мой профиль


Андрей Михалев:


Михаил Долинский:

Андрей, огромное спасибо за работу.

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

Теперь по существу дела.

1. А можем ли мы ОБУЧАТЬ бота ассемблеру, так чтобы он ЗАПОМИНАЛ, всё чему его научили ДЛЯ ВСЕХ СТУДЕНТОВ?
Например, как я студентов учу - сначала научим его исполнять отдельные операции +-*/, потом их объединения, а уж потом программы
Может не того бота, с которым ты работал, а какого-то другого?

2. По поводу HLCCAD если на схеме отметить блок и сделать вставить в клипборд, а потом вставить из клипборд в текстовый файл, получим текстовое описание схемы.
Это может помочь?

3. По поводу С-МПА
Твоё мнение - может ли он помочь учиться?
Или пока нужно самому больше знать чем бот? Тогда можно добиться от него решения?
Можешь попробовать взяться за задачу, решения которой ты не знаешь?
И добиться решения от бота?

P.S. У нас протоколах море решений задач и правильных и неправильных
и по ассемблеру, и по HLCCAD, и по C-MPA
Можно эту информацию использовать для обучения бота? 


Насчет первого пункта и P.S. Не могу со стопроцентной уверенностью утверждать, но процесс общения пользователя с ботом не делает бота умнее глобально, лишь в рамках одного чата. Новые знания в бота загружают лишь его разработчики. Поэтому после одного чата все знания бота про C-MPA, ассемблер и т.п. улетучатся. Поэтому появляется другая проблема: через сколько сообщений относительно данного бот будет помнить контекст данного сообщения? И в ходе экспериментов с задачами по HLCCAD/C-MPA, и в ходе пользования разными ботами в других целях замечал, что часто спустя не более 10 сообщений на вопрос в стиле "а помнишь, я тебя спрашивал про..." бот отвечал, что ничего не помнит. В связи с этим не думаю, что пошаговое обучение будет эффективно. Можно попробовать вывалить в него всю (ну или хотя бы большую часть) нужной теории для запоминания, как я уже делал с C-MPA, тогда бот хотя бы сможет в течение большего количества ответов выдавать что-то вразумительное. Да и потом, как я уже писал ранее, основная проблема бота (по крайней мере в отношении ассемблера), что он знает команды, знает, как их использовать, но допускает логические просчеты. Как и человека, заставить бота запомнить команды легко, а заставить логически мыслить - уже куда более сложная задача.

Насчет второго вопроса. Да, можно не проводить параллели между HLCCAD и ассемблером для бота, а лишь вставлять описание схемы. Но здесь по сути актуальна все так же проблема, что и для ассемблера - реализация определенной логики, которая боту не знакома или малознакома. Мне представляется, что в ботов по типу ChatGPT залита огромная кодовая база на языках вроде C/С++, и уже гораздо менее объемная кодовая база на языках вроде ассемблера. Поскольку когда просишь бота написать бота код на грубо говоря "C с некоторыми дополнениями", он с переменным успехом справляется. Когда же просишь бота написать код на ассемблере, из приведенных ранее примеров видно, что бот начинает во многих местах путаться и писать полный бред. А такая вещь, как HLCCAD, боту не знакома вообще, знакомство бота с HLCCAD начинается непосредственно в чате, и здесь бот должен и научиться определенному языку (и не забыть его через пару сообщений), и понять, как решать определенные логические задачи. Так или иначе, как по мне, решение задач на HLCCAD ботом - проблема уже другого уровня, и решать ее стоит тогда, когда придет понимание, как заставить бота стабильно правильно решать C-MPA и ассемблер

Насчет третьего вопроса. В глобальном смысле, не говоря конкретно о C-MPA, боты очень даже способны дать определенный набор знаний, объяснить логику работы того или иного кода, библиотеки и т.п. Но у каждого бота есть определенный предел сложности поставленных задач, когда ему становится настолько тяжело анализировать задачу, что в ответ получаешь полную ерунду. Можно сказать, что при написаний программ со сложной архитектурой, логикой и т.п. бот может тебе подать кирпичи, но дом из этих кирпичей должен строить уже сам программист. Просто для разных языков программирования этот предел сложности у бота наверняка разный. Вероятно, зависящий от объема кодовой базы, залитой в бота.
Непосредственно про решение задачи на C-MPA, которую я якобы не знаю, как решать. Решение задачи https://dl.gsu.by/task.jsp?nid=2290022&cid=1335 бот написал верно с первого раза. А вот решения задачи https://dl.gsu.by/task.jsp?nid=2290020&cid=1335 от бота я так и не добился. Проблема все та же - даже сразу же после сообщения с описанием C-MPA и описанием его отличий от C, буквально первый же вариант программы от бота содержит его излюбленную ошибку - описание массива с модификатором __in (хотя в описании отличий C от C-MPA я указал на это отличие). Теперь я просто ответил боту, что произошла некоторая ошибка синтаксиса в такой-то строке. Сначала он выдал такой же ответ. После повторного замечания про некоторую синтаксическую ошибку бот вообще выдал:
В языке C-MPA не поддерживается объявление массивов входных переменных размерности. Вместо этого, входные переменные должны быть объявлены отдельно. 
и далее описал 10 входных переменных вместо массива на 10 элементов. Ну и понятно, что если я вообще не знаю ничего про C-MPA, но хочу решить задачу, то на этом можно закончить с попыткой решить эту задачу. Короче говоря, результаты весьма неоднозначные, к какой-то специфике C-MPA бот привыкает быстро, в другой постоянно косячит, и нужно его тыкать носом в его же ошибки. 
Михаил Долинский

Темы: 1985
Сообщений: 47268

Мой профиль


Михалёв Андрей:

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

Тем не менее возникает другой вопрос.
А можно взять какой-то хороший "движок ИИ" и обучать его целенаправленно нужными нам знаниями по ассемблеру, HLCCAD-у, CMPA?
То есть "стать разработчиками" такого специализированного бота для обучения "железным предметам в ГГУ"?
Андрей Михалев

Темы: 0
Сообщений: 31

Мой профиль


Михаил Долинский:


Михалёв Андрей:

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

Тем не менее возникает другой вопрос.
А можно взять какой-то хороший "движок ИИ" и обучать его целенаправленно нужными нам знаниями по ассемблеру, HLCCAD-у, CMPA?
То есть "стать разработчиками" такого специализированного бота для обучения "железным предметам в ГГУ"?
 


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

С нуля писать ИИ, который мог бы писать программный код - значит быть разработчиком уровня, близкого к уровню разработчиков, написавших тот же Chat GPT. Это не сравнимая по уровню сложности задача с, например, распознаванием букв, цифр и т.п. Достаточно изменить, например, размерность одной переменной, и ассемблерный код отнюдь не в одной строке может измениться, все зависит от сложности условия конкретной задачи. Я знаю, что у OpenAI (создателей ChatGPT) есть библиотека для Python, с ее помощью можно совершенствовать ChatGPT локально, но там проблема возникнет с API-ключами из-за территориальной принадлежности. Может, можно будет воспользоваться таким вариантом, когда нас "разбанят". Либо кто-то знает лайфхак, как это обойти уже сейчас
Михаил Долинский

Темы: 1985
Сообщений: 47268

Мой профиль
А что "движков ИИ" не существует?
Андрей Михалев

Темы: 0
Сообщений: 31

Мой профиль
Я и имел в виду под созданием ИИ "с нуля" написание кода с использованием готовых фреймворков для создания ИИ (TensorFlow и т.п.), но задача по созданию ИИ, который может писать программный код, опять же сопоставима с задачей создания, по сути, своего ChatGPT, которого можно будет обучать имеющимися у нас примерами решения задач
Михаил Долинский

Темы: 1985
Сообщений: 47268

Мой профиль
Гарвардский университет внедрил генеративный ИИ в учебный процесс!

Студенты, посещающие курс «Введение в информатику» (CS50), смогут использовать ИИ для отладки кода, получения обратной связи по своим проектам и получения ответов на индивидуальные вопросы об ошибках и непонятных строках в коде.

«Бот CS50», разработанный в стенах учебного заведения, будет использоваться вместо популярных среди программистов инструментов, таких как ChatGPT или GitHub Copilot. Бот будет направлять студентов к правильным ответам, а не предоставлять их непосредственно.

Значит всё-таки можно сделать!
И, следовательно, можно и нужно работать в этом направлении.
Михаил Долинский

Темы: 1985
Сообщений: 47268

Мой профиль
Первый в России ИИ-помощник для подготовки к ЕГЭ по информатике от ЯндексУчебника
Прямая ссылка
Владислав Новиков

Темы: 0
Сообщений: 10

Мой профиль
Делюсь своим опытом решения задач по CMPA/Assembler/HLCCAD при помощи нейронных сетей. Конкретно я для этой задачи использовал ChatGPT версии 3.5 которая является бесплатной, но с маленьким нюансом, а именно на данный момент из-за санкций невозможно завести аккаунт на номер телефона из России или Беларуси, но естественно есть способы как это обойти, но это уже другая история. Также на данный момент существует и более продвинутые версии ChatGPT, которые уже являются платными.

Ссылка на гугл документ с описанным процессом решения:https://docs.google.com/document/d/1GSpRWrBiWjtYHd4y6K2XMXUSQIxxghnm

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

Assembler: Для решения задач на Assmebler нейросеть подходит, но с небольшими затруднениями. В процессе я столкнулся с такой проблемой, что нейросеть выдаёт мне код на общем Assembler (x86) который может немного отличаться и не работать в Winter, например нейросеть напишет вам код с использованием оператора imul с двумя операндами. Но переформулировав запрос, можно добиться необходимого результата.

HLCCAD: Для решения задач на HLCCAD ChatGPT не подходит, в первую очередь из-за того что ChatGPT не знаком с HLCCAD, так как в его наборе данных на которых он обучался не было данных об HLCCAD, а также из-за того генерирует только текст, но не визуальные схемы.
Евгений Яковцев

Темы: 0
Сообщений: 24

Мой профиль
Ссылка на диалог --> https://www.phind.com/search?cache=f18ro000mo7z7tp4egupormz

Туториал:

Для обучения решения задач нужно четко охарактеризовать язык программирования и на что он похож (в данном случае C-MPA похож на C).

Также нужно скинуть темы, которые необходимы для решения определенной задачи. А также предоставить комплексный пример решения нестандартной задачи (он должен затрагивать основы синтаксиса языка).

В случае ошибок чата следует указать ему на них и объяснить в чем он ошибся.

Разговор с phind (мои сообщения помечены символами "##", ИИ: ChatGPT 4):

## У меня есть язык основанный на C сможешь ли ты решить задачу если я предоставлю документацию по нему
Да, я могу помочь вам решить задачу на вашем C-подобном языке, если вы предоставите документацию по нему. Хотя я и создан Phind, чтобы помочь разработчикам в работе с широким спектром языков программирования, включая C, мои возможности все же зависят от предоставленной вами информации.

Процесс решения задачи будет выглядеть следующим образом:

1. **Изучение документации**: Я начну с изучения предоставленной вами документации, чтобы понять уникальные особенности вашего языка. Это может включать в себя синтаксис, ключевые слова, типы данных, структуры данных, функции, классы и так далее [Source 1](https://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html), [Source 2](https://en.cppreference.com/w/c/language).

2. **Разработка подхода к решению**: После изучения особенностей вашего языка, я разработаю подход к решению задачи. Это может включать в себя выбор подходящих структур данных, разработку алгоритма и определение функций или классов, которые могут быть необходимы [Source 1](https://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html), [Source 2](https://en.cppreference.com/w/c/language).

3. **Написание кода**: Затем я напишу код, используя синтаксис и функциональность вашего языка, исходя из разработанного подхода. Я также могу включить комментарии, чтобы объяснить, что делает каждая часть кода [Source 1](https://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html), [Source 2](https://en.cppreference.com/w/c/language).

4. **Тестирование и отладка**: После написания кода я могу помочь в тестировании и отладке, если это возможно с учетом предоставленной вами информации и среды.

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

## Запомни данную часть документации
. C - регистро-чувствительный язык - большие и маленькие буквы различаются.

2. Оператор присваивания

Паскаль С
:= =


3. Операции ЧАСТНОЕ и ОСТАТОК

Паскаль С
MOD %
DIV /


4. Операции отношения и сложные условия

Паскаль С
= (равно) ==
<> (не равно) !=
AND (И) &&
OR (ИЛИ) ||
NOT (НЕ) !


5. Побитовые операции

Паскаль С
AND (И) &
OR (ИЛИ) |
XOR (искл.ИЛИ) ^
NOT (НЕ) ~
SHR >>
SHL <<


6. Логические переменные

Паскаль С
false 0
true не 0
Я запомнил эту часть документации. Исходя из этой информации, ваш язык программирования имеет следующие особенности:

- **Регистро-чувствительность**: Ваш язык различает большие и маленькие буквы, как и в C.

- **Оператор присваивания**: Вместо `:=` как в Паскале, ваш язык использует `=` для операций присваивания.

- **Операции ЧАСТНОЕ и ОСТАТОК**: Ваш язык использует `%` для операции "остаток от деления" (как оператор MOD в Паскале) и `/` для операции "целочисленное деление" (как оператор DIV в Паскале).

- **Операции отношения и сложные условия**: Ваш язык использует `==` для проверки равенства (вместо `=` в Паскале), `!=` для неравенства (вместо `<>` в Паскале), `&&` для логического И (вместо `AND` в Паскале), `||` для логического ИЛИ (вместо `OR` в Паскале) и `!` для логического НЕ (вместо `NOT` в Паскале).

- **Побитовые операции**: Ваш язык использует `&` для побитового И (как `AND` в Паскале), `|` для побитового ИЛИ (как `OR` в Паскале), `^` для побитового исключающего ИЛИ (как `XOR` в Паскале), `~` для побитового НЕ (как `NOT` в Паскале), `>>` для побитового сдвига вправо (как `SHR` в Паскале) и `<<` для побитового сдвига влево (как `SHL` в Паскале).

- **Логические переменные**: Ваш язык использует `0` как ложь (как `false` в Паскале) и любое ненулевое значение как истину (как `true` в Паскале).

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

## Пример решения задачи:
Устройство устанавливает в 1 значение бита, который находится в битовой строке x и проверяет был ли установлен бит в исходной строке. Номер бита в строке определяется значением входа fs. Выход s определяет был ли установлен бит, y - преобразованную битовую последовательность x.
Пример:
x: 10001000
fs: 001
y: 10001010
s: 0
Решение:
unsigned __in __bits(8) x;
unsigned __in __bits(3) fs;

unsigned __out __bits(8) y;
unsigned __out __bits(1) s;

void main()
{
/////////////////////////////////////////////////////////
//
// Вариант, не использующий сдвиг на переменной число бит
//
/////////////////////////////////////////////////////////

unsigned ty = 1;
unsigned __bits(3) tfs = fs;
while (tfs)
{
ty <<= 1;
tfs--;
}
if (x & ty) s = 1;
else s = 0;
y = x | ty;


/////////////////////////////////////////////////////////
//
// Вариант, использующий сдвиг на переменной число бит
//
/////////////////////////////////////////////////////////

// y = x & 1 << fs;
// s = x >> fs;
}
Ваш код решает задачу установки и проверки бита в битовой строке. Он делает это используя побитовые операции и операции сдвига, которые являются общими для языков программирования, основанных на C.

Вот как работает ваш код:

1. **Инициализация переменных**: Ваш код начинается с инициализации переменных `x` и `fs`, которые представляют собой входные битовые строки, и `y` и `s`, которые будут использоваться для хранения выходных битовых строк.

2. **Создание маски для сдвига**: Затем создается временная переменная `ty`, которая используется как маска для сдвига. Она начинается с 1 и сдвигается влево на число бит, указанное в `fs`.

3. **Проверка установленного бита**: Если бит в `x` на позиции, указанной в `fs`, уже установлен, `s` установится в 1. В противном случае `s` будет 0. Это достигается с помощью операции побитового И (`&`) [Source 1](https://learn.microsoft.com/ru-ru/cpp/c-language/c-bitwise-operators?view=msvc-170), [Source 5](https://learnc.info/c/bitwise_operators.html).

4. **Установка бита**: Бит в `x` на позиции, указанной в `fs`, устанавливается в 1, и результат сохраняется в `y`. Это достигается с помощью операции побитового ИЛИ (`|`) [Source 1](https://learn.microsoft.com/ru-ru/cpp/c-language/c-bitwise-operators?view=msvc-170), [Source 5](https://learnc.info/c/bitwise_operators.html).

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

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

Евгений Яковцев

Темы: 0
Сообщений: 24

Мой профиль
## Сможешь решить задачу с имеющимися у тебя знаниями по данному языку:
Дано натуральное число m. Проверить, является ли это число двузначным, у которого первая цифра равна последней. Если является res=1, иначе res=0.

Имя переменной | Тип переменной | Размер переменной
m | IN | 1 байт
res | OUT | 1 байт
Согласно вашему описанию задачи, вам нужно проверить, является ли данное вам число двузначным числом, у которого первая и последняя цифра совпадают. Если это так, то значение переменной `res` должно быть установлено равным 1, в противном случае - 0.

Для решения этой задачи мы можем использовать следующий подход:

1. Проверяем, является ли число двузначным. Это можно сделать, проверив, лежит ли число в диапазоне от 10 до 99 включительно.
2. Если число двузначное, проверяем, совпадают ли первая и последняя цифры. Это можно сделать, взяв остаток от деления числа на 10 (что даст нам последнюю цифру) и целочисленно поделив число на 10 (что даст нам первую цифру).
3. Если первая и последняя цифры совпадают, устанавливаем `res` в 1. В противном случае устанавливаем `res` в 0.

Ваш код может выглядеть так:

```c
unsigned __in __bits(8) m;
unsigned __out __bits(1) res;

void main()
{
if (m >= 10 && m <= 99) {
unsigned __bits(4) first_digit = m / 10;
unsigned __bits(4) last_digit = m % 10;
if (first_digit == last_digit) {
res = 1;
} else {
res = 0;
}
} else {
res = 0;
}
}
```

Этот код сначала проверяет, является ли число `m` двузначным. Если это так, то он извлекает первую и последнюю цифры и сравнивает их. Если они совпадают, то `res` устанавливается в 1. В противном случае `res` устанавливается в 0. Если число `m` не является двузначным, то `res` также устанавливается в 0
Михаил Долинский

Темы: 1985
Сообщений: 47268

Мой профиль


Владислав Новиков:

Делюсь своим опытом решения задач по CMPA/Assembler/HLCCAD при помощи нейронных сетей. Конкретно я для этой задачи использовал ChatGPT версии 3.5 которая является бесплатной, но с маленьким нюансом, а именно на данный момент из-за санкций невозможно завести аккаунт на номер телефона из России или Беларуси, но естественно есть способы как это обойти, но это уже другая история. Также на данный момент существует и более продвинутые версии ChatGPT, которые уже являются платными.

Ссылка на гугл документ с описанным процессом решения:https://docs.google.com/document/d/1GSpRWrBiWjtYHd4y6K2XMXUSQIxxghnm

Кратко резюмируя опыт решения, могу сказать что для решения задач по
CMPA: Для решения задачи по CMPA нейросеть подходит очень неплохо, но при этом она не сделает всё за вас, вам всё ещё необходимо помнить об особенностях языка CMPA и тогда переписать сгенерированный нейросетью код на языке си для вас не составит труда. 
Выше пример Яковцева, который её предварительно обучал чуток (фрагмент теории и пример решения задачи) и получил полное решение.

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


Assembler: Для решения задач на Assmebler нейросеть подходит, но с небольшими затруднениями. В процессе я столкнулся с такой проблемой, что нейросеть выдаёт мне код на общем Assembler (x86) который может немного отличаться и не работать в Winter, например нейросеть напишет вам код с использованием оператора imul с двумя операндами. Но переформулировав запрос, можно добиться необходимого результата. 

Если не получается, предлагаю поэтапный подход, например
1. Сделать с помощью ИИ выбор по условию.
2. Сделать с помощью ИИ просчёт первой ветки
3. Сделать с помощью ИИ просчёт второй ветки
С помощью ИИ или самостоятельно получить полное решение и сдать его на DL.

Есть ещё более кропотливый подход.
Сначала научить ИИ отдельным действиям (+-*/ сравнение) а уж потом пытаться получить с его помощью решение задачи.

HLCCAD: Для решения задач на HLCCAD ChatGPT не подходит, в первую очередь из-за того что ChatGPT не знаком с HLCCAD, так как в его наборе данных на которых он обучался не было данных об HLCCAD, а также из-за того генерирует только текст, но не визуальные схемы.  
На это есть следующие соображения
1. HLCCAD позволяет получить по схеме текстовое описание и наоборот по этому текстовому описанию - схему.
(отметить блок на скеме, скопировать в клипборд, и вставить в текстовый файл, аналогично обратно)
2. Можно попытаться его пообучать предварительно, как Яковцев сделал для С-МПА (см.ниже)
- текстовому HLCCAD-описанию
- функциям элементов из Standard.prj из которых мы строим схему.
- потом возможно сопоставлению текстов и схем - попробовать хотя бы и сообщить что получилось.
3. Есть текстовые языки проектирования VHDL и Verilog - про них он наверно должен знать.
Попросить его сделать программу на этом языке, а уж потом вручную перевести её в схему.
Возможно мы потом автоматизируем этот процесс.
Михаил Долинский

Темы: 1985
Сообщений: 47268

Мой профиль


Евгений Яковцев:

Ссылка на диалог --> https://www.phind.com/search?cache=f18ro000mo7z7tp4egupormz

Туториал:

Для обучения решения задач нужно четко охарактеризовать язык программирования и на что он похож (в данном случае C-MPA похож на C).

Также нужно скинуть темы, которые необходимы для решения определенной задачи. А также предоставить комплексный пример решения нестандартной задачи (он должен затрагивать основы синтаксиса языка).

В случае ошибок чата следует указать ему на них и объяснить в чем он ошибся.
 
За это спасибо

Разговор с phind (мои сообщения помечены символами "##", ИИ: ChatGPT 4):
 
А это очень не читабельно, надо или делать красиво, или не делать вообще.


Евгений Яковцев:

Ссылка на диалог --> https://www.phind.com/search?cache=f18ro000mo7z7tp4egupormz 
А эта штука сколько времени в Интернете продержится?

Туториал:
Для обучения решения задач нужно четко охарактеризовать язык программирования и на что он похож (в данном случае C-MPA похож на C).
 
Интересно на примере задачи, решение которой у тебя получилось экспериментально получить МИНИМАЛЬНЫЙ по тексту тьюториал, который позволит получить то же самое решение. В частности, всё что в С-МПА как С, объяснять не нужно. Объяснять только отличия!
Тогда даже если ИИ не запоминает то, чему его обучали.
мы на форуме выложим этот тьюториал, и все смогут им пользоваться, а по мере необходимости будем его пополнять.
Или для разных классов задач делать разные тьюториалы. И тоже коллекционировать их на форуме.

https://www.phind.com 

Отдельное спасибо за URL, у нас такого ещё не было.
А кто-то знает ещё URL-ы - аналоги?

Ещё интересная работа - попробовать одну и ту же задачу - с одним и тем же тьюториалом порешать на разных ИИ-программах и сообщить результат сравнения качества помощи от каждой из них.
 
Индекс форума ->Учебный процесс ГГУ/СШ 27 ->Проектирование цифровых систем 1, 2, 3, ... 25, 26, 27
Time:0,062