Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Языки программирования
DF2 :: ФОРУМЫ > Основные форумы > Софт и железо > Программирование / Coding
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Эроласт
Кто-нидь знает где можно о языках программирования прочесть? Желательно на русском. wink.gif
tolich
Цитата(Erolast @ 24 May 2011, 14:12) *
Кто-нидь знает где можно о языках программирования прочесть? Желательно на русском. wink.gif
Тут, например.
Эроласт
Ненавижу теорию мне бы практику smile.gif Ну, почитаю может там и есть какие-нидь примеры, я быстрее запомню примеры чем буду сидеть и мыслить над числами wink.gif
А да вроде есть ссылки, thank

Еще вопросик: какой язык щас самый используемый? А то я чайник я вообще нечего не знаю idontno.gif
packa
Цитата
какой язык щас самый используемый? А то я чайник я вообще нечего не знаю idontno.gif

Понятия не имею, но учу С++
Можешь начать с Pascal, с него по моему много народа начинало.
Эроласт
Уху вот только где можно к практике перейти в интернете? А то теорию лень читать, а так быстрее пойму smile.gif
tolich
Да-да, к чёрту гаммы, мне бы "Мурку" сыграть.
Эроласт
Цитата(tolich @ 24 May 2011, 18:14) *
Да-да, к чёрту гаммы, мне бы "Мурку" сыграть.

В яблочко! И гаммы так же скучно играть... elvis.gif Читать ноты и потом по ним играть интересней wink.gif
gamecreator
http://firststeps.ru/
а вообще сначала советую научиться программировать, а потом уже лезть к разным языкам. можешь на паскале учиться или на с++, более-менее понятные языки для начинающих.
Эроласт
Цитата(gamecreator @ 24 May 2011, 22:14) *
http://firststeps.ru/
а вообще сначала советую научиться программировать, а потом уже лезть к разным языкам. можешь на паскале учиться или на с++, более-менее понятные языки для начинающих.

Там немного не то. что мне надо, но все равно спасибо
tolich
Так телепаты все в отпуску.
Berserker
Не все. Я пока не ушёл.
Начните изучение программирования с реализации хуков на ассемблере методом сплайсинга.
Эроласт
Цитата(Berserker @ 25 May 2011, 18:13) *
Не все. Я пока не ушёл.
Начните изучение программирования с реализации хуков на ассемблере методом сплайсинга.

эээ, а для совсем чайников? smile.gif
tolich
Эроласт
Цитата(tolich @ 25 May 2011, 19:02) *

Аха, типа такого smile.gif

Цитата(Berserker @ 25 May 2011, 18:13) *
Не все. Я пока не ушёл.
Начните изучение программирования с реализации хуков на ассемблере методом сплайсинга.

Но я вообще имел ввиду как это по-русски будет? smile.gif
tolich
Цитата(Erolast @ 25 May 2011, 16:23) *
Цитата(Berserker @ 25 May 2011, 18:13) *
Начните изучение программирования с реализации хуков на ассемблере методом сплайсинга.
Но я вообще имел ввиду как это по-русски будет? smile.gif
Цитата
Но "панталоны", "фрак", "жилет" — всех этих слов на русском нет.
Сплайсинг.
Эроласт
thank
P.S. Прочел... Функция, функции, функцие и т.д. gigi.gif
packa
Если ты действительно не хочешь теорию, то забей на программирование.
Эроласт
Да где-то вроде была у меня книжка электронная про С++, прочту ее наверно smile.gif
Vizit0r
программирование разное бывает, да и теория тоже. кто-то считает, что программист, не знающий алгоритма работы black-red trees (какая элементарщина!) - ламер, и таких надо отстреливать, чтобы не позорили настоящих программистов, а кто-то прекрасно умеет компоновать чужие наработки с минимумом своего кода и получать на выходе отличный результат.
Все зависит от задачи.

имхо, поначалу надо слегка практики, чтобы понять - интересно оно вообще или нет, если да - тогда дальше совмещать практику с теорией.
gamecreator
Цитата(Erolast @ 25 May 2011, 19:01) *
Да где-то вроде была у меня книжка электронная про С++
какая? с++ за 21 день? gigi.gif
Эроласт
Да не знаю просто знаю что есть где-то wink.gif
packa
Хватить хренью маяться, делом уже займись.
Berserker
Раз сплайсинг уже изучен, можно переходить к алгоритмам реализации нестационарного беспоискового корреляционного дискриминатора сдвига изображений.
Эроласт
Сплайсинг-то не изучен, но я вообще не понял о чем идет речь... Я поолный чайник gigi.gif
tolich
Так Берс понял, что ты полный чайник и поставил тебя на огонь, теперь ждёт, когда ты закипишь. gigi.gif
ChASnock
Отличная шутка happy.gif

Нет, правда. smile.gif
Эроласт
Не, не получится мне закипеть, в меня бочку соли высыпали smile.gif
tolich
Программка для Microsoft C++, просеивает числа через решето Эратосфена.
CODE
#include <memory.h>
#include <stdio.h>

typedef unsigned int uint;
typedef unsigned char uchar;

struct set{
uchar *data;
bool testBit(uint i);
void setBit(uint i);
void fill(bool val);
set() { data=new uchar [0x20000000]; }
~set() { delete [] data; }
}
erathosphen;

void set::setBit(uint i)
{
data[i>>3] |= (1<<(i&7));
}

bool set::testBit(uint i)
{
return ((data[i>>3]>>(i&7))&1)==1;
}

void set::fill(bool val)
{
memset(data,val?255:0,sizeof data);
}

void filter(uint value)
{
if(erathosphen.testBit(value)) return;
printf("\r%u",value);
uint i=value*2;
while(i<=0x80000000) { erathosphen.setBit(i); i+=value; }
while(i> 0x80000000) { erathosphen.setBit(i); i+=value; }
}

int main()
{
erathosphen.fill(false);

erathosphen.setBit(0);
erathosphen.setBit(1);

filter(2); filter(3);
for(uint i=6; i<65536; i+=6){
filter(i-1); filter(i+1);
}

printf("\nWriting grid");
FILE *file=fopen("eragrid.bin","wb");
if ( file ) {
fwrite(erathosphen.data,1,0x20000000,file);
fclose(file);
}

printf("\nWriting primaries");
file=fopen("primary.bin","wb");
if ( file ) {
for(uint i=0; i<0xFFFFFFFE; ++i){
if(!erathosphen.testBit(i))
fwrite(&i,4,1,file);
}
fclose(file);
}

return 0;
}


Be warned!

Общий объём результирующих файлов приближается к полутора гигабайтам.

Etoprostoya
1) Какого [censored] в теге кода отображаются смайлы!?
2)
Код
    for(uint i=0; i<0xFFFFFFFE; ++i){
      if(!erathosphen.testBit(i))
        fwrite(&i,4,1,file);
    }
Кошмар!
tolich
Не волнуйся, начальная фильтрация всё равно дольше.
Etoprostoya
Я заметил, но этот цикл впечатлил особо.
tolich
P.S. Смайлы поправил.

Цитата(etoprostoya @ 31 May 2011, 13:08) *
Я заметил, но этот цикл впечатлил особо.
А что в нём не так?


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

Можно было, кстати, вообще хранить только данные для чисел 6*i±1.
Etoprostoya
Для меня это примерно как
Код
for(uint i=0; i; ++i)

бесконечный цикл с записью в файл. Да там вообще всё не так. Пример того, как не надо писать программы.
tolich
Ты не прав, Борис, цикл не бесконечный. Даже если бы там стояло 0xFFFFFFFF, кстати. А всё потому, что шаг всего 1. Вот с фильтрацией пришлось поколдовать, ибо переполнение.

