Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 891
от 29.10.2007, 12:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 480, Экспертов: 64
В номере:Вопросов: 6, Ответов: 13


Вопрос № 106493: Здраствуйте!! Кто может скинуть сылку или расказать о самых быстрых методах сортировки слов? char slovo[100][100]={"Max","Artem","Andrey",...} Наприме ротсортировать такой массив по алфавиту и на оборот по о...
Вопрос № 106513: Ещё вопрос по C++ Builder. Из базы данных MS Access (*.mdb) надо из поля OLE вытащить картинку в формате bmp и поместить эту картинку на Form1 как Image1. Саму картинку из базы я получаю запросом: ADOQueryProtocol->SQL->Add("SELECT [Ф...
Вопрос № 106543: Здравствуйте . Помогите создать морской бой. Сделала сетку. Хочу заполнить нолями, выстрел - 1. Для каждого действия своя функция - стрельба, корабли. Для компа и пользователя отдельно. Движение с пом. стрелок. Что дальше не знаю, бьюсь - бьюсь а сде...
Вопрос № 106557: Доброго времени дня! Помогите решить проблему с визуальным стилем XP в С++ (Visual Studio 2005). Легко работает добавление определений в manifest файл об использовании ComCtl32.dll (type="win32" name="Microsoft.Windows.Common-Controls&...
Вопрос № 106563: Здравсвуйте, только начинаю программить. Не могу найти ошибку в коде, подскажите, пожалуйста. float xr[3][1]={{1},{1},{3}}; int N=1; int n=3; float a[]={0,0,0}; float b[]={6,6,6}; int sum_nar; int nar[3]; for (int i=0;...
Вопрос № 106612: Здраствуйте!! подскажите Есть ли в си функции для орепделение, вроде скэн коды клавиатуры??Ну тоесть понятно не символьное значение! Спасибо!...

Вопрос № 106.493
Здраствуйте!! Кто может скинуть сылку или расказать о самых быстрых методах сортировки слов?

char slovo[100][100]={"Max","Artem","Andrey",...}
Наприме ротсортировать такой массив по алфавиту и на оборот по обратному алфавиту!

впринципе я мог бы и составить сам, но хотелось более быстрые способы и самые правильные!
Спасибо!
Отправлен: 23.10.2007, 15:59
Вопрос задал: CruelHity (статус: 2-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: mega
Здравствуйте, CruelHity!
используйте функцию qsort из stdlib

void qsort(
void* base,
size_t num,
size_t width,
int (
__cdecl* compare
)(
const void* elem1,
const void* elem2
)
);

очень удобная весчь, работает как раз для такого класса задач: отсортировать массив чего-либо.

статический метод compare - это ваша пользовательская функция, в которой вы должны просто вернуть 0, если левый и правый элементыв равны, 1 - если левый больше правого и -1 - если левый меньше правого.

для сравнения строк можно использовать функцию из набора strcmp, _tcscmp.
более подробную информацию можно найти в MSDN
Ответ отправил: mega (статус: 3-ий класс)
Ответ отправлен: 23.10.2007, 16:10
Оценка за ответ: 5
Комментарий оценки:
Спасибо

Отвечает: Rockie
Здравствуйте, CruelHity!

Для каждого случая может подойти своя сортировка. Быстрое время обычно показывают такие сортировки, как быстрая(QSort), пирамидальная сортировка(сортировка в куче), поразрядная.. Сравнительные таблицы есть в интернете. Например здесь:
http://www.codenet.ru/progr/alg/sort_search/cm2.php
На этом же сайте вы найдете наиболее распространенные виды организаций словарей.

Обычно к ним относятся такие структуры данных, как хеш-таблицы и деревья, так как в них можно очень быстро искать/добавлять элементы(слова). Это происходит потому, что значения располагаются в уже упорядоченном виде, и до них можно быстро "добраться".
Про бинарные деревья можно посмотреть например здесь:
http://www.bionet.nsc.ru/chair/cib/lectures/2003_1_IT/it06/img1.html
http://trubetskoy1.narod.ru/alg/bintree.html

Про хеш-таблицы - хорошо написано здесь:
http://algolist.ru/ds/s_has.php

p.s.:Вообще для каждого определенного случая существует свой алгоритм. Например если вам нужно считать и отсортировать(смотря по вашему коду) множество имен, то я бы вообще создал множество (std::set) и считал бы в него все слова. При выводе они будут уже упорядочены.

Для ознакомления с видами сортировок и простейших операция можете посмотреть такие сайты, как:
http://algolist.ru/sort/index.php
http://ru.wikipedia.org/wiki/Алгоритм_сортировки
и в поиске
Ответ отправил: Rockie (статус: 5-ый класс)
Ответ отправлен: 23.10.2007, 16:59
Оценка за ответ: 5
Комментарий оценки:
Отличный ответ!!! как раз то что я и просил!
Спасибо!

Отвечает: Попов А.С.
Здравствуйте, CruelHity!
Лучше, удобнее и быстрее получится при использовании STL и algorithm
смотрите приложение

Приложение:

Ответ отправил: Попов А.С. (статус: 3-ий класс)
Ответ отправлен: 24.10.2007, 16:45
Оценка за ответ: 5
Комментарий оценки:
спасибо


Вопрос № 106.513
Ещё вопрос по C++ Builder. Из базы данных MS Access (*.mdb) надо из поля OLE вытащить картинку в формате bmp и поместить эту картинку на Form1 как Image1. Саму картинку из базы я получаю запросом:
ADOQueryProtocol->SQL->Add("SELECT [Фото] FROM [Артисты] WHERE [Артист] = '" + AnsiString(Artisrt1) + "';");
А что делать дальше? Ссылки приветствуются.
Отправлен: 23.10.2007, 18:25
Вопрос задал: Куликов Дмитрий Юрьевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Чернов С.В.
Здравствуйте, Куликов Дмитрий Юрьевич!
Точно сказать в деталях не могу, так как надо программку писать, чтобы точно сказать....
Попробуйте запрос писать через Form1->ADODataSet1->CommandText
Например, пусть ваше поле с изображением называется Foto, тогда используйте Form1->DBImage1->Field и присваивайте ему Form1->ADODataSet1Foto->Value;
Ответ отправил: Чернов С.В. (статус: 1-ый класс)
Ответ отправлен: 24.10.2007, 11:46
Оценка за ответ: 5


Вопрос № 106.543
Здравствуйте . Помогите создать морской бой. Сделала сетку. Хочу заполнить нолями, выстрел - 1. Для каждого действия своя функция - стрельба, корабли. Для компа и пользователя отдельно. Движение с пом. стрелок. Что дальше не знаю, бьюсь - бьюсь а сделать ничего не могу. Спасибо. Helen1402@ya.ru
Отправлен: 23.10.2007, 23:54
Вопрос задала: Stoilova Elena Vladimirovna (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Воробьёв Алексей Викторович
!!!
Здравствуйте, Stoilova Elena Vladimirovna!

Ответ перенесен в мини-форум, т.к. ответ не является ответом в полном смысле этого слова, но содержит полезную информацию или уточняющий вопрос
-----
∙ Отредактировал: Error00 (Профессионал)
∙ Дата редактирования: 24.10.2007, 00:48
Ответ отправил: Воробьёв Алексей Викторович (статус: 7-ой класс)
Ответ отправлен: 24.10.2007, 00:37


Вопрос № 106.557
Доброго времени дня! Помогите решить проблему с визуальным стилем XP в С++ (Visual Studio 2005). Легко работает добавление определений в manifest файл об использовании ComCtl32.dll (type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*"). Всё это доступно описано в MSDN, однако в моих проектах с использованием MFC всё прекрасно работает, но простые построенные только на API не работают, то есть любое создание компонента в окне не работает, а фукция GetLastError() даёт ошибку: "Класс неизвестен", так же не работают простые диалоговые окна. Выглядет это так: само окно приложения есть, но на нём нет абсолютно ничего. В параметры линкера добавлял ComCtl32.lib и включал заголовочный файл ".h" ничего не помогло. Листал MSDN до упора, ничего больше не нашёл. Понимаю как работает всё это в принципе, но не пойму поч ему я упёрся в эту проблему!!! Помогите, объясните, если знаете как по другому поменять визуальный стиль у проектов, или ткните где это написано подробнее. Google послал на довольно убогие переводы MSDN или на использование графических вставок в окно, вместо использования библиотеки. Заранее спасибо.
Отправлен: 24.10.2007, 02:57
Вопрос задал: Jan (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Vas177
Здравствуйте, Jan!

В трудных ситуациях я прикручивал манифест для XP следующим образом:
- либо кинуть файл манифеста в папку с exe-файлом, и назвать его MyApp.exe.manifest (где MyApp.exe - имя файла вашего приложения)
- либо добавить файл манифеста в ресурс, где тип ресурса "24", а название "1".
Что-нибудь да помогало.
Ответ отправил: Vas177 (статус: 1-ый класс)
Ответ отправлен: 24.10.2007, 09:52
Оценка за ответ: 4
Комментарий оценки:
Спасибо за ответ, но дело совсем не в том как его прикручивать, эти варианты я знаю.

Отвечает: Mihail Yarlykov
Здравствуйте, Jan!
Последовательность действий к стилю XP:
1. Создаём файл mainfest.xml и пишем в него текст из приложения
2. Создаем файл resfile.rc и пишем в него одну строку:
"1 24 Путь к файлуmanifest.xml" (без кавычек)
3. Помещаем файлы в папку с компилятором
4. Запускаем компилятор из командной строки с одним параметром - именем файла resfile.rc (т.е. "Путь к компиляторуего имя(без exe) resfile.rc")
5. Полученый файл в результате файл resfile.res присоеденяем к своему проекту, как любой другой *.res файл
Всё компилируется в один exe.

Приложение:

---------
Нет ничего невозможного!

Ответ отправил: Mihail Yarlykov (статус: 3-ий класс)
Ответ отправлен: 24.10.2007, 10:13
Оценка за ответ: 4
Комментарий оценки:
Спасибо, это доступно описано в MSDN. Повторю вопрос: Создание компонентов даёт ошибку: "Класс неизвестен", не зависимо от того каким образом прикручивать манифест.


Вопрос № 106.563
Здравсвуйте, только начинаю программить. Не могу найти ошибку в коде, подскажите, пожалуйста.
float xr[3][1]={{1},{1},{3}};
int N=1;
int n=3;
float a[]={0,0,0};
float b[]={6,6,6};
int sum_nar;
int nar[3];
for (int i=0; i<(N-1); i++) {
sum_nar=0;
for (int r=0; r<(n-1); r++) {
if (xr[r][i]>=a[r] && xr[r][i]<=b[r]) {nar[r]=1;} else {nar[r]=0;}
sum_nar=sum_nar+nar[r];
}
}
Label2->Caption=xr[0][0];
Label3->Caption=xr[1][0];
Label4->Caption=xr[2][0];
Label5->Caption=nar[0];
Label6->Caption=nar[1];
Label7->Caption=nar[2];
Label1->Caption=sum_nar;
выдает просто ахтунг: xr[0][0]=1, xr[1][0]=1, xr[2][0]=3 - т.е. это он правильно считал, а дальше nar[0]=5898313, nar[1]=1, nar[2]=1 - откуда он взял такие цифры? Подскажите почему не заполняется массив nar[]
Заранее спасибо!
Отправлен: 24.10.2007, 04:23
Вопрос задала: Mart (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Mihail Yarlykov
Здравствуйте, Mart!
У вас ошибка в том что не разу не выполняются действия цикла:
for (int i=0; i<(N-1); i++)
выполнение его идёт пока i меньше (N-1), т.к. (N-1) = 0 то i изначально не меньше (N-1) и программа не заходит в цикл. И массив nar остаётся не заполниным, т.е. с "мусором" внутри( "nar[0]=5898313" ). Вложенный цикл выполнится только 2 раза, а не 3 как задумано!
Нужно записать так:
for( int i=0; i <= (N-1); i++ ) и for( int r=0; r <= (n-1); r++ )
либо
for( int i=0; i < N; i++ ) и for( int r=0; r < n; r++ )

---------
Нет ничего невозможного!
Ответ отправил: Mihail Yarlykov (статус: 3-ий класс)
Ответ отправлен: 24.10.2007, 07:45
Оценка за ответ: 5

Отвечает: Воробьёв Алексей Викторович
Здравствуйте, Mart!

У Вас пределы цикла стоят неправильные.
Надо писать
for (int i=0; i<N; i++)
и соответственно
for (int r=0; r<n; r++)

В вашей же программе цикл ни разу не исполнялся, потому и величины в nar[] остались неинициализированы.
Ответ отправил: Воробьёв Алексей Викторович (статус: 7-ой класс)
Ответ отправлен: 24.10.2007, 09:35
Оценка за ответ: 5

Отвечает: Aristos
Здравствуйте, Mart!

Ошибки в условиях циклов. Так N == 1 и поэтому цикл
for (int i=0; i<(N-1); i++)
{
//...
}
не выполнится ни разу, поскольку i=0 и условие i <(N-1) т.е. i < 0 становится неверным.
Вам надо в усливиях записать i < N или i <= (N-1). (соответственно r < n или r <= (n-1))
Таким образом в массив nar[] попадает "мусор", содержащийся в памяти до её выделения.

Успехов.
---------
нет ничего невозможного
Ответ отправил: Aristos (статус: 8-ой класс)
Ответ отправлен: 24.10.2007, 10:55
Оценка за ответ: 5

Отвечает: Попов А.С.
Здравствуйте, Mart!
При описании массива nar он не был инициализирован (не присвоены начальные значения). Компилятор просто выделил область памяти под массив не инициализиров ее (эта область использовалась какой-то другой программой которая и оставила эти данные)
Ответ отправил: Попов А.С. (статус: 3-ий класс)
Ответ отправлен: 24.10.2007, 16:29


Вопрос № 106.612
Здраствуйте!! подскажите Есть ли в си функции для орепделение, вроде скэн коды клавиатуры??Ну тоесть понятно не символьное значение!
Спасибо!
Отправлен: 24.10.2007, 13:17
Вопрос задал: CruelHity (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 14)

Отвечает: Виктор Пырлик
Здравствуйте, CruelHity!

Вот небольшая программка..

Приложение:

---------
Если ничего не помогло - надо читать инструкцию

Ответ отправил: Виктор Пырлик (статус: Практикант)
Ответ отправлен: 24.10.2007, 18:40
Оценка за ответ: 5
Комментарий оценки:
Спасибо за пояснительную работу!!!!))))))

Отвечает: Гальцов Андрей Михаилович
Здравствуйте, CruelHity!
Есть две функции
1) getch()
пишите ine key = getch() и в переменной key у Вас будет код нажатой клавиши по таблици(таблицы вроде разные в разных средах)
2) getche()
Она выводит на экран символ, соответствующий нажатой клавиши
Примеры работ функций смотрите в приложении(взято из help)...

Приложение:

---------
Да здравтствует С++!!!...;)

Ответ отправил: Гальцов Андрей Михаилович (статус: Студент)
Ответ отправлен: 24.10.2007, 19:31
Оценка за ответ: 4
Комментарий оценки:
Хоть и не то что надо но все равно спасибо!!!!


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.61.1 от 16.10.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное