Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача 9-го класса 
V
    Опции темы
bass
Дата 23.9.2012, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 5.8.2007

Репутация: нет
Всего: 2



Что то я немного запутался..... Есть два графика, описаны массивом short (массив : значение графика1;значение графика2;значение графика1;значение графика2 ) Все значение через определленнй интервал.....
Задача вычеслить разницу между двумя граффиками и записать в массив......

Код


                short BufferStart=0;
                short BufferStart2=0;
                CopyMemory(&BufferStart,lpData+I,2) ;
                CopyMemory(&BufferStart2,lpData+I+2,2) ;



                        if((BufferStart>=0 && BufferStart2>=0)||(BufferStart<=0 && BufferStart2<=0))
                        {
                        BufferStart =BufferStart-(BufferStart2);
                        }else
                        {
                        BufferStart =BufferStart+(BufferStart2);
                        }
здесь запись в массив.
 

Что то какойто бред получаеться .......

Все перебераеться в цикле ..... Цикл работает если первый график установить в постоянное значение 0 то все Ок, если в -1 то какойто бред.......

Заранее спасибо....

PM MAIL   Вверх
feodorv
Дата 23.9.2012, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(bass @  23.9.2012,  15:51 Найти цитируемый пост)
вычеслить разницу между двумя граффиками

Как определяется "разница между двумя граффиками"?
Код

delta = mod( val1 - val2 )
???


Цитата(bass @  23.9.2012,  15:51 Найти цитируемый пост)
                short BufferStart=0;
                short BufferStart2=0;
                CopyMemory(&BufferStart,lpData+I,2) ;
                CopyMemory(&BufferStart2,lpData+I+2,2) ;

Это безобразие(((
Код

short *buffer = (short *) lpData;
short val1 = buffer[2*pointNum];
short val2 = buffer[2*pointNum+1];
pointNum++;



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
bass
Дата 23.9.2012, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 5.8.2007

Репутация: нет
Всего: 2



Код

delta = mod( val1 - val2 )


Чет не пашет Builder...... Говорит нет такой функции.....А случайно Mod не за деление отвечает????





PM MAIL   Вверх
feodorv
Дата 23.9.2012, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(bass @  23.9.2012,  16:38 Найти цитируемый пост)
Говорит нет такой функции.....

Да нет, это был не реальный код. Просто, хотелось бы понять, что это за зверь: "разница между двумя графиками".
mod - имелось в виду взятие по модулю:
Код

#define mod(x) ((x) < 0 ? -(x) : (x))

(ну или через inline). Может, взятие по модулю тут и не причём...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
586
Дата 23.9.2012, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 8
Всего: 146



Цитата(feodorv @  23.9.2012,  20:31 Найти цитируемый пост)
mod - имелось в виду взятие по модулю

Это abs а не mod, и он уже есть в <math.h>.
А mod'ом обозначается остаток от деления.
PM   Вверх
feodorv
Дата 23.9.2012, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(586 @  23.9.2012,  20:54 Найти цитируемый пост)
Это abs

Ок. Но abs - для double, не для short.
Самое простое:
Код

if( (delta = (val1 - val2)) < 0 ) delta = -delta;

Но опять-таки, нужен ли short abs или нет?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
586
Дата 23.9.2012, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 8
Всего: 146



Поскольку используется тип short, то в целях оптимизации можно и свой макрос написать, т.к. функция abs() есть только для типа int. 
Для типа double - функция fabs.
PM   Вверх
bass
Дата 23.9.2012, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 5.8.2007

Репутация: нет
Всего: 2



Мужики abs и для short будет работать...... Привидет к нормальному числу...... Макрос я выше попытался написать, что - то не получилось.... 
PM MAIL   Вверх
feodorv
Дата 23.9.2012, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Да ладно, забудьте про макрос. Чем Вас 
Код

if( (delta = (val1 - val2)) < 0 ) delta = -delta;
 не устраивает?
Правда, тогда и delta, и элементы массива разницы должны иметь тип int, а то возможно переполнение при вычитании двух short'ов.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
bass
Дата 24.9.2012, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 5.8.2007

Репутация: нет
Всего: 2



Цитата(feodorv @ 23.9.2012,  23:46)
Да ладно, забудьте про макрос. Чем Вас 
Код

if( (delta = (val1 - val2)) < 0 ) delta = -delta;
 не устраивает?
Правда, тогда и delta, и элементы массива разницы должны иметь тип int, а то возможно переполнение при вычитании двух short'ов.

user posted image

Есть два графика надо один из другова вычесть ..... Например возмем первый и третий..... Если в низу мы их вычтем то он наоборот увиличеться в низ...... 


вот и пытался код написать но где то просчитался......
Код

                        if((BufferStart>=0 && BufferStart2>=0)||(BufferStart<=0 && BufferStart2<=0))
                        {
                        BufferStart =BufferStart-(BufferStart2);
                        }else
                        {
                        BufferStart =BufferStart+(BufferStart2);
                        }


Это сообщение отредактировал(а) bass - 24.9.2012, 08:19
PM MAIL   Вверх
feodorv
Дата 24.9.2012, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(bass @  24.9.2012,  09:18 Найти цитируемый пост)
Если в низу мы их вычтем то он наоборот увиличеться в низ......

Ну не знаю. Там, где у первого графика есть "низ", у второго - ноль. Что там может увеличиваться "в низ"?

А что, при вычитании графиков ничего увеличиваться не должно?


Цитата(bass @  24.9.2012,  09:18 Найти цитируемый пост)
где то просчитался

Ну, думаю, потому что это 
Цитата(bass @  24.9.2012,  09:18 Найти цитируемый пост)
BufferStart =BufferStart+(BufferStart2);
 не вычитание, а сложение...



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
bass
Дата 24.9.2012, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 5.8.2007

Репутация: нет
Всего: 2



Цитата(feodorv @ 24.9.2012,  09:22)
Цитата(bass @  24.9.2012,  09:18 Найти цитируемый пост)
Если в низу мы их вычтем то он наоборот увиличеться в низ......

Ну не знаю. Там, где у первого графика есть "низ", у второго - ноль. Что там может увеличиваться "в низ"?

А что, при вычитании графиков ничего увеличиваться не должно?


Цитата(bass @  24.9.2012,  09:18 Найти цитируемый пост)
где то просчитался

Ну, думаю, потому что это 
Цитата(bass @  24.9.2012,  09:18 Найти цитируемый пост)
BufferStart =BufferStart+(BufferStart2);
 не вычитание, а сложение...

Ага прав спасибо что то перемудрил нужно во всех ситуациях минус.....
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0594 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.