Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
SynaptyC
0 / 0 / 0
Регистрация: 04.10.2010
Сообщений: 31
#1

оператор цикла while, do...while - C++

15.11.2010, 17:12. Просмотров 1861. Ответов 13
Метки нет (Все метки)

Можно ли этот код переделать, чтоб был оператор цикла while, do...while ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
using namespace std;
 
bool leapYear(int year)
{
        if (year%400==0||(year%4==0&&year%100!=0))
                return true;
        else
                return false;
}
 
int main()
{
        const int first = 1990;
        char *week[]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
        int year,day=0;
 
        cout<<"Enter year: ";
        cin>>year;
 
        day = year-first;
        for(int i = first; i<year; ++i)
        {
                if(leapYear(i))
                        ++day;
        }
 
        day%=7;
        cout<<"Day is: "<<week[day]<<endl;
 
        system("pause");
        return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2010, 17:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос оператор цикла while, do...while (C++):

Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры. - C++
Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры. Шаг изменения...

Оператор цикла while/do while - C++
Всем добрый вечер! Поставили задачу в работающей прграмме, избавиться от метки М1(как следствие goto М1), чтобы программа продолжала...

оператор цикла WHILE - C++
задание: написать програму при помощи оператора цикла WHILE для подсчета суммы ряда с точность Е=10-4 общий член которого a(c индексом...

Оператор цикла - C++
задание 1. Найти сумму целых пол-х чисел, кратных 6 и меньших 150. задание 2.

Оператор цикла - C++
Помогите пожалуйста с прогой: Известны оценки по физике каждого из 20 учеников класса. Вычислить среднюю оценку. //C++ или C#

оператор цикла - C++
задание:

13
Artishok
ЧакЭ одобряЭ
280 / 279 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
15.11.2010, 18:01 #2
C++
1
2
3
4
5
for(int i = first; i<year; ++i)
        {
                if(leapYear(i))
                        ++day;
        }
можно заменить на

C++
1
2
3
4
5
6
int i=first;
while(i<year)
{
    if (leapYear(i))
    day++;
}
C++
1
2
3
4
5
6
7
int i=first;
do
{
    if (leapYear(i))
    day++;
}
while(i==year);
1
SynaptyC
0 / 0 / 0
Регистрация: 04.10.2010
Сообщений: 31
15.11.2010, 18:49  [ТС] #3
ещё вопросик, у меня вроде какая-то ошибка, так как на день спешит... и можно ли заменить чем нибудь bool и char, так как я его ещё не проходил
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;
 
bool leapYear(int year)
{
        if (year%400==0||(year%4==0&&year%100!=0))
                return true;
        else
                return false;
}
 
int main()
{
        const int first = 1900;
        char *week[]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
        int year,day=0;
 
        cout<<"Enter year: ";
        cin>>year;
 
        day = year-first;
       int i=first;
do
{
        if (leapYear(++i))
        day++;
}
while(i==year);
 
        day%=7;
        cout<<"Day is: "<<week[day]<<endl;
 
        system("pause");
        return 0;
}
0
Artishok
ЧакЭ одобряЭ
280 / 279 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
15.11.2010, 18:53 #4
C
1
while(i==year-1);
нумерация с 0

Добавлено через 3 минуты
ну тоесть у вас там было меньше year Т.е на сам year не попадает
1
SynaptyC
0 / 0 / 0
Регистрация: 04.10.2010
Сообщений: 31
15.11.2010, 22:09  [ТС] #5
А для чего нужен bool и char ? просто я не проходил его ещё, поэтому не понимаю, для чего они и что они дают...

Добавлено через 57 минут
вот я подправил код, но он всё равно выдаёт не те дни, которые в календаре, он на день спешит
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;
 
bool leapYear(int year)
{
        if (year%400==0||(year%4==0&&year%100!=0))
                return true;
        else
                return false;
}
 
int main()
{
        const int first = 1900;
        char *week[]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
        int year,day=0;
 
        cout<<"Enter year: ";
        cin>>year;
 
        day = year-first;
       int i=first;
do
{
        if (leapYear(i))
        day++;
}
while(i==year-1);
 
        day%=7;
        cout<<"Day is: "<<week[day]<<endl;
 
        system("pause");
        return 0;
}
Добавлено через 8 минут
Вот само задание, которое надо было сделать - вводится номер года. Определить, каким днем недели является 1 января данного года, если 1 января 1900 года - понедельник (для решения этой задачи заметим, что в случае, когда год невисокосный, 1 января следующего года сдвигается на 1 день недели, а если год високосный -то на 2).

Добавлено через 1 час 36 минут
кто-то может ответить в чём тут ошибка ?
0
Artishok
ЧакЭ одобряЭ
280 / 279 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
15.11.2010, 22:13 #6
в первоначальном коде было верно?
0
SynaptyC
0 / 0 / 0
Регистрация: 04.10.2010
Сообщений: 31
15.11.2010, 22:40  [ТС] #7
да, там всё ок, но мне надо было писать с оператором цикла while, do...while
0
x1Mike7x
218 / 131 / 6
Регистрация: 06.11.2010
Сообщений: 234
15.11.2010, 22:54 #8
Этот цикл не будет работать, если введенный год не 1899. А если 1899, то он уйдёт в вечный цикл.
Попробуйте так:
C++
1
2
3
4
5
6
7
do
{
        if (leapYear(i))
            day++;
        i++;
}
while(i<year);
И еще эту функцию можно спростить:
C++
1
2
3
4
bool leapYear(int year)
{
        return (year%400==0||(year%4==0&&year%100!=0));
}
1
Artishok
ЧакЭ одобряЭ
280 / 279 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
15.11.2010, 22:59 #9
Цитата Сообщение от x1Mike7x Посмотреть сообщение
C++
1
2
3
4
5
6
7
do
{
        if (leapYear(i))
            day++;
        i++;
}
while(i<year);
а ну да но i>=year
1
x1Mike7x
218 / 131 / 6
Регистрация: 06.11.2010
Сообщений: 234
15.11.2010, 23:09 #10
Цитата Сообщение от Artishok Посмотреть сообщение
а ну да но i>=year
Разве?) Мы 'i' увеличиваем, так что цикл будет явно вечным.
Изначально i=1900 году
Year мы вводим сами, и если по условию надо вводить 20-21 век, то как раз цикл надо повторять пока і не станет равно году, т.е. выполняем цикл, пока і меньше заданного года.

Если учитываются года, которые идут с 19 века и раньше, то за первый год надо брать не 1900, а какой-то 0 от Р.Х. например, но там тогда придётся еще перевод календарей делать.
1
SynaptyC
0 / 0 / 0
Регистрация: 04.10.2010
Сообщений: 31
15.11.2010, 23:10  [ТС] #11
Спасибо большое!!! Вроде всё стало работать.
0
Artishok
ЧакЭ одобряЭ
280 / 279 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
15.11.2010, 23:17 #12
Цитата Сообщение от x1Mike7x Посмотреть сообщение
Разве?
в первоначальном коде
C++
1
2
3
4
5
for(int i = first; i<year; ++i)
        {
                if(leapYear(i))
                        ++day;
        }
0
x1Mike7x
218 / 131 / 6
Регистрация: 06.11.2010
Сообщений: 234
15.11.2010, 23:27 #13
Цитата Сообщение от Artishok Посмотреть сообщение
в первоначальном коде
C++
1
2
3
4
5
for(int i = first; i<year; ++i)
        {
                if(leapYear(i))
                        ++day;
        }
Ну да, выносим int i = first; перед циклом, инкремент счётчика в само тело цикла и получаем цикл while(i<year)
do..while(i<year) ничем особым не отличается, разве что тело выполнится как минимум 1 раз, до проверки условия. Это ж не паскалевский repeat..until () где тело выполняется до наступления условия.

------------------------------------------

SynaptyC, кстати да, проверь правильный ли день недели выдает прога при цикле с while(i<year); или с while(i<=year);.
Просто протестируй на счёт понедельника этого года и проверь в календаре =)
0
SynaptyC
0 / 0 / 0
Регистрация: 04.10.2010
Сообщений: 31
15.11.2010, 23:57  [ТС] #14
правильно выдаёт при while(i<year)
при while(i<=year) - спешит на день, но где-то дни бывает совпадают)))
0
15.11.2010, 23:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2010, 23:57
Привет! Вот еще темы с ответами:

оператор цикла for - C++
Помогите пожалуйста решить задачу: Дано натуральные числа n, b1,b2,...bn. Найти количество членов bk последовательности b1, b2,...,...

оператор цикла: - C++
Одного вот этого задания не хватает до зачёта, хоть вроде и элементарное:( Задание(цикл while): S = X/2! + x^3/4! + x^5/6! ...

Оператор цикла не использовать. - C++
Привет всем! Помогите разобратса в задаче 1.Вычислить сумму положительных элементов одномерного массива. Оператор цикла не использовать.

Оператор цикла с предусловием - C++
F={-e^x, если cosx&lt;0; X, если cosx&gt;=0


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru