Форум сети D-Lan

Электроника => Персональный компьютер => Программирование => Тема начата: Catcatcat от 27-07-2011, 11:02:52

Название: Программрование для чайников.
Отправлено: Catcatcat от 27-07-2011, 11:02:52
В этой теме только вопросы по программированию и их возможное решение.
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 27-07-2011, 11:08:14
Вопрос у меня есть в программе некая битовая структура.

например

struct  {
unsigned    hi : 1;
unsigned    di : 1;
unsigned    lo : 1;
} foo;

Мне необходимо в процессе выполнения программы все биты сбросить в ноль. Возможно ли это сделать одной командой или прийдется каждый бит обнулять в отдельности?
Название: Re: Программрование для чайников.
Отправлено: Sasha от 27-07-2011, 11:14:56
struct  {
unsigned    hi : 1;
unsigned    di : 1;
unsigned    lo : 1;

void reset()
{
hi = 0;
di = 0;
lo = 0;
}
} foo;


foo.reset();
Название: Re: Программрование для чайников.
Отправлено: Sasha от 27-07-2011, 11:19:16
Не могу вспомнить что означает hi : 1 в с++ ?
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 27-07-2011, 11:24:45
Меня интересует вопрос эффективности кода, в этом случае я так понимаю, компилятор все равно (мне так кажется) составит три команды по обнулению битов. Хотя надо проверить. Ассемблером это можно сделать за одну команду. И меня интересует задача как это сказать компилятору, что бы он меня правильно понял.

В общем, протестирую и сообщу, как мой компилятор меня понял.

За ответ Спасибо.
Название: Re: Программрование для чайников.
Отправлено: Sasha от 27-07-2011, 11:24:57
И еще объясни плиз что будет если написать unsigned hi, и не указать тип (я думал к примеру unsigned int hi и если без int, то компилятор не съест), что-то я смотрю начал уже порядком подзабывать си...
Название: Re: Программрование для чайников.
Отправлено: Sasha от 27-07-2011, 11:25:40
Ответь на последний вопрос и тогда может еще что-то посоветую.
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 27-07-2011, 11:25:47
Цитата: Sasha от 27-07-2011, 11:19:16
Не могу вспомнить что означает hi : 1 в с++ ?

в моем вопросе это просто название битов.
Название: Re: Программрование для чайников.
Отправлено: Sasha от 27-07-2011, 11:28:15
Переформулирую, что делает оператор : ?
Название: Re: Программрование для чайников.
Отправлено: Sasha от 27-07-2011, 11:34:16
Вобще тема битовых операций в си прошла мимо меня.
Если бы это было с++ я бы взял массив bool переменных, так как они занимают в памяти именно 1 бит, но одним махом все не обнулишь. Для этого можно объявить к примеру переменную типа short или byte(я не помню есть ли такой тип в Си) и работать с его младшими 3 битами. Тогда при обнулении этой переменной обнуляться и все ее биты.
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 27-07-2011, 11:35:01
В моем примере

struct {
unsigned    bi01 : 1;
unsigned    bi02 : 1;
unsigned    bi03 : 1;
} foo;

это битовая структура

обращаться к ней можно

foo.bi01=1; // устновить бит в 1;
foo.bi02=0; // сбросить бит в 1;


unsigned (то что значение не может быть отрицательным)    bi01 (имя)  : 1 (размерность в битах);
Название: Re: Программрование для чайников.
Отправлено: Sasha от 27-07-2011, 11:43:05
Не знаю. Кроме как работать с разрядами одной переменной я других простых вариантов решения твоего условия не вижу.
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 27-07-2011, 11:43:24
В моем случае компилятор ориентирован для работы со встроенными системами (PIC-контроллеры). В нем свои заморочки. Бит как тип имеется (булевые - нет). И еще приходится бороться оптимизатором (если он всклочен, а он должен быть включен), если он определяет, что бредовый код, просто выкидывает его. Сидишь и лупаешь глазами ???
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 27-07-2011, 11:45:53
Спасибо за ответ. Мне понравилось описание функции сброса. Я считаю оригинальное, попробую, сообщу, как это эффективно или нет.
Название: Re: Программрование для чайников.
Отправлено: Sasha от 27-07-2011, 11:46:28
Модификатор volatile защищает переменную от оптимизации.
Если не получится, вечером еще один вариант напишу.
Название: Re: Программрование для чайников.
Отправлено: Jeka от 27-07-2011, 19:26:18
Цитата: Catcatcat от 27-07-2011, 11:35:01
В моем примере

struct {
unsigned    bi01 : 1;
unsigned    bi02 : 1;
unsigned    bi03 : 1;
} foo;

это битовая структура

обращаться к ней можно

foo.bi01=1; // устновить бит в 1;
foo.bi02=0; // сбросить бит в 1;


unsigned (то что значение не может быть отрицательным)    bi01 (имя)  : 1 (размерность в битах);
Однако очень часто структуры помогают экономить память благодаря использованию так называемых битовых полей. в этом случае объявление поля структуры имеет вид
объявление_поля: константное выражение
объявление_поля - объявление типа и имени поля структуры ;
константное_выражение определяет длину поля в битах
Название: Re: Программрование для чайников.
Отправлено: Jeka от 27-07-2011, 19:43:45
Цитата: Catcatcat от 27-07-2011, 11:08:14
Вопрос у меня есть в программе некая битовая структура.

например

struct  {
unsigned    hi : 1;
unsigned    di : 1;
unsigned    lo : 1;
} foo;

Мне необходимо в процессе выполнения программы все биты сбросить в ноль. Возможно ли это сделать одной командой или прийдется каждый бит обнулять в отдельности?
да по отдельности. цель структуры как раз сделать переменную, которая будет состоять из нескольких полей, к которм можно получать раздельный доступ. например
struct StudentStruct
{
    *char Name;
    *char ThirName;
     int Age
}Student
врядли будет необходимость обнулять к примеру все эти поля...
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 27-07-2011, 20:39:44
Цитироватьврядли будет необходимость обнулять к примеру все эти поля...

вот эта "врядли2 и понадобилась
Название: Re: Программрование для чайников.
Отправлено: Jeka от 27-07-2011, 22:53:43
Цитата: Catcatcat от 27-07-2011, 20:39:44
Цитироватьврядли будет необходимость обнулять к примеру все эти поля...

вот эта "врядли2 и понадобилась
по отдельности обнули))
Название: Объясните на пальцах
Отправлено: Catcatcat от 15-08-2011, 11:21:20
Язык Си.
Задача такая. Я написал функцию и хочу её использовать в других своих проектах. Как это правильно сформировать в библиотеку? Какой сам принцип объявления функций в заголовочных файлах .h?
Название: Re: Программрование для чайников.
Отправлено: Sasha от 15-08-2011, 12:38:09
Особых правил никаких. Если более менее новая среда разработки выбираешь проект типа библиотека заголовочных файлов и оно тебе сгенерит некоторые мета данные, которые не являются обязательными. Открой какой-нить h файл готовый и посмотри что там.
Название: Re: Программрование для чайников.
Отправлено: Sasha от 16-08-2011, 19:20:31
Рейтинг языков программирования
http://www.developers.org.ua/lenta/articles/programming-languages-rating-2011-07/
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 16-08-2011, 19:58:26
А что это за язык 1C?
от куда у него ноги ростут?
Название: Re: Программрование для чайников.
Отправлено: Sasha от 16-08-2011, 22:09:35
Это чтото типа языка для бухгалтеров. Я точно хз.
Название: Re: Программрование для чайников.
Отправлено: Jeka от 16-08-2011, 23:03:57
1C - это типа язык программирования для среды 1с-Бухгалтерия))
Название: Re: Программрование для чайников.
Отправлено: Jeka от 20-08-2011, 14:27:39
вчера со мной долго и нудно спорил один двоешник (он сам сказал что знает языки программирования плохо) из одного из Львовских вузов специальности "Управление автоматизированными системами"! Он сказал что знает язык "Делфи") я попытался объяснить что делфи - это не Язык а Среда программирования, в которой используется язык Object Pascal. Но он с пеной у рта доказывал, что у него книга на 1000 страниц, в которй написано что это язык)) Я уж засомневался, и решил проверить:
Delphi (Де́лфи, произносится /ˈdɛlˌfi/[1]) — среда программирования, в которой используется язык программирования Object Pascal.[2]
:) :) :) :) :)
Название: Re: Программрование для чайников.
Отправлено: Proydoha от 20-08-2011, 14:51:52
Цитата: Jeka от 20-08-2011, 14:27:39
вчера со мной долго и нудно спорил один двоешник (он сам сказал что знает языки программирования плохо) из одного из Львовских вузов специальности "Управление автоматизированными системами"! Он сказал что знает язык "Делфи") я попытался объяснить что делфи - это не Язык а Среда программирования, в которой используется язык Object Pascal. Но он с пеной у рта доказывал, что у него книга на 1000 страниц, в которй написано что это язык)) Я уж засомневался, и решил проверить:
Delphi (Де́лфи, произносится /ˈdɛlˌfi/[1]) — среда программирования, в которой используется язык программирования Object Pascal.[2]
:) :) :) :) :)

Имел похожий разговор со своим одногруппником. Только тот понятливый, не спорил, а принял к сведению.
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 20-08-2011, 15:15:57
Одногруппники это куда не шло, а вот "проффесора" которые обучают..., мне такие попадались, этих тупорылых не переубедишь. >:(
Название: Re: Программрование для чайников. - Microsoft Visual Studio 2010
Отправлено: Catcatcat от 23-08-2011, 11:27:39
Добрался я до USB. т.е. связь устройства с компьютером. Поставил абсолютно бесплатную Microsoft Visual Studio 2010.
Делаю первые шаги в программировании на Си для виндов.

устройство  (для тестирования)
(http://lostpic.net/images/ec9f60c1d1829c6839a6a2175633369b.png)

программа
(http://lostpic.net/images/a2064d1e5ba6c273a59d6735f072f8f9.png)

Посоветуйте литературу по Microsoft Visual Studio 2010.
И если кто-то в нем шарит, расскажите на пальцах как скомпоновать файл, чтобы он был переносимым?
Название: Re: Программрование для чайников.
Отправлено: Sasha от 26-08-2011, 10:32:26
Если не ошибаюсь в абсюлютно бесплатной VS есть абсолютно ограниченный триал. Из книг я бы посоветовал у себя на ftp книгу Пахомова, она написана для VS 2008, но существенных различий нет. Правда в ней (как и во всех подобных книгах, которые я встречал) больше упор идет на работу с компонентами и т.д. Я щас не помню что там есть по настройке проектов и прочих тонкостях студии. Поройся у меня на фтп, если ничего не найдешь подходящего задавай конкретные вопросы мне в скайп или аську (лучше скайп)
Название: Re: Программрование для чайников.
Отправлено: Sasha от 26-08-2011, 10:36:57
На счет переносимым, то смотря что ты имеешь в виду.
Если я правильно предполагаю твои цели, то думаю тебе поможет изменить на верхней панеле комбобокс из debug на release. Тогда экзешник появится в папке с проектом каталог bin/release и он должен легко запускаться на любой винде. Если ты писал не на простом с++, а на .net, то естественно на компьютере пользователя должен быть установлен .net framework соответствующей версии.
Название: Re: Программрование для чайников.
Отправлено: Sasha от 01-09-2011, 11:17:30
20 бесплатных дополнений для Visual Studio (http://habrahabr.ru/blogs/vs/127425/)
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 01-09-2011, 12:00:42
вопрос
у меня есть буфер unsigned char INBuffer[65];   

я хочу взять любой байт преобразовать в текст (получить число) и вывести в Label

temp02_lbl->Text = INBuffer[1];

каким боком его в текст преобразовать?
это для MVS2010 C++
Название: Re: Программрование для чайников.
Отправлено: Sasha от 01-09-2011, 12:22:03
В VS есть 2 вида с++: .net и классический (хотя тут я могу быть немного неточным).
1) В случае с первым все классы производятся от базового класса Object (это поймут те кто знаком с наследованием) у которого есть метод ToString, который соответственно доступен всем объектам. temp02_lbl->Text=INBuffer[1]->ToString(); примерно так.
Теперь варианты которые могут быть применимы в любом случае.
2) Конструктор класса String имеет перегрузку которая принимает тип char. Он принимает 2 параметра: сам символ, и сколько раз его нужно повторить (по крайней мере так в шарпе, я думаю в с++ будет так же, а если нет среда разработки все равно подскажет какие есть варианты). В таком случае все гдето так: temp02_lbl->Text=new String(INBuffer[1], 1)
3) Изврат с atoi, itoa - но это точно не есть правильное решение в данном случае

И мне опять не понятен смысл объявлять буфер как unsigned. Хотя если это опять какая-то примочка из мира микроконтроллеров то ладно.
Название: Re: Программрование для чайников.
Отправлено: Proydoha от 01-09-2011, 13:36:10
Цитата: Sasha от 01-09-2011, 12:22:03
3) Изврат с atoi, itoa - но это точно не есть правильное решение в данном случае

Вопрос без подвоха: преобразовывать типы с помощью атой, итоа и других похожих штук - это честно-пречестно изврат?
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 01-09-2011, 14:21:48
Надо все учить с начала, а то толку с наскока не будет :-[
Название: Re: Программрование для чайников.
Отправлено: Jeka от 01-09-2011, 14:25:02
Цитата: Proydoha от 01-09-2011, 13:36:10
Цитата: Sasha от 01-09-2011, 12:22:03
3) Изврат с atoi, itoa - но это точно не есть правильное решение в данном случае

Вопрос без подвоха: преобразовывать типы с помощью атой, итоа и других похожих штук - это честно-пречестно изврат?
мне это функцию на 1 курсе советовала препод ))) делай выводы
Название: Re: Программрование для чайников.
Отправлено: Sasha от 01-09-2011, 16:10:15
Цитата: Proydoha от 01-09-2011, 13:36:10
Цитата: Sasha от 01-09-2011, 12:22:03
3) Изврат с atoi, itoa - но это точно не есть правильное решение в данном случае

Вопрос без подвоха: преобразовывать типы с помощью атой, итоа и других похожих штук - это честно-пречестно изврат?

Ну начнем с того что она просто не подходит для данной задачи, хотя извратиться с ее помощью можно было бы.
Продолжим тем что функции эти родом еще из Си, использование Сишных функций в С++, а уж тем более в .net вопрос сугубо личных религиозных убеждений. Конечно если функцие существует более новый аналог, то логично было бы юзать его, но и за использования устаревших функций уголовной ответственности никто не понесет. При неплохо знать возможные недостатки устаревших функций из-за которых они могли быть заменены.
Название: Re: Программрование для чайников.
Отправлено: Sasha от 01-09-2011, 16:14:43
Я помню на первом курсе не зная вобще библиотечных функций для символьно-цыфровых преобразований решал проблему добавляя и отнимая 30 от переменных. Вот это казалось бы на самом деле изврат. А на самом деле тяжело придумать метод, который бы работал быстрее)
Если кому непонятен принцип таких манипуляций, могу объяснить немного позже.
Название: Re: Программрование для чайников.
Отправлено: Sasha от 01-09-2011, 16:15:39
Цитата: Catcatcat от 01-09-2011, 14:21:48
Надо все учить с начала, а то толку с наскока не будет :-[
Если не получилось скинь мне солюшн, я вечером гляну как решить проблему и все объясню.
Название: Re: Программрование для чайников.
Отправлено: Jeka от 01-09-2011, 16:16:26
Цитата: Proydoha от 01-09-2011, 13:36:10
Цитата: Sasha от 01-09-2011, 12:22:03
3) Изврат с atoi, itoa - но это точно не есть правильное решение в данном случае

Вопрос без подвоха: преобразовывать типы с помощью атой, итоа и других похожих штук - это честно-пречестно изврат?
а че конкретно куда надо преобразовать то?))
Название: Re: Программрование для чайников.
Отправлено: Sasha от 01-09-2011, 16:22:21
Цитата: Jeka от 01-09-2011, 16:16:26
Цитата: Proydoha от 01-09-2011, 13:36:10
Цитата: Sasha от 01-09-2011, 12:22:03
3) Изврат с atoi, itoa - но это точно не есть правильное решение в данном случае

Вопрос без подвоха: преобразовывать типы с помощью атой, итоа и других похожих штук - это честно-пречестно изврат?
а че конкретно куда надо преобразовать то?))
a в i, а i в а)
Название: Re: Программрование для чайников.
Отправлено: Proydoha от 01-09-2011, 16:46:44
Цитата: Jeka от 01-09-2011, 16:16:26
а че конкретно куда надо преобразовать то?))

Имел дела с С++ ровно два раза.

Преобразование типов в С++ показалось мне чем-то ужасающе странным.
Название: Re: Программрование для чайников.
Отправлено: Jeka от 01-09-2011, 23:00:51
столкнулся с проблемой! в языке c#. мне необходимо запомнить последнюю выбранную папку в компоненте FolderBrowserDialog, сохранить ее в файл и потом при загрузке формы установить этот путь в качестве по-умолчанию. последнее сделать мне не удается, поскольку свойство RootFolder может принимать лишь данные типа SpecialFolder - который в свою очередь является перечислением и состоит из такой фигни как -рабочий стол, мои документы, папки Program Files, System,,, MyPictures,MyMusic итд итп. как можно все-же установить в ручную путь который нужен мне - к примеру D:\Music ???
Название: Re: Программрование для чайников.
Отправлено: Sasha от 01-09-2011, 23:10:32
Если тебе нужно запомнить какой-то выбор пользователя (персональные настройки, опции и т. д.), то эти сведения принято записывать в системный реестр.
Если я правильно понял, ты хочешь сделать так, чтобы при открытии диалога выбора папки открывалась последняя папка, которая выбиралась, попробуй сериализовать объект класса диалога. Попробуй все же использовать ту форму что я в интернете нашел, может для нее это можно будет просто реализовать.
Название: Re: Программрование для чайников.
Отправлено: Jeka от 03-09-2011, 11:12:26
Дуже потрібна допомога з сі шарпу. на формі є компонент Chart, що послуговується для відображення графіків. я хочу додати точку (у двовимірному просторові) на цей графік. для цього послуговується метод chart1.Series[0].Points.AddXY(double,double); також на формі є компонент dataGridView для выдображення даних у формі таблиці. мені необхідно побудувати графік на основі даних з таблиці. отже я намагаюсь це зробити за допомогою такого рядку програмного коду:
chart1.Series[0].Points.AddXY((double)(dataGridView1[0,i].Value),(double)(dataGridView1[1,i].Value)); де i - поточний нумер рядка таблиці.
На етапі виконання генерується виняток "Заданное приведение является недопустимым." прошу допомоги
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 05-09-2011, 12:58:58
Вопрос знатокам C++

Имеются переменные
unsigned chat a;
unsigned Int b;

мне необходимо байт данных переменной, а вставить во второй байт переменной b
например,
                      b = 00000000 00000001;
                      a = 00010100;

в результате должно получиться b= 00010100 00000001;

Как это можно сделать в C++, можно ли использовать malloc и как?
Название: Re: Программрование для чайников.
Отправлено: Jeka от 05-09-2011, 15:47:37
Цитата: Catcatcat от 05-09-2011, 12:58:58
Вопрос знатокам C++

Имеются переменные
unsigned chat a;
unsigned Int b;

мне необходимо байт данных переменной, а вставить во второй байт переменной b
например,
                      b = 00000000 00000001;
                      a = 00010100;

в результате должно получиться b= 00010100 00000001;

Как это можно сделать в C++, можно ли использовать malloc и как?
пользуемся шеснацатиричными константами вида 0X или 0x
Мое видение (наверно есть и проще варианты).
для начала превратим в 1цы старший байт слова b. для этого сделаем операцию b|0xF.
теперь имеется b=11111111 0000001
теперь делаем дизъюнкцию b и A (где а становится старшим байтом слова A, а младшая часть - нули). то бишь b|A.
Младшая  часть b при этом не меняется , а старшая часть превращается в a.
Название: Re: Программрование для чайников.
Отправлено: Jeka от 05-09-2011, 15:53:04
Цитата: Jeka от 03-09-2011, 11:12:26
Дуже потрібна допомога з сі шарпу. на формі є компонент Chart, що послуговується для відображення графіків. я хочу додати точку (у двовимірному просторові) на цей графік. для цього послуговується метод chart1.Series[0].Points.AddXY(double,double); також на формі є компонент dataGridView для выдображення даних у формі таблиці. мені необхідно побудувати графік на основі даних з таблиці. отже я намагаюсь це зробити за допомогою такого рядку програмного коду:
chart1.Series[0].Points.AddXY((double)(dataGridView1[0,i].Value),(double)(dataGridView1[1,i].Value)); де i - поточний нумер рядка таблиці.
На етапі виконання генерується виняток "Заданное приведение является недопустимым." прошу допомоги
))) сам додумался. оказывается по умолчанию при конвертации в формат double числовой разделитель для нашего региона это запятая, и пришлось указывать CultureInfo "en-USA" или чтото в этом роде
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 05-09-2011, 16:09:40
Цитироватьтеперь делаем дизъюнкцию b и A (где а становится старшим байтом слова A, а младшая часть - нули). то бишь b|A.
Младшая  часть b при этом не меняется , а старшая часть превращается в a.

вот это я чето не понял, ты там еще руганулся как то... ;D

Я для себя так думаю, что то такое надо сделать

b=а<<8 | b;

сейчас посмотрю, будет работать или нет
Название: Re: Программрование для чайников.
Отправлено: Jeka от 05-09-2011, 16:14:08
Цитата: Catcatcat от 05-09-2011, 16:09:40
Цитироватьтеперь делаем дизъюнкцию b и A (где а становится старшим байтом слова A, а младшая часть - нули). то бишь b|A.
Младшая  часть b при этом не меняется , а старшая часть превращается в a.

вот это я чето не понял, ты там еще руганулся как то... ;D

Я для себя так думаю, что то такое надо сделать

b=а<<8 | b;


сейчас посмотрю, будет работать или нет
я не ругнулся))) | - эт я дизъюнкцией назвал) ты может имел в виду
b=b<<8|a ???

если даже так то не получится)) сдвиг b на 8 бит влево приведет к тому что та часть, кторая должна заменится на а, у тебя по сути заменяется старшим байтом b, а младший становится нулями. затем в результате a|b у тебя поулчется черти что
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 05-09-2011, 16:39:40
работает.

я имел в виду, сдвинуть а на 8 бит в лево, чтобы данные перешли во второй байт и сложить с b. получилось, только а надо в int  преобразовать, чтобы двигать было куда. Хотя для С++ это необязательно если b  int  все выражение будет вычисляться в "размерах" b
Название: Re: Программрование для чайников.
Отправлено: Jeka от 05-09-2011, 17:04:25
Цитата: Catcatcat от 05-09-2011, 16:39:40
работает.

я имел в виду, сдвинуть а на 8 бит в лево, чтобы данные перешли во второй байт и сложить с b. получилось, только а надо в int  преобразовать, чтобы двигать было куда. Хотя для С++ это необязательно если b  int  все выражение будет вычисляться в "размерах" b
ну конечно это проще чем мое решение, но твое решение работает только когда старшая часть слова b состоит исключительно из нулей, а в условии ты об этом не сказал, и мое решение работает для любой старшей части b
Название: Re: Программрование для чайников.
Отправлено: Sasha от 16-10-2011, 12:29:29
$a = 1.1 - 1;
$b = 0.1;
if ($a == $b)
{
  print "$a равно $b";
}
else
{
  print "$a не равно $b";
}

Рузультат
0.1 не равно 0.1
Вот так вот)
Название: Re: Программрование для чайников.
Отправлено: Proydoha от 16-10-2011, 13:52:01
Цитата: Sasha от 16-10-2011, 12:29:29
0.1 не равно 0.1
Вот так вот)

В чём подвох? : )

Я, если б такое увидел, сразу панически округлил бы оба числа до первого знака после запятой и посмотрел на результат.
Название: Re: Программрование для чайников.
Отправлено: Sasha от 16-10-2011, 14:16:08
Цитата: Proydoha от 16-10-2011, 13:52:01
Цитата: Sasha от 16-10-2011, 12:29:29
0.1 не равно 0.1
Вот так вот)

В чём подвох? : )

Я, если б такое увидел, сразу панически округлил бы оба числа до первого знака после запятой и посмотрел на результат.
И думаю это бы помогло) У меня не стоит ни аппач не IIS да и с PHP у меня не очень, так что если хочешь проверь что к чему)
Название: Re: Программрование для чайников.
Отправлено: Jeka от 20-10-2011, 19:35:05
Цитата: Proydoha от 16-10-2011, 13:52:01
Цитата: Sasha от 16-10-2011, 12:29:29
0.1 не равно 0.1
Вот так вот)

В чём подвох? : )

Я, если б такое увидел, сразу панически округлил бы оба числа до первого знака после запятой и посмотрел на результат.
приколы округления))) я такой фокус видел... там типа когда пишешь 0.1 то на самом деле это какой то 0.10000000..01
Название: Re: Программрование для чайников.
Отправлено: Sasha от 20-10-2011, 21:12:36
Цитата: Jeka от 20-10-2011, 19:35:05
Цитата: Proydoha от 16-10-2011, 13:52:01
Цитата: Sasha от 16-10-2011, 12:29:29
0.1 не равно 0.1
Вот так вот)

В чём подвох? : )

Я, если б такое увидел, сразу панически округлил бы оба числа до первого знака после запятой и посмотрел на результат.
приколы округления))) я такой фокус видел... там типа когда пишешь 0.1 то на самом деле это какой то 0.10000000..01
Саме так
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 05-11-2011, 21:31:15
встретилось такое выражение


crc  = (unsigned char)(crc >> 8 ) | (crc << 8 );

где, unsigned int   crc;

что делает (crc >> 8 ) | (crc << 8 ); это понятно,

а для чего перед этим влепили (unsigned char), что это означает?

я пробывал и без ЭТОГО работает одинаково. !?
Название: Re: Программрование для чайников.
Отправлено: Sasha от 05-11-2011, 21:42:06
явное приведение результата к типу unsigned char
Смысла особого наверно в данном случае в этом нет.
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 05-11-2011, 21:48:02
я понимаю, что  (unsigned char)(crc >> 8 ) | (crc << 8 ); должно получиться 8 бит полож.? результат все равно 16 бит.
что с   (unsigned char), что без.
Название: Re: Программрование для чайников.
Отправлено: Sasha от 05-11-2011, 22:11:22
правильно, потому что результат то все равно заносится в 4 байтную беззнаковою переменную. я ж говорю я хз какой в этом в данном случае смысл.
Название: Re: Программрование для чайников.
Отправлено: Jeka от 16-11-2011, 00:39:40
Пациент пришел к доктору - доктор ему дал 4 таблетки: по 2 таблетки 2ух видов и сказал принять 1 таблетку одного вида и вторую другого на завтрак и так же на ужин. пациент положил их в карман и они перемешались. внешне таблетки неразличимы - они на вкус цвет вес итд одинаковы. Как поступить пациенту чтобы выжить? если он выпьет 2 таблетки одного типа за раз - он умрет а если ничего не будет пить - умрет от болезни - мир жесток! Рисковать жизнью пациента нельзя - ответ должен тааким чтобы пациент однозначно остался жив - вероятности не подходят! как поступить пациенту?
кто первый правильно ответит - плюсик. Саша ты не участвуешь) без обид но твой ум программиста слишком силен для этого пусть подумают другие))
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 16-11-2011, 08:07:00
Легко – в условии задачи нет запрета, чтобы вернуться к доктору и взять новый комплект таблеток. :big081:
Название: Re: Программрование для чайников.
Отправлено: Sasha от 16-11-2011, 13:55:14
Цитата: Jeka от 16-11-2011, 00:39:40
Пациент пришел к доктору - доктор ему дал 4 таблетки: по 2 таблетки 2ух видов и сказал принять 1 таблетку одного вида и вторую другого на завтрак и так же на ужин. пациент положил их в карман и они перемешались. внешне таблетки неразличимы - они на вкус цвет вес итд одинаковы. Как поступить пациенту чтобы выжить? если он выпьет 2 таблетки одного типа за раз - он умрет а если ничего не будет пить - умрет от болезни - мир жесток! Рисковать жизнью пациента нельзя - ответ должен тааким чтобы пациент однозначно остался жив - вероятности не подходят! как поступить пациенту?
кто первый правильно ответит - плюсик. Саша ты не участвуешь) без обид но твой ум программиста слишком силен для этого пусть подумают другие))

Я хз :-[ Или здесь нужен реверс инжиниринг перемешивания таблеток?
Название: Re: Программрование для чайников.
Отправлено: Sasha от 16-11-2011, 14:24:05
В интернетах пишут что школьник решит эту задачу быстрее крутого математика, чувствую гдето ... .
Название: Re: Программрование для чайников.
Отправлено: Sasha от 16-11-2011, 14:36:10
Все, решение готово, но так как мне учавствовать почему-то запретили требую плюсик и поверить мне на слово что я решил правильно. Иначе забаню за то что написал пост не по теме)
Название: Re: Программрование для чайников.
Отправлено: Jeka от 16-11-2011, 21:39:07
Цитата: Catcatcat от 16-11-2011, 08:07:00
Легко – в условии задачи нет запрета, чтобы вернуться к доктору и взять новый комплект таблеток. :big081:
пациент бедный))) ладно решай задачу))) не балуйся)
Название: Re: Программрование для чайников.
Отправлено: Sasha от 18-11-2011, 18:15:05
Я думаю пора огласить правильный ответ.
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 18-11-2011, 19:20:44
а чего там, делишь таблетки на две части и съедаеш каждой по половинке
Название: Re: Программрование для чайников.
Отправлено: Jeka от 18-11-2011, 19:37:38
Цитата: Catcatcat от 18-11-2011, 19:20:44
а чего там, делишь таблетки на две части и съедаеш каждой по половинке
правильно. +1
Название: Re: Программрование для чайников.
Отправлено: Proydoha от 10-02-2012, 00:33:56
Меня мучает вопрос: есть ли какие-то рекомендации по наименованию переменных/функций/объектов/...?

