Использование разных типов циклов (for, while, do while)

Можно ли для решения одной и той же задачи на циклы использовать различные циклы(for,while,do while).
Или же все же к определенной задаче можно применять только определенный цикл?

for — цикл с предопределенным количеством повторов, т.е., Вы сами можете определить, сколько его интераций произойдет. Например, цикл
for(int c=1; c<11; c++)
будет иметь 10 интераций. В циклах while и do while может, в зависимости от условия, изменяться число интераций. Насчет вашего вопроса: всегда можно с for сделать while и do while, но наоборот — не всегда. Тот же результат с использованием while:
int c=1; while(c<11) c++;
...и do while:
int c=1; do c++ while (i < 11);

15 февраля 2014 г., 14:32 пользователь Влад Марков pegas.v@mail.ru написал:
Здравствуйте. Пишу программу на C++ и параллельно учусь языку ;)
Возникла такая проблема : Мне нужно сделать так, чтобы после того как было выполнено действие калькулятора, снова появлялось меню, но уже без операторов cout.Если непонятно то поясню :D. У меня допустим открылась программа и я выбрал пункт 1 — Калькулятор формул по Физике. Дальше у меня появляется меню калькулятора с информацией. Я выбираю раздел, ввожу данные и.т.д. Я получил ответ и хочу сделать так, чтобы после того как появился ответ, меню калькулятора появилось вновь, НО! уже без команд cout. То есть без :
cout<< «Вас приветствует калькулятор формул по Физике. V1» << endl;
cout << "Внимание! Расчёты нужно проводить в системе СИ! Конвертер будет во второй версии программы!" << endl;
cout << «Выберите раздел физики :» << endl;
, а сразу меню с пунктами. Статью про циклы прочитал, но не очень понял как реализовать мою задачу. Надеюсь на вашу помощь! Спасибо.

#include <iostream>
using namespace std;

