Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 04.10.2010
Сообщений: 31
1

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

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

Author24 — интернет-сервис помощи студентам
Можно ли этот код переделать, чтоб был оператор цикла 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2010, 17:12
Ответы с готовыми решениями:

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

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

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

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

13
ЧакЭ одобряЭ
285 / 284 / 86
Регистрация: 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
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
ЧакЭ одобряЭ
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
15.11.2010, 18:53 4
C
1
while(i==year-1);
нумерация с 0

Добавлено через 3 минуты
ну тоесть у вас там было меньше year Т.е на сам year не попадает
1
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
ЧакЭ одобряЭ
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
15.11.2010, 22:13 6
в первоначальном коде было верно?
0
0 / 0 / 0
Регистрация: 04.10.2010
Сообщений: 31
15.11.2010, 22:40  [ТС] 7
да, там всё ок, но мне надо было писать с оператором цикла while, do...while
0
222 / 135 / 19
Регистрация: 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
ЧакЭ одобряЭ
285 / 284 / 86
Регистрация: 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
222 / 135 / 19
Регистрация: 06.11.2010
Сообщений: 234
15.11.2010, 23:09 10
Цитата Сообщение от Artishok Посмотреть сообщение
а ну да но i>=year
Разве?) Мы 'i' увеличиваем, так что цикл будет явно вечным.
Изначально i=1900 году
Year мы вводим сами, и если по условию надо вводить 20-21 век, то как раз цикл надо повторять пока і не станет равно году, т.е. выполняем цикл, пока і меньше заданного года.

Если учитываются года, которые идут с 19 века и раньше, то за первый год надо брать не 1900, а какой-то 0 от Р.Х. например, но там тогда придётся еще перевод календарей делать.
1
0 / 0 / 0
Регистрация: 04.10.2010
Сообщений: 31
15.11.2010, 23:10  [ТС] 11
Спасибо большое!!! Вроде всё стало работать.
0
ЧакЭ одобряЭ
285 / 284 / 86
Регистрация: 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
222 / 135 / 19
Регистрация: 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
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2010, 23:57
Помогаю со студенческими работами здесь

оператор цикла WHILE
задание: написать програму при помощи оператора цикла WHILE для подсчета суммы ряда с точность...

Оператор цикла
Вводиться последовательность из N целых чисел, найти разность между произведением нечетных чисел и...

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

Оператор цикла while
Помогите исправить код. Задание: Вводить с клавиатуры числа, пока не будет введен 0. Определить,...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru