Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Языки программирования
DF2 :: ФОРУМЫ > Основные форумы > Софт и железо > Программирование / Coding
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
hippocamus
А чего его придумывать? 4-битный ZX-Spectrum 8080 smile.gif Прямой предок IBM AT 8086
Etoprostoya
Во-первых, ZX-Spectrum - 8-битный.
А во-вторых, я придумывал узкоспециализированный процессор для торгового автомата.
Guevara-chan
http://www.red-lang.org/ - внезапно заинтриговало.
Свободный, компилируемый, с синтаксисом а-ля REBOL...
feanor
Кто-нибудь с генетическим программированием игрался? Не с алгоритмами, а именно с программированием - выращиванием программы из дерева операторов?


Цитата
А я четырёхбитный придумывал

Серьёзно.

Курсовик какой-то?)


Etoprostoya
Курсовик, да.
feanor
У нас тоже был..только не с темой, а процессор вообще - пять команд (у меня, впрочем, было примерно 25-30 хD), двуоперандные, однооперандные, безоперандные.
feanor
Так, вопрос.

Слышал/видел/знает ли кто алгоритм разбиения на треугольники невыпуклого полигона с прорехами внутри?
tolich
Это называется "триангуляция".
feanor
Я знаю. Более того, я знаю, что гугл полон ссылок на алгоритмы триангуляции невыпуклых полигонов. Однако насчет прорех я ничего найти не смог - а напрягать остатки геометрического мышления в облом.
IvanSav
Хмм... Как насчет такого?
http://algolist.manual.ru/maths/geom/polygon/decompose.php
Насколько я понял, алгоритм будет работать и с прорехами. Одно но - на выходе будут не треугольники а все те же полигоны, но уже без дыр. Так что полученые полигоны еще нужно будет разбить на треугольники.

Ну или можно попробовать триангуляцию Делоне - разбиваем полигон на треугольники, откидываем все те, что оказались снаружи.
tolich
Быстрое вычисление квадратного корня.
Программа вводит целое число value, зачем вычисляет целую часть его квадратного корня root, а также сухой остаток числа rest=value-root*root и выводит их.
CODE
// assumed that sizeof(uint)==4
// and byte is 8 bits
#include <iostream>

using namespace std;

typedef unsigned uint;

uint sqrt(uint value, uint &rest)
{
uint root=0; rest=0;
for(uint i=0; i<16; ++i){
rest=(rest<<2)|(value>>30)&3;
value<<=2; (root<<=1)|=1;
if(root<=rest){
rest-=root; ++root;
}
else{
--root;
}
}
return root>>1;
}

int main()
{
unsigned value,rest;
cin>>value;
cout<<"root of "<<value<<" is "<<sqrt(value,rest);
cout<<". rest="<<rest<<endl;
return 0;
}
IvanSav
Цитата(tolich @ 29 May 2012, 08:11) *
// assumed that sizeof(uint)==4

Мой больной мозг потребовал исправить это досадное недоразумение.
CODE
#include <iostream>
#include <type_traits>
#include <cassert>
#include <cstdint>

using namespace std;

template<typename numeric>
numeric sqrt(numeric value, numeric &rest)
{
typedef unsigned uint;
static_assert(std::is_integral<numeric>::value, "This function will only work with integral types!");
static_assert(std::is_unsigned<numeric>::value, "This function will only work with unsigned types!");
constexpr uint bits = sizeof(numeric) * 8;

numeric root=0;
rest=0;

for(uint i = 0; i < bits/2; ++i)
{
rest= rest << 2 | value >> (bits - 2);
value <<= 2;
root <<= 1;
root |= 1;

if(root<=rest)
{
rest-=root; ++root;
}
else
{
--root;
}
}
return root>>1;
}

template<typename numeric>
numeric sqrt(numeric value)
{
numeric rest;
return sqrt(value, rest);
}

void test()
{
assert(sqrt<uint8_t>((200)) == 14);
assert(sqrt<uint16_t>(9999) == 99);
assert(sqrt<uint16_t>(10000) == 100);
assert(sqrt<uint16_t>(10001) == 100);
assert(sqrt<uint32_t>(1000*1000 + 500) == 1000);
assert(sqrt<uint64_t>(1000ll*1000*1000*1000) == 1000*1000);
std::cout << "Tests passed!\n";
}

