Опять простые числа

скажите почему программа завершается после введения числа? и при компиляции пишет, что переменные c и d не используются! я пробовал с циклом while и for но все равно не получалось =(

#include <iostream>
using namespace std;

int main()
{
 setlocale (0, "");
 int a, b, c;
 cout << "Введите число ";
 cin >> a;
 int i = 2;
 while (i < a)
 {
  int b = a / i;
  int c = b * i;
  if (c == a){
   cout << "Число "<<a<<" составное"<<endl;
   break;
  }
  i++;
 }
 i++;
 if(i == a){
  cout << "Число "<<a<<" простое"<<endl;
  }
 system ("pause");
 return 0;
}

У вас в цикле идет повторное определение переменных b и c. Притом, многократное (т.к. цикл).

но ведь значения b и c меняются с каждым шагом цикла i увеличивается на 1. В итоге если а поделится на i нацело или i станет равным a-1 то цикл завершится. Если я убрал в начале определение b и c то тоже самое получилось!

Вы пытаетесь заново определить переменные b и c на каждой итерации цикла. Этого делать нельзя. Поэтому программа крэшится.

#include <iostream>
using namespace std;

int main()
{
 setlocale (0, "");
 int a, b, c;
 cout << "Введите число ";
 cin >> a;
 int i = 2;
 while (i < a)
 {
  // Здесь была ошибка
  b = a / i;
  c = b * i;
  if (c == a){
   cout << "Число "<<a<<" составное"<<endl;
   break;
  }
  i++;
 }
 i++;
 if(i == a){
  cout << "Число "<<a<<" простое"<<endl;
  }
 system ("pause");
 return 0;
}

рабочая программа

но ведь в вашем же коде из уроков

#include <iostream>
using namespace std;

int main()
{
    int i; // счетчик цикла
    int sum = 0; // сумма чисел от 1 до 1000.
    setlocale(0, "");
    for (i = 1; i <= 1000; i++) // задаем начальное значение 1, конечное 1000 и задаем шаг цикла - 1.
    {
        sum = sum + i;
    }
    cout << "Сумма чисел от 1 до 1000 = " << sum << endl;         
    return 0;
}

переменной sum каждую итерацию цикла присваивается новое значение. а вы сказали так делать нельзя.

Нет, я не говорил ничего подобного. У вас в цикле происходит повторная инициализация переменных b и c.

 int b = a / i;
 int c = b * i;

Что я и исправил в предыдущем примере:

b = a / i;
c = b * i;

я пробовал так делать но программа все равно не говорит простое это число или составное. при компиляции уже не пишет про b и c, но программа завершается после ввода числа

хм. нет она работает но только для составных чисел =/ если ввести простое то она опять прекращается после ввода


спасибо я разобрался. не нужно было писать после цикла

i++;

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.