Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2010, 20:28   #1
Alt_Shift
Пользователь
 
Аватар для Alt_Shift
 
Регистрация: 11.11.2010
Сообщений: 74
По умолчанию простое и составное число.

всем привет. Прошу помочь разобраться.
И так дано

"Пользователь вводит число, программа определяет простое число или составное + если в данном числе (неважно каком) есть составные числа- вывести их на экран"
C помощью лесенки иф-елсе проблем особо не возникает, тем более меня интересует первая часть задания.

Код:
if ((a==2)||(a==3))
{
	cout<<"Это простое число \n";
}
else
{
	if ((a%2==0)||(a%3==0))
	{
		cout<<"Это составное число \n";
	}
	else
	{
		cout<<"Это простое число \n";

	}
}
Но проблема в том, что решить нужно при помощи цикла. Вот тут начинается головняк, я просто ума не приложу какой тут должен быть цикл. Что то вроде
Код:
for(int i=2;((a/2)-1)%2==0;i++)
но это какой то бред. Это первый вопрос.



Второе- по поводу вложенных меню.
Условие
"Главное меню
Нажать 1 если нужно нарисовать прямоугольник
Нажать 2 если нужен треугольник
Нажать 0 для выхода
При нажатии 1 или 2 второе меню
Нажать 1 если треугольник(прямоугольник) должен быть закрашен
Нажать 2 если пустой
нажать 0 для выхода в главное меню
При нажатии 1 или 2 идут запросы на количество символов в сторонах и какой именно символ"
Мой код
Код:
do 
{
	cout<<"Нарисовать квадрат- нажмите 1 \n";
	cout<<"Нарисовать треугольник- нажмите 2 \n";
	cout<<"Нажмите 3 для выхода из программы \n";
	cin>>key;
    switch (key)	
	{
	case '1': 
	cout<<"Нарисовать незакрашенный треукгольник нажмитe 1 \n";
	cout<<"Нарисовать закрашенный треугольник нажмите 2 \n";
	cout<<"Вернутся в предыдущее меню нажмите 0 \n";
	cin>>key2;
		switch (key2)
		{
		case '1':
			cout<<"нарисовался треугольник незакрашенный";
			break;
		case '2':
			cout<<"Нарисовался закрашенный";
			break;
		case '3':
          cout<<"Нарисовать квадрат- нажмите 1 \n";
	      cout<<"Нарисовать треугольник- нажмите 2 \n";
	      cout<<"Нажмите 0 для выхода из программы \n";
		  cin>>key;
    	}
   }
}
while (key!=3);
Интересует как реализовать пункт выделенный красным цветом, постоянно получается либо при нажатии 0 в подменю высвечивается опять подменю, либо ( как в выложенном коде) высвечивается главное меню, но уже не рботает выход из программы при нажатии 0 в главном меню

Последний раз редактировалось Stilet; 14.11.2010 в 11:23.
Alt_Shift вне форума Ответить с цитированием
Старый 11.11.2010, 21:32   #2
Tema_Crazzzy
Форумчанин
 
Регистрация: 29.04.2010
Сообщений: 114
По умолчанию

Код:
.....
flag=1;
cin>>n;
for (int i=2;i<n;i++)
{
      if(n%i==0) {flag=0;break;}
}
if (flag) cout<<"Число "<<n<<" простое";
     else cout<<"Число "<< <<" составное";
}
Для больших чисел лучше применять немного другой алгоритм (есть на форуме такая тема, недавно читал)

А что значит "если в нем есть составные"???

Код:
do 
{
        system("cls");
	cout<<"Нарисовать треугольник нажмите 1 \n";
	cout<<"Нарисовать квадрат нажмите 2 \n";
	cout<<"Нажмите 3 для выхода из программы \n";
	cin>>key;
    switch (key)	
	{
	case 1: {
        system("cls");
	cout<<"Нарисовать незакрашенный треукгольник нажмитe 1 \n";
	cout<<"Нарисовать закрашенный треугольник нажмите 2 \n";
	cout<<"Вернутся в предыдущее меню нажмите 0 \n";
	cin>>key2;
		switch (key2)
		{
		case 1:
			cout<<"нарисовался треугольник незакрашенный";
			break;
		case 2:
			cout<<"Нарисовался закрашенный";
			break;
		default: break;
                }break;}
    	case 2:{
                 system("cls");
	         cout<<"Нарисовать незакрашенный квадрат нажмитe 1 \n";
	         cout<<"Нарисовать закрашенный квадрат нажмите 2 \n";
	         cout<<"Вернутся в предыдущее меню нажмите 0 \n";
                 cin>>key2;
                 switch(key2)
                 {
                  case 1:
			cout<<"нарисовался треугольник незакрашенный";
			break;
		  case 2:
			cout<<"Нарисовался закрашенный";
			break;
		  default: break;
                  }break;}
   }
}
while (key!=3);
}

Последний раз редактировалось Stilet; 14.11.2010 в 11:24.
Tema_Crazzzy вне форума Ответить с цитированием
Старый 11.11.2010, 21:53   #3
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Цитата:
Сообщение от Tema_Crazzzy Посмотреть сообщение
Для больших чисел лучше применять немного другой алгоритм (есть на форуме такая тема, недавно читал)

А что значит "если в нем есть составные"???
Код:
for (int i=2;i*i<=n;i++)
Достаточно просто взять такое условие цикла - и уже будет намного быстрее. Хотя, на самом деле, есть еще более быстрый алгоритм, но для "задач обычного студента" он вряд ли нужен.
По поводу составных - наверно, имелось введу "вывести разложение на простые", обычно такое имеют ввиду.
Хотя можем подождать ответа автора.
LeBron вне форума Ответить с цитированием
Старый 11.11.2010, 22:13   #4
Tema_Crazzzy
Форумчанин
 
Регистрация: 29.04.2010
Сообщений: 114
По умолчанию

Цитата:
Достаточно просто взять такое условие цикла - и уже будет намного быстрее.
Проверял. Например, вывести все простые числа в диапазоне от 1 до 1 000 000, такой алгоритм работает около 3 минут(машинка не слабая). А алгоритм с корнями 25 секунд)))) Разница большая.
Tema_Crazzzy вне форума Ответить с цитированием
Старый 11.11.2010, 23:12   #5
Alt_Shift
Пользователь
 
Аватар для Alt_Shift
 
Регистрация: 11.11.2010
Сообщений: 74
По умолчанию

Цитата:
Сообщение от Tema_Crazzzy Посмотреть сообщение
Код:
.....
flag=1;
cin>>n;
for (int i=2;i<n;i++)
{
      if(n%i==0) {flag=0;break;}
}
if (flag) cout<<"Число "<<n<<" простое";
     else cout<<"Число "<< <<" составное";
}
Для больших чисел лучше применять немного другой алгоритм (есть на форуме такая тема, недавно читал)

А что значит "если в нем есть составные"???
Что такое flag я вообще не вкурсе Составные...ну задача ведт определить простое число (делится только на еденицу и само себя) и составное (делится на что то еще), вот ввели число 11- оно простое, но в нем есть еще числа 4,6,8,9,10- они составные и их тоже нужно вывести на экран

Цитата:
Сообщение от LeBron Посмотреть сообщение
Код:
for (int i=2;i*i<=n;i++)
n это число введенное пользователем? И на экран выводится i? Но это получается что будут выводится не все составные числа числа n, а только кратные 2, но ведь есть еще кратные трем.

Цитата:
Сообщение от Tema_Crazzzy Посмотреть сообщение
[CODE]
do
{
system("cls");

}
что такое system тоже не вкурсе В арсенале имеется только свич,иф и циклы типа фор,вайт и ду вайт

Цитата:
Код:

bool PrimeNumber(long x)
{
bool f = true;
for (int i = 2; i < floor(sqrt((double)x)); i++)
if (x % i == 0)
{
f = false;
break;
}
return (f && (x != 1));
}
Вот на форуме нашел пример, из него слекдует что число является составным если найдется число из промежутка от 2 до корень из X, на которое будет делится X то число составное, в противном случае простое. Теперь буду пробовать перевести весь этот, для меня китайский, язык, в более привычный С++

бррр....
какая то такая хрень нарисовалась...
Код:
	int x;
	int i;
	cin>>x;
	do
	{
		i=2;
		x=x/i;
		i++;
                      if (x%i==0)
                         {
	                 cout<<"pr \n";
                         }
                            else
                        {
	                 cout<<"ne pr \n";
	             }
         }
             while (i<=sqrt((double)x));
Самое плохое, что хрень не работает ...помогите плз.

Последний раз редактировалось Stilet; 14.11.2010 в 11:25.
Alt_Shift вне форума Ответить с цитированием
Старый 12.11.2010, 08:25   #6
Tema_Crazzzy
Форумчанин
 
Регистрация: 29.04.2010
Сообщений: 114
По умолчанию

Цитата:
Сообщение от Alt_Shift Посмотреть сообщение
Что такое flag я вообще не вкурсе Составные...ну задача ведт определить простое число (делится только на еденицу и само себя) и составное (делится на что то еще), вот ввели число 11- оно простое, но в нем есть еще числа 4,6,8,9,10- они составные и их тоже нужно вывести на экран
Флаг это переменная типа bool или int(1,0). Устанавливается для того чтобы потом можно было определить, нужно выполнять какое либо действие или нет.

Блок, который я вам описал и так определяет простое число или нет.
Далее, для вывода всех чисел из составного используйте тот же алгоритм, но еще с одним вложенным циклом.

Код:
 system("cls");
- очистка консоли, при написания "меню" очень полезная штука, лежит в библиотеке "windows.h"
Tema_Crazzzy вне форума Ответить с цитированием
Старый 14.11.2010, 11:05   #7
Советский фонарик
Новичок
Джуниор
 
Аватар для Советский фонарик
 
Регистрация: 13.11.2010
Сообщений: 1
По умолчанию

в начале не помешает проверка делимости на 2,3,5 и на корень из числа.
Советский фонарик вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составное имя переменной tae1980 Microsoft Office Excel 1 19.09.2010 20:53
Как написать "составное" имя файла на с++ archer*ow Помощь студентам 1 01.03.2010 12:48
число простое или составное isus Помощь студентам 9 18.12.2009 00:35
Простое любопытство.... KORT Свободное общение 130 20.06.2009 19:06
Почему размер хэш-таблицы обязательно простое число? Zefick Помощь студентам 4 25.12.2008 13:42