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

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

Войти
Регистрация
Восстановить пароль
 
SharkBass
0 / 0 / 0
Регистрация: 31.03.2013
Сообщений: 12
#1

Не могу найти ошибку - C++

16.04.2013, 08:13. Просмотров 276. Ответов 3
Метки нет (Все метки)

Здравствуйте, есть задача: Написать программу которая по введенному числу и месяцу рассчитывает день недели и выводит ответ на экран. Условия: Год високосный, начало года выпало на понедельник, также следует учесть все возможные ошибки пользователя. Использовать только алгоритм ветвления. Среда: Borland

Написал программу, но не могу понять где ошибка, некоторые даты не считает.

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
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
void main()
{
int dd,mm,y,K,h,j;
    printf("Программа рассчитывает день недели по дате.\n Учитывается что это високосный год и он начался с Четверга.\n  Введите последовательно число и месяц в формате 01/01\n");
scanf("%i %i",&dd,&mm);
if (dd==31&&mm==1)
printf ("СУББОТА\n");
else
if(dd==1&&mm==3)
printf("ПОНЕДЕЛЬНИК\n");
else
if ((((dd>31||dd<1)||(mm>12||mm<1))||(mm==4&&dd>=31))||(mm==2&&dd>=30)||(mm==4&&dd>=31)||(mm==6&&dd>=31)||(mm==9&&dd>=31)||(mm==11&&dd>=31))
printf ("Не корректно введена дата\n");
else
{
if (mm==1)
{int mm=13;
int j=2003/100;
int K=2003%100;
h=(dd+(13*(mm+1)/5)+K+(K/4)+(j/4)-2*j) %7;}
else if (mm==2)
{int mm=14;
int j=2003/100;
int K=2003%100;
h=(dd+(13*(mm+1)/5)+K+(K/4)+(j/4)-2*j) %7;}
else
{
int j=2004/100;
int K=2004%100;
h=(dd+(13*(mm+1)/5)+K+(K/4)+(j/4)-2*j) %7;}
}
{ if(h==2) printf("ПОНЕДЕЛЬНИК\n");
else if(h==3) printf("ВТОРНИК\n");
else if(h==4) printf("СРЕДА\n");
else if(h==5) printf("ЧЕТВЕРГ\n");
else if(h==6) printf("ПЯТНИЦА\n");
else if(h==0) printf("СУББОТА\n");
else if(h==1) printf("ВОСКРЕСЕНЬЕ\n");
}
getch();
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2013, 08:13
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не могу найти ошибку (C++):

Найти слова, повторяющиеся более одного раза, не могу найти ошибку - C++
#include &lt;iostream&gt; using namespace std; void obr1(char **s, char **mas, int n, int m) { int i; int k; char *tm; for(i...

Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) - C++
// Заданы матрицы X(8;4),Y(5;5),Z(6;9). // Для каждой из матриц определить строку, в которой находится наименьшее // количество...

Не могу найти ошибку - C++
В общем суть программы состоит в том чтобы решить нелинейное уравнение x3+x2-4x-4=0 двумя методами хорд и итераций, есть исходник , вот...

