Обсуждение Программирование на C/C++

Re: Программирование на C/C++
Товарищи,
не убивайте тупого чайника, только начал Ц++ изучать:
Нашел функцию:
BOOL StrToIntEx(LPCTSTR pszString,
STIF_FLAGS dwFlags,
int *piRet
);

Конвертит String1 в десятичное число.
У меня этот String1 объявлен так:
char *String1= (char*)malloc(10);
Но при вызове функции StrToIntEx, компилятор ругается и пишет, что не может преобразовать параметр 1 из "char *" в "LPCWSTR", требуется приведение типов....
Как это сделать ? Как указатель на массив чаров привести к этому LPCWSTR ?
http://google.com/search?q=converting+char*+LPCWSTR
А вообще, не мешало бы попытаться хоть понять, что за тип LPCWSTR. Это строка из "Wide char", то есть приводить к ней надо не char*, а wchar_t*.

А вообще, если вы только начали изучать, зачем вам такие сложности? atoi() прекрасно работает без всяких wchar'ов.
 

    Bob

    очки: 23
    Спасибо !
Re: Программирование на C/C++
Есть ли в C++/Qt удобные средства для работы с ID3-тегами? Ну или, на крайний случай, неудобные. Интернеты на эту тему завалены ссылками на САМЫЙ_ЛУЧШИЙ_РЕДАКТОР_ТЕГОВ_QT, но это мимо.
 

SunnyMan

Namynnuz
Re: Программирование на C/C++
Есть ли в C++/Qt удобные средства для работы с ID3-тегами? Ну или, на крайний случай, неудобные. Интернеты на эту тему завалены ссылками на САМЫЙ_ЛУЧШИЙ_РЕДАКТОР_ТЕГОВ_QT, но это мимо.
Неудобные - это искать референс структуры и писать эдитор :) Когда-нить пробовал bmp с левой палитрой создавать? :)

Ну шо, поюзал id3lib? :)
 
Re: Программирование на C/C++
Народ помогите кто нить с быстрой сортировкой кодом плиз я в профан в программировании учусь не губите плиз!)))))))))))))
 

SunnyMan

Namynnuz
Re: Программирование на C/C++
Народ помогите кто нить с быстрой сортировкой кодом плиз я в профан в программировании учусь не губите плиз!)))))))))))))
Самый простой - сортировка пузырьком. Тупо проходишь все элементы n раз, переставляя соседние по возрастанию\убыванию.

Алгоритм

Быстрая сортировка использует стратегию «разделяй и властвуй». Шаги алгоритма таковы:

  1. Выбираем в массиве некоторый элемент, который будем называть опорным элементом. С точки зрения корректности алгоритма выбор опорного элемента безразличен. С точки зрения повышения эффективности алгоритма выбираться должна медиана, но без дополнительных сведений о сортируемых данных её обычно невозможно получить. Известные стратегии: выбирать постоянно один и тот же элемент, например, средний или последний по положению; выбирать элемент со случайно выбранным индексом.
  2. Операция разделения массива: реорганизуем массив таким образом, чтобы все элементы, меньшие или равные опорному элементу, оказались слева от него, а все элементы, большие опорного — справа от него. Обычный алгоритм операции:
    1. Два индекса — l и r, приравниваются к минимальному и максимальному индексу разделяемого массива соответственно.
    2. Вычисляется индекс опорного элемента m.
    3. Индекс l последовательно увеличивается до m до тех пор, пока l-й элемент не превысит опорный.
    4. Индекс r последовательно уменьшается до m до тех пор, пока r-й элемент не окажется меньше либо равен опорному.
    5. Если r = l — найдена середина массива — операция разделения закончена, оба индекса указывают на опорный элемент.
    6. Если l < r — найденную пару элементов нужно обменять местами и продолжить операцию разделения с тех значений l и r, которые были достигнуты. Следует учесть, что если какая-либо граница (l или r) дошла до опорного элемента, то при обмене значение m изменяется на r-й или l-й элемент соответственно.
  3. Рекурсивно упорядочиваем подмассивы, лежащие слева и справа от опорного элемента.
  4. Базой рекурсии являются наборы, состоящие из одного или двух элементов. Первый возвращается в исходном виде, во втором, при необходимости, сортировка сводится к перестановке двух элементов. Все такие отрезки уже упорядочены в процессе разделения.
Поскольку в каждой итерации (на каждом следующем уровне рекурсии) длина обрабатываемого отрезка массива уменьшается, по меньшей мере, на единицу, терминальная ветвь рекурсии будет достигнута всегда и обработка гарантированно завершится.
Интересно, что Хоар разработал этот метод применительно к машинному переводу: дело в том, что в то время словарь хранился на магнитной ленте, и если упорядочить все слова в тексте, их переводы можно получить за один прогон ленты.
 

Yanus Odron

Ословед
Re: Программирование на C/C++
среда: с++Builder
подскажите как можно залить всю канву конкретным изображением.
к примеру есть текстура(10х10), мне ее надо по канве раз клонировать(200х200), нету ли штатных средств это сделать?
 

SunnyMan

Namynnuz
Re: Программирование на C/C++
среда: с++Builder
подскажите как можно залить всю канву конкретным изображением.
к примеру есть текстура(10х10), мне ее надо по канве раз клонировать(200х200), нету ли штатных средств это сделать?
А в чем проблема? Рисуем циклом в канве, проходя "построчно".
 

Yanus Odron

Ословед
Re: Программирование на C/C++

    Yeti

    очки: 13
    Главное чтобы кто-то смог здесь это объяснить)

Yanus Odron

Ословед
Re: Программирование на C/C++
Вот именно. Предоставьте ваш код.

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap();
        if(OpenPictureDialog1->Execute()) {
        Bitmap1->LoadFromFile(OpenPictureDialog1->FileName);
        }
}
и как этой картинкой замостить канву?
 

Serfer

Ословед
Re: Программирование на C/C++
Кто-нибудь алгоритм RSA-шифрования реализовывал? Выложите скрин проги пожалуйста.
 
Re: Программирование на C/C++
Возник вопрос. Скажем, вот такой код:

Код:
int* i = new int[10];
i += 5;
delete[] i;

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

SunnyMan

Namynnuz
Re: Программирование на C/C++
2Just Talk
Данные остаются. Затирается указатель на начало и выделенная память помечается как свободная.

Кто-нибудь алгоритм RSA-шифрования реализовывал? Выложите скрин проги пожалуйста.
http://kastaneda.kiev.ua/crypto/rsa/encrypt.html

2Yanus Odron
GDI? GDI+? Среда? Canvas где? На форме?
 
Re: Программирование на C/C++
2Just Talk
Данные остаются. Затирается указатель на начало и выделенная память помечается как свободная.

Меня как раз и интересует, как свободная будет помечена вся выделенная new[] область, или только то, на что указывает i?
 

SunnyMan

Namynnuz
Re: Программирование на C/C++
Для одномерного массива будет считаться чистой вся область. Для двумерного и более приходится в цикле дотирать "ветки".
 

Shell

Ословед
Re: Программирование на C/C++
Меня как раз и интересует, как свободная будет помечена вся выделенная new[] область, или только то, на что указывает i?
в стандарте c++ написано, что если в delete указать указатель, отличающийся от того, который вернул new, то результат выполнения неопределен - может быть ошибка сегментации, порча списка участков в куче, других массивов и прочие неприятные последствия
лучше так не делать
 
Re: Программирование на C/C++
в стандарте c++ написано, что если в delete указать указатель, отличающийся от того, который вернул new, то результат выполнения неопределен - может быть ошибка сегментации, порча списка участков в куче, других массивов и прочие неприятные последствия
лучше так не делать
Не затруднит указать главу и номер абзаца, где это указано? Сейчас проглядел раздел по динамическому выделению - не нашел.(
 
Re: Программирование на C/C++
Доброго времени суток. Нужна небольшая помощь. Начинаю изучение языка, возник вопрос: Можно ли закрыть поток ввода с клавиатуры, если он больше не нужен. Например, мы ждем введение значение 10 сек, если не вводится делаем дефолтное. Возможно я не понимаю суть ввода-ввывода. если это так, посоветуйте ссылку.
Ну например что-нить такое:
#include <iostream>
#include <process.h>
#include <winsock2.h>
using namespace std;
void ThreadList(void* pParams);
char d;
int main()
{
unsigned long List;
cout << "Hello world!" << endl;
List= _beginthread( ThreadList, 0, NULL);
Sleep(1000);//ждем и закрываем поток
TerminateThread((HANDLE) List,0);//есть ли функция не виндовская а с++?
cout << "Hello world!" << endl;
cin >>d;
cout << d ;
return 0;
}
void ThreadList(void* pParams){
cin >>d;

}
как сделать подобную вещь работающей?


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

    Yanus Odron

    очки: 18
    озодачил, плюс адын ;D
Re: Программирование на C/C++
Нужна помошь
Требуется выделить первое слово в введенной строке не используя стандартные функции в си (подразумевается что слова все таки отделены пробелами)
 
Сверху