Использовать только заглавные буквы? Использовать ли заглавные буквы вообще? Использовать нижнее подчёркивание для создания "пробела" между словами или писать слитно, разделяя слова заглавными буквами?

Каждый раз именую как попало, каждый раз страдаю из-за этого психологически! : )
Название: Re: Программрование для чайников.
Отправлено: Sasha от 10-02-2012, 00:55:29
У каждого языка свои рекомендации, конечно многое общее для всех (типа называть переменные осмысленно, не делать переменные отличающиеся только регистром (правда к примеру в шарпе нормальное дело если название переменной и ее свойство отличаются только регистром первой буквы, а студия сама может сгенерить метод и ему переменную с таким же именем как название метода, что не есть хорошо) и т. д.
Отдельные рекомендации могут быть составлены внутри скажем команды проекта. К примеру начинать имена закрытых переменных метода с буквы 'm' или использовать вместо скажем рекомендуемого в языке Pascal style - Camel style.
Современные IDE даже позволяют устанавливать расширения, которые будут следить чтобы стилистика кода совпадала с выставленной в настройках.
Название: Re: Программрование для чайников.
Отправлено: Proydoha от 05-06-2012, 00:04:00
Я часто вижу, что вместо использования функции возведения в степень для возведения в квадрат записывают просто число умноженное на себя же.
Или я вижу, что вместо использования tan(x) пишут sin(x)/cos(x).

Это имеет смысл?
Название: Re: Программрование для чайников.
Отправлено: Sasha от 05-06-2012, 09:47:32
Немного выигрываешь в быстродействии, немного проигрываешь в читабельности кода. По тому же принципу теоретически можно вместо x / 2 писать x << 1, результат один, работать (в теории) второй вариант будет быстрее, но зато об второй вариант в случае с сложным выражением можно сломать голову.
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 09-06-2012, 20:26:12
есть текстовый файл

            0x1C,0x22,0x7F,0x22,0x1C,   //
            0x44,0x28,0x10,0x28,0x44,   //
            0x7C,0x40,0x40,0x40,0xFC,   //
            0x0C,0x10,0x10,0x10,0x7C,   //
            0x7C,0x40,0x7C,0x40,0x7C,   //
            0x7C,0x40,0x7C,0x40,0xFC,   //
            0x04,0x7C,0x50,0x50,0x20,   //
            0x7C,0x50,0x20,0x00,0x7C,   //
            0x7C,0x50,0x50,0x20,0x00,   //
            0x28,0x44,0x54,0x54,0x38,   //
            0x7C,0x10,0x38,0x44,0x38,   //
            0x08,0x54,0x34,0x14,0x7C,   //

надо все байты зеркально развернуть
например                    0x54
двоичный                    01010100
после разворта            00101010
шестнадцатеричный     0x2A

есть какие то проги чтобы это на халяву и быстро сделать?
Название: Re: Программрование для чайников.
Отправлено: Sasha от 10-06-2012, 13:49:16
Attached
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 10-06-2012, 16:08:54
Большое спасибо за помощь, классно быть специалистом-программистом. ;D это круто. :big21:
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 30-05-2013, 12:16:22
Вопрос к Sasha
есть такое определение переменной
например

typedef unsigned long LBA;

typedef  - какой её смысл?
Название: Re: Программрование для чайников.
Отправлено: Sasha от 30-05-2013, 22:17:23
Директива препроцессора позволяющая задать псевдоним типу. Погугли примеры станет ппонятно.
Название: Re: Программрование для чайников.
Отправлено: Catcatcat от 31-05-2013, 07:52:31
спасибо уже в принципе понял