Цитата(etoprostoya @ 31 May 2011, 13:13) *
Для меня это примерно как
Код
for(uint i=0; i; ++i)

бесконечный цикл с записью в файл. Да там вообще всё не так. Пример того, как не надо писать программы.

Це ж не бесконечный. lupa.gif
Etoprostoya
Цитата(tolich @ 31 May 2011, 14:18) *
Ты не прав, Борис, цикл не бесконечный.

Цитата(tolich @ 31 May 2011, 14:18) *
Код
for(uint i=0; i; ++i)

Це ж не бесконечный. lupa.gif

Ну да, всего лишь 4 миллиарда прогона цикла gigi.gif
В каждом прогоне проверка, которая идёт не правильно, как ты и сказал, с переполнением 32-битного регистра.
В каждом втором, примерно, прогоне идёт запись в файл. Причём записывается информация из блоков памяти, чтение которых, как я понимаю, скорее всего будет невозможно в нормальной ОС.
Код
fwrite(&i,4,1,file)
При i=0 откуда будет читаться?
tolich
Цитата(etoprostoya @ 31 May 2011, 14:00) *
Ну да, всего лишь 4 миллиарда прогона цикла gigi.gif
Ты так говоришь, как будто это что-то плохое.
Цитата(etoprostoya @ 31 May 2011, 14:00) *
В каждом прогоне проверка, которая идёт не правильно, как ты и сказал, с переполнением 32-битного регистра.
А где я сказал, что это неправильно? На самом деле, так задумано.
Цитата(etoprostoya @ 31 May 2011, 14:00) *
Причём записывается информация из блоков памяти, чтение которых, как я понимаю, скорее всего будет невозможно в нормальной ОС.
Тащемта, в файл записывается непосредственно значение i, все 4 байта.

Программа строит битовое множесто на 4294967296 элементов (которое хранится упакованным в байты по 8 bool-ов), в котором будут исключительно составные числа, методом "решета Эратосфена".
Потом записывает это множество на диск, а рядом записывает все числа, которые в это множество не входят.
Где ошибка? По-моему, всё правильно. Что самое забавно, программа работает, и файлы генерирует.

К слову:
Цитата(etoprostoya @ 31 May 2011, 14:00) *
в нормальной ОС
Это в какой именно?
Etoprostoya
>> Ты так говоришь, как будто это что-то плохое.
Ты так говоришь, как будто это нормально. К тому же я неуверен, что смогут записаться все те 4 миллиарда, а не 2Гб. Это зависит, конечно, от системы.

>> Тащемта, в файл записывается непосредственно значение i
Странно. Я это понимаю не так:
Код
uint i=0;
fwrite(&i,4,1,file) //fwrite(const void*p, size_t size,size_t n,FILE*f);

- неправильно
Код
uint i=0;
fwrite(&erathosphen.data[i],4,1,file);

- правильно

>> Это в какой именно?
В ОС, в которой можно читать не всё подряд, а только то, что можно с правами пользователя. Грубо говоря, в ОС с виртуализацией памяти, если я правильно выразился.
tolich
Цитата(etoprostoya @ 31 May 2011, 16:34) *
Странно. Я это понимаю не так:
Код
uint i=0;
fwrite(&i,4,1,file) //fwrite(const void*p, size_t size,size_t n,FILE*f);

- неправильно
Код
uint i=0;
fwrite(&erathosphen.data[i],4,1,file);

- правильно

Неправильно понимаешь. В файл записывается значение, хранящееся в переменной i, именно для этого в fwrite передаётся её адрес и размер, а не фрагмент erathosphen.data.
Ещё раз: во второй файл записываются те и только те значения i, которые отсутствуют в множестве erathosphen. Размер primary.bin не 4Г, а всего-то 813120884 байт — всё-таки простые числа встречаются не часто.
Etoprostoya
Понятно. Идиотизма Странностей в алгоритме стало чуть-чуть меньше. Но меня вы не заставите применять такую программу, даже если
Цитата
хранить только данные для чисел 6*i±1
tolich
Ну, если тебе внезапно понадобится решето Эратосфена, никто тебя не будет под пытками заставлять использовать мою программу. Ты вполне можешь придумать реализацию покрасивше.
К тому же, моя реализация очень ограничена — выдаёт простые числа только в пределах первых четырёх милливардов. В реальных приложениях (той же криптографии) частенько требуются простые числа куда как больше.
Etoprostoya
Ограничение в 4 миллиарда - естественное ограничение для 32 бит, так что могу и воспользоваться, если будет нужно и если программа достаточно быстра.
А для бОльших чисел нужно использовать 64-битную арифметику или длинные числа.
Критикую так потому, что алгоритм мне кажется странным, а комментариев нет.
tolich
Тут мне задали вопрос, действительно ли xorswap работает быстрее, чем использование доп. переменной. Подумав, я понял, что
Цитата
Цитата
А такая беда только в гамаке или в любом языке?
В других языках есть целые переменные. А насчет быстродействия, скажем, для Си:
Код
int t=x; x=y; y=t;
скорее всего, превратится в
Код
mov EAX,x // а x,y и t что-то навроде [EBP+число]
mov t,EAX
mov EAX,y
mov x,EAX
mov EAX,t
mov y,EAX
А
Код
x^=y; y^=x; x^=y;
в
Код
mov EAX,x
xor y,EAX
mov EAX,y
xor x,EAX
mov EAX,x
xor y,EAX

Учитывая, что на современных процессорах и mov, и xor выполняются за 1 такт, разницы никакой, только аж 4 байта памяти экономится.
Etoprostoya
К предыдущему посту.
Код программы

Компиляция
Код
cl /O2 /FAcs memswap.cpp

Код функций в асме

Результат
Код
E:\Projects\2>memswap.exe
Time to swap with temporary var is 1328
Time to swap with XOR is 1328


P.S. Сейчас попробую на интеловском оптимизирующем компиляторе попробовать.

Код
E:\Projects\2>memswap.exe
Time to swap with temporary var is 156
Time to swap with XOR is 234

Интеловский компилятор оправдал мои ожидания и обманул меня, переиначив алгоритм. gigi.gif
По сути, результат тот же, но алгоритм другой.
tolich
Оптимизация, конечно, наше всё, но как научить компилятор использовать XCHG?

Код
mov eax,x
xchg eax,y
mov x,eax
lol?

Или интеловский компилятор его использует? 0_0
Etoprostoya
Нет, интеловский компилятор это не использует и вообще рекомендуют
Цитата('Intel Optimization Reference Manual')
minimize the use of xchg instructions on memory locations


А там, где интеловский компилятор в несколько раз обогнал по быстродействию программ, он просто переиначил двойной цикл
for(;i<1000;i++) for(;j<100000;j++)
в
for(;j<100000;j++) for(;i<1000;i++)
что, естественно, быстрее, так как подгружать маленькие блоки памяти можно быстрее. То есть, компилятор оптимизировал работу с памятью и всё, а майкрософтский не додумался до этого.
gamecreator
Цитата(etoprostoya @ 31 May 2011, 14:00) *
Ну да, всего лишь 4 миллиарда прогона цикла gigi.gif
в нормальных компиляторах
Код
for(uint i=0; i; ++i)
это 0 прогонов цикла
tolich
Да и в ненормальных тоже.

Этопростоон явно имел в виду:
Код
for(uint i=0; ; ++i)

ибо для uint i выражение i<0xFFFFFFFE всегда было бы true, если uint 16-битный.
gamecreator
где мы, а где 16битные процессоры?
tolich
Хм, я еще и восьмибитные не забыл.
Etoprostoya
А я четырёхбитный придумывал smile.gif

Серьёзно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.