PDA

Просмотр полной версии : [c/c++] Новичкам: задаем вопросы


Страницы : 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19 20 21 22

4y4o
31.10.2008, 18:17
как написать прогу на плюсах которая проверяет совпадение лотерейных номеров. Например сначала вводим 100 комбинация по 6 чисел, а потом выиграшную комбинацию, и прога проверяет совпадение номеров в каждой комбинации.

Chaak
31.10.2008, 18:58
Как реализовать отправку заголовков на сервер и принять от него ответ?
http://sources.ru/cpp/faqs/7.htm
Как через VCL передать заголовки o_O?

vikseriq
31.10.2008, 19:38
ClientSocket1->Socket->SendText(header);
Во даешь чакус, такого от тебя не ожидал )

NetSter
01.11.2008, 18:01
всем тру кодерам ))
скиньте у кого есть работающий пример приложения MFC с использованием функции PLAYSOUND ();
или может кто найдет траблу в коде что кидал 8 постов назад.
заранее спасибо.

Alpha][
02.11.2008, 20:35
Народ , подскажите как можно создать матрицу больших размеров (примерно 1280 на 1024 ) состоящую из double элементов . обыкновенным обьявлением double Matr[1280][1024] программа выдает ошибку :(

Underwit
02.11.2008, 20:59
[']программа выдает ошибку :(

что за ошибка?
у меня всё работает.

jawbreaker
02.11.2008, 21:06
Ну сделай матрицу глобальной(и тогда она будет размещена в куче) или увеличь как-нибудь размер стека, т.к. локальные переменные размещаются в стеке.

FrMn
02.11.2008, 21:09
ужс. горе программеры. массивы такого размера лучше всего диномически выделять, а не в стеке (размер которого по дефолту вроде 1Мб, что намного меньше чем 1024*1028*sizeof(double)).

NetSter
02.11.2008, 23:04
вопрос к тем кто уже юзал VC2008FeaturePack для visual studio 2008
можно ли к существующему проекту прицепить стиль от фьюч пака и если да то как все это сделать чтоб как минимум пришлось переделать? Всем спасибо.

VIP
03.11.2008, 20:58
У меня такой вопрос: Как можно в С просто добавить в массив один элемент, который юзер вводит с клавиатуры, чтобы он был в конце этого массива? Причём длина массива заранее неизвестна.

У меня есть код на Python'e:

while END==0:
print 'Please, enter a:'
a=raw_input()
if a=="END":
END=1
else:
try:
a=float(a)
AList.append(a)
n=n+1
except ValueError:
print "Encorrect enter! Please Return!"


Вот нужно что-то типа этого на С

P.S. Поиск по книгам и по этой теме не помог :(

4p3
03.11.2008, 21:11
Можно на С++?

VIP
03.11.2008, 21:28
Нет, нам в универе пока только С и Python дают :)

reza4ok
03.11.2008, 21:37
Здравствуйте, интересно как на C++ пишется fork-бомба. Вот нашел этот код:
#include <unistd.h>
int main()
{
while(1)
fork();
}
Всё да ничего, но выдаёт ошибку, вот только уже не помню какую.
P.S. C++ начал изучать две недели назад :rolleyes:

zythar
03.11.2008, 21:41
вообще-то это не с++ а си.
пости конкретно какую ошибку выдает?

Forcer
03.11.2008, 21:59
VIP
Варианты:
1. Использовать структуру данных список;
2. использовать функцию realloc;
3. написать свою функцию-аналог realloc;
4. всякий изврат типа сделать рекурсивную функцию со статическим массивом - и по мере вложенности увеличивать счетчик, а в конце - создавать массив и записывать, идя назад по рекурсии туда все элементы.

Мне больше всего нравится первый вариант.

nerezus
04.11.2008, 15:32
Всё да ничего, но выдаёт ошибку, вот только уже не помню какую. return 1;

А вообще пока не будешь помнить, то подобные вопросы задавать на форумах не следует ;)

Shaitan-Devil
05.11.2008, 10:49
Тока начал изучасть С++ скачал Visual Studio 2008 попробывал так на скрине
http://s57.radikal.ru/i155/0811/6d/8ade08d19d23t.jpg (http://radikal.ru/F/s57.radikal.ru/i155/0811/6d/8ade08d19d23.jpg.html)
Тока сильно не пинать.

Namelles One
05.11.2008, 11:59
Абалденный скрин - не видно ничего вообще =\

ntldr
06.11.2008, 01:49
Тока начал изучасть С++ скачал Visual Studio 2008 попробывал так на скрине
http://s57.radikal.ru/i155/0811/6d/8ade08d19d23t.jpg (http://radikal.ru/F/s57.radikal.ru/i155/0811/6d/8ade08d19d23.jpg.html)
Тока сильно не пинать.
не знаю, зачем там stdafx.h
надо #include <iostream>
затем using namespace std;

У меня вопрос - как можно перевести адрес, возвращаемый ф-цией getprocaddress в строку?

0x0c0de
06.11.2008, 06:35
не знаю, зачем там stdafx.h


Если в настройках проекта стоит опция "Use Precompiled Header", то использование этого файла обязательно. Так что либо отключайте эту опцию, либо строчку с включением stdafx.h не трогайте (а то получите "unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?" )


У меня вопрос - как можно перевести адрес, возвращаемый ф-цией getprocaddress в строку?


char bf [10];

wsprintf(bf,"%X",GetProcAddress(LoadLibrary("kernel32.dll"),"LoadLibraryA"));

Функция форматированного вывода (в данному случае выведется в хексе). Результат вывода - в bf.

Можно то же самое, только сразу на консоль, тогда
printf("%X",GetProcAddress(LoadLibrary("kernel32.dll"),"LoadLibraryA"));

ntldr
06.11.2008, 17:06
1>------ Build started: Project: testproxy, Configuration: Debug Win32 ------
1>Compiling with Intel(R) C++ 10.1.021 [IA-32]... (Intel C++ Environment)
1>main.cpp
1>Linking... (Intel C++ Environment)
1>xilink: executing 'link'
1>main.obj : error LNK2019: unresolved external symbol _htons@4 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol _htonl@4 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol _bind@12 referenced in function _main
1>C:\Documents and Settings\User\Мои документы\Visual Studio 2008\Projects\testproxy\Debug/testproxy.exe : fatal error LNK1120: 4 unresolved externals
1>Build log was saved at "file://C:\Documents and Settings\User\Мои документы\Visual Studio 2008\Projects\testproxy\testproxy\Debug\BuildLog.h tm"
1>testproxy - 4 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
В чем может быть проблема?
Код (http://shkolnek.ru/oyaeboo.txt)

0x0c0de
06.11.2008, 17:09
2ntldr
подключи либу Ws2_32.lib

ntldr
06.11.2008, 17:27
2ntldr
подключи либу Ws2_32.lib
спасибо, работает. А как можно загрузив dll через LoadLibraryA, вызвать её по адресу - типа как на асм
CALL [адрес]
?

0x0c0de
06.11.2008, 17:46
>>А как можно загрузив dll через LoadLibraryA, вызвать её по адресу - типа как на асм
CALL [адрес]
?



typedef HANDLE (__stdcall*LoadLibr)(char *);
...


LoadLibr addr = (LoadLibr)GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA");
addr("ntdll.dll");

....

ntldr
06.11.2008, 22:17
как можно передать структуру данных из 1 приложения в другое?

nerezus
06.11.2008, 22:37
По сокету, пайпу, разделяемой памяти, мейлслотам и т.д.

Fertility
07.11.2008, 01:12
на этапе линка Сшка(VC++ 2008 как и пробовал в 2005) выдает ошибки:
1>Process.obj : error LNK2028: unresolved token (0A000009) "extern "C" struct HWND__ * __stdcall FindWindowW(wchar_t const *,wchar_t const *)" (?FindWindowW@@$$J18YGPAUHWND__@@PB_W0@Z) referenced in function "public: void * __clrcall CProcess::CreateGEProcess(void)" (?CreateGEProcess@CProcess@@$$FQ$AAMPAXXZ)

1>Process.obj : error LNK2019: unresolved external symbol "extern "C" struct HWND__ * __stdcall FindWindowW(wchar_t const *,wchar_t const *)" (?FindWindowW@@$$J18YGPAUHWND__@@PB_W0@Z) referenced in function "public: void * __clrcall CProcess::CreateGEProcess(void)" (?CreateGEProcess@CProcess@@$$FQ$AAMPAXXZ)
Что ей так не нравится в моей програме, учитывая что по сути там всего одна гореинструкция hWindow=FindWindow(LPCWSTR("TForm"),0); ???
Пробовал создать консольное приложение, успешно линкует и запускается.....

VIP
07.11.2008, 14:27
VIP
Варианты:
1. Использовать структуру данных список;
2. использовать функцию realloc;
3. написать свою функцию-аналог realloc;
4. всякий изврат типа сделать рекурсивную функцию со статическим массивом - и по мере вложенности увеличивать счетчик, а в конце - создавать массив и записывать, идя назад по рекурсии туда все элементы.

Мне больше всего нравится первый вариант.

А как можно добавлять в стуркутру новый элемент? Как я понял из книг и лекций структура и массив отличаются только тем, что в массиве однородные объекты, а в структуре разнородные. Если это так, то массив мне подходит больше, но как ведь задавая массив нужно сразу задавать количество элементов, а оно в задаче неизвестно! Как быть?

VIP
07.11.2008, 14:31
И ещё один вопрос:

Как в С реализована "защита от дураков"? Всмысле исключения, типа аналога try/except в Python?

nerezus
07.11.2008, 14:38
Никак.
Поэтому так часто и встречаются уязвимости типа переполнений буфера, которых в других языках не бывает.

VIP
07.11.2008, 14:48
Никак.
Поэтому так часто и встречаются уязвимости типа переполнений буфера, которых в других языках не бывает.

Это что же в таком языке как С вообще нет никакой засчиты? А если я вместо переменной типа int напишу Hello, то любая прога на С у меня вылетит?

Fertility
07.11.2008, 16:32
Это что же в таком языке как С вообще нет никакой засчиты? А если я вместо переменной типа int напишу Hello, то любая прога на С у меня вылетит?
Сшка язык более низкого уровня чем Питон. В этом есть свои плюсы, но и есть свои минусы. Если тебе надо какую-то особую защиту в твоем приложении - тебе придется написать ее самому) Защиты от дурака не существует, зато есть быстродействие, более простой доступ к памяти и предположение что программист не дурак и знает что пишет :D
Питон ориентирован на то чтоб тебе было максимально легко и комфортно писать программу, С ориентированна на то чтоб компьютеру было максимально легко и комфортно ее исполнять.
На счет Инт и Хеллоу то это синтаксическая ошибка, такой код просто не скомпилируется. В отличии от Питона в С надо явно задавать тип переменных.
На счет массивов - если ты не знаешь сколько элементов у тебя будет просто создай масив на количество элементво точно больше чем тебе может протребоватся(если не хочешь особо мучать свою голову), либо динамический масив, указатели, выделение памяти....
А вообще если ты в книге дочитал до структур, ЧИТАЙ ДАЛЬШЕ, там все это будет....
------
Апаю свой вопрос
на этапе линка Сшка(VC++ 2008 как и пробовал в 2005) выдает ошибки:
1>Process.obj : error LNK2028: unresolved token (0A000009) "extern "C" struct HWND__ * __stdcall FindWindowW(wchar_t const *,wchar_t const *)" (?FindWindowW@@$$J18YGPAUHWND__@@PB_W0@Z) referenced in function "public: void * __clrcall CProcess::CreateGEProcess(void)" (?CreateGEProcess@CProcess@@$$FQ$AAMPAXXZ)

1>Process.obj : error LNK2019: unresolved external symbol "extern "C" struct HWND__ * __stdcall FindWindowW(wchar_t const *,wchar_t const *)" (?FindWindowW@@$$J18YGPAUHWND__@@PB_W0@Z) referenced in function "public: void * __clrcall CProcess::CreateGEProcess(void)" (?CreateGEProcess@CProcess@@$$FQ$AAMPAXXZ)
Что ей так не нравится в моей програме, учитывая что по сути там всего одна гореинструкция hWindow=FindWindow(LPCWSTR("TForm"),0); ???
Пробовал создать консольное приложение, успешно линкует и запускается..... А в ВиндовсФормАпликейшн получается ошибка :(

GlOFF
07.11.2008, 16:44
А если я вместо переменной типа int напишу Hello, то любая прога на С у меня вылетит?

Есть наверняка проверки дополнительные на ввод данных и создана система обработки ошибок try catch - поэтому не каждая вылетет. :)

GlOFF
07.11.2008, 16:47
Fertility Вот так попробуй - hWindow=FindWindowW(LPCWSTR("TForm"),0); :)

Fertility
07.11.2008, 17:10
Есть наверняка проверки дополнительные на ввод данных и создана система обработки ошибок try catch - поэтому не каждая вылетет. :)
Нету такой проверки, более того быть НЕ должно принципиально =) Если програма не вылетает или не появляется сыстем эррор это просто не тру Си программа :D
Если програмеру такая проверка нужна - он должен написать ее сам! Тоесть считать текстовую переменную, переобразовать ее в число, если это не число сообщить об этом пользователю, а если число то ТОЛЬКО ТОГДА передавать это число на переменную Int :)

Fertility Вот так попробуй - hWindow=FindWindowW(LPCWSTR("TForm"),0);
Попробовал, не работает. ошибку выдает туже :( Подобные функции типа GetForegroundWindow тоже линкование не проходят.... Хэлп :confused:

VIP
07.11.2008, 17:55
А сортировать массивы в C можно? Я имею ввиду не методом прохождения в массиве и перекидыванием большего значения в конец, а просто какой-либо функцией?

iv.
07.11.2008, 18:23
А сортировать массивы в C можно?
Можно.

vikseriq
07.11.2008, 18:39
в любом языке можно, если есть соответствующая либа. даже если кто напишет ее для асма, то и на асме можно будет - инклудь и ранай )

VIP
07.11.2008, 18:48
Почему этот код не даёт мне 10 случайных чисел?


# include <stdio.h>
# include <stdlib.h>

int main() {
int a, i;
i=0;
while (i!=10) {
int rand(a);
i=i+1;
printf("%g\n", a);
}
}

iv.
07.11.2008, 19:05
Почему этот код не даёт мне 10 случайных чисел?
Потому что не использовал srand

vikseriq
07.11.2008, 19:07
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int nStartValue = time(NULL);
int i = 0;
for (i = 0; i<10; i++){
srand(nStartValue);
printf("%d\n",rand() % 100);
}
return 0;
}

Странно, srand не спасает.

vikseriq
07.11.2008, 19:10
Ой, ступил ))
Вот рабочий код:

#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
srand(9);
for (i=0; i<20; i++)
printf("%d\n", rand());
}

iv.
07.11.2008, 19:11
Его в цикл не надо пихать..

vikseriq
07.11.2008, 19:12
Ну и финальная версия :)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int nStartValue = time(NULL);
int i = 0;
srand(nStartValue);
for (i = 0; i<10; i++){
printf("%d\n",rand() % 100);
}
return 0;
}

Fertility
07.11.2008, 20:09
ппц... на нубские вопросы, на которые в любом учебнике по С дают обширное описание, а Гугл выдает целую стопку ответов, ответ появляется сразу, даж находятся люди готовые код писать....
А чтоб отписать чето на реальную проблему, так все восновном молчат....

n4e/\@
07.11.2008, 20:42
Как можно заменить двумерный динамический массив структурой?
Понятно что как то так:

struct list{int element;
list *sled, *vniz;};
А как ей пользоваться? Всмысли объявлять и записывать туда числа. У меня получается записать только один элемент, и от sled и vniz он почему то вобще не как не зависит

Lee_fx
07.11.2008, 20:53
Доброго времени суток, возник такой вопросец: как можно удалить все пробелы из строки?
("5 3 1 2" = "5312")

Sinay
07.11.2008, 21:01
Доброго времени суток, возник такой вопросец: как можно удалить все пробелы из строки?
("5 3 1 2" = "5312")
проверять каждый символ строки,если он "равен" пробелу-удалять

jawbreaker
07.11.2008, 21:11
n4e/\@

#include<stdlib.h>
#include<stdio.h>

struct list_el {
int val;
struct list_el * next;
};

typedef struct list_el item;

void main() {
item * curr, * head;
int i;

head = NULL;

for(i=1;i<=10;i++) {
curr = (item *)malloc(sizeof(item));
curr->val = i;
curr->next = head;
head = curr;
}

curr = head;

while(curr) {
printf("%d\n", curr->val);
curr = curr->next ;
}
}


ну это линейный список, как сделать то что тебе надо я думаю ты и сам сможешь теперь догадаться =)

n4e/\@
07.11.2008, 22:51
Спасибо получилось. Только есть один вопрос.

curr->next = head;
head = curr;
Что происходит в этой части? т.е сначала мы присваиваем curr->next значение NULL
Потом head = размеру выделенной памяти?

FrMn
08.11.2008, 00:04
Потом head = размеру выделенной памяти?
не размеру, а адресу

vikseriq
08.11.2008, 00:13
Не забивай себе голову, делай так:
curr->next = head = curr;

ntldr
09.11.2008, 02:23
В чем может быть проблема -
Создаю ящик и жду данные
#include <windows.h>
#include <conio.h>
#include <iostream>

using namespace std;

HANDLE slot;
char buffer[255];
int n;

int main()
{
slot = CreateMailslotA("\\\\.\\mailslot\\mail1",0,MAILSLOT_WAIT_FOREVER,0);
ReadFile(slot,(void*)buffer,7,(LPDWORD)n,0);
cout << buffer;
_getch();
CloseHandle(slot);
return 0;
}

Открываю ящик и пишу данные
#include <windows.h>
#include <conio.h>
#include <iostream>

using namespace std;

HANDLE h;
int n;

int main()
{
h = CreateFileA("\\\\.\\mailslot\\mail1",GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,0,0 );
WriteFile(h,"testeng",7,(LPDWORD)n,0);
CloseHandle(h);
return 0;
}

В то время когда я начинаю писать в ящик, оба приложения вылетают с ошибкой "Память не может быть written.

ToniKapuchon
09.11.2008, 02:43
Клиент:

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hFile;
char *servName = "\\\\.\\Mailslot\\Laba2", *p;
char s[20];
p = s;
DWORD d = 20;
LPDWORD lp = &d;
//открываем существующий файл или создаем новый
hFile = CreateFile(servName, GENERIC_WRITE , FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE)
puts("Error server create!!!");
else
{
puts("Ok server find!!!");
puts("Please enter some text in file:");
gets(p);
//присваиваем концу строки нулевой символ
s[strlen(s)]='\0';
//запись в файл
WriteFile(hFile, s, strlen(s), lp, NULL);
gets(p);
CloseHandle(hFile);
}
return 0;
}


Сервер:

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE pMailslot;
char *servName = "\\\\.\\Mailslot\\Laba2", *p;
char s[5];

p = s;

DWORD d = 150;
LPDWORD lp = &d;
pMailslot = CreateMailslot(servName, 0, MAILSLOT_WAIT_FOREVER, NULL);

if(pMailslot == INVALID_HANDLE_VALUE)
cout<<"Don't create!!!";
else
cout<<"Create server!!!";

//считывем из файла 7 байт
BOOL res = ReadFile(pMailslot, p, 5, lp, NULL);
cout<<endl;
cout<<" Message from client: "<<endl;
p[5]='\0';
cout<<p<<endl;
CloseHandle(pMailslot);
int a;
cin>>a;
}


Попробуй ето!! всё рабоать должно!!

Zitt
09.11.2008, 18:29
Вобщем нужно небольшой скриптик который выводит список папок в фаил.. Например;
/home/$papka/user/$papka1
Имя папки1 нужно записать фаил....
т.е. заходим в /home/ получае имя всех директорий, заходим в подпапку /users/ опять получаем название папок и записываем в фаил.. и так в цикл...

новояйте кому не трудно...

ToniKapuchon
09.11.2008, 22:16
имеется переменная char следующего содержания:
+ bios_char 0x0012ee1c "021102E04BF90102000000000" char [51]

Как получить из первых двух байт 20 значения 512? типа из дампа десятичное значение!!

jawbreaker
09.11.2008, 22:32
Zitt

#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
#include <vector>
#include <string>
#include <iostream>

using namespace std;

int getdir (string dir, vector<string> &files)
{
DIR *dp;
struct dirent *dirp;
if((dp = opendir(dir.c_str())) == NULL) {
cout << "Error(" << errno << ") opening " << dir << endl;
return errno;
}

while ((dirp = readdir(dp)) != NULL) {
files.push_back(string(dirp->d_name));
}
closedir(dp);
return 0;
}

int main()
{
string dir = string(".");
vector<string> files = vector<string>();

getdir(dir,files);

for (unsigned int i = 0;i < files.size();i++) {
cout << files[i] << endl;
}
return 0;
}

criz
09.11.2008, 23:17
2 Zitt, вот еще примерчик, откопал в ахивах :)

#include <windows.h>
#include <stdio.h>
#include <conio.h>

#define MAX 100

void FindDir();

main(int argc, char *argv[])
{

FindDir("C:\\", "*.*");
}
void FindDir(char* path,char* mask)
{

WIN32_FIND_DATA wfd;
char file[100] = "";
HANDLE hfound;
char newpath[MAX_PATH];
char fpath[MAX_PATH];
char delpath[MAX_PATH];
FILE *f;

strcpy(fpath,path);
strcat(fpath,"\\");
strcpy(delpath,fpath);
strcat(fpath,mask);

f = fopen("dirs.txt", "a");

if((hfound=FindFirstFile(fpath,&wfd))!=INVALID_HANDLE_VALUE)
{
if(!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))
{
//
printf("Error: %d\n", GetLastError());
}
while(FindNextFile(hfound,&wfd))
{
int i = 1;
if(!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))
{
i = 0;
}
if(i && (strcmp(wfd.cFileName, "..") != NULL))
fprintf(f, "%s\n", wfd.cFileName);
}
}
fclose(f);

FindClose(hfound);

strcpy(fpath,path);
strcat(fpath,"\\*.*");

if((hfound=FindFirstFile(fpath,&wfd))!=INVALID_HANDLE_VALUE)
{
if((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))
{
strcpy(newpath,path);
strcat(newpath,"\\");
strcat(newpath,wfd.cFileName);
FindDir(newpath,mask);
}

while(FindNextFile(hfound,&wfd))
{
if((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))
{
strcpy(newpath,path);
strcat(newpath,"\\");
strcat(newpath,wfd.cFileName);
FindDir(newpath,mask);
}
}
}
}

4erry
10.11.2008, 00:30
помогите пожалуйста с выводом матрицы на форму...
вот код самой программы: (это вывод просто на консольку)


/* Сформировать квадратную матрицу A(15,15) следующего вида:
* 0 0 0 ... 0 1
* 0 0 0 ... 1 0
* .............
* 0 1 0 ... 0 0
* 1 0 0 ... 0 0
*/

using System;

namespace Task2
{
class ArrayDemo
{
public static void Main(string[] args)
{
Console.Title = "";
Console.BackgroundColor = ConsoleColor.White;//цвет формы
Console.ForegroundColor = ConsoleColor.Black;//цвет текста формы

do
{
const uint N = 15;

int[,] A = new int[N, N];

Console.Clear();

solution(A, N);
write(A, N);
Console.WriteLine();

Console.WriteLine("Нажмите Esc для выхода!");
} while (Console.ReadKey(true).Key != ConsoleKey.Escape);
}

static void solution(int[,] arr, uint l)
{
for (int i = 0; i < l; i++)
for (int j = 0; j < l; j++)
if (i + j == l - 1)
arr[i, j] = 1;
}

static void write(int[,] arr, uint l)
{
for (int i = 0; i < l; i++,Console.WriteLine())
for (int j=0;j<l;j++)
Console.Write(arr[i,j] + " ");
}
}
}


а вот программка,где я создаю формочку...


using System;
using System.Windows.Forms;
using System.Drawing;

class ButtonForm : Form
{
Button MyButton;
Button StopButton;
Label lblOutput;

public ButtonForm()
{
Text = "Кнопочки";

lblOutput =new Label();

MyButton = new Button();
MyButton.Text = "Start";
MyButton.Location = new Point(100, 200);

StopButton = new Button();
StopButton.Text = "Exit";
StopButton.Location = new Point(200, 200);

//добавляем в список обработчик событий кнопки.
MyButton.Click += new EventHandler(MyButtonClick);
Controls.Add(MyButton);
StopButton.Click += new EventHandler(StopButtonClick);
Controls.Add(StopButton);
}

[STAThread]
public static void Main()
{
ButtonForm skel = new ButtonForm();
Application.Run(skel);
}

//обработчик для кнопки MyButton.
protected void MyButtonClick(object who, EventArgs e)
{
lblOutput.Location = new Point(20, 40);
lblOutput.Size = new Size(216, 24);

lblOutput.Text = "1 2 3 4 5\n1 2 3 4 5\n";
lblOutput.Location = new Point(40, 40);
Controls.Add(lblOutput);
}

//обработчик событий для кнопки StopButton.
protected void StopButtonClick(object who, EventArgs e)
{
//если пользователь ответит щелчком на кнопке Yes,
//программа будет завершена.
DialogResult result = MessageBox.Show("Остановить программу?",
"Завершение",
MessageBoxButtons.YesNo);
if (result == DialogResult.Yes)
Application.Exit();
}
}


вопрос в том,как вывести матрицу из первого кода на форму из второго??? с помощью Label.Text не получается=((помогите пожалуйста..
П.С.прога делается в C#

ToniKapuchon
10.11.2008, 02:49
имеется char[] , там храниться hex значение, как перевести в десятичное ?? с меня плюсы!

krypt3r
10.11.2008, 07:54
strtol (str, NULL, 16);

VIP
10.11.2008, 23:22
У меня следующий вопрос по С:

у меня есть переменная as типа char. мне нужно, чтобы прога сделала а=float(as), то есть перевела эту строку в вещественное число.

В книге нашёл такую функцию как strtod, но в ней нужно указывать саму строку(это понятно) и символ, на котором строка заканчивается :confused:

Это какой же мне нужно нописать там символ, если у меня в строке ничего кроме этого числа нет?

Вот код проги, на всякий случай, может поможет =):

# include <stdio.h>
# include <string.h>
# include <stdlib.h>

int main() {
int stop, i;
float A[1024], B[1024], a;
char end[]="END", as[30];
i=1;
stop=0;
while (stop=0) {
printf("\nEnter a, please:\n");
gets(as);
if (strcmp(as, end)==0) {
stop=1;
}
else {
a=strtod(as, );
A[i-1]=a;
i=i+1;
printf()
}
}

jawbreaker
10.11.2008, 23:27
http://www.cplusplus.com/reference/clibrary/cstdlib/strtod.html
вот пример оттуда:

/* strtod example */
#include <stdio.h>
#include <stdlib.h>

int main ()
{
char szOrbits[] = "365.26 27.32";
char * pEnd;
double d1, d2;
d1 = strtod (szOrbits,&pEnd);
d2 = strtod (pEnd,NULL);
printf ("The moon completes %.2lf orbits per Earth year.\n", d1/d2);
return 0;
}

bons
10.11.2008, 23:33
не надо функций для перевода в вещественное
#include <stdio.h>

int main(void)
{
int x = 6;
float y;
scanf("%f",&y);
printf("%f",y);
return 0;
}

VIP
10.11.2008, 23:48
не надо функций для перевода в вещественное
#include <stdio.h>

int main(void)
{
int x = 6;
float y;
scanf("%f",&y);
printf("%f",y);
return 0;
}

Чё то вот здесь я совсем не пойму
во-первых зачем нужно вводить х=6 ?
и во-вторых мне нельзя сразу делать переменную типа float, так как с клавы можно ввести и слово и тогда прога вылетает с ошибкой :(

groupby
11.11.2008, 13:36
!

Думаю, вот решение:


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
int i = 0;
char as[30];
double A[1024];
while(1)
{
printf("\nEnter a, please:\n");
gets(as);
if (!strcmp(as, "END"))
break;
A[i++] = strtod(as, NULL);
}
printf("Result values:\n");
for(int j = 0; j < i; j++)
printf("%f\t", A[j]);
}


Вот пример обработки:


Enter a, please:
123

Enter a, please:
asdfg

Enter a, please:
456

Enter a, please:
END
Result values:
123.000000 0.000000 456.000000

bons
11.11.2008, 17:58
Чё то вот здесь я совсем не пойму
во-первых зачем нужно вводить х=6 ?
и во-вторых мне нельзя сразу делать переменную типа float, так как с клавы можно ввести и слово и тогда прога вылетает с ошибкой :(

ты прав x=6 не нужно, эт мне бухать надо меньше;)
а вот прога с ошибкой вылетать не должна никак

0x0c0de
11.11.2008, 20:58
>>кто знает, как загрузить файл с url на диск? код нужен очень на C/C++

1 функция

http://msdn.microsoft.com/en-us/library/ms775123(VS.85).aspx

NetSter
12.11.2008, 00:28
есть функция RUN которая берет значение, полученное с листбокса диалога, передает его в подключаемую DLL библиотеку, которая должна приплюсовать к этому значению 3 и вернуть в RUN результат. Потом функция RUN выводит результат не экран.
вот что накодил...


void CMyFrameWin::OnRun()
{
/*
char s[80]; // проверка доходит ли Number до передачи в DLL
CClientDC dc(this); // проверка доходит ли Number до передачи в DLL
wsprintf(s,"Number is %d",Number); // проверка доходит ли Number до передачи в DLL
dc.TextOut(100,200,s); // проверка доходит ли Number до передачи в DLL
*/
int res;
HINSTANCE hDll;
char s[100];
hDll=::LoadLibrary("MyDll");
typedef int (*FUN)(int);
FUN func;
func=(FUN)::GetProcAddress(hDll, "calc");
res=(*func)(Number);
sprintf(s,"%f", res);
MessageBox(s,"Result");
//создание и запись результата в файл
FILE *result;
result=fopen("result.txt","w");
fprintf(result,"%f",res);
fclose(result);


}

значение Number в функцию RUN доходит нормально (проверка выводом на экран без использования DLL)

собственно сам код DLL библиотеки: MyDll

#include "stdafx.h"
#include <conio.h>

int calc(int Number)
{
int r=Number;
int res;
res=r+3;
return res;
}


и код файлика MyDll.def

LIBRARY "MyDll"
DESCRIPTION 'This library has one function'
EXPORTS
calc @1


независимо от того какое значение Number получает функция RUN от листбокса диалога (а получает постоянно точно то же что я выбрал в диалоге, я проверял без подключения DLL простым выводом) получаем постоянно в результате НОЛЬ...

http://img26.picoodle.com/img/img26/3/11/11/f_resm_00dec1d.png (http://www.picoodle.com/view.php?img=/3/11/11/f_resm_00dec1d.png&srv=img26)

я уже хз где я мог втыкануть.... может тому кто долго не втыкал этот бред на свежую голову все покажется просто и укажет на траблу..
Заранее спасибо за любой ответ.

Lee_fx
12.11.2008, 00:29
Доброго времени суток, появилась такая проблемка c алгоритмом Хаффмана:
Имеется массив содержащий набор двоичныч кодов ( пр. char a[3][3] = {{'0','0','0'},{'1','0','1'},{'1','1','1'}}; ) для букв a, b, c. Как в файле поменять каждую a, b и c на ее двоичный код? Совсем чего-то запутался, ведь нет же переменных, которые хранят двоичный код? А с этим чаром что так 8 байт что так =(

NetSter
12.11.2008, 00:34
Доброго времени суток, появилась такая проблемка c алгоритмом Хаффмана:
Имеется массив содержащий набор двоичныч кодов ( пр. char a[3][3] = {{'0','0','0'},{'1','0','1'},{'1','1','1'}}; ) для букв a, b, c. Как в файле поменять каждую a, b и c на ее двоичный код? Совсем чего-то запутался, ведь нет же переменных, которые хранят двоичный код? А с этим чаром что так 8 байт что так =(
если я тебя правильно понял то те нужно открыть файл и читать посимвольно. если встречается тот символ что нужен то заменить на код..
почему бы не использовать код из 3-х цифр как строку? а сделать поиск по файлу и использовать замену строк (типа как replacestr() )...

bons
12.11.2008, 01:05
независимо от того какое значение Number получает функция RUN от листбокса диалога (а получает постоянно точно то же что я выбрал в диалоге, я проверял без подключения DLL простым выводом) получаем постоянно в результате НОЛЬ...
...
я уже хз где я мог втыкануть.... может тому кто долго не втыкал этот бред на свежую голову все покажется просто и укажет на траблу..
Заранее спасибо за любой ответ.

ты там написал:
sprintf(s,"%f", res);
но res вообще-то целого типа. Попробуй
sprintf(s,"%d", res);

Lee_fx
12.11.2008, 01:07
FILE *MyFile, *OUT;
char temp;
Symbols[3] = {'a', 'b', 'c'};
......

MyFile = fopen("1.txt", "r");
OUT = fopen("2.txt", "wb");
while(!feof(MyFile))
{
fread(&temp, 1, sizeof(char), MyFile);
for(i=0; i<3; i++)
if(temp == Symbols[i])
fwrite((const char*)&a[i], 1, sizeof(a[i]), OUT);
}

Получается файл намного больше по размеру, немогу понять как функция fwrite пишет =(

bons
12.11.2008, 01:28
код не весь. Если ты объявлял так:
char a[3][3] = {{'0','0','0'},{'1','0','1'},{'1','1','1'}};
то переменная `a[i]` будет размером в 4 байта. Соответственно fwrite будет записывать немного больше чем ожидалось

Lee_fx
12.11.2008, 08:55
код не весь. Если ты объявлял так:
char a[3][3] = {{'0','0','0'},{'1','0','1'},{'1','1','1'}};
то переменная `a[i]` будет размером в 4 байта. Соответственно fwrite будет записывать немного больше чем ожидалось
На этот ляп ладно, можно [4][4] сделать, мня интересует как вместо символа размером 8 байт записать двоичный код размером 4?

bons
12.11.2008, 11:11
ага, я наконец врубился что ты хочешь.
кстати символ скорее 1 байт чем 8.
программа твоя ..гхм.. замечательна, но работать правильно она будет только если ты изменишь там пару строчек:


FILE *MyFile, *OUT;
char temp;
Symbols[3] = {'a', 'b', 'c'};
......

MyFile = fopen("1.txt", "r");
OUT = fopen("2.txt", "wb");
while((temp=fgetc(MyFile))!=EOF)
{
for(i=0; i<3; i++)
if(temp == Symbols[i])
fwrite((const char*)&a[i], 1, sizeof(a[i]), OUT);
}

groupby
12.11.2008, 13:16
Получается файл намного больше по размеру, немогу понять как функция fwrite пишет =(
Вы не понимаете саму суть битов. Бит - 1/8 часть байта, которая может быть либо 0 либо 1. Отдельный бит записать в файл нельзя. Записать его можно только в виде байта. Соответственно перед записью битов необходимо их паковать в байты, и при накоплении количества битов кратному 8ми, записывать их в выходной файл. Вот накатал небольшое решение для вашего вопроса:


#include <stdio.h>

void main()
{
FILE *in, *out;

//кодирование 3мя битами
int ar[3] = {0x00, 0x05, 0x07}; //коды 'a', 'b', 'c'
char buf; //тут сидит считанный байт с файла

in = fopen("f1.txt", "rb");
out = fopen("f2.bin", "wb");

int count = 0;

union {
int out_buf;
char b[4];
} data;

data.out_buf = 0;

while(fread(&buf, 1, 1, in))
{
if(count < 8)
{ //не записываем, пока не наберем кратное 8ми
//количество битов
data.out_buf = (data.out_buf<<3) + ar[buf - 'a'];
count++;
}
else
{ //запись битов
fwrite(&data.b[2], 1, 1, out);
fwrite(&data.b[1], 1, 1, out);
fwrite(&data.b[0], 1, 1, out);
data.out_buf = ar[buf - 'a'];
count = 1;
}
}

if(count > 0)
{ //запись остатков
fwrite(&data.b[2], 1, 1, out);
fwrite(&data.b[1], 1, 1, out);
fwrite(&data.b[0], 1, 1, out);
}

fclose(out);
fclose(in);
}


Вот пример файла для кодирования (f1.txt) 22 байта:

bacbabcabcbacbabcbacba

После ужатия получили 12 байт, но в конце есть лишние байты, т.к. количество битов не кратно 8ми (22*3 = 66), соответственно в начале файла нужно хранить ещё выходной размер файла, чтобы опустить лишнюю информацию в конце файла, но это уже за рамками поста (пиши в ПМ, если что).

Следует учитывать, что по Хаффману для каждого символа должен быть свой код, т.е. во входном файле все возможные символы должны быть предугаданы тобой, то бишь быть в массиве ar.

NetSter
12.11.2008, 23:36
кто шарит реализовать звучание звука в MFC приложении..
уже пару постов создавал но так и не получилось..
посоветуйте плиз кто что знает)
смотрите посты ЗДЕСЬ (http://forum.antichat.ru/showpost.php?p=913351&postcount=1752) и ЗДЕСЬ (http://forum.antichat.ru/showpost.php?p=913433&postcount=1754)
спасибо.

groupby
13.11.2008, 00:05
кто шарит реализовать звучание звука в MFC приложении..
уже пару постов создавал но так и не получилось..
посоветуйте плиз кто что знает)
смотрите посты ЗДЕСЬ (http://forum.antichat.ru/showpost.php?p=913351&postcount=1752) и ЗДЕСЬ (http://forum.antichat.ru/showpost.php?p=913433&postcount=1754)
спасибо.

http://depositfiles.com/files/pizib527l

n4e/\@
13.11.2008, 03:29
Есть код.

struct list{int elem;
list *next;
list *down;};

int main() {
list *curr, *head;
head = NULL;
curr = NULL;

cin >> stolb;
cin >> strok;

for (int j=0; j<strok; j++){
for(int i=0; i<stolb; i++) {
curr = (list*) new int [strok];
curr->elem = rand()%10+1;
curr->next = head;
head = curr;
}
curr->down = head;
}
return 0;
}


Как можно добавить еще одну строку в конец, без создание еще одной такой же структуры, переноса туда данных, потом переопределение этой и возврата данных+новая строка.
Я уже все перепробовал. Максимум что удалось это добавить строку в начало. А все остальное что я пробовал заставляет вылетать программу с ошибкой при выводе структуры(залезаю где то за границы)

scrat
13.11.2008, 09:23
Есть код.
Как можно добавить еще одну строку в конец, без создание еще одной такой же структуры, переноса туда данных, потом переопределение этой и возврата данных+новая строка.
Я уже все перепробовал. Максимум что удалось это добавить строку в начало. А все остальное что я пробовал заставляет вылетать программу с ошибкой при выводе структуры(залезаю где то за границы)
Вот (http://dl.getdropbox.com/u/196008/LIST_final.CPP) кодес писал не так уж и давно. Там реализован класс с добавлением в конец и в позицию.

PS компилил под borland C 3.1 под студию может не скомпилиться,но общий смысл понять можно и так.

ZET36
13.11.2008, 18:09
Начинаю изучать C++
в наличии есть Mc Visual studio 2005 и Borland Cpp Builder 6.0
с чего начать?

в Борланде пока только научился работать с циклами и массивами в консольном режиме

в Visual studio пока нет
как я понял там отличаются операции ввода-вывода данных
в борланде cout << "World!" а в Visual Studio printf("World!")

что лутьше начать изучать и подскажите пожайлусто стоящую литературу для начинающих с примерами

n4e/\@
13.11.2008, 18:27
как я понял там отличаются операции ввода-вывода данных
в борланде cout << "World!" а в Visual Studio printf("World!")

Ты неправильно понял. cout можно использовать и там и там. printf это оператор вывода от Си, но его можно использовать и в студии.

gisTy
13.11.2008, 19:18
как я понял там отличаются операции ввода-вывода данных
в борланде cout << "World!" а в Visual Studio printf("World!")для использования cin/cout надо подключать библиотеку iostream.h #include "iostream.h"а для printf/scanf билиотеку stdio.h#include "stdio.h"

xismyname
13.11.2008, 21:10
Начинаю изучать C++
в наличии есть Mc Visual studio 2005 и Borland Cpp Builder 6.0
с чего начать?

в Борланде пока только научился работать с циклами и массивами в консольном режиме

в Visual studio пока нет
как я понял там отличаются операции ввода-вывода данных
в борланде cout << "World!" а в Visual Studio printf("World!")

что лутьше начать изучать и подскажите пожайлусто стоящую литературу для начинающих с примерами

Как это с чего начать :D,ты начинающий у тебя выбора нету.
Скачай/Купи кингу о данном языке и начни изучать язык,для начала оставь WinAPI,учи стандартные функции языка.

ZET36
14.11.2008, 09:18
n4e/\@, gisTy, xismyname
Спасибо ребят

Посоветуете пожайлусто литературу по данному языку которая подойдёт начинающему

scrat
14.11.2008, 09:27
n4e/\@, gisTy, xismyname
Спасибо ребят

Посоветуете пожайлусто литературу по данному языку которая подойдёт начинающему
Сначала определись на чём писать будешь. На си или на с++.По синтаксису они в принципе похожи,но подходы к программированию на них абсолютно разные(с++ - объектно ориентирован). Во всяких системных штуках чаще используется си,а в нормальных приложениях с++.


Вот тут 2 книги от создателя с++: http://lib.ru/CPPHB/

n4e/\@
14.11.2008, 09:34
Почитай эти две темы: 1 (http://forum.antichat.ru/thread89681.html) и 2 (https://forum.antichat.ru/thread8725.html) для новичков подойдет Джесс Либерти "C++ за 21 день" и Дейтел "Как программировать на C++". Я учился по второй, помоему она более доступно написано.

zythar
14.11.2008, 10:00
Во всяких системных штуках чаще используется си,а в нормальных приложениях с++.


а сис штучки ненормальные чтоль? (*
насчет книг. если С, то однозначно K&R.
если С++, то хз. а чем вам книга Бьёрна Страуструпа не нравится?

jawbreaker
14.11.2008, 19:46
ИМХО главное не книги, а количество написанных программ. Если прочитать Страуструпа не написав ни единой строчки кода то вряд ли научишься прогать на плюсах ;-). Лично я читал и K&R и Страуструпа но ни одну из книг не прочел от корки до корки. Так что ZET36 больше практики и будет тебе счастье.
ЗЫ вот ещё хороший сайт - cplusplus.com, так описание библиотек и куча примеров.

WAYS
15.11.2008, 01:35
Как "принудительно" перезагрузить компьютер в C#?

Пока нашел только такой способ:


System.Diagnostics.Process.Start(@"cmd.exe", String.Format(@"/C {0} > {1}", "shutdown -r -f -t 0", "tmpFileName"));

groupby
15.11.2008, 13:55
Как "принудительно" перезагрузить компьютер в C#?

[StructLayout(LayoutKind.Sequential, Pack = 1)]

internal struct TokPriv1Luid

{

public int Count;

public long Luid;

public int Attr;

}



[DllImport("kernel32.dll", ExactSpelling = true)]

internal static extern IntPtr GetCurrentProcess();



[DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]

internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);



[DllImport("advapi32.dll", SetLastError = true)]

internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);



[DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]

internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall,

ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen);



[DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]

internal static extern bool ExitWindowsEx(int flg, int rea);



internal const int SE_PRIVILEGE_ENABLED = 0x00000002;

internal const int TOKEN_QUERY = 0x00000008;

internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;

internal const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";

internal const int EWX_LOGOFF = 0x00000000;

internal const int EWX_SHUTDOWN = 0x00000001;

internal const int EWX_REBOOT = 0x00000002;

internal const int EWX_FORCE = 0x00000004;

internal const int EWX_POWEROFF = 0x00000008;

internal const int EWX_FORCEIFHUNG = 0x00000010;



public static Thread thread1;



static void DoExitWin(int flg)

{

bool ok;

TokPriv1Luid tp;

IntPtr hproc = GetCurrentProcess();

IntPtr htok = IntPtr.Zero;

ok = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);

tp.Count = 1;

tp.Luid = 0;

tp.Attr = SE_PRIVILEGE_ENABLED;

ok = LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tp.Luid);

ok = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);

ok = ExitWindowsEx(flg, 0);

}


Copyright © http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/182cdef6-4189-4e7e-a07a-7c5f25adf954/

n4e/\@
16.11.2008, 03:44
Что то я туплю, но в чем ошибка?

string encode[][] = {
{ "%C1", "%C2", "%C3", "%C4", "%C5", "%C6", "%C7", "%C8", "%C9", "%CA", "%CB", "%CC", "%CD", "%CE", "%CF",
"%D1", "%D2", "%D3", "%D4", "%D5", "%D6", "%D7", "%D8", "%D9", "%DA", "%DB", "%DC", "%DD", "%DE", "%DF",
"%E1", "%E2", "%E3", "%E4", "%E5", "%E6", "%E7", "%E8", "%E9", "%EA", "%EB", "%EC", "%ED", "%EE", "%EF",
"%F1", "%F2", "%F3", "%F4", "%F5", "%F6", "%F7", "%F8", "%F9", "%FA", "%FB", "%FC", "%FD", "%FE", "%FF"},
{"А", "Б", "В", "Г", "Д", "Е", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П",
"Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я",
"а", "б", "в", "г", "д", "е", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п",
"р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я"}};

ToniKapuchon
16.11.2008, 03:47
в си нет типа string!

n4e/\@
16.11.2008, 03:55
C++ библиотека string
Если создать таким образом одномерный массив т.е без вторых [] и русских букв то все нормально компилируется.

bons
16.11.2008, 11:30
укажи размерность массива
например так:
string encode[][64] = { ...

xismyname
16.11.2008, 16:41
Что то я туплю, но в чем ошибка?

string encode[][] = {
{ "%C1", "%C2", "%C3", "%C4", "%C5", "%C6", "%C7", "%C8", "%C9", "%CA", "%CB", "%CC", "%CD", "%CE", "%CF",
"%D1", "%D2", "%D3", "%D4", "%D5", "%D6", "%D7", "%D8", "%D9", "%DA", "%DB", "%DC", "%DD", "%DE", "%DF",
"%E1", "%E2", "%E3", "%E4", "%E5", "%E6", "%E7", "%E8", "%E9", "%EA", "%EB", "%EC", "%ED", "%EE", "%EF",
"%F1", "%F2", "%F3", "%F4", "%F5", "%F6", "%F7", "%F8", "%F9", "%FA", "%FB", "%FC", "%FD", "%FE", "%FF"},
{"А", "Б", "В", "Г", "Д", "Е", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П",
"Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я",
"а", "б", "в", "г", "д", "е", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п",
"р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я"}};


Если пишеш на C,то :
int main(void)
{
char encode[][16] = {{1,2,4},{1,2,3}};
}

xxxxxxxxxxxxxxx
16.11.2008, 19:29
-Истинно ли следующее утверждение: иногда полезно создать класс, объектов которого никогда не будет создано?
-Истинно ли следующее утверждение: если конструктор производного класса не определен, то объекты этого класса будут использовать конструкторы базового класса?
-Истинно ли следующее утверждение: класс D может быть производным класса С, который в свою очередь является производным класса В, который производный класса А? Смеется
-Истинно ли следующее утверждение: стрелка, представляющая собой обобщение, указывает на более специфичный класс?

ntldr
17.11.2008, 22:28
подскажите синтакс LdrLoadDLL плиз.

bons
17.11.2008, 22:35
подскажите синтакс LdrLoadDLL плиз.


NTSTATUS LdrLoadDll(
PWSTR szcwPath,
PDWORD pdwLdrErr,
PUNICODE_STRING pUniModuleName,
PHINSTANCE pResultInstance
);


назначение параметров как бы очевидно

ZET36
18.11.2008, 12:26
Я новичок в С++, хочу организовать отправку файла со своего компа на фтп, winapi функцией FtpPutFile,


//---------------------------------------------------------------------------

#include <clx.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
char *user="login";
char *pass="pass";
char *ftpserver="server.com";
char *file;
HINTERNET hInternet;
HINTERNET hFtpSession;
hInternet = InternetOpen(NULL,INTERNET_OPEN_TYPE_DIRECT,NULL,N ULL,0);
hFtpSession = InternetConnect(hInternet,ftpserver , INTERNET_DEFAULT_FTP_PORT, user, pass, INTERNET_SERVICE_FTP, 0, 0);
if(FtpPutFile(hFtpSession, file, "c:\\1.txt", FTP_TRANSFER_TYPE_BINARY, INTERNET_FLAG_PASSIVE) == TRUE){
Sleep(30);
InternetCloseHandle(hFtpSession);
InternetCloseHandle(hInternet);


}
return 0;
}
//---------------------------------------------------------------------------


но при линковке возникают ошибки, неподскажите из за чего?

http://pic.ipicture.ru/uploads/081118/9Y0D8BsV6n.png

groupby
18.11.2008, 12:30
но при линковке возникают ошибки, неподскажите из за чего?

Либу wininet.lib прилинковать надо. Можно в хедере прописать к примеру:

#pragma comment(lib, "wininet.lib")

ZET36
18.11.2008, 13:12
groupby, спасибо код компелируется, но файл на сервер передавать нехочет, не знаеш из за чего?

groupby
18.11.2008, 15:56
groupby, спасибо код компелируется, но файл на сервер передавать нехочет, не знаеш из за чего?

http://msdn.microsoft.com/en-us/library/aa384170(VS.85).aspx

Вторым параметром у тебя в FtpPutFile должен быть локальный адрес ("c:\\file.txt") а третьим имя удаленного файла к примеру file.txt, т.е имя нельзя оставлять пустым как ты это сделал (ты ещё и параметры местами поменял ) ). Дальше.. что-то последний параметр в FtpPutFile у тебя странный (INTERNET_FLAG_PASSIVE). Посмотри что должно быть последним параметром. В твоем случае как я понимаю должно быть просто NULL.

zythar
18.11.2008, 16:16
подскажите синтакс LdrLoadDLL плиз.

http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/Executable%20Images/LdrLoadDll.html

n4e/\@
18.11.2008, 17:08
Как правильно написать вот это:

for (int j = 0; j < myStrok.size(); j++)
for (int i = 0; i < myStrok.size(); i++)
if (myStrok[i]==encode[0][j]) myStrok[i]=encode[1][j];

Знаю что это не правильно и так со строками делать нельзя, это для того что бы было понятно что мне нужно.
myStrok и encode - string

ntldr
18.11.2008, 19:52
как можно получить хендлы всех потоков текущего процесса?

ZET36
18.11.2008, 20:05
groupby, благодарю всё теперь Ок

_antony
18.11.2008, 21:16
как можно получить хендлы всех потоков текущего процесса?
http://msdn.microsoft.com/en-us/library/ms686852(VS.85).aspx
еше можешь посмотреть в сторону ZwQuerySystemInformation. удачи.

ntldr
19.11.2008, 01:54
Как ни пытался сделать процесс с параметрами - ничего не выходит. Окончательный вариант

STARTUPINFO si;
PROCESS_INFORMATION pi;
GetStartupInfo(&si);
CreateProcess(L"test.exe", L"-x", 0, 0, 0, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi);
ExitProcess(0);

_Kris_
19.11.2008, 02:04
Полный путь до процесса? до твоего test.exe

Добавлено: если, что его не сюда постить надо было, а вставить в код и попробывать скомпилить.


STARTUPINFO si;
PROCESS_INFORMATION pi;
GetStartupInfo(&si);
CreateProcess(L"C:\\Program Files\\TEST\\test.exe", L"-x", 0, 0, 0, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi);
ExitProcess(0);

ntldr
19.11.2008, 02:15
Я так уже пробовал, не получилось.

проблему решил.

CreateProcess(L"test.exe", L"test.exe -x", 0, 0, 0, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi);

criz
19.11.2008, 15:41
А зачем второй раз test.exe указываешь? Вторым параметром передается аргумент процесса. Если в первом стоит NULL, то во втором надо указывать "имя_модуля аргумент"...

ntldr
19.11.2008, 16:26
А зачем второй раз test.exe указываешь? Вторым параметром передается аргумент процесса. Если в первом стоит NULL, то во втором надо указывать "имя_модуля аргумент"...
я знаю, но таким способом у меня почему-то не запускалось вообще

criz
19.11.2008, 20:21
я знаю, но таким способом у меня почему-то не запускалось вообще
Попробуй вызвать GetLastError(), может узнаешь в чем проблема.

NetSter
19.11.2008, 22:08
постановка задачи: нужно было с функции передать в DLL библиотеку значения А, В, С, и т.д. и одномерный массив для вычисления функции, библиотека возвращает результат операции или же код ошибки (тоже результат 666).
реализация:

глобальные переменные

int mas[5];
int el, g;
int m_a[5], m_b[5],m_c[5],m_matrix[80];
int Number;
int am,bm,cm;


Функция RUN

void CMyFrameWin::OnRun()
{
char sq[80];
FILE *read;
read=fopen("matrix.txt","r");


while(!feof(read)){
for(int g=0;g<5;g++)
{
fscanf(read,"%d",&el);
mas[g]=el;
fscanf(read,"\n");

sprintf(sq,"%d", mas[g]);
MessageBox(sq,"ELEMENT MASIVA"); // проверка елементов
}
}

int res;
HINSTANCE hDll;
char s[100];
hDll=::LoadLibrary("MyDll");
if (hDll == NULL)
{
::MessageBox(NULL,"ERROR","ERROR! File MyDll.dll not found!",MB_OK| MB_ICONSTOP);
}
else
{
typedef int (*FUN)(int*,int,int,int,int);
FUN func;
func=(FUN)::GetProcAddress(hDll, "calc");
res=(*func)(mas,Number,am,bm,cm);
if (res==666)
{
::MessageBox(NULL,"ERROR! ","DATA ERROR!",MB_OK| MB_ICONSTOP);
}
else
{ sprintf(s,"%d", res);
MessageBox(s,"Result");
//создание и запись результата в файл
FILE *result;
result=fopen("result.txt","w");
fprintf(result,"%d",res);
fclose(result);
}
::FreeLibrary(hDll);
}


массив заполняется значениями из файла matrix.txt вида :

0
1
2
3
4


и собственно сама dll - ка


#include "stdafx.h"
#include <conio.h>

int calc ( int *mas, int Number, int am, int bm, int cm)

{
int r=Number;
int a=am,b=bm,c=cm,n=5,resalt;
//int mas[5]={0,1,2,3,4};
if(r==9){
_asm{
mov eax,0
mov ecx,n
lea esi,mas
l1:
add eax,[esi]
add esi,4
loop l1
add eax,c
mov resalt,eax
}}
else if(r<=5){
_asm{
mov eax,a
sub eax,c
mov a,eax
mov eax,b
mul b
add eax,a
mov ebx,c
cdq
div ebx
mov resalt,eax
}}
else resalt=666;
return resalt;
}


если массив не передавать а забить в dll типа так
//int mas[5]={0,1,2,3,4};
то dll - ка работает нормально, а массив передать никак не получается. В результате получаем хз что.. типа 343987428... и т.д.
кто разбирается посмотрите что там в коде не так... где то я втыкаю.. или у кого есть ссыль на хелп по передаче массива в dll буду рад почитать.
спасибо.

GlOFF
19.11.2008, 22:19
Проблема думаю в том, что mas[0] и mas[1] не идут в памяти друг за другом. а могут указывать на разные адресса в памяти (зависит от компилятора). поэтому здесь нельзя вычислять как mas + Номер элемента*4...

NetSter
19.11.2008, 22:25
все билдится в Вижуал Студио 2008 с future pack - oм (хотя думаю фьюче пак не при чем)

groupby
19.11.2008, 22:48
Проблема думаю в том, что mas[0] и mas[1] не идут в памяти друг за другом. а могут указывать на разные адресса в памяти (зависит от компилятора). поэтому здесь нельзя вычислять как mas + Номер элемента*4...

ни один компилятор СИ не генерирует массив таким образом как вы сказали :D

То что вы сказали относится к динамическим спискам. Массивы всегда последовательно располагаются в памяти. На этом свойстве массивов основана адресация по указателю.

NetSter
20.11.2008, 02:05
значить вот такая история с подключением dll..
сначала когда массив задавался в самой библиотеке
(int mas[5]={0,1,2,3,4};) все работало без претензий при любом значении int Number, int am, int bm, int cm всегда получали правильное решение.
библиотека выглядела так:

#include "stdafx.h"
#include <conio.h>

int calc (int Number, int am, int bm, int cm)

{
int r=Number;
int a=am,b=bm,c=cm,n=5,resalt;
int mas[5]={0,1,2,3,4};
if(r==9){
_asm{
mov eax,0
mov ecx,n
lea esi,mas
l1:
add eax,[esi]
add esi,4
loop l1
add eax,c
mov resalt,eax
}}
else if(r<=5){
_asm{
mov eax,a
sub eax,c
mov a,eax
mov eax,b
mul b
add eax,a
mov ebx,c
cdq
div ebx
mov resalt,eax
}}
else resalt=666;
return resalt;
}


Другим цветом выделил часть кода которая работает с массивом.

потом массив я передал с другой функции, так как было описано ТУТ (http://forum.antichat.ru/showpost.php?p=951828&postcount=1877)
для проверки корректности передачи элементов использовал вывод каждого

int calc ( int *mas, int Number, int am, int bm, int cm)
{
int r=Number;
int a=am,b=bm,c=cm,n=5,resalt;
char sdll[100] = {0};
sprintf(sdll,"%d", mas[1]);
MessageBoxA(NULL, sdll,"Result", NULL);
if(r==9){..........

тут все нормально. элементы массива корректно могут считываться и использоваться библиотекой.
но сам асм код который отвечает за обработку массива в результат кидал постоянно значения типа 3645435664 или 8764599943.....
вышел с положения только С++ кодом... :(

if(r==9){
int temp=0;
for(int i=0;i<n;i++)
{
temp=temp+mas[i];
}
resalt=cm +temp ;
}

так и не понял почему предыдущий РАБОТАЮЩИЙ асм код для массива который был обьявлен внутри dll не покатил для массива который передаем из другой функции...
а нужно именно асм код..
трабла в адресации памяти? или хз?
кто что посоветует?
спасибо.

-------------------EDIT---------------------------
решение проблемы - пост от bons.
bons, спасибо.
-------------------EDIT---------------------------

Diablo@Dragon
20.11.2008, 18:25
Как мне сделать функцию с параметрами но при этом если параметры незадавать выполнялись параметры по умолчанию

ToniKapuchon
20.11.2008, 18:27
void func(int p=1;int p1=2)
{
}
Не уверен!

GlOFF
20.11.2008, 18:34
groupby Ну не знаю :))) Я конечно не настаиваю, но вроде такое заметил на Borland C++...

bons
20.11.2008, 19:28
2 NetSter
Не используй инструкцию lea
вместо lea esi, mas
напиши mov esi, mas
- так будет правильно. Компилятор это превратит примерно в следующее:
mov esi, DWORD PTR [ebp+8]
то есть занесение в esi содержимого параметра mas и это есть правда.

P.S.
а когда ты вместо mov пишешь lea получается:
lea esi, DWORD PTR [ebp+8]
что есть занесение в esi адреса переменной mas, что тебе совсем не нужно

criz
20.11.2008, 19:28
Как мне сделать функцию с параметрами но при этом если параметры незадавать выполнялись параметры по умолчанию
Можно внутри функции сделать проверку на наличие параметров.

InfernoNet
21.11.2008, 02:00
Элементарный вопрос. Для чего нужно:
main ()
и чем оно отличается от
vaild main ()
??

ToniKapuchon
21.11.2008, 02:08
Элементарный вопрос. Для чего нужно:

и чем оно отличается от

??

точка входа в программу функция main(), а vaild ето тип возращаемый ОС тип.... первый раз вижу vaild - где ты ето увидел?

Smapt
21.11.2008, 02:42
есть такой код:

struct abs1
{
unsigned char a; //1-byte
unsigned short b;//2-byte
};
void pr(unsigned char*t)
{
for(int i=0;i<sizeof(t);i++) printf("%x ",t[i]);
}

int main()
{
abs1 test;
test.a = (unsigned char)0x31;
test.b = (unsigned short)0x32;
printf("Struct size: %d\n",sizeof(test));

pr((unsigned char*)&test);
getchar();
return 0;
}


Выводит:
Struct size: 4
31 CC 32 00

Почему размер структуры 4 если (чар -1баит и шорт-2байта) должен быть 3 байта.

Лишний байт виден при печати структуры (второй - 0хСС)

как от него избавится?

iv.
21.11.2008, 02:53
Почему размер структуры 4 если (чар -1баит и шорт-2байта) должен быть 3 байта.
Видимо выравнивание вступает в ход.
Лишний байт виден при печати структуры (второй - 0хСС)

как от него избавится?
Очищать память, CC - мусор.

Smapt
21.11.2008, 03:06
Если я правильно понимаю после очистки мамяти будет 31 00 32 00, я прав? Мне же необходимо от "лишнего" байта избавится, т.е. структура должна быть размером именно 3 байта.

SVAROG
21.11.2008, 03:38
нужно прочесть данные из реестра, тип данных REG_SZ, компилиться без ошибок, но в буфере(Reget) где должны быть данные пусто :confused:
часть кода

HKEY hKey;
RegOpenKeyExA(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parame ters\\Interfeaces\\{2BF69BB5-EB8E-48CE-8D1F-FA2CCF27B}", 0, KEY_READ, &hKey);
char Reget[64];
DWORD RegetPath = sizeof(Reget);
DWORD type = REG_SZ;
RegQueryValueExA(hKey, "DhcpIPAddress", NULL, &type, (PBYTE)Reget, &RegetPath);
RegCloseKey(hKey);

printf(Reget);

Diablo@Dragon
21.11.2008, 10:38
void func(int p=1;int p1=2)
{
}
Не уверен!

Сейчас проверим

12usver12
21.11.2008, 11:04
Svarog попробуй вместо &type влепить 0 , у меня работало так

Diablo@Dragon
21.11.2008, 12:52
Сообщение от ToniKapuchon
void func(int p=1;int p1=2)
{
}

в компосере непашет такого вида конструкция нехочет компилить

xismyname
21.11.2008, 15:48
Как мне сделать функцию с параметрами но при этом если параметры незадавать выполнялись параметры по умолчанию

int main(void)
{
func(NULL);

return 0;
}

void func(int *n)
{
if(n == NULL)
{
puts("аргумент не задан !");
}
else
{
printf("аргумент = %d\n",*n);
}
}

bons
21.11.2008, 16:19
Если я правильно понимаю после очистки мамяти будет 31 00 32 00, я прав? Мне же необходимо от "лишнего" байта избавится, т.е. структура должна быть размером именно 3 байта.

Для того чтобы включить выравнивание по границе байта нужно сделать

#pragma pack(push, 1)

тут структура

#pragma pack(pop)

Diablo@Dragon
21.11.2008, 17:05
int main(void)
{
func(NULL);

return 0;
}

void func(int *n)
{
if(n == NULL)
{
puts("аргумент не задан !");
}
else
{
printf("аргумент = %d\n",*n);
}
}

ну всёбы хорошо только вот это под микроконтроллер нада и нужно чтобы работало таким образом

Параметры по Умолчанию

Часто в самом общем случае функции требуется больше параметров, чем в самом простом и более употребительном случае. Например, в библиотеке потоков есть функция hex(), порождающая строку с шестнадцатиричным представлением целого. Второй параметр используется для задания числа символов для представления первого параметра. Если число символов слишком мало для представления целого, происходит усечение, если оно слишком велико, то строка дополняется пробелами. Часто программист не заботится о числе символов, необходимых для представления целого, поскольку символов достаточно. Поэтому для нуля в качестве второго параметра определено значение "использовать столько символов, сколько нужно". Чтобы избежать засорения программы вызовами вроде hex(i,0), функция описывается так:

extern char* hex(long, int =0);

Инициализатор второго параметра является параметром по умолчанию. То есть, если в вызове дан только один параметр, в качестве второго используется параметр по умолчанию.

Например:

cout << "**" << hex(31) << hex(32,3) << "**";

интерпретируется как

cout << "**" << hex(31,0) << hex(32,3) << "**";

и напечатает:

** 1f 20**

Параметр по умолчанию проходит проверку типа во время описания функции и вычисляется во время ее вызова. Задавать параметр по умолчанию возможно только для последних параметров, поэтому




int f(int, int =0, char* =0); // ok
int g(int =0, int =0, char*); // ошибка
int f(int =0, int, char* =0); // ошибка




Заметьте, что в этом контексте пробел между * и = является существенным (*= является операцией присваивания):




int nasty(char*=0); // синтаксическая ошибка

ntldr
21.11.2008, 17:09
Можно ли играть одновременно 2 разные частоты через пс спикер? типа "полифония". Kernel32 - Beep()

demo_version
21.11.2008, 18:11
Хочу задать несколько вопросов:)
В чем я буду писать на си ? В каком-то специальном редакторе или можно в блокноте как html ? И нужна ли какая-то поддерживающая программа ?

И еще, си и си++ это одно и то же ? Мне просто говорили что си такого нет, есть си++

Заранее спасибо за разъяснение сих вопросов))))

jawbreaker
21.11.2008, 18:22
Писать можно в чём угодно, хоть в блокноте, но в какой-нибудь IDE это делать будет в сто раз удобно. Там и компилятор есть, и отладчик, и ещё куча всякой нужной фигни. Например, Visual Studio (http://www.microsoft.com/express/vc/).
С это старый процедурный язык, С++ "новый" объектно-ориентированный который по большей части совместим с С.

demo_version
21.11.2008, 18:29
jawbreaker
Благодарю)))

Еще вопрос: а вот если я буду в блокноте что-то писать, то каким должно быть расширение ?

jawbreaker
21.11.2008, 19:09
cpp, cxx, какое компилятор понимает в-общем. Купи себе книжку С++ для чайников, чтобы начать в самый раз =)

demo_version
21.11.2008, 19:19
jawbreaker
Спасибо еще раз!)) Скачала!))) надеюсь разберусь!

criz
21.11.2008, 19:47
При запуске проги в билдере выскакивает:
CPU (http://img407.imageshack.us/img407/2643/screensz2.jpg)
Подскажите чего оно выскакивает и работать мешает? :)

demo_version
21.11.2008, 20:17
Начала читать C++ для чайников. . . .
Скачала етот Visual C++ как и советовал автор, ввела туда код, который предложил автор, теперь он пишет скомпилировать, но я не вижу опции Make->Compile, о которых он говорит. . . .

+ я не совсем понимаю етот термин, прочла в википедии! =(

Т.е у меня щас есть просто код, откуда появится интерфейс ?????
хелп плиз)))

criz
21.11.2008, 20:36
demo_version
Build -> Compile
Интерфейс, наверно, ручками придется создавать :)

ZET36
21.11.2008, 20:44
Есть у когонибуть исходники простенького backdoor'а ?

criz
21.11.2008, 21:11
Есть у когонибуть исходники простенького backdoor'а ?
Вот, есть какой-то: http://slil.ru/26356633
хз откуда скачивал...

NetSter
22.11.2008, 18:24
доброго времени суток.
нужно накодить функцию открытия и просмотра содержимого текстового файла (в отдельном окне.)
вот что уже накодил:

класс ОПЕН

class COpenWnd:public CFrameWnd
{
public:
COpenWnd(CWnd *wnd);
};
COpenWnd::COpenWnd(CWnd *wndPerent)
{
CRect rectWnd(25,25,700,500);
Create(NULL, "Opened file", WS_OVERLAPPEDWINDOW, rectWnd, wndPerent, NULL);
}


и собственно функция ОПЕН


void CMyFrameWin::OnOpen()
{

CString m_Text, path;
CFileDialog dlgOpen(TRUE, "txt","",
OFN_HIDEREADONLY, "BLOKNOT (*.txt)| *.txt| VISUAL C++ (*.cpp)| *.cpp| ALL Files(*.*)|*.*|", this);

if(dlgOpen.DoModal()==IDOK)
{
CStdioFile File(dlgOpen.GetPathName(), CFile::modeRead| CFile::typeBinary);
CString & ref=m_Text;
path=dlgOpen.GetPathName();
COpenWnd *OpenWnd=new COpenWnd(this);
OpenWnd -> ShowWindow(SW_SHOWNORMAL);
OpenWnd -> UpdateWindow();
CClientDC dc(OpenWnd);
int y=30;
CFont l_font;
l_font.CreatePointFont(150,"Lucida Console");
CFont* l_old_font = dc.SelectObject(&l_font);
dc.TextOut(10,10,path);
dc.SelectObject(l_old_font);

while (File.ReadString(ref)!=NULL)
{
CFont l_font;
l_font.CreatePointFont(150,"Lucida Console");
CFont* l_old_font = dc.SelectObject(&l_font);

dc.SetTextColor(RGB(y*10,y+19,y+50));
dc.TextOut(30,y,m_Text, strlen(m_Text)-1);
y=y+45;
dc.SelectObject(l_old_font);
}
}
}


проблемка: при открытии больших файлов большая часть текста не попадает в это окно)))
помогите привинтить к этому окну полосы прокрутки чтоб весь текст файла можно было просмотреть.
по ходу чудить нужно в классе ОПЕН но ц мну ниччего не получилось. кто что подскажет?
Большое спасибо.

InfernoNet
22.11.2008, 23:48
точка входа в программу функция main(), а vaild ето тип возращаемый ОС тип.... первый раз вижу vaild - где ты ето увидел?
У препода на доске.

JukeBox
24.11.2008, 04:23
Не совсем по С, но все же:
Есть нарисованный прямоугольник типа TRect(Borland C++) Rect(x1, y1, x2, y2)
Нужно его поворачивать вокруг заданной точки.
Неподскажите как это можно "провернуть"?

LuX0R
24.11.2008, 12:27
Математика в руки! Пишу первое что пришло в голову, это выразить координаты точек через sin и cos.
x = R cos a
y = R sin a

...
#include <math.h>
...
/* убейте но не помню навскидку как называеться структура, вроде как Point, но не буду врать, потому определю для примера*/
struct cord
{
int x;
int y;
}cord;
...
cord RotateCordinate(int R, float a) // радиуc окружности вращения, угол
{
cord Cordinate;
Cordinate.x = cos(a)*R;
Cordinate.y = sin(a)*R;
return Cordinate;
}
...
// собсно твой код
float Alpha = 0; // угол
int R; // радиус = половине длинны диагонали твоего прямоугольника
cord Rectangle_1, Rectangle_2; // твои координаты
while(...) // не знаю, для чего тебе нужно, потому условие выхода если нужно определишь сам
{
Clear(); // очищаем поле для рисования
Rectangle_1 = RotateCordinate(R, Alpha);
Rectangle_2 = RotateCordinate(R, Alpha+180); // для противоположной координаты +180 градусов
Rect(Rectangle_1.x, Rectangle_1.y, Rectangle_2.x, Rectangle_2.y); // (*)
Alpha += 0,01; // смещаем угол
delay(40); // примерная скорость 25 кадров в сек.
}
...

В пункте (*) можно соответственно приплюсовать ровнение кординат, т.е. где именно будет центр окружности. Можно еще сделать через уравнение окружности. Соответственно и для трехмерных обьектов, только нужно использовать уровнение элипса.

agrofyl2
24.11.2008, 13:34
Помогите пожалуйста:
Компилятор Visual C++ 2005
Как настроить, чтобы скомпилированная программа запускалась и на другом компьютере а не только на моем?
Только конкретно, там, какие галочки и т.п.
Спасибо.

criz
24.11.2008, 13:59
agrofyl2, попробуй:
Project -> Settings -> C/C++ -> Code Generation
Там есть Use Run-time Library. Ставь либо Multithreaded, либо Debug Multithreaded.
З.Ы. или просто носи с собой нужные библиотеки :)

Jes
24.11.2008, 23:39
while (true){
if(GetKeyboardState(keysState)==0) MessageBox(0,"Error",0,0);
if(keysState[VK_LSHIFT] > 0 ){
MessageBox(0,"Pushed","ok",0);
return 0;
}
Sleep(100);
}

никакого эффекта :/
(нада именно через GetKeyboardState)

criz
25.11.2008, 00:36
/*
* VK_L* & VK_R* - left and right Alt, Ctrl and Shift virtual keys.
* Used only as parameters to GetAsyncKeyState() and GetKeyState().
* No other API or message will distinguish left and right keys in this way.
*/
Так, вроде работает:
while(true)
{
if(GetKeyboardState(keysState)==0)
{
MessageBox(0,"Error",0,0);
return 1;
}
if(keysState[VK_SHIFT])
{
MessageBox(0,"Pushed","ok",0);
return 0;
}
Sleep(100);
}
только вот Shift должен быть нажат во время запуска проги

Sibogatov
25.11.2008, 11:22
Начал изучать С++ в папке с прогой есть Exampels вот я выбрал Hello! Когда я нажимаю выполнить или отладка у меня пишет Данный Файл не откомпилирован... что делать?

scrat
25.11.2008, 12:09
Начал изучать С++ в папке с прогой есть Exampels вот я выбрал Hello! Когда я нажимаю выполнить или отладка у меня пишет Данный Файл не откомпилирован... что делать?
возможно....скомпилировать?

LuX0R
25.11.2008, 12:27
ммм... ответ прост: Откомпилировать! Позвольте полюбопытствовать: а в какой среде разработки вы программируете? Из всех установленных у миня:
Builder 6.0 Run->Run (F9)
Microsoft Vsual C++ 6.0 Build->Build (F7) или Build->Execute (Ctrl+F5)
Visual Studio 2005 Build->Build Solution (F6)
Turbo C 3.0 Compile->Compile (Alt+F9) или Compile->Make (F9), а потом Run->Run (Ctrl+F9)
В Dev-C++ не помню, но по моему F9 точно компилит и запускает.

Sibogatov
25.11.2008, 14:32
всё сделал... а можно примеры маленьких программ каких не буть?

criz
25.11.2008, 14:50
int main()
{
printf("%s\n", (sizeof('a') == sizeof(char)) ? "C++" : "C");
return 0;
}

(c)wikipedia :)

Sibogatov
25.11.2008, 15:19
еще пожалуйста... :) хочу научиться чё нить

criz
25.11.2008, 16:43
Sibogatov, возьми книгу и учись ;)
З.Ы. можешь учиться по этому: http://forum.antichat.ru/threadnav40894-1-10.html

criz
26.11.2008, 20:20
Я уже задавал этот вопрос..ответа так и не получил. При запуске из билдера выскакивае вот это окошко (http://img525.imageshack.us/img525/8119/cpugs0.jpg) . А если загрузить в olly, то можно увидеть это (http://img385.imageshack.us/img385/4428/olly2fp4.jpg)
Что за брейкпоинт? И как его убрать?

criz
27.11.2008, 00:20
Источник проблемы найден. Другой вопрос. Имеется такой код:

#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
/*.....................................*/
res = pGetExtendedTcpTable(NULL, &size, 1, AF_INET, TCP_TABLE_OWNER_MODULE_ALL, 0);
if(pTCPTable != NULL)
{
FREE(pTCPTable);
}

Окно CPU выскакивает на:
FREE(pTCPTable);
Что в этом коде не так? :)

0x0c0de
27.11.2008, 08:07
2criz
Хм, в этом коде, что вы привели, объявления pTCPTable не вижу... И вообще работы с этой переменной(кроме FREE, а до FREE?)

criz
27.11.2008, 10:12
2criz
Хм, в этом коде, что вы привели, объявления pTCPTable не вижу... И вообще работы с этой переменной(кроме FREE, а до FREE?)


pGetExtendedTcpTable = (DWORD (WINAPI *)(PVOID,PDWORD,BOOL,ULONG,TCP_TABLE_CLASS,ULONG)) GetProcAddress(LoadLibrary( "iphlpapi.dll"), "GetExtendedTcpTable");
/*................*/
PVOID pTCPTable;

Затем опять идет вызов pGetExtendedTcpTable

0x0c0de
27.11.2008, 11:16
2criz

Если это действительно весь код, то. pTCPTable - локальная переменная. В ней когда вы вызываете

if(pTCPTable != NULL)
{
FREE(pTCPTable);
}

сразу после
PVOID pTCPTable;
мб все, что угодно => Пишите вот так

PVOID pTCPTable = 0;

А то у вас if срабатывать когда не надо будет...

criz
27.11.2008, 17:22
Все работает :)
0x0c0de, спасибо =)

ntldr
27.11.2008, 23:51
как на winapi получить путь к папке application data?

0verbreaK
28.11.2008, 00:01
ntldr У каждого пользователя своя папка application data, если тебе надо определенную, то сначала придется выполнить пред-пункт (определить пользователя).

Например:

All Users
Default User
Текущий пользователь

Все они имеют свои папки application data. Получение доступа это наверное простой перебор всех папок на определнном диске (если конечно нет спец. апи функции)

bons
28.11.2008, 00:16
как на winapi получить путь к папке application data?


#include <shlobj.h>
#include <stdio.h>

int main()
{
char cpPriv[MAX_PATH];
SHGetSpecialFolderPath(0, cpPriv, CSIDL_APPDATA, 0);
printf("%s\n",cpPriv);
}

NetSter
28.11.2008, 00:38
мм.. не нашел инфо о том как привентить spin control в Visual Studio 2008 к едитбоксу..
вот что сделал уже сделал:
1) на одном форуме нашел как привязать спин контролл к едит боксу:

В Dialog Editor создать spin control, привязанный к едиту проще некуда. Создаешь edit как обычно. Создаешь рядом (можно и не рядом - все равно привяжется) spin control с той же панели инструментов "controls", в свойствах spinа ставишь флажок "Auto buddy" и выбираешь "Aligment" - Left или Right.
Spin привяжется к элементу, стоящему до него в TabOrder - для изменения или контроля TabOrder - меню Layout->Tab Order или Ctrl+D.
Менять значение в edite от спина можно обрабатывая сообщение UDN_DELTAPOS (Правая клавиша на spinе->Events->UDN_DELTAPOS->Add and Edit). Обрабатывать значения в editе введенные с клавиатуры и от spinа можно по сообщению EN_CHANGE editа (аналогично - Правая клавиша на edite->Events->EN_CHANGE->Add and Edit).
Если хочешь задать минимальное и максимальное значение spinа - проще всего это сделать в InitDialog, либо связав член класса со spinом, либо напрямую через ((CSpinButtonCtrl*)GetDlgItem(IDC_SPIN...))->SetRange(...);
Удачи в общем, и все такое...

2) есть диалог с едитом, его инициализция и чтение даных с него.. вообщем все работает.

class CMyDialog : public CDialog
{
public:
afx_msg BOOL OnSetCursor( CWnd* pWnd, UINT nHitTest, UINT message );
CMyDialog(CWnd* pParent = NULL);
enum { IDD = IDD_MATRIXDIALOG };
CListBox m_sizex;
CEdit m_matrix;
CEdit m_a;
CEdit m_b;
CEdit m_c;
protected:
virtual void DoDataExchange(CDataExchange* pDX);
protected:
virtual void OnOK();
virtual void OnCancel();
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnLbnSelchangeListx();
afx_msg void OnStnClickedBitmap1();
};
CMyDialog::CMyDialog(CWnd* pParent)
: CDialog(CMyDialog::IDD, pParent)
{
}
void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LISTX, m_sizex);
DDX_Control(pDX, IDC_METRIXEDIT, m_matrix);
DDX_Control(pDX, IDC_EDITA, m_a);
DDX_Control(pDX, IDC_EDITB, m_b);
DDX_Control(pDX, IDC_EDITC, m_c);
}



void CMyDialog::OnOK()
{
char str[80];
char str1[80];
char strA[5];
char strB[5];
char strC[5];
Number=m_sizex.GetCurSel();
m_sizex.GetText(Number,str);
m_matrix.GetWindowText(str1,80);
m_a.GetWindowText(strA,5);
m_b.GetWindowText(strB,5);
m_c.GetWindowText(strC,5);
----------------------
----------------------
am = atoi(strA);
bm = atoi(strB);
cm = atoi(strC);
fclose(matrix);
BE_DIALOG=1;
CDialog::OnOK();
}



BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
-----
-----
m_a.SetWindowText(CString("A"));
m_b.SetWindowText(CString("B"));
m_c.SetWindowText(CString("C"));
return TRUE;
}


Помогите привентить спин - контролл ну к примеру для (pDX, IDC_EDITA, m_a), и т.д.
Помогите ценным советом или толковым линком по сабжу..
Спасибо.

_nic
28.11.2008, 03:18
Нет ли у кого примера кода простенького классического вируса на С ?

Dian
28.11.2008, 04:05
Нет ли у кого примера кода простенького классического вируса на С ?
Смотри http://vx.netlux.org

_nic
28.11.2008, 12:28
Смотри http://vx.netlux.org
там только для ms-dos и linux :(

ntldr
28.11.2008, 16:40
Ошибка при линке
1>MSVCRTD.lib(crtexew.obj) : error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в функции ___tmainCRTStartup

#include <windows.h>

int main()
{

return 0;
}

St0nX
28.11.2008, 18:17
Проект консольный создай или сделай так
#include <windows.h>
#pragma comment(linker,"/ENTRY:main")
int main()
{

return 0;
}

0verbreaK
28.11.2008, 21:25
_nic
Сайт группы Hell Knights Crew
http://hellknights.void.ru/

Конкретно
http://hellknights.void.ru/releases/0x48k-wmfvirus.rar
http://hellknights.void.ru/releases/0x48k-epolikeinfect.rar

SVAROG
30.11.2008, 21:20
как преобразовать TCHAR в LPCSTR :confused: :confused: :confused:

iv.
30.11.2008, 21:36
как преобразовать TCHAR в LPCSTR
#define TCHAR LPCSTR ;(

а вообще зачем? используй или юникод или аски, юникод+аски = не айс.

SVAROG
30.11.2008, 21:41
нет, просто переопределить TCHAR в LPCSTR нельзя, они не совместимые ибо оба определины в винде, требуеться отправить переменную типа TCHAR в функцию которая требует в виде параметра LPCSTR

iv.
30.11.2008, 21:47
каст типа (LPCSTR) и компилятор всё схавает, за работоспособность не отвечаю..

SVAROG
30.11.2008, 21:53
#include "stdafx.h"
#include "windows.h"
#define BUFSIZE 80
#include <tchar.h>
#define TCHAR LPCSTR

int _tmain(int argc, _TCHAR* argv[])
{

HKEY hKey;
LPCSTR text;
DWORD dwBufLen=BUFSIZE;
TCHAR szProductType[BUFSIZE];

LONG lRet=RegOpenKeyEx( HKEY_LOCAL_MACHINE,TEXT("SYSTEM\\ControlSet001\\Services\\Tcpip\\Parameters \\Interfaces\\{2B69BB5-EB8E-48CE-8D1F-FA2CCF27B6EE}"), 0, KEY_QUERY_VALUE, &hKey );
if( lRet != ERROR_SUCCESS ) MessageBoxA(NULL, "НЕТ", "",MB_OK);
lRet = RegQueryValueEx( hKey, TEXT("DhcpIPAddress"), NULL, NULL, (LPBYTE) szProductType, &dwBufLen);
RegCloseKey( hKey );

text=(LPCSTR(szProductType));
MessageBoxA(NULL,text,"",MB_OK);
return 0;
}

выводит первый символ из всей строки
в DhcpIPAddress есть мой ИП в отладчике он есть
но мессаге бокс выводит только первый символ моего ИП

SVAROG
30.11.2008, 21:57
в переменной szProductType мой ип есть, смотрел под отладчиком, но выводиться тока первый байт

iv.
30.11.2008, 22:01
text=(LPCSTR(szProductType));
омг
MessageBoxA(NULL,text,"",MB_OK);
используй MessageBoxEx

пс: и юникод (везде)
ппс: и вместо int _tmain(int argc, _TCHAR* argv[]) достаточно int main(void)

SVAROG
30.11.2008, 22:18
iv.
'MessageBoxEx' : function does not take 4 arguments

SVAROG
30.11.2008, 22:49
to iv.
всё равно выводит тока первый символ

iv.
30.11.2008, 23:06
to iv.
всё равно выводит тока первый символ
Либо там каким-то образом на второе место затисался символ конца строки, либо формат строки неверный. Код в студию.

SVAROG
30.11.2008, 23:56
всё заработало
"Configuration Properties -> General
Character Set поставил "Use Multi-Byte Character Set"
стало выводить окошко с моим айпишником))
но как же всётаки преобразовать тип LPCSTR который возвращает функция RegQueryValueEx в обычный текстовый массив char

iv.
01.12.2008, 00:09
но как же всётаки преобразовать тип LPCSTR который возвращает функция RegQueryValueEx в обычный текстовый массив char
Если ты побайтово посмотришь данные которые записаны в Unicode, то обнаружишь что старший байт там = 0 (если не используются символы которых нет в аски), это сделано как раз для совместимости. Мысль думаю понятна. А вообще не отрицаю возможности наличия функции, которая делает это автоматически..
Так и не понял зачем тебе это..работай в юникоде, это нормально =) Повсеместно сейчас он используется.

jawbreaker
01.12.2008, 00:16
Попробуй так:
char str[200];
LPCSTR lpsz = (LPCSTR) str;

или

char str[200];
LPCSTR lpsz = static_cast(str);

SVAROG
01.12.2008, 00:17
iv. спс за помощь, всё работает

n4e/\@
01.12.2008, 00:18
Три вопроса по MFC:
1:
char a = (char) 42;
мне надо что бы число 42 было выведено как 42, а выводится *(так с любой цифрой)
вариант с "" не катит, т.к 42 у меня будет переменная.
2:
Есть Edit Control
он привязан к переменно int CIN
В начале такой код:
CKontrolnaiaMFCDlg::CKontrolnaiaMFCDlg(CWnd* pParent /*=NULL*/)
: CDialog(CKontrolnaiaMFCDlg::IDD, pParent)
, CIN(0)
И при запуске программы в Едит Контроле отображается 0, а мне бы хотелось что бы изначально там было пусто
3:
Еще когда даже не имел представление о языке игрался с проектом, ну там кнопки разные перетаскивал, формочки создавал, так вот там была такая фишка: скажем создал кнопку, потом еще одну и если ее перемещать то она прилипала к границам уже созданной кнопки, т.е как будто главнвя форма размечена, понимаю что объяснил не ахти, приведу скриншот.
http://s61.radikal.ru/i174/0811/5c/566037729183.jpg (http://www.radikal.ru)
Так вот такой функции сейчас у меня нет, может я ее где отключил? Visual Studio 2008 английская, может кто знает как включить.

iv.
01.12.2008, 00:24
мне надо что бы число 42 было выведено как 42, а выводится *(так с любой цифрой)
вариант с "" не катит, т.к 42 у меня будет переменная.
Вариант с "" катит, если потом используешь функцию atoi
И при запуске программы в Едит Контроле отображается 0, а мне бы хотелось что бы изначально там было пусто
В блоке инициализации пишешь что-то типа CIN.SetWindowText("");
Еще когда даже не имел представление о языке игрался с проектом, ну там кнопки разные перетаскивал, формочки создавал, так вот там была такая фишка: скажем создал кнопку, потом еще одну и если ее перемещать то она прилипала к границам уже созданной кнопки, т.е как будто главнвя форма размечена, понимаю что объяснил не ахти, приведу скриншот.
Так и не понял о чем ты.

SVAROG
01.12.2008, 00:40
как внедриться в чужой процесс и посмотреть определённый диапазон памяти?

iv.
01.12.2008, 00:46
как внедриться в чужой процесс и посмотреть определённый диапазон памяти?
BOOL ReadProcessMemory(
HANDLE hProcess,
LPCVOID lpBaseAddress,
LPVOID lpBuffer,
SIZE_T nSize,
SIZE_T* lpNumberOfBytesRead
);

n4e/\@
01.12.2008, 01:07
Вариант с "" катит, если потом используешь функцию atoi
А пример можно? а то я не совсем понимаю. вот скажем есть
int b = 44;
как его перегнать в char как число?


В блоке инициализации пишешь что-то типа CIN.SetWindowText("");
А разве так можно? CIN у меня int еще не пробовал, но помоему будет ругаться.


Так и не понял о чем ты.
Сейчас нашел где я это видел, это если создать проект не MFC а CLR Windows Form
http://s42.radikal.ru/i097/0811/2e/6e167732ce54t.jpg (http://radikal.ru/F/s42.radikal.ru/i097/0811/2e/6e167732ce54.jpg.html)
Вот эти линии он сам показывает при перетаскивание объектов

jawbreaker
01.12.2008, 19:24
А вот скажем есть
int b = 44;
как его перегнать в char как число?

char buf[10];
sprintf(buf, "%d", b);

!{ra!{e/\/
01.12.2008, 19:48
Есть массив
int a[10];
Нужно в label1 вписать значения этого массива.
Как это сделать?

criz
01.12.2008, 19:55
Например, вот так:

Label1->Caption = "";
for(i = 0; i < 10; i++)
Label1->Caption = Label1->Caption + IntToStr(a[i]);

:)

!{ra!{e/\/
01.12.2008, 20:00
А как можно организовать функцию?
какой тип переменной использовать?

!{ra!{e/\/
01.12.2008, 20:03
Ругается на IntToStr
1>l:\documents and settings\administrator\my documents\visual studio 2008\projects\kurs1\kurs1\Form1.h(134) : error C3861: 'IntToStr': identifier not found

!{ra!{e/\/
01.12.2008, 20:14
Вобщем нужна какая нибудь функция которая бы возвращала строку с массивом System::String

!{ra!{e/\/
01.12.2008, 20:16
Как конвертировать конвертировать char* в System::String?

jawbreaker
01.12.2008, 20:20
char*p="test string...";
System::String *str(p);

вроде так

!{ra!{e/\/
01.12.2008, 20:43
не работает(

cash$$$
01.12.2008, 21:08
Конвертирование int, Int16, Int32, Int64

В Char:

Char Test = (char)Value;

В String:

String Test = ((char)Value).ToString();

jawbreaker
01.12.2008, 21:12
// test12.cpp : main project file.

#include "stdafx.h"

using namespace System;

int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
char * p = "test string...";
String ^str = gcnew String(p);
Console::WriteLine(str);
Console::ReadKey();
return 0;
}

так должно сработать

!{ra!{e/\/
01.12.2008, 21:17
Вобщем пищу класс.
Нужно чтоб функция get_ar() выдавала массив в string
Надо чтоб когда вызываю так
label4->Text=get_ar();
чтоб все работало

Shaitan-Devil
02.12.2008, 13:52
Как мона обработать данные из TextBox т.е. в TextBox вводиться логин пасс и они записываются в массив?

_antony
02.12.2008, 14:46
Как мона обработать данные из TextBox т.е. в TextBox вводиться логин пасс и они записываются в массив?
GetDlgItemText();
http://msdn.microsoft.com/en-us/library/ms645489(VS.85).aspx

VIP
02.12.2008, 18:09
У меня к вам очередной новичковский вопрос:

Почему вот в этой программе:


# include <stdio.h>
# include <math.h>

int main() {
float e, sum1, E1;
int i, stop1;
printf("Enter e, please:");
scanf("%f", &e);
i=1;
sum1=0;
stop1=0;
printf("%f\n %f\n %f\n %f\n ", e, i, sum1, stop1);
}


При исполнении проги переменная i=0 ?

Ведь ясно указано, что i=5 ?

P.S. Эта программа не должна исполнять ничего конкретного, т.к. это кусок из другой проги.

SVAROG
02.12.2008, 18:15
При исполнении проги переменная i=0 ?
int i =1;
Ведь ясно указано, что i=5 ?
интересно)))

VIP
02.12.2008, 18:22
Вот, что он мне выдаёт:

Enter e, please: [ввожу] 0.01 [ Нажимаю Enter]
[пишет]
0.0100000
0.0000000
0.0000000
7725920506557334100000...(очень много нулей)...000.0000000

Также непонятно почему вдруг последняя переменная из нуля превратилась в 7725920506557334100000...(очень много нулей)...000.0000000

SVAROG
02.12.2008, 18:51
Enter e, please:0.01
0.010000
0.000000
0.000000
0.000000
Press any key to continue . . .
у тебя мистика прям какаято, у меня как видишь всё нормально

Namelles One
02.12.2008, 18:57
Да потому что ты переменную типа int выводишь с идентивикатором %f - типа float, а размер у float другой, вот и выводится хрень всякая.

Так верно - printf("%f\n %d\n %f\n %d\n ", e, i, sum1, stop1);

noobyara
02.12.2008, 19:00
У меня к вам очередной новичковский вопрос:

Почему вот в этой программе:


# include <stdio.h>
# include <math.h>

int main() {
float e, sum1, E1;
int i, stop1;
printf("Enter e, please:");
scanf("%f", &e);
i=1;
sum1=0;
stop1=0;
printf("%f\n %f\n %f\n %f\n ", e, i, sum1, stop1);
}


При исполнении проги переменная i=0 ?

Ведь ясно указано, что i=5 ?

P.S. Эта программа не должна исполнять ничего конкретного, т.к. это кусок из другой проги.
почему для типа int используешь %f? будь добр использовать %d) вообще тебе сюда http://msdn.microsoft.com/ru-ru/library/56e442dc.aspx
заодно и узнаешь как количество "нулей" урезать)

UnPazz
02.12.2008, 19:19
to VIP :
тип integer выводим через %d - целое число
тип float выводим через %f - число с плавающей точкой

типы данных учи

Shaitan-Devil
02.12.2008, 19:27
http://s58.radikal.ru/i162/0812/33/3889ad5dd21at.jpg (http://radikal.ru/F/s58.radikal.ru/i162/0812/33/3889ad5dd21a.jpg.html)
НУжно принять данные из форм и соедениться с мускулом язык C++.NET есть готовые решения кто-нибудь может подать идею?

noobyara
02.12.2008, 19:35
http://s58.radikal.ru/i162/0812/33/3889ad5dd21at.jpg (http://radikal.ru/F/s58.radikal.ru/i162/0812/33/3889ad5dd21a.jpg.html)
НУжно принять данные из форм и соедениться с мускулом язык C++.NET есть готовые решения кто-нибудь может подать идею?
http://dev.mysql.com/downloads/connector/net/5.2.html

criz
04.12.2008, 22:38
Подкиньте плиз линки/доки/маны/статьи про директивы препроцессора, конкретно про #pragma. На русском =)

Neoveneficus
04.12.2008, 22:45
Подкиньте плиз линки/доки/маны/статьи про директивы препроцессора, конкретно про #pragma. На русском =)
посмори тут
http://www.math.rsu.ru/mexmat/mathmodel/files/nka/CPP/CPP-08.pdf

jawbreaker
04.12.2008, 22:54
criz
http://msdn.microsoft.com/ru-ru/library/e54ke6de.aspx
http://netcode.ru/cpp/?lang=&katID=6&skatID=49&artID=2314

criz
04.12.2008, 23:09
Neoveneficus, jawbreaker, спасибо за ссылки... только вот, что-то скромно написаны...мало =)
Вот, например, я не нашел нигде описание:
#pragma comment(linker,"/MERGE:.rdata=.text")
а может и пропустил...

n4e/\@
04.12.2008, 23:11
А упорядоченное дерево так выглядит?

2
/ \
1 8
/ \ / \
0 0 5 10
/ \ /\
3 5 9 0

0-это пусто

Просто я раньше представлял себе это как то так:

1
/ \
2 3
/ \ / \
5 5 8 9
/ \ /\
10 00 0

0-это пусто

а сейчас начал читать про деревья, выходит что первый вариант это и есть упорядоченное дерево, я прав?

jawbreaker
04.12.2008, 23:42
Обычно бинарное дерево должно быть упорядочено таким образом, чтобы любой элемент в левом поддереве был меньше, чем значение корня, а любой элемент в правом поддереве — больше, так что да, ты прав. В принципе понятно что так и должно быть если представить себе двоичное дерево поиска - пусть надо проверить, есть ли узел с ключом K в дереве Т, и если да, то вернуть ссылку на этот узел.

Алгоритм:

* Если дерево пусто, сообщить, что узел не найден, и остановиться.
* Иначе сравнить K со значением ключа корневого узла X.
- Если K=X, выдать ссылку на этот узел и остановиться.
- Если K>X, рекурсивно искать ключ K в правом поддереве Т.
- Если K<X, рекурсивно искать ключ K в левом поддереве Т.

criz
07.12.2008, 01:32
Тут такое дело...вобщем, я из своей проги с помощью system() запускаю другое приложение, конольное. Свою прогу я скрыл, FreeConsole(). Но вот, запущенная прога не прячется, появляется окошко консоли C:\Windows\system32\cmd.exe. Как его спрятать?

NetSter
07.12.2008, 02:09
можно попробовать программно найти окно запущеной проги которую хочешь спрятать а потом поиграться с ним.. на делфи поиск окна выглядет так:
http://www.bdelphi.narod.ru/faq.htm#18
а вот как его спрятать... самому стало интересно)

ToniKapuchon
07.12.2008, 03:26
ShowWindow(hWnd,SW_HIDE);

Delimiter
07.12.2008, 03:32
2 criz
используй
...
sInfo.wShowWindow=SW_HIDE;
...
CreateProcess(NULL, CmdPath, &secu, &secu, TRUE, 0, NULL, NULL, &sInfo, &pInfo);

и будет тибе счасте!

Но спрятать мало... я думаю ты сокеты там подцепил в стандартный ввод и вывод... и сделал это без пайпов?????? :D

criz
07.12.2008, 13:42
Delimiter, не-не. Никаких сокетов :) На этот раз все без них =)
Всем спасибо, будем пробовать.
З.Ы. и как я мог забыть про createprocess *WALL*

043nKRuT0y
07.12.2008, 18:05
Подскажите функцию в С++ сравнения двух строк с некой позиции !
Есть такая ?

bons
07.12.2008, 18:12
strcmp(str1+pos1,str2+pos2);
если ты про ASCIIZ строки

043nKRuT0y
07.12.2008, 18:53
strcmp - не подходит !
Мне нужно найти входит ли строка2 в строке1 вообще !
Я думал сделать так :
for (int i = 0; i < strlen(строка1); i++){
и тут указать функцию сравнения !
}

Помню гдето встречал функцыю в которой одна строка ищетса во второй с некой позиции - вот ету функцыю и хотел втулить туда !

Если можеш подскажы как подругому найти подстроку в строке !

ToniKapuchon
07.12.2008, 19:06
string str1("Hello word!!");
string str2("word");
int pos=str1.find("word",0); //искать вхождение с 0 позиции в исх. строке!!

bons
07.12.2008, 19:11
аа ну тогда
char *strstr(const char *s1, const char *s2);
из string.h

Delimiter
07.12.2008, 19:24
2 Крутому....

иногда и strstr выполнит что ты хочешь 8))

043nKRuT0y
07.12.2008, 20:28
вот оно =) strstr - канает =)
СПС !

ToniKapuchon
08.12.2008, 01:39
Отработала у меня например структура "OPENFILENAME strfileAll;" как мне очистить память после её использования?

Delimiter
08.12.2008, 01:43
дык если заботишься об этом открывай ее конструктором new
чтоб потом использовать delete!

Namelles One
08.12.2008, 14:33
ОМФГ...

ZeroMemory()
http://msdn.microsoft.com/en-us/library/aa366920(VS.85).aspx

043nKRuT0y
08.12.2008, 18:19
Народ подскажите как в С++ найти координаты проекции отрезка на прямую ?
В общем по геометрии делаетса так :
Если отрезок задается координатами концов (x1,y1) и (x2,y2), то координаты вектора a=(x2-x1,y2-y1)==(ax,ay). Аналогично для прямой, проходящей через (x3,y3) и (x4,y4), b=(x4-x3,y4-y3)==(bx,by).
Скал. произведение: ab = (ax*bx + ay*by).
Модули: |a| = sqrt(ax^2 + ay^2), |b| = sqrt(bx^2 + by^2). Тогда угол cos(alpha) = ab/(|a||b|). Сам угол находить нет смысла, т.к. для вычисления проекции нужен косинус.
Проекция определяется как длина проецируемого отрезка * cos(alpha).

Мне по заданию нужно найти проекции массива отрезков на массив прямых и ВЫДЕЛИТЬ их отдельным цветом !
Как получить координаты етих проекций !

Да и еще такой глуповатый вопрос :
Отрезок в С++ рисуется line(x1,y1,x2,y2);
Тогда как нарисовать прямую и вектор ?!

Anutka
08.12.2008, 19:43
Простите за глупый вопрос, но я сама никак додуматься не могу., почему у меня в следующем примере не определяется конец файла:
#include <iostream>
#define eof 0
main ()
{
int c;
c=getchar();

while (c != eof)
{
putchar (c);
c=getchar();
}
}
Если в while вместо eof просто поставить '0', то все нормально, а через символическую константу никак не получается.

Forcer
08.12.2008, 19:56
потому что это не одно и тоже. В одном случае это число, в другом символ, от которого берется его код.

criz
08.12.2008, 19:57
Это c=getchar();
"превращает" 0 в '0' :)
решение:

#define eof '0'

:)
З.Ы. немного не успел)

Anutka
08.12.2008, 20:09
Спасибо, а то я чего-то совсем ступила.

joks
09.12.2008, 15:07
Добрый день. Я не так давно начал изучать с++. Вроде справляюсь, синтаксис знаю, пишу норм. проги. У меня единственный вопрос, извините, если его уже задавали, поиск результатов не дал, так вот:

ПОЧЕМУ СКОМПИЛИРОВАННЫЕ ФАЙЛЫ ТАК МНОГО ВЕСЯТ?

Я прогонял прогу через дизассемблер, мой код, занимает всего пару кб, а остальные пару метров какой то непонятный, нах мне не нужный мусор. Я так понял, что это из-за прикрепляемых .h файлов, но как можно уменьшить вес готового ехе приложения? я видел кучу приложений, написанных на с++, но весящих буквально копейки. Заранее сапсибо.

St0nX
09.12.2008, 15:35
Используй WIN API + выруби ненужные библиотеки. Вот пример _ttp://www.realcoding.net/article/view/1028

joks
09.12.2008, 16:19
дамм... ладно, спасибо, буду разбираться...