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); }
Всем привет! При написании проги возник простой наверное вопрос. Если я передаю в функцию вектор следующим образом 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); } То собственно вектор в таком случае передаётся по ссылке или по значению ??? Заранее спасибо !
собственно вот полный листинг проги 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. Гуглил статьи о том как юзать вектор, но такого там не нашёл.
Вот ссылка на алгоритм: 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; } Компиляция проходит, но работает неверно
люди помогите , решил попробовать поучить 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 хоть это и очень смешно но я вообще ноль в этом