Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: Mrcloner
Дата сообщения: 04.02.2010 08:14
snike555

Посмотрел там где ты сказал все круто написано!
Только я не нашел там примера как обрабатывать системные ошибки? там даже кодов ошибок нет. Может я не много ступил и в первом сообщении не на писал что код нужен для Builder 2006 C++
Автор: mrherbrooks
Дата сообщения: 04.02.2010 10:42

Цитата:
что код нужен для Builder 2006 C++

у Builder'a есть базовый класс всех исключений Exception. Информация о нем и его потомках имеется в справочной системе самого Builder'a.

зы. если есть возможность и желание - откажитесь от C++ Builder 2006 в пользу более новых версий.
ззы. если есть возможность и желание - откажитесь вообще от C++ Builder
Автор: Slim_Thug_1985
Дата сообщения: 10.02.2010 20:16
Заполнить массив из 100 элементов случайными целыми числами из диапазона 0..10, вывести содержимое массива на экран. Запросить с клавиатуры целое неотрицательное значение, и найти количество вхождений данного значения в массиве. Например, для массива 1 2 3 2 2 10 0 количество вхождений значения 2 равно 3, количество вхождений значения 3 равно 1, а количество вхождений значения 11 равно 0. Вычислить значения, количество вхождений которых в элементы массива минимальное и максимальное. (КОГО НЕ ЗАТРУДНИТ, ТО ПОЖАЛУЙСТА С КОММЕНТАРИЯМИ)
Автор: Denchik
Дата сообщения: 11.02.2010 20:41
Slim_Thug_1985

[more=Код]
Код: #include <iostream>
#include <map>

//предикат сравнения значеий частот
bool cmp(const std::pair<int, int> &f, const std::pair<int, int> &s)
{
return f.second < s.second;
}

int main(int argc, char *argv[])
{
const int size = 100;
std::map<int, int> freq;
srand(time(NULL));

for(int i = 1; i <= size; i++)
{
int r = rand()%11; //генерируем случайное значение от 0 до 10
freq[r]++; //увеличиваем счетчик для этого значения
std::cout << r << (i%10 ? "\t" : "\n");
}

unsigned x;
std::cout << "Input value: ";
std::cin >> x;
//выводим частоту выпадения введенного числа
std::cout << "value: " << x << "\tcount: " << freq[x] << std::endl;

//ищем и выводим минимум
std::map<int, int>::const_iterator i = std::min_element(freq.begin(), freq.end(), cmp);
std::cout << "Min frequency: " << i->second << " of " << i->first << std::endl;
//ищем и выводим максимум
i = std::max_element(freq.begin(), freq.end(), cmp);
std::cout << "Max frequency: " << i->second << " of " << i->first << std::endl;

return EXIT_SUCCESS;
}
Автор: sysxxx
Дата сообщения: 16.02.2010 21:01
Вылетают ошибки

contprop.obj : error LNK2019: unresolved external symbol "wchar_t * __stdcall _com_util::ConvertStringToBSTR(char const *)" (?ConvertStringToBSTR@_com_util@@YGPA_WPBD@Z) referenced in function "public: __thiscall _bstr_t::Data_t::Data_t(char const *)" (??0Data_t@_bstr_t@@QAE@PBD@Z)

contprop.obj : error LNK2019: unresolved external symbol "char * __stdcall _com_util::ConvertBSTRToString(wchar_t *)" (?ConvertBSTRToString@_com_util@@YGPADPA_W@Z) referenced in function "public: char const * __thiscall _bstr_t::Data_t::GetString(void)const " (?GetString@Data_t@_bstr_t@@QBEPBDXZ)

fatal error LNK1120: 2 unresolved externals


здесь преобразование строк происходит :

STDMETHODIMP CFilters::GetIPPActual(OUT char* info)

{
    if (!info)
        return E_FAIL;

    LPCSTR plugin_info;
    cvGetModuleInfo(0,0,&plugin_info);
    info = (char*)&plugin_info;

    return S_OK;
}

код правильный, в чем дело
Автор: Abs62
Дата сообщения: 16.02.2010 21:23
sysxxx
Ошибка средств компоновщика LNK2019

Цитата:
Ошибка LNK2019 также может возникнуть в результате работы по согласованию, которая теперь выполнена в Visual C++ 2005, /Zc:wchar_t по умолчанию. Не все модули могут быть скомпилированы с тем же параметром /Zc:wchar_t, в результате чего тип ссылается на типы с нерешенной совместимостью. Чтобы решить эту проблему, убедитесь, что типы во всех модулях совместимы, выполнив компиляцию с соответствующими параметрами /Zc:wchar_t (например с использованием параметра /Zc:wchar_t- при сборке модулей с помощью набора инструментов Visual C++ 2005, который будет связан с модулями из предыдущих версий) или, если возможно, обновив типы, чтобы они стали совместимыми.

