Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
SynaptyC
0 / 0 / 0
Регистрация: 04.10.2010
Сообщений: 31
15.11.2010, 17:12     оператор цикла while, do...while #1
Можно ли этот код переделать, чтоб был оператор цикла 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2010, 17:12     оператор цикла while, do...while
Посмотрите здесь:

C++ оператор цикла for
C++ оператор цикла
оператор цикла: C++
оператор цикла WHILE C++
C++ Оператор цикла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
15.11.2010, 18:01     оператор цикла while, do...while #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);
SynaptyC
0 / 0 / 0
Регистрация: 04.10.2010
Сообщений: 31
15.11.2010, 18:49  [ТС]     оператор цикла while, do...while #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;
}
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
15.11.2010, 18:53     оператор цикла while, do...while #4
C
1
while(i==year-1);
нумерация с 0

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

Если учитываются года, которые идут с 19 века и раньше, то за первый год надо брать не 1900, а какой-то 0 от Р.Х. например, но там тогда придётся еще перевод календарей делать.
SynaptyC
0 / 0 / 0
Регистрация: 04.10.2010
Сообщений: 31
15.11.2010, 23:10  [ТС]     оператор цикла while, do...while #11
Спасибо большое!!! Вроде всё стало работать.
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
15.11.2010, 23:17     оператор цикла while, do...while #12
Цитата Сообщение от x1Mike7x Посмотреть сообщение
Разве?
в первоначальном коде
C++
1
2
3
4
5
for(int i = first; i<year; ++i)
        {
                if(leapYear(i))
                        ++day;
        }
x1Mike7x
 Аватар для x1Mike7x
214 / 127 / 6
Регистрация: 06.11.2010
Сообщений: 234
15.11.2010, 23:27     оператор цикла while, do...while #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);.
Просто протестируй на счёт понедельника этого года и проверь в календаре =)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2010, 23:57     оператор цикла while, do...while
Еще ссылки по теме:

Оператор цикла C++
Оператор цикла while/do while C++
C++ Оператор цикла с предусловием

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

Или воспользуйтесь поиском по форуму:
SynaptyC
0 / 0 / 0
Регистрация: 04.10.2010
Сообщений: 31
15.11.2010, 23:57  [ТС]     оператор цикла while, do...while #14
правильно выдаёт при while(i<year)
при while(i<=year) - спешит на день, но где-то дни бывает совпадают)))
Yandex
Объявления
15.11.2010, 23:57     оператор цикла while, do...while
Ответ Создать тему
Опции темы

Текущее время: 16:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru