[ 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. Lee_fx

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

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    std::sort ?
     
  2. new-sl

    new-sl New Member

    Joined:
    27 May 2009
    Messages:
    46
    Likes Received:
    0
    Reputations:
    -1
    алгоритм
     
  3. Irdis

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

    Joined:
    6 Feb 2006
    Messages:
    248
    Likes Received:
    52
    Reputations:
    3
    http://ru.wikipedia.org/wiki/Алгоритм_сортировки
     
  4. new-sl

    new-sl New Member

    Joined:
    27 May 2009
    Messages:
    46
    Likes Received:
    0
    Reputations:
    -1
    ты видел как там всё написано минебы попроще да с примером вики и я смотрел
     
  5. Irdis

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

    Joined:
    6 Feb 2006
    Messages:
    248
    Likes Received:
    52
    Reputations:
    3
    http://ru.wikipedia.org/wiki/Быстрая_сортировка
    В вики читать лучше, чем мы будем тебе все вместе объяснять...
    Code:
    int n, a[n];
    void qs(int* s_arr,int first, int last)
    {
        int i = first, j = last, x = s_arr[(first + last) / 2];
     
        do {
            while (s_arr[i] < x) i++;
            while (s_arr[j] > x) j--;
     
            if(i <= j) {
                if (i < j) swap(s_arr[i], s_arr[j]);
                i++;
                j--;
            }
        } while (i <= j);
     
        if (i < last)
            qs(s_arr,i, last);
        if (first < j)
            qs(s_arr,first,j);
    }
    
     
  6. VIP

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

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    Всем привет!

    При написании проги возник простой наверное вопрос. Если я передаю в функцию вектор следующим образом

    Code:
    
    bool find_line(dict, 0, line_yes){
    	int i;
    	// некоторые действия
    	....
    	find_line(dict, i, line_yes);
    	return line_yes;
    }
    
    int main(){
    	bool line_yes;
    	vector<one_word> dict(how_much_words);
    	find_line(dict, 0, line_yes);
    }
    
    То собственно вектор в таком случае передаётся по ссылке или по значению ???

    Заранее спасибо ! ;)
     
  7. Irdis

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

    Joined:
    6 Feb 2006
    Messages:
    248
    Likes Received:
    52
    Reputations:
    3
    VIP
    пиши подробней,
    (хотя бы переменные опиши которые используешь)
     
  8. VIP

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

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    собственно вот полный листинг проги

    Code:
    #include "stdafx.h"
    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    #include <vector>
    #include <string.h>
    using namespace std;
    
    #define MAX_WORD_LONG (WORD_SIZE_MAX + 2)
    #define WORD_SIZE_MIN 3
    #define WORD_SIZE_MAX 4
    
    struct one_word {
    	char element[MAX_WORD_LONG];
    	bool is_use;
    };
    
    void print_dict(std::vector<one_word> dict){
    	system("cls");
    	printf("Dictonary: \n\n");
    	for(int i = 0; i < (int)dict.size(); i++){
    		printf("%d. ", i + 1);
    		for(int j = 0; dict[i].element[j] != '\0'; j++){
    			printf("%c", dict[i].element[j]);
    		};
    		printf("\n");
    	}
    }
    
    bool find_line(std::vector<one_word> dict, int i, bool line_yes){
    	dict[i].is_use = true; 
    	printf("\n");
    	printf("%d. ", i + 1);
    	for(int j = 0; dict[i].element[j] != '\0'; j++){
    			printf("%c", dict[i].element[j]);
    	};
    	int last_latter;
    	for(last_latter = 0; dict[i].element[last_latter + 1] != '\0'; last_latter++);
    	for(int j = 0; j < (int)dict.size(); j++){
    		if (((int)dict[i].element[last_latter] == (int)dict[j].element[0])&&(dict[j].is_use == false)){
    			find_line(dict, j, line_yes);
    			line_yes = true;
    		}
    	}
    	return line_yes;
    }
    
    int main(){
    	srand(time(NULL));
    	int how_much_words;
    	system("cls");
    	printf("How much words? \n");
    	scanf_s("%d", &how_much_words);
    	vector<one_word> dict(how_much_words);
    
    	int word_size = 0;
    
    	system("cls");
    	int symbol_of_new_word;
    	for(int i = 0; i < how_much_words; i++){
    		if (i == 0) printf("Enter words: \n\n", i);
    		for(int j = 0; (symbol_of_new_word = getchar()) != ' '; j++){
    			if (symbol_of_new_word == 10) symbol_of_new_word = getchar();
    			dict[i].element[j] = symbol_of_new_word;
    		}
    	}
    
    	system("cls");
    
    	print_dict(dict);
    	bool line_yes = false;
    	for (int i = 0; i < how_much_words*2; i++){
    		if (find_line(dict, 0, line_yes)) {
    			line_yes = true;
    			break;
    		}
    		else {
    			system("cls");
    			print_dict(dict);
    		}
    	}
    	if (!line_yes) printf("\nNo suitable lines");
    	printf("\n");
    	system("pause");
    }
    
    интересует как будет передаваться вектор из main() в find_line(std::vector<one_word> dict, int i, bool line_yes) и как он будет передаваться в рекурсии. По ссылке или по значению.

    P.S. Гуглил статьи о том как юзать вектор, но такого там не нашёл.
     
  9. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    void foo(std::vector<int> vect); - по значению
    void foo(std::vector<int>& vect); - по ссылке
     
  10. VIP

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

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    а при вызове функции тогда нужно писать:

    Code:
    function(&vect);
    
    ???
     
  11. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    просто foo(vect);
    вообще читаем литературу, в любом учебнике об этом все написано.
     
  12. winflip

    winflip New Member

    Joined:
    13 May 2009
    Messages:
    36
    Likes Received:
    1
    Reputations:
    0
    Вот ссылка на алгоритм:
    http://ru.wikipedia.org/wiki/Тест_Миллера_—_Рабина
    Вот код:
    Code:
    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;
    }
    
    Компиляция проходит, но работает неверно
     
  13. Irdis

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

    Joined:
    6 Feb 2006
    Messages:
    248
    Likes Received:
    52
    Reputations:
    3
    не пойдёт вылезает за границы допустимых значений
     
  14. jenyavlg

    jenyavlg Banned

    Joined:
    25 Aug 2007
    Messages:
    397
    Likes Received:
    19
    Reputations:
    0
    люди помогите ,

    решил попробовать поучить C++
    взял учебник Джесс Либерти. C++ за 21 день
    скачал Microsoft Visual C++ 2008 Express Edition

    и сразу же не чё не понял

    не могу скомпилить даже

    #include <iostream.h>


    int main()
    {
    cout << "Hello world!\n";
    return 0;
    }


    (4) : fatal error C1083: Не удается открыть файл include: iostream.h: No such file or directory

    хоть это и очень смешно но я вообще ноль в этом
     
  15. Irdis

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

    Joined:
    6 Feb 2006
    Messages:
    248
    Likes Received:
    52
    Reputations:
    3
    вот
     
  16. jenyavlg

    jenyavlg Banned

    Joined:
    25 Aug 2007
    Messages:
    397
    Likes Received:
    19
    Reputations:
    0
    тоже пробовал

     
  17. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    win32 проект создал?
     
  18. jenyavlg

    jenyavlg Banned

    Joined:
    25 Aug 2007
    Messages:
    397
    Likes Received:
    19
    Reputations:
    0
    ну да ,,, а чё надо было консольное ?
     
  19. Irdis

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

    Joined:
    6 Feb 2006
    Messages:
    248
    Likes Received:
    52
    Reputations:
    3
    да.. судя по ошибкам ты создал Win32 Project
     
    #4239 Irdis, 13 Nov 2009
    Last edited: 13 Nov 2009
  20. jenyavlg

    jenyavlg Banned

    Joined:
    25 Aug 2007
    Messages:
    397
    Likes Received:
    19
    Reputations:
    0
    всё пока не много разобрался
     
Thread Status:
Not open for further replies.