Консультация № 137023
16.05.2008, 00:44
0.00 руб.
0 1 1
Здравствуйте!

Есть задача: отсортировать по-возрастанию только те эл. массива, которые есть простыми числами. Т.к. я ещё очень и очень мало знаю на программировании на Си++, очень Вас прошу, сделайте описание кода. Код в приложении, заранее спасибо!

Приложение:
#include <time.h>#include <cstdlib>#include <iostream>using namespace std;bool is_simple_number(int number) { if(number <= 1) return false; if(number%2 == 0) return false; int divisor = number/2; while(divisor > 2) if(number%divisor-- == 0) return false; return true;}int main(int argc, char* argv[]) { const int n = 10; int array[n]; bool is_simple[n]; srand((unsigned) time(NULL)); for(int i=0; i<n; i++) { array[i] = rand()%10; is_simple[i] = (is_simple_number(array[i])) ? true : false; } cout << "Initial array:" << endl; for(int i=0; i<n; i++) { cout << "array[" << i << "] = " << array[i]; cout << ((is_simple[i] == true) ? " - is simple" : " - is not simple") << endl; } for(int i=0; i<n-1; i++) { if(is_simple[i] == false) continue; int min = i; for(int j=i+1; j<n; j++) { if(is_simple[j] == false) continue; if(array[j] < array[min]) min = j; } if(min != i) { int temp = array[i]; array[i] = array[min]; array[min] = temp; } } cout << endl << "Array with sorted simple elements:" << endl; for(int i=0; i<n; i++) { cout << "array[" << i << "] = " << array[i]; cout << ((is_simple[i] == true) ? " - is simple" : " - is not simple") << endl; } return 0;}

Обсуждение

Неизвестный
16.05.2008, 03:27
общий
это ответ
Здравствуйте, Sashka!
Ну раз программу писал я, то комментировать ее тоже мне. Комментированный код смотрите в приложении.

Приложение:
#include <time.h>#include <cstdlib>#include <iostream>using namespace std;//Функция для определения простое число или нетbool is_simple_number(int number) { //Числа меньше или равные единице непростые if(number <= 1) return false; //Отсекаем четные числа (непростые) if(number%2 == 0) return false; //Задаем делитель int divisor = number/2; //постепенно уменьшая делитель, проверяем число на делимость while(divisor > 2) //Если есть делимость, то число непростое if(number%divisor-- == 0) return false; //Все проверки пройдены, число простое return true;}int main(int argc, char* argv[]) { //Размер массива const int n = 10; //Массив чмсел для сортировки int array[n]; //Массив флагов для определиня простое число или нет bool is_simple[n]; //Инициализация генератора случайных чисел srand((unsigned) time(NULL)); //Заполнение массивов for(int i=0; i<n; i++) { //Выбираем случайное число из диапазона (0..10) array[i] = rand()%10; //Если оно простое, то ставим соответствующий флаг is_simple[i] = (is_simple_number(array[i])) ? true : false; } //Вывод начального массива cout << "Initial array:" << endl; for(int i=0; i<n; i++) { cout << "array[" << i << "] = " << array[i]; cout << ((is_simple[i] == true) ? " - is simple" : " - is not simple") << endl; } //Сортировка методом выбора for(int i=0; i<n-1; i++) { //Если число непростое, то переходим к следующему шагу цикла if(is_simple[i] == false) continue; //Индекс минимального числа для текущего шага цикла int min = i; //Ищем простые числа меньшие чем array[min] for(int j=i+1; j<n; j++) { //Если число непростое, то переходим к следующему шагу цикла if(is_simple[j] == false) continue; //Если число простое и меньше чем array[min], то оно и будет минимальным if(array[j] < array[min]) min = j; } //Если найдено меньшее простое число if(min != i) { //Меняем значения ячеек массива array int temp = array[i]; array[i] = array[min]; array[min] = temp; } } //Вывод массива с отсортированными числами cout << endl << "Array with sorted simple elements:" << endl; for(int i=0; i<n; i++) { cout << "array[" << i << "] = " << array[i]; cout << ((is_simple[i] == true) ? " - is simple" : " - is not simple") << endl; } return 0;}
Форма ответа