Явные ссылки на comsupp.lib из прагмы комментария или через командную строку следует изменить на comsuppw.lib или comsuppwd.lib, так как /Zc:wchar_t сейчас используется по умолчанию. Библиотеку comsupp.lib все еще следует использовать при компиляции с помощью /Zc:wchar_t-.
Автор: sysxxx
Дата сообщения: 16.02.2010 22:21
Спасибо Abs62
Автор: CruelCrow
Дата сообщения: 01.03.2010 12:18
При переносе проекта с Visual Studio 2008 на 2010 размер exeшника MFC-проекта увеличился где-то в два раза. В коде ничего не менялось.
Я заметил только, что количество импортируемых dll увеличилось с 13 до 18 (добавились MSIMG32.dll, OLEACC.dll, gdiplus.dll, IMM32.dll и WINMM.dll).

От чего так может быть и как от этого избавиться?
Автор: CruelCrow
Дата сообщения: 04.03.2010 13:57
Проблему я решил, но не так, как хотелось бы. Дело в хедерах afx.h и afxwin.h, которые в 2010 студии разрослись до неприличных размеров. И если в базовом Win32 или чистом приложении можно просто выбрать нужные хедеры вместо вышеупомянутых, то в MFC приложении это выливается в головную боль.

Если кто-нибудь мне объяснит, как в MFC приложении можно корректно обойтись без всего afxwin.h, я буду очень благодарен.

Пока же мне пришлось установить VS2008 параллельно с 2010 и выставить в настройках проекта Platform Toolset = v90.
Автор: deman_ru
Дата сообщения: 04.03.2010 14:21
Я опять к Вам за помощью со своей экспертной системой. Я уже публиковал вопрос, но к сожалению никто не ответил( я кое что добавил, выложу, надеюсь вы поможете, очень нужно!
Такая вот база данных (она же база знаний):


Для механизма вывода используется алгоритм обратного логического вывода, я его нашел в нете, вот его и пытаюсь реализовать:

Код:
функция Доказана_Цель(Цель): boolean;
| Поместить Цель в стек целей.
| пока стек целей не пуст
| цикл
| | Выбор цели из стека целей и назначение ее текущей.
| | Поиск множества правил, в правой части которых
| | находится текущая цель (множества подходящих правил).
| | Считать, что Цель не доказана.
| | пока множество походящих правил не пусто
| | и Цель не доказана
| | цикл
| | | Выбор из этого множества одного текущего правила
| | | с использованием определенной стратегии.
| | | Считать текущим элементарным условием первое.
| | | пока не проверены все элементарные условия правила
| | | и не надо прервать проверку условия
| | | цикл
| | | | если в текущем элементарном условии
| | | | | участвует факт,
| | | | | встречающийся в правой части
| | | | | какого-то правила
| | | | | то
| | | | | если не Доказана_Цель(Этот факт)
| | | | | | то
| | | | | | Надо прервать проверку условия
| | | | | конец_если
| | | | иначе
| | | | | Запросить информацию о факте.
| | | | | Проверить элементарное условие.
| | | | | если элементарное условие истинно
| | | | | | то
| | | | | | Добавить факт в базу данных.
| | | | | | Перейти к следующему элементарному
| | | | | | Условию.
| | | | | иначе
| | | | | | Надо прервать проверку условия.
| | | | | конец_если
| | | | конец_если
| | | конец_цикла
| | | если условие правила истинно
| | | | то
| | | | Выполнить заключение.
| | | | Исключить Цель из стека целей.
| | | | Считать, что Цель доказана.
| | | конец_если
| | конец_цикла
| конец_цикла
конец_функции.
Автор: ppkp
Дата сообщения: 10.03.2010 17:45
Подскажите, какой аналог кода для PropertyGrid на C++.
Если на C# все просто:
private System.Windows.Forms.PropertyGrid propertyGrid;
CMyClass MyClass = new CMyClass();
public MainForm() {
InitializeComponent();
propertyGrid.SelectedObject = MyClass;
...
Как написать на C++ ??

Пока просто перечисляю
CMFCPropertyGridCtrl m_wndPropList;
CMFCPropertyGridProperty* pGroup1 = new CMFCPropertyGridProperty(_T("Инфо"));
pGroup1->AddSubItem(new CMFCPropertyGridProperty(_T("Аттриб 1"), (_variant_t) 0, _T("Коммент 1")));
pGroup1->AddSubItem(new CMFCPropertyGridProperty(_T("Аттриб 1"), (_variant_t) 0, _T("Коммент 2")));
...
m_wndPropList.AddProperty(pGroup1);
но это, конечно, не то, что нужно
Автор: v1rtyaluk
Дата сообщения: 11.03.2010 19:40
Здравствуйте,

прошу извинения если задал вопрос в не нужном месте или такая тема уже существует (ткните носом -где?).

Помогите мне написать программу (желательно на С++) которая самостоятельно бы копировала файлы (файлы собой являют - патчи графических ресурсов, созданы редактором ресурсов, программой Restorator), с указанного места в системные папки (т.е. Windows, System32, Resuorces и тд.) с автоматическим применением необходимых прав доступа на файлы (т.е. те файлы которые нужно пропатчить) в Windows 7

Помогите, пожалуйста, написать код так как сам в программировании не силен (предпочитаю прикладные программы, дизайн, оформление Windows-систем).

Жду помощи, буду благодарен за отзывы...Спасибо...
Автор: KChernov
Дата сообщения: 12.03.2010 10:59
v1rtyaluk
Не проще найти инсталлятор, который это всё умеет?
Автор: v1rtyaluk
Дата сообщения: 12.03.2010 15:49

Цитата:
KChernov

ну и какие инсталяторы вы предлагаете?
мне нужно универсальное приложение!
Автор: ppkp
Дата сообщения: 12.03.2010 19:43
v1rtyaluk
InnoSetup, например
Автор: v1rtyaluk
Дата сообщения: 14.03.2010 15:54
ppkp
KChernov
фигню вы говорите
Инно Сетап не поедет

мне нужно "Стать Владельцем" файла (например, shell32.dll) для копирования в , например, C:\MyProject\new и последующего переименования оригинала в shell32.dll.backup и перемещения в каталог %windir%\system32\backup.После этого к копии в каталоге new нужно применить патчер графических ресурсов ResPatcher (C:\MyProject\patch\Patch_imageres.exe -force -guiless -auto -quiet -nobackup -dir C:\MyProject\new) и после всего этого пропатченым файлом заменить оригинал в папке system32 + все это происходит на Windows 7/.
Вот что мне нужно
я задавал вопрос на МСДН но там все так запутано + на английском, а я иногда их не понимаю.
короче, у меня есть сценарий командной строки, все работает - без багов, глюков и т.д.


Код:
@echo off
color 2a
set is=C:\is
cmd.exe /c takeown /f "C:\windows\system32\shell32.dll"
copy %windir%\system32\shell32.dll %is%\backup
copy %windir%\system32\shell32.dll %is%\new
ren %windir%\system32\shell32.dll shell32.dll.backup
%is%\patch\Patch_shell32.exe -force -guiless -auto -quiet -nobackup -dir %is%\new
move /y %is%\new\*.* %windir%\system32
icacls "%windir%\system32\shell32.dll" /grant Администраторы:F
pause
end
Автор: mauar
Дата сообщения: 20.03.2010 16:21
Endian Мне помог с проблемой, вопрос решен, всем спасибо.
Автор: Endian
Дата сообщения: 20.03.2010 17:02
Ответил на вопросы mauar.
Автор: Dukat
Дата сообщения: 24.03.2010 22:17
Пишу консольную утилитку, которая выводит меню с предложением выбрать действие:

Код: void Menu()
{
    int c;
    for(int i=0;;)
    {
        PrintMenu();
        cout << ">";
        c=getchar(); getchar();
        switch (c-48)
        {
            case 1: cin >> infilename; i=0; break;
            case 2: cin >> searchstring; i=0; break;
            case 3: cin >> rulesfilename; i=0; break;
            case 4: Search(t, searchstring); i=0; break;
            ...
            case 9: exit(0); break;
            default: i++; if (i>4) {cout << "Попробуйте позже" << endl; exit(0);}
        }
    }
}
Автор: Abs62
Дата сообщения: 24.03.2010 23:12
Dukat

Код: do {
c=getchar();
} while(c<'1' || c>'9');
Автор: vjunk
Дата сообщения: 26.03.2010 23:46
Dukat
Не указана платформа.
Для DOS или mingw под Win32 можно использовать <conio.h>:

Код: #include <stdio.h>
#include <conio.h>
int main()
{
int c;

while((c=getche())!='\r')
{
printf("Got: %c\n", c);
}
}
Автор: Dukat
Дата сообщения: 27.03.2010 09:03
vjunk
Уже в другом месте тоже подсказали про getche(), удобная вещь . Вариант Abs62 не подошел, т.к. не корректно обрабатывал ввод более одного символа. А пишу под DOS.

И еще такой вопрос возник. Есть ли простой способ очистить экран консоли, по типа clrscr модуля crt их того же Паскаля? Почитал книжку Р.Лафоре "ООП в C++", так там для этого предлагается написать такое (в случае консольного экрана в 25 строк):

Код: void clear_screen()
{
set_cursor_pos(1, 25);
for(int j=0; j<25; j++)
putch('\n');
set_cursor_pos(1, 1);
}
Автор: ValidolX
Дата сообщения: 27.03.2010 11:50

Цитата:
И еще такой вопрос возник. Есть ли простой способ очистить экран консоли, по типа clrscr модуля crt их того же Паскаля?


Да

Uses Crt;
...
Begin

...
ClrScr;{short for clear screen}
...

End.
Автор: Ivan_Sobolev
Дата сообщения: 27.03.2010 18:11
Уважаемые программисты, подскажите пожалуйста, какие есть способы работать с битовым
представлением строк на C/C++?

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

Какия для этого нужно подключать заголовочные файлы, или может функции для этого есть?
Автор: Dukat
Дата сообщения: 27.03.2010 19:17
ValidolX
Как это делается в Паскале, я знаю. Есть что-то подобное для С/C++?
Автор: vjunk
Дата сообщения: 27.03.2010 20:18
Dukat
Универсального решения в рамках языка нет, т.к. работа с экраном не предусмотрена стандартами C/C++.
Простой способ очистки экрана для DOS/Windows:
Код: system("cls");
Автор: Ivan_Sobolev
Дата сообщения: 28.03.2010 03:28
Возник ещё один вопрос, есть ли какие он лайн ресурсы, на которых возможно получить
довольно полную инфу, о стандартных классах в C/C++, и функциях/метадах реализованых в этик классах.

Вот я нашел один http://www.cplusplus.com/reference/, может ещё что есть в этом же духе?
Автор: mrherbrooks
Дата сообщения: 30.03.2010 16:22
Ivan_Sobolev
дык больше и не нужно
Автор: Ivan_Sobolev
Дата сообщения: 30.03.2010 16:43
Вот ещё один ресурс на эту же тему
http://www.cprogramming.com/tutorial.html
Автор: q111111
Дата сообщения: 02.04.2010 15:27
имеются вот такие исходники:
[more=hole.cpp]

Код:
/***************************************************************
* Файл : hole.cpp *
* Описание : модуль с реализацией методов классов *
* HOLE (Отверстие) и PLATE (Пластина) *
***************************************************************/

#include "hole.h"
#include <math.h>
#include <stdlib.h>

// ========== Методы класса HOLE ===============================

HOLE::HOLE(int x, int y, int R) { // конструктор
this->x=x;
this->y=y;
this->R=R;
this->Color=random(16777216);
}

int HOLE::IsPointInside(int x,int y) { // проверка, лежит ли точка внутри
if (pow(x - this->x, 2)+pow(y - this->y, 2) <= R*R ) {
return 1;
} else {
return 0;
}
}

void HOLE::MoveBy(int dx,int dy) { // сдвинуть отверстие
x+=dx;
y+=dy;
}

void HOLE::Draw(TCanvas * Canvas) { // нарисовать отверстие
Canvas->Pen->Color=Color;
Canvas->Brush->Color=Color;
Canvas->Ellipse(x-R,y-R,x+R,y+R);
}

void HOLE::Erase(TCanvas * Canvas) { // стереть отверстие
Canvas->Pen->Color=clWhite;
Canvas->Brush->Color=clWhite;
Canvas->Ellipse(x-R,y-R,x+R,y+R);
}


// ========== Методы класса PLATE ==============================

PLATE::PLATE(int width, int height) { // конструктор
this->width=width;
this->height=height;
N=0;
}

void PLATE::AddHole(HOLE * Hole) { // добавить отверстие на пластину
if (N<100) {
this->Hole[N]=Hole;
N++;
}
}

HOLE* PLATE::GetHoleFromPoint(int x,int y) { // определить отверстие по координате
for(int i=0;i<N;i++) {
if (Hole[i]->IsPointInside(x,y)) { // если точка внутри отверстия
return Hole[i]; // вернуть ссылку на объект
}
}
return NULL; // не попали ни в одно отверстие
}

void PLATE::Draw(TCanvas * Canvas) { // нарисовать набор отверстий
Canvas->Pen->Color=clBlack;
Canvas->Brush->Color=clWhite;
Canvas->Rectangle(0,0,width,height);
for(int i=0;i<N;i++) {
Hole[i]->Draw(Canvas);
}
}

void PLATE::Erase(TCanvas * Canvas) { // стереть набор отверстий
for(int i=0;i<N;i++) {
Hole[i]->Erase(Canvas);
}
}

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.