int main()
{
test();
}
tolich
Увы, мой MSVC6 не имеет в комплекте таких несомненно полезных файлов, как 'type_traits' и 'cstdint'.
IvanSav
Есть такое. У студии все очень печально с поддержкой c++11: http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport
В принципе если повыкидывать проверки различные - должно заработать и там. А в этом виде все работает отлично в моих gcc и clang.
tolich
Кстати, основная идея, пока не реализованная — расчет дробной части этого самого корня для использования в качестве гаммы для шифрования. Просто квадратный корень — простейшее иррацианальное число (т.е., практически случайное), которое генерируется на базе простенького и короткого ключа.
Эроласт
А где голосовалка? huh.gif
ChASnock
Кончилась давно.
packa
Кто нормально знаком со scheme (racket) ?
Нужна помощь)
packa
Вот этот зверь кому интересно:
Код
#lang scheme
(define (fsum n)
(define (step sum cur) (if (= cur n) sum (step (if (= 0 (remainder n cur) ) (+ sum cur) (+ sum 0)) (+ cur 1))))
(step 0 1))

display (fsum 10)


Выводит сумму всех делителей не включая само число.
gamecreator
эти лиспообразные языки скоро захватят мир
feanor
Доо, они ждали этого долгие полвека.
Shurup
Не захватят. Из-за того, что визуально трудновоспринимаемы. Останутся уделом гиков.
Кто захватит - так это JS.
Код
    function fsum(n){
        function step(sum, cur){
            if (cur == n)
                return sum;
            else {
                if(n % cur){
                    return step (sum, cur+1);
                }else{
                    return step (sum+cur, cur+1)
                }
            }
        }
        return step(0,1);
    }
    alert(fsum(32));

ну или при желании можно сократить до трудночитаемого
Код
    function fsum(n){return function step(sum, cur){return (cur == n)? sum: step(sum + (n % cur? 0 : cur), cur+1);}(0,1);}
    alert(fsum(32));
packa
вопрос такой:
есть некоторая программа на scheme, которая обрабатывает данные из файла и результат записывает в тот же файл. Также есть программа на с++, которая по данным из файла выводит на экран информацию (например пусть будет графическая оболочка морского боя, а в файле координаты кораблей и инфа подбит/жив)

Как можно организовать подобный симбиоз?
а если это в реальном времени, то вообще шикарно!
ChASnock
packa
Если и УИ писать на скиме, то зачем тогда Си вообще нужен?) Вся соль в том, чтобы движок на скиме, УИ на Сишке.
(я правильно понял что УИ = интерфейс?) )
gamecreator
Цитата(packa @ 30 Apr 2013, 16:34) *
(я правильно понял что УИ = интерфейс?) )
да. user interface
Vizit0r
кто-то сталкивался с импортом методов из длл на питоне, в частности методов с параметром или возвр. значением НЕ simple type, например struct (record в дельфах) и им подобным ?


hippocamus
Американские программисты о русских программистах

Что думают зарубежные коллеги о наших программерах:
Русские программисты никогда не читают руководств и редко пользуются online подсказкой - они легко понимают новые программы, потому как они ранее уже испробовали все программы подобного рода.

Русские программисты никогда не платят за софт. Они или крэкают его или покупают wonderful CD (не стал переводить - так красивше) за 5 баксов с кучей софта. В любом крупном городе России.

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

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

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

Русские программисты программируют на всех уровнях, и на процессорных кодах тоже, таблицы которых у них находятся постоянно на рабочем столе. Они помнят назубок список функций прерывания 21h.

Русские программисты помнят всю раскладку английской и русской клавиатуры. Вы можете спросить посреди ночи, какая клавиша находится между A и L, вы будете удивлены ответом: "Какую из семи назвать?"

Русские программисты ненавидят Майкрософт и Майкрософтовские программы, но используют их.

Русские программисты предпочитают Borland, а Microsoft компиляторы инсталлируют только из-за того, что в них хороший help для Windows API.

Русские программисты в Интернете чувствуют себя очень комфортно. Они предпочитают всегда быть online, хотя бы просто потому, что может срочно что-то понадобиться.

Русские программисты всегда в настроении попрограммировать.

Есть два вида Русских программистов - первые ненавидят Windows и программируют под Unix, вторые ненавидят Windows и программируют под них. Макинтошевские программисты - не настоящие программисты - им больше подходит название - "юзеры".

Русские программисты нелюбят "кодировать" чью-то другую идею. Каждая программа пишется персонально.

Русские программисты всегда имеют копии Doom, Duke Nukem и Quake на их жестком диске. Они могут играть ночи напролет по сетке в Deathmatch.

Русские программисты никогда не используют джойстик. Клавиатура - вот главное оружие.

Русские программисты никогда не сдаются. Они могут вылавливать баги из их программы забыв о сне и еде.

Жены Русских программистов несчастны, потому как им не уделяется внимания, пока в доме есть хоть один компьютер.

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

Начальники не любят Русских программистов. А кто любит умника, который все знает?

Русские программисты не любят использовать шаблоны. Их программы - это индивидуально написанные произведения с большой долей импровизации. Причем, Русский программист старается во всю, чтобы побыстрее запустить программу и увидеть ее в работе.
Septimus
Ребят, короче проблема у меня (точнее, не совсем у меня, но все же) возникла такая трабла: сам я Паскаль уже заметно подзабыл (щас-то мы уже Delphi проходим), а моему другу надо пару задач решить. Поможете две задачки написать?
1. Опр-ть макс. знач-ия для каждого столбца каждой из трех матриц А (4x5), B (5x7), C (3x4).
2. Изм-ть матрицу, прибавляя к каждому отр. элементу пред. элемент той же строки. К первому элементу, если он отрицателен, прибавить последний элемент данной строки.
Guevara-chan
В порядке написания лабораторных работ за знакомую познакомилась с GNUтым Fortran'ом. Это - жесть. Кровельная. Луженая. Вот у кого стоит, если не сложно, проверьте на явные ошибки вывода (NaN, ******** и тому подобное):

Код
!! Компилировать с ключом -cpp, пожалуйста.
Program Uno !! Essential ?
!!{ -Preprocessing-
#define ArrowTip() Trim(Span(IChar('-'), 4))
#define DelimOut() Out(Trim(Span(IChar('='), 61)))
#define Equals(ValName, Value) ValName // " = " // FStr(Value)
#define Fn17(X) Testfn(Real(X), m, NotSoJ, k)
#define FStr(Value) Trim(StrF(Value))
#define IntStr(Value) Trim(Str(Value))
#define RequestVar(VarName, LB, HB) AskNumber("Укажите " // VarName // ": ", Real(LB), Real(HB))
#define Out(Text) Call TypeOut(Text // New_Line('A'))
!!}

!!{ -Structurization-
Type :: PointF
Real :: X, Y
End Type PointF

Parameter (JStart = 1)  !! Исходное значение итератора.
Character*(*),Parameter :: PosPrefix = ", достигнуто на узле #"
!!}

!!{ -Variables & Array-
Real :: h=.0, hReal=.0, Accum=.0, Umax=.0, Umin=.0, Aver=.0, AverSqr=.0, PShare=.0, NShare=.0, Bias=.0, m=.0, NotSoJ= .0, k = .0
Integer :: A=0, B=0, N=0, J=0, Jmin=0, Jmax=0, Total=0
Type(PointF), Allocatable :: Graph(:)
!!}
!!{ Main code
!! -Initialization-
Out(ArrowTip()//"> Задание #1, вариант 17 <"//ArrowTip()// New_Line('A'))           !! Заголовочная строка.
m = RequestVar("коэфф-т m", 1, 4)                                                   !! Ввод коэффициента m.
NotSoJ = RequestVar("коэфф-т j", 1, 4)                                              !! Ввод коэффициента j.
k = RequestVar("коэфф-т k", 1, 4)                                                   !! Ввод коэффициента k.
A = 0; B = 1; N = RequestVar("количество исследуемых узлов на отрезке", 50, 1000)   !! Первичные данные рассчетов.
h = 0.0 + (b - a) / (N - 1.0) !! Коэффициент шага.
Allocate (Graph(1:N))         !! Массив данных функции.
hReal = Real(b - a) / N       !! Коэффициент для рассчета удельных долей и среднеквадратичного.
J = JStart; Jmax = J; Jmin = J; Total = N - JStart + 1 !! Итератор и производные.
Accum = Fn17(a); Umax = Accum; Umin = Accum            !! Выходные данные.

!! -Data refactoring-
Do J = JStart, N
Graph(J)%X = A + (J - 1) * h  !! Значение псевдоабсциссы.
Graph(J)%Y = Fn17(Graph(J)%X) !! Значение ординаты.
Aver = Aver + Graph(J)%Y      !! Заранее считаем среднюю для оптимизации.
End Do; Aver = Aver / Total   !! Досчитываем среднюю.

!! -Result calulation-
Do J = JStart, N; Accum = Graph(J)%Y     !! Считываем значение функции на указанной точке.
If      (Accum > Umax) Then; Umax = Accum; Jmax = J !! Проверяем максимальное значение.
Else If (Accum < Umin) Then; Umin = Accum; Jmin = J !! ...и минимальное, да.
End If; AverSqr = AverSqr + Accum * Accum           !! Считаем сумму на средний квадрат
Bias = Bias + (Accum - Aver) ** 2                   !! Считаем квадратичное отклонение от среднего значения.
If (Accum > 0) Then; PShare = PShare + hReal        !! Считаем положительные значния.
Else If (Accum < 0) Then; NShare = NShare + hReal   !! Считаем отрицательные значения.
End If; End Do; AverSqr = AverSqr / Total           !! Досчитываем средний квадрат.

!! -Final Output-
DelimOut()
Out(Equals("Максимальное значение фи-и",Umax) // PosPrefix // IntStr(JMax))
Out(Equals("Минимальное значение фи-и", Umin) // PosPrefix // IntStr(JMin))
Out(Equals("Среднее значение функции", Aver))
Out(Equals("Средний квадрат ф-ии", AverSqr))
Out(Equals("Среднеквадратичное значение", Sqrt(AverSqr)))
Out(Equals("Доли положит. и отрицат. значений", PShare) // " / " // FStr(NShare))
Out(Equals("Среднеквадратичное отклонение от среднего", Sqrt(hReal * Bias)))
!!}

contains !! Почему здесь ? Да потому, что GNU - это лучшее, что было создано человечеством.
!!{ -functionality-
Real Function AskNumber(Request, LowBound, HiBound)     !! Формализованный запрос числа.
Character*(*) Request; Real LowBound, HiBound           !! Подготавливаем запрос.
Do; call TypeOut(Request); Read*,AskNumber             !! Ожидаем ввод и после преоверяем результаты:
If (AskNumber < LowBound .OR. AskNumber > HiBound) Then !! Проверяем границы ввода и если вдруг - рапортуем ошибку.
Out("ERROR: предпол. значение между " // FStr(Lowbound) // " и " // FStr(HiBound) // " !") !! Error goes there.
Else; Return; End If; End Do                            !! ...Иначе - мирно заканчиваем и выходим.
End Function

Real Function TestFn(X, m, j, k) !! Исследуемая функция.
Real X, m, j, k; TestFN = ASin(X ** m) - (1 - X ** J) ** k
End Function TestFn

Subroutine TypeOut(Text)         !! Абстрактизированный вывод текста.
Character*(*) Text; Write(*,"(A)", advance="no")Text
End Subroutine

Character(255) Function Span(Char, Length) !! Компиляция последовательности из указанных символов.
Integer Char, Length, I; Span = "";Do I=1, Length; Span(I:I+1) = AChar(Char); End Do
End Function

Character(15) Function StrF(Val) !! Фортран - это сила, друзья мои. Вы не знали ?
Real, intent(in) :: Val; StrF = ""; write (StrF,"(F10.4)") Val; StrF = adjustl(StrF)
End Function

Character(15) Function Str(Val)  !! ...Сила, вот как есть - сила.
Integer, intent(in) :: Val; Str = ""; write (Str, *) Val; Str = adjustl(Str)
End Function
!!}
End Program Uno
Guevara-chan
Ну, вот как-то так: http://vk.com/note104493218_12227861
О чем-то забыла ? Где-то недогнула ?
Guevara-chan
Min/Max без условных переходов, говорите ? OKay:

Код
Macro Def_Comparator(PName, sgn = +)
Procedure PName(Alfa, Omega)
Define Diff = Omega - Alfa, Factor = 0 sgn Sign(Diff)
ProcedureReturn Alfa +  Sign(Factor + 1) * Diff
EndProcedure
EndMacro

Def_Comparator(Max)
Def_Comparator(Min, -)

Debug Max(4, 2); 4, я полагаю.
Debug Min(7, 9); 7, я полагаю.

...Ну или так, да:

Код
Macro Def_Comparator(PName, op)
Procedure PName(Alfa, Omega)
ProcedureReturn Alfa + (-Bool(Alfa op Omega) & (Omega - Alfa))
EndProcedure
EndMacro

Def_Comparator(Max, <)
Def_Comparator(Min, >)
gamecreator
Очень хорошо, но выделываться в именах параметров можно и без ошибок.
Цитата(Guevara-chan @ 16 Feb 2014, 09:19) *
Alfa
Alpha же.
Guevara-chan
Ну, вариант "Alfa" всего в полтора раза менее популярен (109 миллионов против 141).

...Бонус для тех, кто усмотрел неявные If'ы в Sign:

Код
Procedure Sign_(Val)
ProcedureReturn Bool(Val >= 0) - Bool(Val <= 0)
EndProcedure

Debug Sign_(-10); -1, надо полагать ?
Debug Sign_(0); 0, надо полагать ?
Debug Sign_(10); 1, надо полагать ?
gamecreator
Он от этого правильнее не станет.
gamecreator
Цитата(Guevara-chan @ 16 Feb 2014, 11:24) *
Код
Procedure Sign_(Val)
ProcedureReturn Bool(Val >= 0) - Bool(Val <= 0)
EndProcedure
Чего ж не (unsigned(~Val ^ (Val - 1)))>>(sizeof(Val)*8-1)) & ((Val & (-1))>>(sizeof(Val)*8-1)) ? Условная операция - уже половина оператора выбора.
Guevara-chan
Тоже верно, но что-то рука не поднялась еще раз заведомо гробить поддержку чисел с плавающей точкой. Кстати, почти в тему:
http://vk.com/topic-30666517_29011944?post=151474 - внесла посильную лепту.

P.S. Чит (NaN может трактоваться и не как 0 при переводе в целое), но работает:

Код
Procedure Sign_(Val)
ProcedureReturn Int(Val / Abs(Val))
EndProcedure

...Я, однако, предпочту все же следующее усложнение (исходим из предположения, что NaN <> 0):

Код
Procedure Sign_(Val)
Define Factor.i = Val / Abs(Val), NaN.i = NaN()
ProcedureReturn Factor % NaN
EndProcedure
Orzie
Цитата(feanor @ 12 May 2014, 12:51) *
Истина - это все, что не ложь.

Цитата(feanor @ 12 May 2014, 12:51) *
И хватит казуистики.


STACK OVERFLOW
feanor
В первой строке задротская программистская шутка.

В С истиной действительно считается любое целочисленное значение, кроме нуля (хотя true все же равно единице). Так что истин там много, а ложь - одна.
tolich
Не только в C, но это всё ещё казуистика.
Orzie
Цитата(feanor @ 20 May 2014, 15:09) *
В первой строке задротская программистская шутка.

В С истиной действительно считается любое целочисленное значение, кроме нуля (хотя true все же равно единице). Так что истин там много, а ложь - одна.

Да это-то всё понятно, я просто о том, что казуистика как раз и предполагает определения "Счастье есть отсутствие несчастья".
hippocamus
Цитата(feanor @ 20 May 2014, 15:09) *
В первой строке задротская программистская шутка.

В С истиной действительно считается любое целочисленное значение, кроме нуля (хотя true все же равно единице). Так что истин там много, а ложь - одна.

В Delphi вроде тоже: Boolean(2) = True. Как бы "единица и больше" - истина. "ноль и меньше" - ложь. А вот Bool(2) - не гарантирую, что истина. Это не фактическое приведение, а особая операция.
gamecreator
Так разве в делфи можно писать конструкции вида if(2)?

Позже перенесу оффтопик.
hippocamus
Нельзя. Это прямое приведение типов.
Byte(-1) = 255.
Это не выражение на языке Delphi.
Однако
1: if 2 then goto 1;
даст бесконечный цикл.
или, красивее:
repeat until 2;
gamecreator
Какое ещё приведение типов? Мы про условия говорим.
Ну да ладно, в примере у тебя и так видно, что всё так же.
hippocamus
Ну, условие:
if Boolean(2) then ...;
только приведение к логическому типу и так подразумевается, поэтому можно написать:
if 2 then ...;
И это условие будет выполнено что в первом, что в втором случае. Потому что 2 = Boolean(2) = True (в условиях, конечно). Также как часто используемое мной выражение 2=3. Оно всегда даёт False, но оно в 100 раз нагляднее, чем само False.
(компилятор в данном случае не парится, сразу подставляя нужный результат. Так что производительность не страдает).
packa
Кто нибудь слышал про язык Rust?

Реквест максимальной инфы по нему, если кто распологает!)
Нужно в качестве огромного проекта.
tolich
From gmakers.ru:
Цитата
А я кстати придумал, как можно довольно легко и надёжно отличить мышь от тачскрина. По умолчанию запускать как тачскрин, но если игрок смог переместить курсор не нажимая ЛКМ - значит мышь.
Гениально же.
Guevara-chan
Немного некропостинга и гитхаб с Адвентом в функциональном стиле: https://github.com/Guevara-chan/Advent-of-Code-2017
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.