Не могу найти ошибку - C++
Компилятор выдает такую ошибку: fatal error C1075: конец файла обнаружен ранее, чем левая фигурная скобка &quot;{&quot; в...

Не могу найти ошибку - C++
Всем привет. НАчал читать учебник Дейтеля (5е издание), дошел до момента &quot;отделение интерфейса от реализации&quot;, и в примерах, которые...

Не могу найти ошибку - C++
Добрый день, программа не компилируется, не могу найти ошибку. Заранее спасибо. #include &lt;stdio.h&gt; #include &lt;math.h&gt; int main() ...

3
ValeryS
Модератор
7023 / 5361 / 531
Регистрация: 14.02.2011
Сообщений: 18,086
16.04.2013, 08:26 #2
чето ты накрутил
рассчитывай день в году
и остаток от деления на 7 (0 воскресенье)
например дата введена 8 марта
C++
1
2
3
4
dd=8;
mm=3;
day=31/*дней в январе*/+29/*дней в феврале*/+8;
dayY=day%7;
dayY=5 пятница

Добавлено через 2 минуты
вот это не понятно
Цитата Сообщение от SharkBass Посмотреть сообщение
Условия: Год високосный, начало года выпало на понедельник,
Цитата Сообщение от SharkBass Посмотреть сообщение
Учитывается что это високосный год и он начался с Четверга.
так с понедельника или с четверга
1
SharkBass
0 / 0 / 0
Регистрация: 31.03.2013
Сообщений: 12
16.04.2013, 09:08  [ТС] #3
Извините, допустил ошибку, год начинается с Четверга. И если рассчитывать так, то программа поучится довольно длинная, или я ошибаюсь?

Добавлено через 31 минуту
Переписал. Ошибки пользователя правильно учтены?
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
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
void main()
{
int dd,mm,day,dayY;
    printf("Программа расчитывает день недели по дате.\n Учитывается что это високосный год и он начался с Четверга.\n  Введите последовательно число и месяц в формате 01/01\n");
scanf("%i %i",&dd,&mm);
if ((((dd>31||dd<1)||(mm>12||mm<1))||(mm==4&&dd>=31))||(mm==2&&dd>=30)||(mm==4&&dd>=31)||(mm==6&&dd>=31)||(mm==9&&dd>=31)||(mm==11&&dd>=31))
printf ("Не корректно введена дата\n");
else
if (mm==1)
dayY=dd%7;
else if (mm==2)
dayY=(31+dd)%7;
else if (mm==3)
dayY=(31+29+dd)%7;
else if (mm==4)
dayY=(31+29+31+dd)%7;
else if (mm==5)
dayY=(31+29+31+30+dd)%7;
else if (mm==6)
dayY=(31+29+31+30+31+dd)%7;
else if (mm==7)
dayY=(31+29+31+30+31+30+dd)%7;
else if (mm==8)
dayY=(31+29+31+30+31+30+31+dd)%7;
else if (mm==9)
dayY=(31+29+31+30+31+30+31+31+dd)%7;
else if (mm==10)
dayY=(31+29+31+30+31+30+31+31+30+dd)%7;
else if (mm==11)
dayY=(31+29+31+30+31+30+31+31+30+31+dd)%7;
else if (mm==12)
dayY=(31+29+31+30+31+30+31+31+30+31+30+dd)%7;
{ if(dayY==5) printf("ПОНЕДЕЛЬНИК\n");
else if(dayY==6) printf("ВТОРНИК\n");
else if(dayY==0) printf("СРЕДА\n");
else if(dayY==1) printf("ЧЕТВЕРГ\n");
else if(dayY==2) printf("ПЯТНИЦА\n");
else if(dayY==3) printf("СУББОТА\n");
else if(dayY==4) printf("ВОСКРЕСЕНЬЕ\n");
}
getch();
 
}
0
ValeryS
Модератор
7023 / 5361 / 531
Регистрация: 14.02.2011
Сообщений: 18,086
16.04.2013, 09:23 #4
Цитата Сообщение от SharkBass Посмотреть сообщение
то программа поучится довольно длинная, или я ошибаюсь?
нет
если тебе нельзя использовать массивы switch и т.д
то на if
C++
1
2
3
4
5
6
7
8
int Day=3;// четверг-1 числа начинаются с 1 а не с 0
 
if(mm==1)
 Day+=dd;
else  if(mm==2)
  Day+=dd+31;
else if(mm==6)
  Day+=dd+60;// 31+29
всего 12 блоков
потом остаток от деления на 7
и вывод как у тебя сделан ( только числа поправь 0 воскресенье)

Добавлено через 7 минут
Цитата Сообщение от SharkBass Посмотреть сообщение
Ошибки пользователя правильно учтены?
не знаю заплюхался в твоем выражении
можно сделать так
прописать по месяцам ( это без оптимизации)
C++
1
2
3
4
if ( (dd<1 || dd>31) && ( mm==1) ) ||
     (dd<1 || dd>29) && ( mm==2) ) || 
     (dd<1 || dd>31) && ( mm==3) ) || 
..................................
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2013, 09:23
Привет! Вот еще темы с ответами:

Не могу найти ошибку! - C++
Только-только начал работать с функциями и не могу понять, почему в моей игре(кидаешь с компьютером кубик) и у пользователя и у программы...

не могу найти ошибку! - C++
почему в typePlane вместо значения, которое вводит пользователь, выводит какое-то большое значение из цифр и букв? #include&lt;iostream&gt; ...

Не могу найти ошибку - C++
Сумму элементов последовательности, расположенных между первым и вторым положительными элементами. При помощи итераторов. Если нету...

Не могу найти ошибку - C++
Вот моя задача и к ней я должен придумать обработку исключений Поле first - положительное целое число, цена товара, поле second -...


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

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

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