int main()
{
setlocale(LC_ALL, "Russian");
float a, b, d, r, p;
cout << "Вас приветствует мулти-калькулятор V 0.1" << endl;
cout << "Программу написал программист : komandorOs" << endl;
cout << "Выберите раздел программы :" << endl;
cout << "1-Калькулятор формул по Физике" << endl;
cout << "2-Стандартный калькулятор" << endl;
cout << "3-Конвертер" << endl;
cin >> d;
if (d == 1) {
cout << "Вас приветствует калькулятор формул по Физике. V1" << endl;
cout << "*Внимание! Расчёты нужно проводить в системе СИ! Конвертер будет во второй версии программы!*" << endl;
cout << "Выберите раздел физики :" << endl;
cout << "1-Плотность, Масса, Объём" << endl;
cout << "2-Сила, Масса" << endl;
cout << "3-Расстояние, Время, Скорость" << endl;
cout << "4-Скорость (Если известны только скорости)" << endl;
cout << "5-Сила упругости, Коэфицент жёсткости, Удлиннение" << endl;
cout << "6-Сила трения, Мю, М*Ж" << endl;
cout << "7-Давление, Сила, Площадь" << endl;
cin >> r;
if (r == 1) {
cout << "1-Вычислить Плотность через Массу и Объём" << endl;
cout << "2-Вычислить Массу через Плотность и Объём" << endl;
cout << "3-Вычислить Объём через Плотность и Массу" << endl;
cin >> p;
if (p == 1) {
cout << "Введите Массу :";
cin >> a;
cout << "Введите Объём :";
cin >> b;
cout << "Плотность равна :" << a/b << endl;
} else if (p == 2) {
cout << "Введите Плотность :";
cin >> a;
cout << "Введите Объём :";
cin >> b;
cout << "Масса равна :" << a*b << endl;
} else if (p == 3) {
cout << "Введите Плотность :";
cin >> a;
cout << "Введите Массу :";
cin >> b;
cout << "Объём равен :" << b/a << endl;
}
} else if (r == 2) {
cout << "1-Вычислить Силу через Массу" << endl;
cout << "2-Вычислить Массу через Силу" << endl;
cin >> p;
if (p == 1) {
cout << "Введите Массу :";
cin >> a;
cout << "Сила равна :" << a*9.8 << endl;
} else if (p == 2) {
cout << "Введите Силу :";
cin >> a;
cout << "Масса равна :" << a/9.8 << endl;
}
} else if(r == 3) {
cout << "1-Вычислить Расстояние через Время и Скорость" << endl;
cout << "2-Вычислить Время через Расстояние и Скорость" << endl;
cout << "3-Вычислить Скорость через Время и Расстояние" << endl;
cin >> p;
if (p == 1) {
cout << "Введите Время :";
cin >> a;
cout << "Введите Скорость :";
cin >> b;
cout << "Расстояние равно :" << a*b << endl;
} else if (p == 2) {
cout << "Введите Расстояние :";
cin >> a;
cout << "Введите Скорость :";
cin >> b;
cout << "Время равно :" << a/b << endl;
} else if (p == 3) {
cout << "Введите Время :";
cin >> a;
cout << "Введите Расстояние :";
cin >> b;
cout << "Скорость равна :" << b/a << endl;
}
} else if (r == 4) {
cout << "Введите первую Скорость :";
cin >> a;
cout << "Введите вторую Скорость :";
cin >> b;
cout << "Средняя скорость равна :" << (2*a*b)/(a+b) << endl;
} else if (r == 5) {
cout << "1-Вычислить Силу упругости через Коэфициент жёсткости и Удлиннение" << endl;
cout << "2-Вычислить Коэфициент жёсткости через Силу упругости и Удлиннение" << endl;
cout << "3-Вычислить Удлиннение через Силу упругости и Коэфициент жёсткости" << endl;
cin >> p;
if (p == 1) {
cout << "Введите Коефициент жёсткости :";
cin >> a;
cout << "Введите Удлиннение(Дельта Л) :";
cin >> b;
cout << "Сила упругости равна :" << a*b << endl;
} else if (p == 2) {
cout << "Введите Силу упругости :";
cin >> a;
cout << "Введите Удлиннение :";
cin >> b;
cout << "Коэфициент жёсткости равен :" << a/b << endl;
} else if (p == 3) {
cout << "Введите Силу упругости :";
cin >> a;
cout << "Введите Коэфициент жёсткости :";
cin >> b;
cout << "Удлиннение равно :" << a/b << endl;
}
} else if (r == 6) {
cout << "1-Вычислить Силу трения через Мю и М*Ж" << endl;
cout << "2-Вычислить Мю через Силу трения и М*Ж" << endl;
cout << "3-Вычислить М*Ж через МЮ и Силу трения" << endl;
cin >> p;
if (p == 1) {
cout << "Введите Мю :";
cin >> a;
cout << "Введите М*Ж(F Тяжести) :";
cin >> b;
cout << "Сила трения равна :" << a*b << endl;
} else if (p == 2) {
cout << "Введите Силу трения :";
cin >> a;
cout << "Введите М*Ж(Сила тяжести) :";
cin >> b;
cout << "Мю равно :" << a/b << endl;
} else if (p == 3) {
cout << "Введите Мю :";
cin >> a;
cout << "Введите Силу трения :";
cin >> b;
cout << "М*Ж(Сила тяжести) равно :" << b/a << endl;
}
} else if (r == 7) {
cout << "1-Вычислить Давление через Силу тяжести и Площадь" << endl;
cout << "2-Вычислить Силу тяжести через Давление и Площадь" << endl;
cout << "3-Вычислить Площадь через Давление и Силу тяжести" << endl;
cin >> p;
if (p == 1) {
cout << "Введите Силу тяжести :";
cin >> a;
cout << "Введите Площадь :";
cin >> b;
cout << "Давление равно :" << a/b << endl;
} else if (p == 2) {
cout << "Введите Давление :";
cin >> a;
cout << "Введите Площадь :";
cin >> b;
cout << "Сила тяжести равна :" << a*b << endl;
} else if (p == 3) {
cout << "Введите Давление :";
cin >> a;
cout << "Введите Силу тяжести :";
cin >> b;
cout << "Площадь равна :" << b/a << endl;
}
}
} else if (d == 2) {
//Тут будет код калькулятора
}
else if (d == 3) {
//Тут будет код конвертера
}
system("pause");
return 0;
}

DocStapler, старайся писать программы красиво... и понятно. Страшно представить, во что превратится код, если ты туда ещё вставишь циклы, код калькулятора и код конвертора. Ты же сам в этой глисте не найдёшь случайно пропущенную скобку.

В нижеприведённом коде я постарался продемонстрировать некоторые приёмы организации подобной программы. Обрати внимание, что в функции main() и в функции phys_calc() обработка выбора пользователя и дальнейший вызов функции сделан по-разному: в первом случае с помощью оператора switch, а во втором — с помощью массива указателей на функции. Второй вариант выглядит может быть более сложно, зато позволяет выбирать из очень большого числа альтернатив практически без увеличения кода.

По ходу дела, как бонус, в программе получилась и «защита от дурака».

#include <iostream>
using namespace std;

const char *NeNaNo = "*** Неправильно набран номер\n";


void ph_1(void) {
    cout << "Плотность, Масса, Объём" << endl;
}

void ph_2(void) {
    cout << "Сила, Масса" << endl;
}

void ph_3(void) {
    cout << "Расстояние, Время, Скорость" << endl;
}

void ph_4(void) {
    cout << "Скорость (Если известны только скорости)" << endl;
}

void ph_5(void) {
    cout << "Сила упругости, Коэфицент жёсткости, Удлиннение" << endl;
}

void ph_6(void) {
    cout << "Сила трения, Мю, М*Ж" << endl;
}

void ph_7(void) {
    cout << "Давление, Сила, Площадь" << endl;
}

typedef void (*fptr)(void);
const fptr funcs[] = {ph_1, ph_2, ph_3, ph_4, ph_5, ph_6, ph_7};
const int size = sizeof(funcs) / sizeof(fptr);

void phys_calc() {
    cout << 
        "Вас приветствует калькулятор формул по Физике. V1\n"
        "*Внимание! Расчёты нужно проводить в системе СИ! Конвертер будет во второй версии программы!*" << endl;
    int choice;

    while (true) {
        cout << "\n"
            "Выберите раздел физики :\n"
            "1-Плотность, Масса, Объём\n"
            "2-Сила, Масса\n"
            "3-Расстояние, Время, Скорость\n"
            "4-Скорость (Если известны только скорости)\n"
            "5-Сила упругости, Коэфицент жёсткости, Удлиннение\n"
            "6-Сила трения, Мю, М*Ж\n"
            "7-Давление, Сила, Площадь\n"
            "0-Выход из калькулятора формул по физике" << endl;
        cin >> choice;
        if (choice == 0) {
            break;
        }
        else if (choice < 0 || choice > size) {
            cout << NeNaNo;
        }
        else {
            (*funcs[choice - 1])();
        }
    }
}

void calc() {
    cout << "Стандартный калькулятор" << endl;
}

void conv() {
    cout << "Конвертор" << endl;
}

int main() {

    setlocale(LC_ALL, "Russian");

    cout << "Вас приветствует мулти-калькулятор V 0.1" << endl;
    cout << "Программу написал программист : komandorOs" << endl;

    bool loop = true;
    int choice;

    while (loop) {
        cout << "\n"
            "Выберите раздел программы :\n" 
            "1-Калькулятор формул по Физике\n"
            "2-Стандартный калькулятор\n"
            "3-Конвертер\n"
            "0-Выход" << endl;
        cin >> choice;
        switch (choice) {
        case 0:
            loop = false;
            break;
        case 1: 
            phys_calc();
            break;
        case 2: 
            calc();
            break;
        case 3:
            conv();
            break;
        default:
            cout << NeNaNo;
        }
    }

    //system("pause");
    return 0;
}

Череп, Возможно вы допустили ошибку в написании кода или просто не уследили моей мысли. Я предполагал что после расчёта чего-либо , пользователь не выходит в главное меню, а снова остаётся в меню калькулятора, но без начальной сноски. В принципе вы сделали правильно. Но..... Расчётов калькулятор не выполняет! Я хотел оставить калькулятору такую возможность) При выборе раздела, программа просто заново прокручивает разделы. Прошу исправьте!Ну или хотя бы скажите куда вписывать расчётную часть кода(Я новичок, если что простите за тугодумность). Спасибо

В принципе вы сделали правильно. Но..... Расчётов калькулятор не выполняет! Я хотел оставить калькулятору такую возможность) При выборе раздела, программа просто заново прокручивает разделы.

DocStapler, возможно ты невнимательно прочитал преамбулу к коду. Цитирую: "я постарался продемонстрировать некоторые приёмы организации подобной программы". Т.е. это не твоя переделанная программа, а некий шаблон, пользуясь которым можно довести до ума твою программу.

Прошу исправьте!

Моё великодушие так далеко не распространяется )))

Ну или хотя бы скажите куда вписывать расчётную часть кода

Я думаю, что если ты внимательно посмотришь на мой шаблон, разберёшься как это работает, то сам поймёшь куда надо распихивать куски кода из твоей программы. (Подсказка: при выборе раздела программа не просто заново прокручивает разделы, а выводит ещё одну строку. Найди откуда — это будет ключом.)

Если тебе, как новичку, пока непонятен вариант решения с массивом указателей на функции (согласен, не совсем очевидный способ), то разберись хотя бы со switch'ем. А с более сложным вариантом, если сам не разберёшься и будет желание — спрашивай, я прокомментирую код. Но попробуй сначала сам разобраться.

Череп, Ну тогда на этой неделе куплю книги по программированию и буду читать -_-.А то пока слишком всё непонятно.

Так с чтения книг и начинать надо было.

Кстати в сети можно найти много чего из литературы. Надо только немного поискать ;-)

Так что образовательный процесс можно не откладывать ))

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

Ответить

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

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

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

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

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

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