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

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

Автор: Tenzor13
Дата сообщения: 16.12.2009 19:27
Все Добрый День!

Вопрос по конструктору:

Если я создаю обычный двумерный массив то при создании я могу сразу его инициализировать например так:

int mass[4][4]={
        {0, 1, 1, 1},
        {1, 0, 0, 0},
        {1, 0, 0, 1},
        {1, 0, 1, 0}
}

Вопрос как сделать аналогичную инициализацию при использовании

typedef vector< vector<int> > T;

T mass; // как здесь инициализировать?



Заранее счпасибо!
Автор: derelict
Дата сообщения: 16.12.2009 19:52
Tenzor13
Самый простой вариант - это поэлементно.
Автор: Tenzor13
Дата сообщения: 16.12.2009 19:59
derelict - спасибо за ответ!
сейчас я решаю это просто считыванием из файла.
Но мне действительно интересно - неужели нет прямого способа?
Автор: derelict
Дата сообщения: 16.12.2009 20:08
Tenzor13
В конструктор вектора можно передать для инициализации:
- другой вектор
- массив
- количество элементов и значение, которое будет установлено для этих элементов

В C++0x можно будет делать так:

Код: vector<int> v = { 1, 2, 3 };
Автор: BabylonKinki
Дата сообщения: 16.12.2009 22:47
Всем привет.у меня было задание написать прогу,на класс CFontDialog из mfc.и привести по 4-5 примера использования методов данного класса.вообщем,все вроде бы нормально,но никак не получается вывод на экран названия набора символов ,выбираемого пользователем.посмотрел в msdn, там отдельно такого класса нет.есть только класс getcurrentfont,который включает как раз то,что мне нужно - lfCharSet,который по сути должен устанавливать набор символов.Вообщем,проблема с реализацией данного метода.Метод GetCurrentFont позволяет сразу определить все характеристики выбранного щрифта, записав их в структуру LOGFONT:
typedef struct tagLOGFONT {
LONG lfHeight;
LONG lfWidth;
LONG lfEscapement;
LONG lfOrientation;
LONG lfWeight;
BYTE lfItalic;
BYTE lfUnderline;
BYTE lfStrikeOut;
BYTE lfCharSet; - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
BYTE lfOutPrecision;
BYTE lfClipPrecision;
BYTE lfQuality;
BYTE lfPitchAndFamily;
TCHAR lfFaceName[LF_FACESIZE];
}LOGFONT, *PLOGFONT;
////////////////////////////////////////////////////////////////////
Реализация GetCurrentFont:
CFontDialog dlg;
dlg.m_cf.Flags |= CF_USESTYLE;
if (dlg.DoModal() == IDOK)
{
CString stylename = dlg.GetStyleName();
TRACE(_T("Style name of the selected font = %s\n"), stylename);

Текст программы:

#include "stdafx.h"
#include <conio.h>
#include <cstring>
#include <afxdlgs.h>
#include <cstdlib>
#include "lab1.h"

using namespace std;

int main()
    {

    int nRetCode = 0;

    // инициализировать MFC, а также печать и сообщения об ошибках про сбое
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    {
        // TODO. Измените код ошибки соответственно своим потребностям
        _tprintf(_T("Критическая ошибка: сбой при инициализации MFC\n"));
        nRetCode = 1;
    }
    else
    {
    char cfontName [100];
    char csizeName [100];
CFontDialog lolfont;
int iResult=lolfont.DoModal();
if (iResult == IDOK)
{
     //get font name
CString fontName = lolfont.GetFaceName();
     int fontNamesize = sizeof (fontName);
     char *pfontName = fontName.GetBuffer();
strcpy_s(cfontName, pfontName);
     cout << "Name of this font is: " << "\"" << cfontName << "\""<< endl;

//get size
int sizeName = lolfont.GetSize();
     cout << "size of this font is: "<< "\"" << sizeName/10 << "\"" << endl;

     //get color
     COLORREF colorName = lolfont.GetColor ();
     cout << "color of this font is: " << "\"" << colorName << "\"" << endl;

     //get bold check
     int bold = lolfont.IsBold();
if(bold==0)
     cout << "\"" << "bold uncheck" << "\"" << endl;
else
cout << "\"" << "bold check" << "\"" << endl;

     //get italic check
int italic = lolfont.IsItalic();
if(italic==0)
cout << "\"" << "italic uncheck" << "\"" << endl << endl;
else
cout << "\"" << "italic check" << "\"" << endl << endl;
     }

else
cout << "Cancel is pushed" << endl;
    }
_getch();
    return nRetCode;
}


Автор: CruelCrow
Дата сообщения: 16.12.2009 23:46
Доброго времени суток всем форумчанам. Возникла необходимость в программе на C++ получить языконезависимое имя локальной группы "Все" в ОС Windows 2000/XP/Vista/7. То есть, нужна функция, которая бы получала значение SID, равное "S-1-1-0", а возвращала бы "Все", "Everyone" и т.п.
В API есть стандартная функция LookupAccountSid, но чего-то не выходит у меня ничего с её применением. Пытался уже использовать чужой нагугленый код, но та же беда. Код, поидее, должен быть не длиннее 5-6 строк.


Код:
LPWSTR name = L" ";
    
    BOOL success =
    LookupAccountSid(
NULL,
(PSID)L"S-1-1-0",
name,
(LPDWORD)20,
NULL,
NULL,
(PSID_NAME_USE)SidTypeGroup
);
Автор: ValidolX
Дата сообщения: 17.12.2009 00:01
CruelCrow
несколько ошибок
- почему name такой маленький?
- откуда число 20?
- SID - ето не строка, а структура (см ConvertSidToStringSid(), ConvertStringSidToSid ()

здесь пример как юзать

http://msdn.microsoft.com/en-us/library/aa379554(VS.85).aspx
Автор: SIgor33
Дата сообщения: 17.12.2009 08:31
Суть такая: нужно многократно возводить вещественное число в степень (2n+1) (n будет меняться, тем самым увеличивая точность вычисления до заданной). В С++ оператора возведения нет. Можно-ли как-то еще возводить в степень, не используя цикл?
Выражения для возведения, ряд Тейлора для lnx. Пробовал использовать n^m=exp(m*ln(n)) считает только если числа целые, с дробными выходят косяки в виде ответа: "-1.#IND0"

выражение:
2*( ((x-1)^2n+1)/((2n+1)*(x+1)^2n+1) )

мой вариант кода:
y1=exp((2*n+1)*log(x-1))/((2*n+1)*exp((2*n+1)*log(x+1)));
y2=2*y1;
Автор: Abs62
Дата сообщения: 17.12.2009 09:14
SIgor33
А чем функция pow не устраивает?
Автор: CruelCrow
Дата сообщения: 17.12.2009 11:25
ValidolX
Сделал вот так вот:

Код:
PSID EveryoneSID = PSID();
ConvertStringSidToSid(L"S-1-1-0", &EveryoneSID);
TCHAR name[256] = {0};
DWORD dwSize = 256;

BOOL success =
LookupAccountSid(
NULL,
EveryoneSID,
name,
&dwSize,
NULL,
NULL,
(PSID_NAME_USE)SidTypeGroup
);
Автор: i0ngunn3r
Дата сообщения: 17.12.2009 13:02
У меня небольшая проблема с памятью, строковыми массивами и указателями.
исходник: http://codepad.org/QbM9Ahag
задача: через вторую функцию (reverse) с помощью указателей перевернуть строку.
gdb выдает ошибку:

Цитата:
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00001ea1
0x93db6884 in strcpy ()

как можно решить проблему? надо делать динамический масив?
Автор: akaGM
Дата сообщения: 17.12.2009 13:24
i0ngunn3r
тебе задали самому такую функцию написать или просто надо перевернуть строку?
во втором случае воспользуйся _strrev()
Автор: i0ngunn3r
Дата сообщения: 17.12.2009 13:30
akaGM
самому надо, да. про strrev знаю, но это было бы слишком просто :\
Автор: ValidolX
Дата сообщения: 17.12.2009 14:04
i0ngunn3r

1) проблема с
strcpy(*str, buf);
в том, что destination - *str, ето у нас вот ето -
char *a = "abcdefg";

а так нельзя, поскольку а - ето указатеть на строку константу
как вариант -
    char *a1 = "abcdefg";
    char a[32];
    strcpy(a, a1);
reverse(a);

2) зачем аргумент в функцию void reverse(char *str[]) описан так? (такое надо только когда нам надо изменить значение str, а поскольку такого не надо - достаточно char* str
и передавать в main'е как reverse(a);
Автор: i0ngunn3r
Дата сообщения: 17.12.2009 14:25
разобрался, спасибо
Автор: ValidolX
Дата сообщения: 17.12.2009 14:50
CruelCrow

Цитата:
Только всё равно не работает, через раз - Access violation на 0x00000000


все таки читать надо хотя б хелп на функу, не говоря уже о голой теории....

SID *sid;
const char* str_sid = "S-1-1-0"; //Everyone SID
BOOL success = ConvertStringSidToSid(str_sid, (void**)&sid);
//success = IsValidSid(sid);

#define MAX_NAME 256
char lpName[MAX_NAME];
char lpDomain[MAX_NAME];
DWORD dwSize = MAX_NAME;

SID_NAME_USE SidType;

success = LookupAccountSid(
0,
sid,
lpName,
&dwSize,
lpDomain,
&dwSize,
&SidType
);

printf("String SID for %s: %s\n", str_sid, lpName);

//output: String SID for S-1-1-0: Everyone
Автор: CruelCrow
Дата сообщения: 17.12.2009 15:30
ValidolX
Спасибо! Буду разбираться.
Автор: SIgor33
Дата сообщения: 17.12.2009 15:54
Abs62
спасибо понял
Автор: Smokeer
Дата сообщения: 28.12.2009 12:10
вопрос по простому Си
Есть ли современный компилятор с поддержкой новых 32/64 розрядных, многоядерных процесоров и Windows 7?
Автор: Abs62
Дата сообщения: 28.12.2009 17:19
Smokeer
Да вроде бы все современные компиляторы C++ умеют и с простым C работать.
Автор: Eugenio91
Дата сообщения: 28.12.2009 17:35
Помогите найти пример решения задачи симплекс методом на языке borland c++. Я нашел на visual c но он очень громоздкий чтобы его переделывать под борланд. Может кто знает где есть примеры решений таких задач?
Автор: akaGM
Дата сообщения: 28.12.2009 17:57
Eugenio91

Цитата:
Я нашел на visual c но он очень громоздкий чтобы его переделывать под борланд

а какая разница? там ГУИ что ли используется?
Автор: Eugenio91
Дата сообщения: 28.12.2009 18:01
нет, на визуале там создана программа для вычисления матриц этим методом. а мне просто нужно разобрать пример на симплекс метод

Добавлено:
или вот к примеру написать такую программу
5X + 7Y - > max
2X + 4Y < = 100
3X + 3Y < = 90,
X , Y > = 0
я знаю как решить ее математически, но не знаю как на нее написать код(
Автор: akaGM
Дата сообщения: 28.12.2009 19:14
Eugenio91
типичная задача линейного программирования,
исходники на Сях есть, например, здесь:
http://www.srcc.msu.su/num_anal/lib_na/cat/cat1211.htm
Автор: Eugenio91
Дата сообщения: 28.12.2009 20:07
это я уже находил. там код написан не на борланде как мне нужно( можна ли его перевести в нужный мне язык?
Автор: akaGM
Дата сообщения: 28.12.2009 20:42
Eugenio91
язык там С, а не борланд или ещё какой-нибудь
"перевести" можно, только никто это делать не будет...

можешь ещё поискать:
клик
Автор: karakurt2
Дата сообщения: 28.12.2009 20:47
Eugenio91
Прочитайте раздел 10.8 Linear Programming and Simplex Method из книги Numerical Recipes. Исходный текст примеров и электронную версию книги легко найти в интернете.
Автор: CruelCrow
Дата сообщения: 30.12.2009 13:55
Можно ли для отдельного фрагмента текста в элементе "static" WinAPI задать свой цвет?
Т.е. примерно так:
Добрый день, Вася!
Автор: Abs62
Дата сообщения: 30.12.2009 15:45
CruelCrow
Только если задать стиль SS_OWNERDRAW и отрисовывать его самостоятельно.

PS. Для вопросов по WinAPI есть своя тема.
Автор: CruelCrow
Дата сообщения: 31.12.2009 18:01
Abs62
Спасибо, попробую им.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

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


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