Просмотр полной версии : [c/c++] Новичкам: задаем вопросы
Страницы :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[
17]
18
19
20
21
22
Возникла ещё проблема - хочу без использования методов класса в мэйне вывести значение компонента х класса Sum,а мне метод возвращает адрес на этот компонент,а не его содержимое.Как исправить ?
#include <stdio.h>
#include <conio.h>
#include <iostream>
using namespace std;
class Sum {
public:
int x,y,s;
int vhod_1(int x) { x = 5;}
int vhod_2(int y) { y = 3;}
};
int main() {
Sum fuck,*s = &fuck;
cout << s -> vhod_1(5);
getch();
}
int vhod_1(int x) { x = 5;}
Ты здесь видишь что бы где то значение возвращалось? я нет.
А как же int перед методом ?Понял свою ошибку...А адрес вернулся на что ?На метод чтоли? Если так,то тогда как два метода могут размещаться по одному адресу ? У меня вернуло 2293116 или вроде того,когда я обращался к двум методам после двух компиляций.
Sum fuck,*s = &fuck;
cout << s -> vhod_1(5);
йопт, GenTao, на предыдущей странице писал про приоритет оператора "<<". В скобках надо писать:
std::cout << (s -> vhod_1(5));
А адрес вернулся на что ?На метод чтоли? Если так,то тогда как два метода могут размещаться по одному адресу ? У меня вернуло 2293116 или вроде того,когда я обращался к двум методам после двух компиляций.
возвращается значение регистра eax. т.е. рандомный мусор. так же будет если использовать неинициализированную локальную переменную.
PS: x - не компонента. это поле, член данное. В какой буке поле называют компонентой?
Компонент х всмысле переменная).А книга наз. Программирование на С++ Хоменко какого-то
Хотел написать простенькую програмульку которая читает из файла строки и по указанному раделителю заносит результат в другой файл.
Пример:
входной файл
тратата : не нужная ***ня
выходной
тратата
вот код, он компилируеться, но при выполнении выдает ошибку str2 being used without beiing defined.
Может дело в файле или еще что-то
вот сам код
// word_parser.cpp : Defines the entry point for the console application.
//
#include <iostream>
using namespace std;
int main()
{
FILE *fp,*fp2;
unsigned int t;
char buff[100],*str,*str2;
fp=fopen("keys.txt","r+");
fp2=fopen("key_pasrse.txt","w+");
while(!feof(fp)){
str=fgets(buff,100,fp);
t=strspn(str,":");
strncpy(str2,str,t+1);
fputs(str2,fp2);
}
return 0;
Спасибо.
str2 - указатель, содержащий мусор(пару постов выше прочитай мой). ты используешь переменную не задав ей значения. в данном случае ты пытаешься писать в хзкакой участок памяти.
2Ra$cal
Я пробовал str2= new char[100];
тогда просто при выполнении выдавало ошибку и предлагала дизасемблировать. Уже начал заниматься шаманством, но помоему вредный процесс работа программы это же не волшебство. Так что взываю к сообществу, направить на путь.
ichechen
19.10.2009, 02:15
2Ra$cal
Я пробовал str2= new char[100];
тогда просто при выполнении выдавало ошибку и предлагала дизасемблировать. Уже начал заниматься шаманством, но помоему вредный процесс работа программы это же не волшебство. Так что взываю к сообществу, направить на путь.
Я не знаю ни С не С++, и все таки, а нельзя сделать что то вроде:
str=str.Replace(':','\n') ?
Это я написал как на C# но думаю функция Replace и в С должна быть)))
2ichechen
нет нельзя так как после разделителя есть еще текст и наверное не /n а \r\n
Я не знаю ни С не С++, и все таки, а нельзя сделать что то вроде:
str=str.Replace(':','\n') ?
Это я написал как на C# но думаю функция Replace и в С должна быть)))
Смысл менять разделитель на новую строку?
Ведь нужно брать только то что до разделителя, а остальное пропускать до новой строки....
ichechen
19.10.2009, 02:40
2ichechen
нет нельзя так как после разделителя есть еще текст и наверное не /n а \r\n
Ну да, '\n' - хотел написать, он в C# тоже конец строки)
А сообразить типа:
Считываем строку
создаем промежуточную переменную и
добавляем все символы считанной строки (посредством цикла) пока буква не будет = ":", при совпадении заканчиваем цикл и переходим к следующей строке)))
Если тебе нужна только программка (.exe) могу сделать)))
2ichechen
Мне не столь нужен экзешник сколько, понять почему не работает этот код. Вопрос остаеться открытым.
// word_parser.cpp : Defines the entry point for the console application.
//
#include <iostream>
using namespace std;
int main()
{
FILE *fp,*fp2;
char buff[100],*str,*str2;
fp = fopen("keys.txt","r+");
fp2 = fopen("key_pasrse.txt","w+");
while(!feof(fp)){
str=fgets(buff,100,fp);
str2=strtok(str,":");
fputs(str2,fp2);
}
return 0;
}
2Lee_fx
Спасибо работает, но я все же хотел узнать ответ почему мой код не работает, буду благодарен за помощь.
2Lee_fx
Спасибо работает, но я все же хотел узнать ответ почему мой код не работает, буду благодарен за помощь.
t=strspn(str,":");
тут t = 0, не та функция
попробуй strcspn
Gin
Спасибо работает, но я все же хотел узнать ответ почему мой код не работает, буду благодарен за помощь.
Попробуй воспользоваться отладчиком дял начала. У тебя же в уме должен быть примерный лог работы программы? Вот и сравнивай с реальностью.
как лучше и проще всего хранить множество двумерных матриц???? При условии что их колличество и их размерность заранее не определены.
второй раз сталкиваюсь с такой задачей. В первый раз пришел к тому что удобнее всего двумерную матрицу хранить в разложенное виде в векторе,
м для хранения всех таких векторов использовать тоже вектор:
vector<vector<int> > matrix;
есть у кого альтернативные идеи ?
list<list<int>>
=)
вариант,например, через вектор всё ок будет
2cupper
stl vector + boost matrix
_http://www.boost.org/doc/libs/1_40_0/libs/numeric/ublas/doc/matrix.htm
2Martyr ты ошибся разделом, тебе в соседний тред.
Вообщем у меня проблема, мне помогли написать программу, вот я её как бы оформил.
#include <iostream.h>
void dohod (double L, double p,int d){
double s=0;
s=L*((p/364)*d);
cout << endl << "Polucenai ssuma: " << s;
}
Компелятор ругаеться
g++.exe -x c++ -c H:\DOCUME~1\9335~1\0016~1\1212 -o H:\DOCUME~1\9335~1\0016~1\1212.o -Wall -fpermissive
g++.exe H:\DOCUME~1\9335~1\0016~1\1212.o -o H:\DOCUME~1\9335~1\0016~1\1212.exe -Wall -fpermissive
..\lib\gcc-lib\libmingw32.a(main.o)(.text+0x8e): undefined reference to `WinMain@16'
Failure
Как правильно оформить, помогите плс. Я новичёк.
Вообщем у меня проблема, мне помогли написать программу, вот я её как бы оформил.
Компелятор ругаеться
Как правильно оформить, помогите плс. Я новичёк.
#include <iostream>
using namespace std;
double dohod (double L, double p,int d){
return L*((p/364)*d);
}
int main()
{
double a,b;
int c;
cin>>a>>b>>c;
cout << "Polucenai ssuma: " << dohod(a,b,c);
return 0;
}
правильно компилятор
StriplOol
22.10.2009, 18:08
такой вопрос уважаемые:
каким образом осуществляется изменение приложения (ехе файла)?
Опишу в кратце что мне надо сделать:
сделать лоудер который бы изменял ехе файл ( а именно пакеты с которыми он будет работать, но не суть)
в подфорум Реверсинг загляни. Делается все обычно в два этапа - сначала руками с помощью ollydbg или другого отладчика получаешь нужный результат, потом кодируешь изменение нужных байт в программе своей через WriteProcessMemory или инжект длл. Ну и все.
[n]-c0der
22.10.2009, 19:07
Подскажите что я не так делаю?
int WriteToAutoRun(char * path, char * name)
{
HKEY hKey;
long iRet;
long iRetOpen;
iRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCWSTR)"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_SET_VALUE, &hKey);
if ( iRet == 0)
{
long set = RegSetValueEx(hKey,(LPCWSTR)name,NULL,REG_SZ,(BYTE *)path ,sizeof(path)+1);
printf(" - %d",set);
}
RegCloseKey( hKey );
return 0;
}
Ошибка = 2...
error C2664: 'RegOpenKeyExA' : cannot convert parameter 2 from 'LPCWSTR' to 'LPCSTR'
как вообще удалось заставить код выполниться, если он банально не комплиируется? =)
[n]-c0der
22.10.2009, 20:31
error C2664: 'RegOpenKeyExA' : cannot convert parameter 2 from 'LPCWSTR' to 'LPCSTR'
как вообще удалось заставить код выполниться, если он банально не комплиируется? =)
error C2664: 'RegSetValueExW' : cannot convert parameter 2 from 'LPCSTR' to 'LPCWSTR'
=), Вот почему компилится. ВОт тогда в чем ошибка?
sizeof(path)+1
как минимум это не правильно. это применимо только для статических массивов.
[n]-c0der
22.10.2009, 21:00
sizeof(path)+1
как минимум это не правильно. это применимо только для статических массивов.
Уже понял))), спс.
ВОт рабочий вариант:
int WriteToAutoRun(char * path, char * name)
{
HKEY hKey;
long iRet;
long iRetOpen;
iRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE,(LPCSTR)"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\ \", 0, KEY_SET_VALUE, &hKey);
printf("%d",iRet);
if ( iRet == 0)
{
long set = RegSetValueExA(hKey,(LPCSTR)name,NULL,REG_SZ,(BYTE *)path ,strlen(path)+1);
printf(" - %d",sizeof(path));
}
RegCloseKey( hKey );
return 0;
}
error C2664: 'RegOpenKeyExA' : cannot convert parameter 2 from 'LPCWSTR' to 'LPCSTR'
как вообще удалось заставить код выполниться, если он банально не комплиируется? =)
WinReg.h:
#ifdef UNICODE
#define RegOpenKeyEx RegOpenKeyExW
#else
#define RegOpenKeyEx RegOpenKeyExA
#endif // !UNICODE
:rolleyes:
просто не упомянуто что студия видимо 2008, а я в 2003 работаю =)
7zip API для C++ ?
Кто подскажет ?
StriplOol
23.10.2009, 13:14
Здравствуйте, кто может:
Продемонстрировать код простейшего сервера и клиента
нужно чтобы клиент конектился к серверу и ему выводилось успешный конект или нет.
7zip API для C++ ?
Кто подскажет ?
http://www.7-zip.org/
Здравствуйте, кто может:
Продемонстрировать код простейшего сервера и клиента
нужно чтобы клиент конектился к серверу и ему выводилось успешный конект или нет.
http://www.example-code.com/vcpp/socket.asp
дайте пожалуйста какую-нибудь инфу о сокетах и их отправки через HTTP протокол, а то вот в гугле лазил, а он ерунду городит, мб плохо искал....А на ачате вообще поиск не понятный, ничего найти не могу, тоже ерунду дает.
мине нужен калкулатор каторыи описан в книги Bjarne Stroustrup-а желателно с описанием зарание спасибо
StriplOol
24.10.2009, 11:53
http://www.example-code.com/vcpp/socket.asp
Спасибо очень хороший сайт
mailbrush
24.10.2009, 12:27
дайте пожалуйста какую-нибудь инфу о сокетах и их отправки через HTTP протокол, а то вот в гугле лазил, а он ерунду городит, мб плохо искал....А на ачате вообще поиск не понятный, ничего найти не могу, тоже ерунду дает.
Первая страница этой темы.
дайте пожалуйста какую-нибудь инфу о сокетах и их отправки через HTTP протокол, а то вот в гугле лазил, а он ерунду городит, мб плохо искал....А на ачате вообще поиск не понятный, ничего найти не могу, тоже ерунду дает.
Можешь юзать WinSock API, см. мсдн..
Или класс грейта для работы с сокетами:
http://forum.antichat.ru/thread27529.html
mailbrush, я ее не смотрел )) А что ты по аске сказать немог? ))) Ins3t, мне статья нужна....
чеж я так туплю.......этож тема про си, а мне для дельфи надо....
Оемое, этож тема про си, а мне про дельфи надо
C++
Почему это компилится void* strTest = (void*)"Hello World!\n";
std::cout << "str test: " << (char*)strTest << "\n";
void* intTest = (void*)123456;
std::cout << "int test: " << (int)intTest << "\n";
А это нет void* dblTest = (void*)(123.456);
std::cout << "dbl test: " << (double)dblTest << "\n";
Пишет error C2440: 'type cast' : cannot convert from 'double' to 'void *' смысл ощибки понятен, но... как тогда преобразовывать double в void и наоборот?
..
double a=1.0;
void* b=&a;
cout<<*(double*)(b);
Все работает на ура, большое спасибо! :)
kopBaJIoJI
24.10.2009, 18:52
Подскажите функцию, чтобы виндоусовский курсор мыши наблюдался поверх всех программ и полноэкранных приложений. Заранее благодарен.
-m0rgan-
24.10.2009, 19:40
Привет, одепты!
Подскажите пожалуйста, как выделить память под я-ю ?
char func(const char * bla)
{
char * buffer[1024];
...
return buffer;
}
Конпелятор ругаеццо.
Мне нужно чтоб ф-я возвратила значение находящееся в массиве буффер.
Размер значения к примеру 1024 байт.
Зарание спасибо!
Возвращай указатель
char* func(const char * bla)
{
char * buffer = new char[1024];
...
return buffer;
}
ты создаёшь двумерный массив... и не инициализируешь его
вотЪ так
char* a= new char[1024];
return a
или так
char a[1024];//wrong
return a;//wrong
читайте сообщения компилятора, и буедт вам понятно, почему он ругается. вы возвращаете указатель на память, выделенную на стеке. это означает что при выходе из функции этот участок памяти становится запрещенным для использования. Чтобы понять, почему так происходит, советую воспользоваться ollydbg и покурить на тему "стек".
ps: мда. у моргана ошибка в другом( в описании функции неправильный тип), но по сути он получил бы проблему, которую я описал, так что так
Irdis
в твоем случае правилен первый вариант. Во втором будет пересоздан массив, т.к. ты возвращаешь объект(в данном случае переменная, но суть аналогии с конструктором копирования классов)
кто знает алгоритм извличения корньа и возвидение в степень на с++
-m0rgan-
24.10.2009, 20:41
2new-sl
Извлечения корня: sqrt()
В степень a * a
Либа math.h
Для возведения в степень используеться функия pow
Синтаксис:
double pow(double x, double y);
корень извлекается так же с pow. квадратный
pow(4, 0.5);
Ra$cal, для квадратного корня предназначена ф-я sqrt()
А вот для кубического и т д, можно уже юзать pow()
Типа
pow(a, 0.3);
pow(a, 0.25);
pow(a, 0.2);
И так далее.
Ra$cal, для квадратного корня предназначена ф-я sqrt()
А вот для кубического и т д, можно уже юзать pow()
Типа
pow(a, 0.3);
pow(a, 0.25);
pow(a, 0.2);
И так далее.
спасибо, а то я не знал
Ra$cal, я понимаю что ты это знал, но цель моего поста была не в том, чтобы "научить тебя чему то", а в том, чтобы сказать что для извличения квадратного корня придумали ф-ю sqrt(), и нету смысла извращатся с pow().
Ну надеюсь ты понял, что я хотел сказать.
я нехачу исполозовать ети функции (матх) мине нужен алгоритм ! извлечения корня и возвидения в сепень
например так
http://ru.wikipedia.org/wiki/Бином_Ньютона
http://upload.wikimedia.org/math/7/2/d/72d9474fac355a81f3d8b12352934245.png
для извличения квадратного корня придумали ф-ю sqrt(), и нету смысла извращатся с pow().
а мой ответ был для тех, кто забыл основы математики, и я им напомнил эти основы, на примере квадратного корня. про sqrt итак написали 2 или 3 человека подряд. и все при упоминании pow говорили о возведении в степень, так что я разбавил этот ор.
xxxxxxxxxxxxxxx
25.10.2009, 02:34
для кубического корня тоже придумали cbrt()/ cbrtf() / cbrtl() ;)
а еще лучше универсальную формулу для извлечения корня любой степени. А именно:
y = exp(ln(x) / n)
где x - число, n - степень корня
StriplOol
25.10.2009, 13:12
ыфв.obj : error LNK2019: unresolved external symbol __imp__send@16 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__recv@16 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__connect@12 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__WSACleanup@0 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__closesocket@4 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__gethostbyname@4 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__inet_addr@4 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__htons@4 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__socket@12 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__WSAGetLastError@0 referenced in function _main
ыфв.obj : error LNK2019: unresolved external symbol __imp__WSAStartup@8 referenced in function _main
C:\Documents and Settings\Пользователь\Рабочий стол\C++\ыфвфвыф\Debug\ыфвфвыф.e xe : fatal error LNK1120: 11 unresolved externals
Чего не хватает мне? или что сделать, использую пример клиента с сайта http://www.citforum.ru/book/cook/winsock.shtml
и если не затруднит посомтрите там же пример сервера там синтаксическая ошибка
я нехачу исполозовать ети функции (матх) мине нужен алгоритм ! извлечения корня и возвидения в сепень
Если интересует реализация, можешь глянуть тут
_http://swtch.com/usr/local/plan9/9pm/src/libc/port/sqrt.c
_http://swtch.com/usr/local/plan9/9pm/src/libc/port/pow.c
Чего не хватает мне? или что сделать, использую пример клиента с сайта http://www.citforum.ru/book/cook/winsock.shtml
и если не затруднит посомтрите там же пример сервера там синтаксическая ошибка
Забыл прилинковать библиотеку
-m0rgan-
25.10.2009, 19:27
Господа, помагайте!
...
char a[] = "bla";
char b[] = "olo";
char c[] = a xor b;
...
Получаю еррор:
...
\***\***.cpp|26|error: invalid operands of types `char[4]' and `char[4]' to binary `operator^'|
...
Как бэ это исправить?
-m0rgan-
25.10.2009, 19:49
Актуально!
Господа, помагайте!
...
char a[] = "bla";
char b[] = "olo";
char c[] = a xor b;
...
Получаю еррор:
...
\***\***.cpp|26|error: invalid operands of types `char[4]' and `char[4]' to binary `operator^'|
...
Как бэ это исправить?
ксорить можно числа, но не массив чаров.
да и нет такого ключевого слова "xor". есть ^
-m0rgan-
25.10.2009, 20:59
а какая ему разница что ксорить?
Там на выходе должна получится бинарная срока, как и в пхп
ну так а зачем ты пытаешься писать программы на с++, используя знания php? пиши на пхп. или читай доки.
ps: за это и не люблю php кодеров. нет чтобы напрячься и почитать. нееет, напишу что придет в голову, скомпилю, и на форум спрашивать. включай моск или удаляй c++.
draliokero
26.10.2009, 02:21
Помогите, есть консольная тулза, нужно передать вывод и управление моей программе.
Т.е. запускаю тулзу и запускаю свою прогу, в моей проге отображается вывод из тулзы, также, возможность отправки команд в окно тулзы. Как реализовать?
Отправку попробывал сделать так:
#include <iostream>
#include <windows.h>
int main(){
HWND Wnd;
Wnd = FindWindow(0, "C:\\WINDOWS\\system32\\cmd.exe");
char* command = "ping";
for(int i=0; i<strlen(command); i++){
SendMessage(Wnd, WM_CHAR, (LPARAM)command[i], (LPARAM)1);
}
SendMessage(Wnd, WM_CHAR, 13, 0); // эмуляция нажатия enter
}
для чтения нашел ReadConsoleOutput как использовать, помогите с примером для cmd.exe
Привет всем. Прошу помочь в интеграции cURL в vusual studio 2008... если кто знает опишите пожалуйста пошагово. Буду очень благодарен.
у меня 1 проблема почему ето непашет в Java а в с++ идет? как исправить
public enum Token_value { NAME, NUMBER, END,
PLUS="+", MINUS='-', MUL='*', DIV='/',
PRINT=';', ASSIGN='=', LP='(', RP=")" };
StriplOol
26.10.2009, 13:10
Забыл прилинковать библиотеку
а какую? iostrem я пролинковал что ещё надо
public enum Token_value { NAME, NUMBER, END,
PLUS="+", MINUS='-', MUL='*', DIV='/',
PRINT=';', ASSIGN='=', LP='(', RP=")" };
Хоть и джаву знаю слабо, но все же, в джаве перечисление это класс, для инициализации переменных должен быть определен конструктор Token_value
Исправить это можно читая соответствующую литературу )
а какую? iostrem я пролинковал что ещё надо
винсок (ws2_32) и почитай какой нибудь учебник по С/С++
draliokero
26.10.2009, 14:47
Неужели, никто не знает, как получить текст из другого консольного окна?
Пробовал ReadConsoleOutput не получается :(
инжект тока насколько я помню. а там GetStdHandle вроде и вперед с песнями.
draliokero
26.10.2009, 15:00
Ra$cal, вроде AttachConsole. Просто сложно примеры нарыть, с данными функциями не сталкивался ранее. Может, сможете помочь, получить текст окна на примере cmd.exe?
кто может подсказать как в java превратит знак нампример + в целое число int ?
1) java другая тема
2) возьмёт ascii код
[n]-c0der
26.10.2009, 15:07
кто может подсказать как в java превратит знак нампример + в целое число int ?
Помоему ты нехренова ошибся топиком.
-c0der']Помоему ты нехренова ошибся топиком.
:)
ща попробую, пока не рубануло в сон.
draliokero
26.10.2009, 15:30
Ra$cal, буду очень благодарен! Нечего по этому поводу не нашел, пришлось еще на rohitab.com тему поднять)
#define _WIN32_WINNT 0x0610
#include <iostream>
#include <Windows.h>
#include <math.h>
using namespace std;
int main()
{
FreeConsole();
if(!AttachConsole(7696))
cout << "cant attach to console\n";
else
cout << "test writing to console\n";
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
SMALL_RECT srctReadRect;
srctReadRect.Top = 0; // top left: row 0, col 0
srctReadRect.Left = 0;
srctReadRect.Bottom = 1; // bot. right: row 1, col 79
srctReadRect.Right = 79;
// The temporary buffer size is 2 rows x 80 columns.
COORD coordBufSize, coordBufCoord;
coordBufSize.Y = 2;
coordBufSize.X = 80;
// The top left destination cell of the temporary buffer is
// row 0, col 0.
coordBufCoord.X = 0;
coordBufCoord.Y = 0;
// Copy the block from the screen buffer to the temp. buffer.
CHAR_INFO chiBuffer[160]; // [2][80];
BOOL fSuccess;
fSuccess = ReadConsoleOutput(
hStdout, // screen buffer to read from
chiBuffer, // buffer to copy into
coordBufSize, // col-row size of chiBuffer
coordBufCoord, // top left dest. cell in chiBuffer
&srctReadRect); // screen buffer source rectangle
FreeConsole();
system("pause");
}
просто прочитать в массив. причем читать только видимую часть. там есть апи для вычисления области, в которой есть текст. ну и нада сервисные функции начирикать чтобы матрицу символов перегнать в обычную строку. надеюсь осилишь?
Да, pid процесса вручную вбит. Подставляй свой.
Вообще мсдн решает, просто нада ковыряться не только в одной статье =) Правда тут хватило одной и одного примера к ней.
draliokero
26.10.2009, 15:53
Ra$cal, аа чувак спасибо большое, да осилю)
StriplOol
27.10.2009, 16:25
винсок (ws2_32) и почитай какой нибудь учебник по С/С++
Спасибо понял что не так, пролинковал примеры работают. Ещё раз спасибо.
Chrek625
27.10.2009, 19:22
Доброго времени суток.
Подскажите пожалуйста как лучше организовать сортировку из файла,то есть к примеру загружается список авторов и их произведений, как сделать так чтобы Указав к примеру автора из заданного файла вывелись только строки с этим автором.
Организовать это нужно на Си, не откажусь от любой помощи или подсказки...
Заранее спасибо
знаю нетот топик но там неотвичают тут бистреи :)
подскажытем мине пожалуиста такую функцыю как в с++ cin.putback();
if(isalpha(ch)) {
cin.putback(ch);
cin>>string_value;
return curr_tok=NAME;
Chrek625
28.10.2009, 20:15
Неужели ни кто не может помочь решить проблему???
Сори за флуд
Стандартным методом - грузи файл в оперативу и сортируй как душе угодно.
Chrek625
28.10.2009, 20:33
А можно пример?
-m0rgan-
29.10.2009, 20:23
#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR CmdLine, int CmdShow)
{
char szAppName[] = "HelloWin!";
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (BRUSH) GetStockObject(WHITE_BRUSH);
wndclass.lszMenuName = NULL;
wndclass.lpzClassName = szAppName;
RegisterClassEx(&wndclass);
return 0;
}
Компелятор ругаецо:
c:\documents and settings\***\мои документы\visual studio 2008\projects\system\system\api.cpp(19) : error C2065: 'BRUSH' : undeclared identifier
c:\documents and settings\***\мои документы\visual studio 2008\projects\system\system\api.cpp(19) : error C2146: syntax error : missing ';' before identifier 'GetStockObject'
c:\documents and settings\***\мои документы\visual studio 2008\projects\system\system\api.cpp(20) : error C2039: 'lszMenuName' : is not a member of 'tagWNDCLASSEXW'
c:\program files\microsoft sdks\windows\v6.0a\include\winuser.h(1537) : see declaration of 'tagWNDCLASSEXW'
c:\documents and settings\***\мои документы\visual studio 2008\projects\system\system\api.cpp(21) : error C2039: 'lpzClassName' : is not a member of 'tagWNDCLASSEXW'
c:\program files\microsoft sdks\windows\v6.0a\include\winuser.h(1537) : see declaration of 'tagWNDCLASSEXW'
Я переписал все один в один с книги.
В чем проблема?
Компелю в VS 2008
А можно пример?
http://en.allexperts.com/q/C-1040/2009/8/Sorting-sequential-file.htm
-m0rgan-
Инклуды точно все?
-m0rgan-
29.10.2009, 20:53
точно
-m0rgan-
Тогда не один в один
lszMenuName -> lpszMenuName
lpzClassName -> lpszClassName
wndclass.hbrBackground = (BRUSH) GetStockObject(WHITE_BRUSH); // эта строка вообще не понятно что, может между (BRUSH) GetStockObject(WHITE_BRUSH) ними плюс нужен?
браш нигде не определён.
-m0rgan-
29.10.2009, 21:19
Из windows.h
typedef struct tagWNDCLASSEX
{
UINT sbSize;
UINT style;
WNDPROC lpfnWndProc;
int cbClasExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCSTR lpszMenuName;
LPCSTR lpszClassName;
HICON nIconSm;
}
WNDCLASSEX;
Мб єто прояснит ситуацию..
Из windows.h
typedef struct tagWNDCLASSEX
{
UINT sbSize;
UINT style;
WNDPROC lpfnWndProc;
int cbClasExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCSTR lpszMenuName;
LPCSTR lpszClassName;
HICON nIconSm;
}
WNDCLASSEX;
Мб єто прояснит ситуацию..
Ну так и используй "HBRUSH", а не "BRUSH"...
-m0rgan-
29.10.2009, 21:27
http://img2.imageshack.us/img2/2353/cppx.png
И все такое..
И все такое..
помоему это не весь код.
-m0rgan-
29.10.2009, 21:39
не весь, но это класс окна..
Весь вот:
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static char szAppName[] = "HelloWin";
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&wndclass);
hwnd = CreateWindow(
szAppName, // window class name
"The Hello Program", // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL
); // creation parameters
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(iMsg)
{
case WM_CREATE:
PlaySound("hellowin.wav", NULL, SND_FILENAME | SND_ASYNC);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
DrawText(hdc, "Hello, Windows 95!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
Закоментировав PlaySound("hellowin.wav", NULL, SND_FILENAME | SND_ASYNC); все скомпилилось без ошибок.
-m0rgan-
29.10.2009, 21:52
скопил с книги..
Остался один эррор:
c:\documents and settings\***\мои документы\visual studio 2008\projects\system\system\api.cpp(22) : error C2440: '=' : cannot convert from 'char [9]' to 'LPCWSTR'
строка 22: wndclass.lpszClassName = szAppName;
Подскажить, что это за ***ня?
Меня это уже заебало((
Где этот LPCWSTR отрубить в VS ?
почему в остальных средах разработки все ок ???
скопил с книги..
Остался один эррор:
c:\documents and settings\***\мои документы\visual studio 2008\projects\system\system\api.cpp(22) : error C2440: '=' : cannot convert from 'char [9]' to 'LPCWSTR'
строка 22: wndclass.lpszClassName = szAppName;
Подскажить, что это за ***ня?
Меня это уже заебало((
Где этот LPCWSTR отрубить в VS ?
почему в остальных средах разработки все ок ???
У меня VS10 beta2...
Не понятно ещё почему у тебя "LPCWSTR", у меня там "LPCSTR".
Какая у тебя винда?
Всем привет.Необходимо выполнять цикл do while до тех пор,пока не введена строка.Как это реализовать на си ? Че ток не переделал - не работает.
-m0rgan-
29.10.2009, 22:06
У меня VS10 beta2...
Не понятно ещё почему у тебя "LPCWSTR", у меня там "LPCSTR".
Какая у тебя винда?
XP SP3
Попробуй такwndclass.lpszClassName = (LPCWSTR) szAppName;
-m0rgan-
29.10.2009, 22:25
rudvil, теперь ошибку линковки выкидует =\\
Linking...
api.obj : error LNK2019: unresolved external symbol "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) referenced in function _WinMain@16
C:\Documents and Settings\***\Мои документы\Visual Studio 2008\Projects\system\Debug\system.exe : fatal error LNK1120: 1 unresolved externals
static char szAppName[] = "HelloWin";
меняй на
static wchar_t szAppName[] = L"HelloWin";
и везде где "..." ставь префикс L"..."
Юникод используется
если по книге делает, то лучге в проекте отрубить юникод, в свойствах. чтобы поберечь нервы. ибо устанет баги исправлять. В настройках проекта во вкладке General параметр charset щадай Not set.
По поводу последней ошибки - проверяй имена и типы. Может чтото поправил, а еще лучше вставь код сюда, который у тебя сейчас.
-m0rgan-
29.10.2009, 22:55
а еще лучше вставь код сюда, который у тебя сейчас.
Вот:
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static wchar_t szAppName[] = L"HelloWin";
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&wndclass);
return 0;
}
если это весь код, то ты потерял код WndProc. в начале у тебя объявление, но самого тела функции нет
-m0rgan-
30.10.2009, 01:13
Я уже как то задавал этот вопрос, но не получил на него ответа :(
КАК ПРИКРУТИТЬ К MICROSOFT VISUAL С++ 2008 ИНТЕЛОВСКИЙ КОМПИЛЯТОР???
ОЧЕНЬ ИНТЕРЕСУЕТ!!!
Документация говорит такое
If you are using Visual Studio 2005/2008 Standard Edition, no configuration is needed to build
Intel® 64 architecture applications. For other editions:
1. From Control Panel > Add or Remove Programs, select “Microsoft Visual Studio 2005”
(or 2008) > Change/Remove. The Visual Studio Maintenance Mode window will appear.
Click Next.
2. Click Add or Remove Features
3. Under “Select features to install”, expand Language Tools > Visual C++
4. If the box “X64 Compiler and Tools” is not checked, check it, then click Update. If the
box is already checked, click Cancel.
To use Microsoft Visual Studio 2005/2008 Team System Edition to build applications to run on
IA-64 architecture systems, follow the above steps and ensure that the box “Itanium Compiler
and Tools” is checked.
должно быть для 32 битки поддержка нативна
-m0rgan-
30.10.2009, 02:37
2growl, спс
и еще вопрос:
ничего что я вин апи учу по книге Ч. Петзольд "Программирование для Windows 95
Она просто по вин апи для С а не для С++
и еще вопрос:
ничего что я вин апи учу по книге Ч. Петзольд "Программирование для Windows 95
Она просто по вин апи для С а не для С++
возьми Рихтера, если надо новое, а так апи сишной от си ++ не отличается, это ж системные штуки
-m0rgan-
30.10.2009, 03:03
возьми Рихтера
какое название книги?
Помогите, пожалуйста. Как компилить в Visual C++ 2005 EE? Все кнопочки компиляции горят серым цветом... Скрин (http://dfsd-ru.1gb.ru/1.jpg)
сначала создай проект в солюшене, потом в проекте создай cpp файл, и там уже пиши код и компилируй.
скопил с книги..
Остался один эррор:
c:\documents and settings\***\мои документы\visual studio 2008\projects\system\system\api.cpp(22) : error C2440: '=' : cannot convert from 'char [9]' to 'LPCWSTR'
строка 22: wndclass.lpszClassName = szAppName;
Подскажить, что это за ***ня?
Меня это уже заебало((
Где этот LPCWSTR отрубить в VS ?
почему в остальных средах разработки все ок ???
В самом начале напиши:
#undef UNICODE
И не надо никаких приставок.
Где находится фишка по созданию вин форм? Где-то видел, но не помню хде... Скрин (http://dfsd-ru.1gb.ru/1.jpg)
вин форм в другой теме.
Это не с++
возьми Рихтера
какое название книги?
Джеффри Рихтер
Windows для профессионалов.
Создание эффективных Win32-пpилoжeний с учетом специфики 64-разрядной версии Windows
вин форм в другой теме.
Это не с++
В какой? Ничего про интерфейсы я не нашел
Где находится фишка по созданию вин форм? Где-то видел, но не помню хде... Скрин (http://dfsd-ru.1gb.ru/1.jpg)
Project -> Add -> Add New Item -> UI -> Windows Form
Это по VC++ 2008, как у тебя в 2005 хз, но ищи подобное.
Perprofan
30.10.2009, 22:25
Пытаюсь начать учить ( уже в цитаты ) с++,
Код по тутору:
#include <iostream.h>
int main()
{
int x = 5;
int y = 7;
cout << "\n";
cout << x + y << " " << x * y;
cout << "\n";
return 0;
}
В Code::Blocks хорошо все, консолья программа исполняется.
Пытаюсь сделать в визуал с++ выходит...ничего не выходит.
Последовательность такова:
1)Создаю в нем новый проект вин 32, консольную
2)в нем новый файл с++
3) в нем пишу код, контро + ф5, выдает разные не понятные ероры!
1>------ Построение начато: проект: ohlol, Конфигурация: Debug Win32 ------
1>Компиляция...
1>ohlol.cpp
1>c:\documents and settings\admin\рабочий стол\ohlol\ohlol\ohlol.cpp(1) : warning C4627: #include <iostream.h>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>c:\documents and settings\admin\рабочий стол\ohlol\ohlol\ohlol.cpp(12) : fatal error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "stdafx.h"" в источник.
1>Журнал построения был сохранен в "file://c:\Documents and Settings\Admin\Рабочий стол\ohlol\ohlol\Debug\BuildLog.htm"
1>ohlol - ошибок 1, предупреждений 1
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Вопросы:
1) Что я не так сделал?
2) Как правильно?
3) Почему в в блоках код работал а тут нет?
#include <iostream>
using namespace std;
int main()
{
int x = 5;
int y = 7;
cout << "\n";
cout << x + y << " " << x * y;
cout << "\n";
return 0;
}
так будет в визуал с++..
Perprofan
30.10.2009, 22:36
C этим кодом тоже самое....
1>------ Построение начато: проект: ohlol, Конфигурация: Debug Win32 ------
1>Компиляция...
1>ohlol.cpp
1>c:\documents and settings\admin\рабочий стол\ohlol\ohlol\ohlol.cpp(1) : warning C4627: #include <iostream>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
1>c:\documents and settings\admin\рабочий стол\ohlol\ohlol\ohlol.cpp(12) : fatal error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "stdafx.h"" в источник.
1>Журнал построения был сохранен в "file://c:\Documents and Settings\Admin\Рабочий стол\ohlol\ohlol\Debug\BuildLog.htm"
1>ohlol - ошибок 1, предупреждений 1
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
C этим кодом тоже самое....
при создание проекта галку перед Empty project ставил?
Где можно узреть манул по созданию вынь форм? Поиск особо результата не приносит, всякая мура вылезает. Хотелось бы поподробнее, а там "как создать кнопку и как её нажать". Про то, как оперировать - ничего не сказано. Заранее благодарен...
Perprofan
30.10.2009, 22:43
http://s57.radikal.ru/i157/0910/6d/d6c17bcf8cae.jpg
А где галка то?)
http://img7.imageshost.ru/imgs/091030/cd581950c1/t038d4.png (http://imageshost.ru/links/f8f843e713b5b1587fb60bbdb23da84e)
Perprofan
30.10.2009, 23:06
Теперь что то новое...создаю пустым.
1>------ Построение начато: проект: Blion, Конфигурация: Debug Win32 ------
1>Внедрение манифеста...
1>.\Debug\Blion.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. 5 C405BAO =09B8 C:070==K9 D09;.
1>Журнал построения был сохранен в "file://c:\Documents and Settings\Admin\Рабочий стол\Blion\Blion\Debug\BuildLog.htm"
1>Blion - ошибок 1, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Большой джо
31.10.2009, 01:28
Как в C++ подключить .dll файл?)
ответы для упражнений из книги Страуструпа у кого-нибудь есть?
Perprofan
31.10.2009, 11:03
Теперь что то новое...создаю пустым.
1>------ Построение начато: проект: Blion, Конфигурация: Debug Win32 ------
1>Внедрение манифеста...
1>.\Debug\Blion.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. 5 C405BAO =09B8 C:070==K9 D09;.
1>Журнал построения был сохранен в "file://c:\Documents and Settings\Admin\Рабочий стол\Blion\Blion\Debug\BuildLog.htm"
1>Blion - ошибок 1, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
#include <iostream>
using namespace std;
int main()
{
int x = 5;
int y = 7;
cout << "\n";
cout << x + y << " " << x * y;
cout << "\n";
return 0;
}
Что не так?
C этим кодом тоже самое....
1>------ Построение начато: проект: ohlol, Конфигурация: Debug Win32 ------
1>Компиляция...
Возможно, вы забыли добавить директиву "#include "stdafx.h"" в источник.
вот так будет работать
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int x = 5;
int y = 7;
cout << "\n";
cout << x + y << " " << x * y;
cout << "\n";
cin >> y; // насладись консолью -)
return 0;
}
// #include "stdafx.h"
#include <iostream> это обязательные заголовки
Perprofan
31.10.2009, 12:21
http://s16.radikal.ru/i191/0910/51/3035972166d6.jpg
АРРР
Что опять не так
2Perprofan
сделай полный clean проекта и отключи precompiled headers в настройках проекта.
Perprofan
31.10.2009, 13:47
Я не нашел где это, можно пруфлинк?
и в коде убери слешы // #include "stdafx.h"
"пруфлинк" - .... ты сначала посмотри, что значит слово, а потом употребляй.
файл - создать проект - win32 - консольное приложение - пустой проект +, предварительно скомпилированнные заголовки -. готово.
Perprofan
31.10.2009, 15:42
Если убирать заголовки но не ставить галочку на пустом проэкте то все работает.
Спасибо.
Создаю потоки в цикле,их надо как "усыпить" на время.Но я к сожалению столкнулся с проблемой ,если юзать SuspendThreadв цикле то из этого цикла почему то выйти нельзя :( Почему? И как это обойти?
потому что вызвыать resumethread можно только из активного потока, потому как сонный ничего не может делать(правда логично?).
чтото из твоих вопросов вырисовывается чудовищная архитектура сетевого приложения. попробуй прочитать статьи на codeproject'e или у каких нить русских сайтов. на васме том же основы по сокетам.
Здравствуйте! Возник следующий вопрос:
Имеется массив vector<int> elements, есть число в переменной int del_element. Необходимо найти в elements элемент со значением del_element и если он есть, то удалить его из elements.
Так как по вектору ходят с помощью итераторов, то как мне его сравнить с int?
если не ошибаюсь так
std::vector<int>::iterator channelIter = intVector.begin()
std::cout<< (int)(*channelIter);
если не ошибаюсь так
std::vector<int>::iterator channelIter = intVector.begin()
cout<< (int)(*channelIter);
Да, скомпилилась, но при работе вылетает с ошибкой.
На всякий случай, вот вся функция:
void del(){
int del_element;
system("cls");
printf("Enter del elemet:\n");
scanf_s("%d", &del_element);
for(vector<int>::iterator i = elements.begin(); i != elements.end(); i++){
if((int)(*i) == del_element){
elements.erase(i);
}
}
Методом поочерёдного исключения строк выяснил, что ошибку при выполнении вызывает строка:
elements.erase(i);
#include <iostream>
#include <vector>
#include <boost/bind.hpp>
#include <boost/foreach.hpp>
#include <functional>
#include <algorithm>
using namespace std;
int main()
{
vector<int> elements;
elements.push_back(1);
elements.push_back(2);
elements.push_back(3);
elements.push_back(4);
elements.push_back(5);
int del_element = 3;
cout << "before remove:";
BOOST_FOREACH(int val, elements) cout << " " << val;
vector <int>::iterator new_end = remove_if(elements.begin(), elements.end(),
boost::bind(std::equal_to<int>(), _1, del_element));
elements.erase (new_end, elements.end( ) );
cout << "\nafter remove: ";
BOOST_FOREACH(int val, elements) cout << " " << val;
cout << '\n';
system("pause");
}
вариант удаления юзая boost и stl(без циклов, описанных вручную, что имхо гораздо нагляднее и быстрее понимается).
нет с erase должно быть всё ок
ошибку в студию
с вектором кстати проще работать не через иетарторы, а через оператор [], как с обычным массивом.
for(int i = 0; i < elements.size(); i++){
if(elements[i] == del_element){
elements.erase(elements.begin() + i);
// важный момент. из-за удаления пропускаем одну запись, если не править i
i--;
}
}
нет с erase должно быть всё ок
ошибку в студию
извиняюсь за принт-скрин, но думаю так будет точнее:
http://img-fotki.yandex.ru/get/4002/tltshnik.0/0_1935d_45e25620_L.jpg
кстати, в примере с erase, который я привел, обязательно делай break после удаления элемента или делай декремент счетчика i, т.к. сбивается связь указателя и записей в векторе, можно проскочить запись после каждого удаления.
кстати, в примере с erase, который я привел, обязательно делай break после удаления элемента или делай декремент счетчика i, т.к. сбивается связь указателя и записей в векторе, можно проскочить запись после каждого удаления.
Хорошо, спасибо за помощь и за подсказку! Учту. :)
вотъ... а break делать не надо, если два одинаковых элемента то он удалит только первый
vector<int>::iterator i = a.begin();
while( i!=a.end())
{
if((int)(*i) == del_element)
i=a.erase(i);
else
i++;
};
вотъ... а break делать не надо, если два одинаковых элемента то он удалит только первый
vector<int>::iterator i = a.begin();
while( i!=a.end())
{
if((int)(*i) == del_element)
i=a.erase(i);
else
i++;
};
OK. То есть как я понял VectorName.erase(IteratorName) возвращает итератор на следующий за удалённым элемент?
Да... именно так,
а если удаляем последний элемент, то возвращается на конец
Да... именно так,
а если удаляем последний элемент, то возвращается на конец
Спасибо большое за помощь! :)
Si{R}ius
02.11.2009, 23:10
Доброго времени суток, требуется помощь в написании кодировщика текста на Delphi (или Паскале).
Программа должна зашифровывать текстовый файл путем сдвига символов по таблице ASCII или xor`om при использовании пароля. Также нужно написать программу-брут, которая будет подбирать пароль, подходящий для расшифровки. В тексте имеется ключевое слово (4 символа), а пароль должен быть 1-6 символов.
Решил задачу при пароле в 4 знака, но как расшифровать текст с пассом, который длинее ключа, ума не приложу
Заранее благодарю за помощь.
Chrek625
03.11.2009, 04:06
Доброго времени суток.
Подскажите функции и библиотеки для работы с rdp протоколом.
Chrek625
смотри в эту сторону
http://stackoverflow.com/questions/1200210/rdp-communication-via-c-c
Si{R}ius
смотри на название темы в которой постишь :mad: :mad:
Si{R}ius
03.11.2009, 11:41
Si{R}ius
смотри на название темы в которой постишь :mad: :mad:
Пардон, промахнулся :)
-m0rgan-
03.11.2009, 16:45
Добрый день!
Есть вопрос.
Создаю консольное прилодение.
Как прописать заголовок окна?
Вот например запускаешь прогу, и слева от крестика пишется название,а у меня путь к запущеному файлу, а я хочу чтоб как в ФАРЕ, писало ФАР, а не путь.
И как иконку прицепить консольному приложению.
Пишу в VC++ 2008
Зарание благодарен.
-m0rgan-
03.11.2009, 17:07
неа, не работает.
2 Lee_fx зачем так извращаться? Если есть обычная апишка которая это делает
SetConsoleTitle("title of windows");
-m0rgan-
03.11.2009, 17:17
слеш, благодарю!
И еще вопрос.
мне нужно получить текущую директорию.
юзаю GetCurrentDirectory()
но она возвращает диру вида C:\dd\dd\dd\
а мне нужно C:\\dd\\dd\\dd\\ (для фопена)
как такое получить?
-m0rgan-
не думай просто вставь эту строку =)
Вообще \\ это сишная запись символа \
т.е. сишная запись C:\\dir\\ после компила превратится в C:\dir\ это всеголишь экранирование слеша. А вот винда хавает разделитель \ хотя и против \\ ничего не имеет.
Ну а если нужно всётаки иметь формат \\ то просто пробегайся по всем элементам и копируй из во второй буфер, а если встретится \ то 2 раза повторяй его
А зачем получать текущую директорию? Если предполагается, что файл лежит в папке с программой, то можно просто имя файла указать вроде...
-m0rgan-
03.11.2009, 17:29
не думай просто вставь эту строку =)
Если сделать:
char buff[256];
FILE * open = fopen(dir,"r")
while(fgets(buff,255,open))
{
printf(buff);
}
программа не конпелится, и вылетает.
Ну а если нужно всётаки иметь формат \\ то просто пробегайся по всем элементам и копируй из во второй буфер, а если встретится \ то 2 раза повторяй его
можна примерчик?)
А зачем получать текущую директорию? Если предполагается, что файл лежит в папке с программой, то можно просто имя файла указать вроде...
char buff[256];
FILE * open = fopen("file.txt","r")
while(fgets(buff,255,open))
{
printf(buff);
}
программа вылетает и не конпелицо.
А разве printf не предполагает наличие формата первым аргументом?
-m0rgan-
03.11.2009, 17:34
printf("%s",buff);
такая же фигня
char buff[256];
FILE * f;
GetCurrentDirectory(256, buff);
strcat(buff, "\\file.txt");
f = fopen(buff,"r");
if (f)
{
while(fgets(buff,255,f))
{
printf("%s\n",buff);
}
fclose(f);
}
программа вылетает и не конпелицо.
:D
-m0rgan-
03.11.2009, 17:59
slesh, спс.
И последний вопрс (гна єти два часа))))
Хочу защитится от переполнения буффера.
юзаю фгетс:
int main ()
{
char buf[154];
fgets(buf,sizeof(buf),stdin);
if(strcmp(LowerCase(buf),"help") == 0)
{
printf("%s","OK");
}
system("pause");
return 0;
}
но из за этого строка не преобразовуеться в нижый регистер.
как быть?
-m0rgan-
03.11.2009, 18:05
:D
Что смешного?
пограмма вылетала в файл dbghook.c указывая на строку _debugger_hook_dummy = 0;
я вот юзаю самописную функцию для перевода буфера в нижний регистр. Понимает ткоа англ буквы
void my_LowCase(char * buf)
{
while (buf[0])
{
if (buf[0]>='A' && buf[0]<='Z')
{
buf[0] += 32;
}
buf++;
}
return;
}
2 -m0rgan- оформляй код в теги [ CODE ]
-m0rgan-
03.11.2009, 18:33
2slesh я почти тоже:
char * LowerCase(const char * Command)
{
int num = 0;
char* buffer = (char *)malloc(strlen(Command) + 1);
while (Command[num] != '\0')
{
buffer[num] = tolower(Command[num]);
num++;
}
buffer[num] = '\0';
return (buffer);
}
Но суть не меняеться:
int main ()
{
char buf[154];
gets(buf);
if(strcmp(LowerCase(buf),"help") == 0)
{
printf("%s","OK");
}
system("pause");
return 0;
}
пашет ок, а:
int main ()
{
char buf[154];
fgets(buf,sizeof(buf),stdin);
if(strcmp(LowerCase(buf),"help") == 0)
{
printf("%s","OK");
}
system("pause");
return 0;
}
не приобразовует.
ты не забывай что gets возврает строку и вконце неё идет еще \n
-m0rgan-
03.11.2009, 22:06
я могу добавить \n
int main ()
{
char buf[154];
fgets(buf,sizeof(buf),stdin);
strcat(buf,"\n");
if(strcmp(LowerCase(buf),"help") == 0)
{
printf("%s","OK");
}
system("pause");
return 0;
}
тот же результат.
не там добавляеш. после help надо
-m0rgan-
03.11.2009, 23:22
2slesh - спс!
Доброе утро всем))
скажите пожалуйста, когда borland c++ 3.1 компилирует, он что использует 32 разрядный код??
просто у меня работает среда, но у меня windows sp2, а у друга у него sp3 и ему пишет ошибку:
16 разрядная подсистема ms-dos
Процессор NTVDM обнаружил недопустимую инструкцию
может ли это быть из за того что у него пак 3?
хватит уже использовать древние компиляторы!
хватит уже использовать древние компиляторы!
Скажи это преподавателям института/школы
вообще старые достовские проги лучше запускай в DosBox. Потому что виндовый эмулятор доса очень сильно глючит. Она на разных компах с одной и тойже виндой может выдавать ошибку )
-m0rgan-
05.11.2009, 16:09
Добрый день, подскажите, как переводить строку в С++, интересует ВИН АПИ.
char a[256] = "aaaa";
strcat(a,"\n");
...
DrawText(hdc,a,.........);
В итоге выводит не
ааа
а
а: ааа (ИЕРОГЛИФ) а
как тогда перевести строку?
а зачем ты делаеш strcat(a,"\n");?
char a[256] = "aaaa";
a[lstrlen(a)+1] = 0x0a;
Не?Извращенство?)
masterBlack
06.11.2009, 16:15
Добрый день.
Как с помощю GetStockObject разместить на форме однооконного приложения картинку ?
Или вообще как картинку разместить?
КОД:
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static char szAppName[] = "HelloWin";
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&wndclass);
hwnd = CreateWindow(
szAppName, // window class name
"The Hello Program", // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL
); // creation parameters
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(iMsg)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
DrawText(hdc, "Hello, Windows 95!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
BitBlt, StretchBlt, элемент управления Picture если задать ему через какое то из сообщений хэндл картинки для отображения.
masterBlack
06.11.2009, 16:24
а примерчик можно?
Привет, у меня такая проблема, когда я пытаюсь создать деструктор класса, компилятор пишет что в тексте программы обнаружена тильда, и не компилит. Деструктор я обьявляю так же как конструктор, но ставлю перед именем тильду.В учебнике написано что так и надо. Тильда устарела чтоли? Про учебник вроде не самыый новый. Среда Codelocks, компилятор MinGW
код в студию... там и посмотрим на ошибку
masterBlack
06.11.2009, 19:03
а примерчик можно?
актуально
ммм, больше 400 страниц, а поиск вроде бы ничего не дал. не подскажите как реализовать такую штуку:
программа при запуске должна проверять, не запущена ли она уже, и если так, то халт.
Например, получай список процессов и ищи свой экзешник в них
Так же как вариант что-нибудь изменять в системе ( пусть даже это будет создание файла ) при запуске экземпляра. При каждом запуске программы проверять наличие этого изменения в системе и делать соответствующие выводы
ps. почему я не могу сам себе поставить "+" :(
для этого придуманы мьютексы и апи CreateMutex
masterBlack
07.11.2009, 01:21
как в GetStoskObject() прописать КРАСНЫЙ цвет?
его нету среди констант =\
для этого придуманы мьютексы и апи CreateMutex
дада ) я про это даже писал как-то статью. она сейчас странице на 5ой, наверно, уже :D
во (http://forum.antichat.ru/thread127262.html)
не. пока на 4ой :)
немного, но есть про синхронизацию. может поможет
как в gdb (эклипс, mingw) пройти строку с "cin"?
жму F6, построчно дохожу до "cin >> var" и все. внизу в консоли тишина. причем не выводится текст, который должен был быть выведен.
а если ввести и нажать ентер, пишет -
515*stopped,reason="end-stepping-range",thread-id="1",frame={addr="0x00401a30",func="main",args=[],file="../main.cpp",line="20"}
код
string url = "";
cout << "url: ";
cin >> url;
Вообще то когда ты доходишь до cin ожидаеться консольный ввод.
как в gdb (эклипс, mingw) пройти строку с "cin"?
жму F6, построчно дохожу до "cin >> var" и все. внизу в консоли тишина. причем не выводится текст, который должен был быть выведен.
а если ввести и нажать ентер, пишет -
515*stopped,reason="end-stepping-range",thread-id="1",frame={addr="0x00401a30",func="main",args=[],file="../main.cpp",line="20"}
код
string url = "";
cout << "url: ";
cin >> url;
если нужно вывести введенный пользователем текстstring url = "";
cin >> url; // загоняем в переменную введенный текст
cout << "url: " << url; // и выводим его
string url = "";
cin >> url;
cout << "url: "<<url;
cout<<endl;
system("PAUSE");
вобщето так )
блин, вы о чем?
я знаю как вводить-выводить
но вот нажал я в эклипсе F11, запустил gdb
в нём жму F6 - построчно
и дохожу до строки "cin >> ..."
и все
дальше если ввести текст внизу в консоли, ошибка
515*stopped,reason="end-stepping-range",thread-id="1",frame={addr="0x00401a30",func="main",args=[],file="../main.cpp",line="20"}
рабочий код принимает значение которое ты введёш с клавы
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string s1 ;
cin>>s1;
cout << "url is: " << s1 << endl;
system("PAUSE");
return 0;
}
я понимаю, только почему он не переходит после ввода на следующую строку и там не останавливается? это же в дебаггере
и ещё вопрос - как в чистом С++ использовать что-то типа preg_match?
чтобы вытаскивать текст из строки по регулярному выражению
или что надо минимально подключить к проекту?
за неимением регулярных выражений, придумал такой изврат:
string extract(string base, string from, string to)
{
string piece = base.substr(base.find(from) + from.length());
return piece.substr(0, piece.find(to));
}
string pregtest = "id='s' value='bbfd2b08c8caff410f4c2c655bd4b110e6f71e10f85 0a290d76d3950' />";
string s = extract(pregtest, "s' value='", "'");
2Дикс
Можешь юзать бустовые регулярки.
В 09 стандарте, регулярки должны будут включить в стандартную библиотеку =\
такой вопрос: при использовании gets() процедура ввода в базу пропускает ввод name и сразу выдает famil , т.е. результат такой
name:
famil:
и дальше требует ввести только famil и phone. если перед gets(name) ввести еще gets, то тоже пропустит его т.е. пропуcкает первый gets.
#include <cstdio> включено, vv присвоено 0.
char name [100][100];
char famil [100][100];
char phone [100][100]; - объявлено вне ф-ий
если использовать cin>> то работает
процедура:
void vvesti()
{
bool f;
int t,j,l;
cout<<"\nchto vvesti?? 1 - v bazy 2 - matrix\n";
cin>>l;
if (l==1)
do {
cout<<"\nname: ";
gets(name[vv]);
cout<<"\n";
cout<<"famil: ";
getsfamil[vv]);
cout<<"\n";
cout<<"phone: ";
gets(phone[vv]);
cout<<"\n";
vv++;
cout<<"\n ecsho??..... da -- 1 net -- 0\n";
cin>>f;
cout<<"\n";
} while (f!=0); else if (l==2)
{cout<<"matrix: ".........итд} ...........
}
чем не угодил cin и string? ты или уже пиши на С или на С++. а то юзаешь объекты из С++, но имена - массив символов. буэ
cout << "Enter something" << endl;
gets(carr1[i]);
cout << "One more time" << endl;
gets(carr2[i]);
у меня работает
upd: вообще у меня по-всякому работает. я хз, что там у тебя не так :)
cout<<"\n";
cout<<"famil: ";
...
if (l==1)
do {
оО
не жести так ) и лучше выборку реализуй case'ом, будет нагляднее да и удобнее потом.
string url = "";
cin >> url;
cout << "url: "<<url;
cout<<endl;
system("PAUSE");
вобщето так )
bash: PAUSE: команда не найдена
лучше getchar();
можно и гет чаром) там без разгици но я ету юзаю)
можно и гет чаром) там без разгици но я ету юзаю)
system("PAUSE")работает только под виндой.
Лучше использоватьcin.get();
~NeiTRoN~
09.11.2009, 15:36
Всем привет. Возникла проблема, помогите кто может
Вот есть часть кода:
HDC hDC;// основная поверхность для рисования
/*Инициализация картинок*/
HBITMAP hBitmap;
hDC=GetDC(hWnd);
hназваниеDC=CreateCompatibleDC(hDC);
hBitmap=LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_ азвание));
SelectObject(hvozdDC,hBitmap);
DeleteObject(hBitmap);
Ну и наконец рисую то что попалось в матрице
case 0:
BitBlt hDC,x*weight,y*height,weight,height,hкартин аDC,0,0,SRCCOPY);
break;
А сама проблема в том что все это может вставить картинки только bmp и с ограниченым количеством бит.
А на что нужно заменить код чтоб можно было вставить картинки формата png?
Помогите плиз!!!
http://msdn.microsoft.com/en-us/library/ms536316%28VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/ms533815%28VS.85%29.aspx
Кароч кури маны по GDI+ Там все достаточно просто и удобно
~NeiTRoN~
09.11.2009, 17:08
http://msdn.microsoft.com/en-us/library/ms536316%28VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/ms533815%28VS.85%29.aspx
Кароч кури маны по GDI+ Там все достаточно просто и удобно
А можешь подсказать что-нибудь на русском и желательно чтонибудь попроще для понимания
чего уж проще то?
Graphics graphics(GetDC(hWnd));
Image img(L"C:\\test.png");
graphics.DrawImage(&img, 5, 5);
Выучить технический английский для чтения доков гораздо быстрее, чем ждать переводов залетных, поверь. Тем более доки очень редко переводят.
[ADDED]
http://msdn.microsoft.com/en-us/library/ms536339%28VS.85%29.aspx
тут описывается изменение логики кодирования с апи на gdi+. Тупо на глаз понятно что к чему. Хз какие еще доки найти понятнее.
Можно каким то извратным методом заставить поток саспендить самого себя, или это вообще технически невозможно?
~NeiTRoN~
09.11.2009, 19:14
чего уж проще то?
Graphics graphics(GetDC(hWnd));
Image img(L"C:\\test.png");
graphics.DrawImage(&img, 5, 5);
Выучить технический английский для чтения доков гораздо быстрее, чем ждать переводов залетных, поверь. Тем более доки очень редко переводят.
[ADDED]
http://msdn.microsoft.com/en-us/library/ms536339%28VS.85%29.aspx
тут описывается изменение логики кодирования с апи на gdi+. Тупо на глаз понятно что к чему. Хз какие еще доки найти понятнее.
Большое пасибо!!! Единственное последний вопрос: Почему когда я вышеописанным способом включаю кртинку, она не прозрачна?(тоесть я создаю прозрачный png прямоугольник,а он отображается белым)
Большое пасибо!!! Единственное последний вопрос: Почему когда я вышеописанным способом включаю кртинку, она не прозрачна?(тоесть я создаю прозрачный png прямоугольник,а он отображается белым)
Возможно, это поможет... http://msdn.microsoft.com/ru-ru/library/ms172507.aspx
чем не угодил cin и string? ты или уже пиши на С или на С++. а то юзаешь объекты из С++, но имена - массив символов. буэ
cout << "Enter something" << endl;
gets(carr1[i]);
cout << "One more time" << endl;
gets(carr2[i]);
у меня работает
upd: вообще у меня по-всякому работает. я хз, что там у тебя не так :)
cout<<"\n";
cout<<"famil: ";
...
if (l==1)
do {
оО
не жести так ) и лучше выборку реализуй case'ом, будет нагляднее да и удобнее потом.
т.е. не меняя ничего все работает??
string ... ? наверное я до этого не изучил еще. пока в курсе что строки как char-массивы вбиваются
/да case это так и надо , просто потом добавил варианты, переписывать неохота/
Как объявить двух и трёхмерный динамический массив(используя операцию new)? Например, одномерный массив
int * a = new int[10];
т.е. не меняя ничего все работает??
я написал, как работает у меня :)
Как объявить двух и трёхмерный динамический массив(используя операцию new)? Например, одномерный массив
int * a = new int[10];
2x
int** arr = new int[Rows];
for (int i = 0; i < Rows; i++) {
arr[i] = new int[Columns];
}
3x
аналогично, только три цикла
Реализация алгоритма теста на простоту Миллера-Рабина. В чём ошибка.
#include <iostream>
#include <cmath>
int is_prime(int m){
using namespace std;
int r = 1000;
int t = m-1;
int s = 0;
bool b = true;
if(m%2==0){
return false;
}
if(m==1){
return false;
}
if(m==2){
return true;
}
while(t%2==0 || b){
b = false;
s++;
t=t/2;
}
for(int i=1;i<r+1;i++){
int a = 2+rand()%(m-2);
int x = int(float(pow(float(a),float(t))))%m;
if((x==1)||(x==m-1)){
continue;
}
for(int j=1;j<s;j++){
x=int(float(pow(float(x),2)))%m;
if(x==1){
return false;
}
if(x==m-1){
continue;
}
}
}
return true;
}
int main(){
using namespace std;
int a,b;
cin >> a >> b;
for(int i=a;i<b;i++){
if(is_prime(i)){
cout << i << " ";
}
}
cin >> a;
return 0;
}
P.S Алгоритм, с которого я писал есть на википедии, страница так и называется тест миллера-рабина
что пишет компилятор?
int is_prime(int m)
попробуй сделать bool, а нет int
Разницы нет, компиляция проходит и программа работает, но неправильно, выводит 15(оно составное) и не выводит 17(простое), если a=3, а b=20.
тогда с++ тут ни при чем - ошибка в алгоритме
Да это я и так понял, сам алгоритм правильный, но я неправильно его реализовал(немного). Просто не могу найти ошибки. Более подходящего места вопросу не нашёл)
1)
Выбрать случайное a в диапазоне [2, m − 2]
а у вас [2,m-1]
http://www.cplusplus.com/reference/clibrary/cstdlib/rand/
2) (*) вернуть составное
вернуть вероятно простое
а (*) у вас нет
3)
если x = m − 1 то перейти на следующую итерацию цикла А
а у вас на следующую итерацию цикла "для r = 1 .. s − 1"
Честно говоря, на счёт rand, я сделал, а вот2)
Цитата:
(*) вернуть составное
вернуть вероятно простое
а (*) у вас нет
Return false;
Это по-вашему что?
А 3 пункт я и вовсе не понял
Return false;
это ошибка при компиляции XD
=======================
написав continue произойдёт следующее
for(int j=1;j<s;j++){
x=int(float(pow(float(x),2)))%m;
if(x==1){
return false;
}
if(x==m-1){
continue;// попадаем в цикл for(int j=1;j<s;j++) а надо во внешний for(int i=1;i<r+1;i++){
}
return false;//что то я не видел, что бы это у вас стояло
}
Сори я щас вообще ничего не соображаю, а как во внешний цикл то попасть
убрать continue и реализовать алгоритм без этого слова... это легко
ИМХО Вообще continue мне напоминает goto(в смысле, тем, что писать его плохо).
~NeiTRoN~
10.11.2009, 20:45
Сообственно необходимо реализовать полоску загрузки(ну на подобии как в различных играх). Реализовать надо на win api.
Вопрос: кто занает как это делается или где об этом можно почитать?
гугли winapi progressbar, в инете полно примеров
Chrek625
11.11.2009, 02:54
Доброго времени суток.
Подскажите как средствами С++ реализовать "Выход из системы"?
Заранее благодарен
google - "msdn shutdown"
http://msdn.microsoft.com/en-us/library/aa376871%28VS.85%29.aspx
if(m%2==0){
return false;
}
...
if(m==2){
return true;
}мда
int m;
int t = m-1;
int a = 2+rand()%(m-2);
int x = int(float(pow(float(a),float(t))))%m;
мда
Я по поводу теста простоты Миллера-Рабина(см. выше). Переписал с учётом замечаний, но по прежнему не работает
bool is_prime(int m){
using namespace std;
int r = 1000;
int t = m-1;
int s = 0;
bool b = true;
if(m==2){
return true;
}
if(m%2==0){
return false;
}
if(m==1){
return false;
}
while(t%2==0 || b){
b = false;
s++;
t=t/2;
}
for(int i=1;i<r+1;i++){
int a = 2+rand()%(m-2);
int x = int(float(pow(float(a),float(t))))%m;
if((x==1)||(x==m-1)){
continue;
}
for(int j=1;j<s;j++){
x=int(float(pow(float(x),2)))%m;
if(x==1){
return false;
}
if(x==m-1){
break;
}
return false;
}
}
return true;
}
Я по поводу теста простоты Миллера-Рабина(см. выше). Переписал с учётом замечаний, но по прежнему не работает
...
приведи сам алгоритм, а не его реализацию. мне просто впадлу гуглить
Вопрос очень банальный, но все же прошу помощи:
есть массив символов
char buf[10000];
и есть функция, которая с этим массивом работает. Передавать массив нужно по ссылке. Делаю так:
int f ( char *buf[10000] )
{
*buf[0] = '1';
*buf [1] = '\0';
return 0;
}
дальше в программе вызываю
readPart( &buf );
Не работает. Что я делаю не так?
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot