Консультация № 188500
21.12.2015, 17:54
0.00 руб.
21.12.2015, 19:02
0 14 1
Здравствуйте, Уважаемые эксперты! Помогите пожалуйста с программой на языке С. Вот задание и алгоритм.



Вот то, что я смог написать:

[code h=200]#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main ()
{
int d, m, Y, r, c ;
printf ("Programma opredeleniya dnya nedeli");
printf ("Vvedite d(день)");
scanf ("%d", &d);
printf ("Vvedite m(месяц)");
scanf ("%d", &m);
printf ("Vvedite Y(год)");
scanf ("%d", &Y);
printf ("Vvedite c(количество столетий)");
scanf ("%d", &c);
if (d<0 || m<0 || Y<0 || c<0)
{
printf ("Vvedite polojitel'noe znacheniye");
}
else
{
if (m>12)
{
printf ("Kolichestvo mesyacev ot 1-12");
}
else
{
r=(d+(abs(1/5*(13*m-1)))+Y+(abs(Y/4))+(abs(c/4))+2*c+777)mod7
}
if (r=0)
{
printf("Voskreseniye");
}
else
{
if (r=1)
{
printf("Ponedel'nik");
}
else
{
if (r=2)
{
printf("Vtornik");
}
else
{
if (r=3)
{
printf("Sreda");
}
else
{
if (r=4)
{
printf("Chetverg");
}
else
{
if (r=5)
{
printf("Pyatnica");
}
else
{
if (r=6)
{
printf("Subbota");
}
}
}
}
}
}
}
system ("PAUSE");
return 0;
[/code]При компиляции выдает ошибку в формуле. Почему? Нужно преобразовать формулу в язык С? Как это сделать?
Заранее спасибо за помощь)

Обсуждение

давно
Посетитель
7438
7205
21.12.2015, 18:05
общий
Адресаты:
Я потом подправлю, будет все красиво
(Все равно мне делать )
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
399128
17
21.12.2015, 18:12
общий
Цитата: Лысков Игорь Витальевич
Спасибо огромное)
давно
Посетитель
7438
7205
21.12.2015, 18:13
общий
Адресаты:
Лучше изображения кидать на наш сервер, в мои файлы
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
399128
17
21.12.2015, 18:18
общий
Цитата: Лысков Игорь Витальевич
Теперь буду делать так
давно
Посетитель
7438
7205
21.12.2015, 23:46
общий
это ответ
Здравствуйте, Посетитель - 399128
Примерно так.
Подправил следующее:
1) месяцы должны нумероваться, начиная с марта
2) в формуле не модуль числа, а целая часть, фактически достаточно просто разделить
3) mod заменил на %
4) остальное - просто наведение красоты, как то, замена деления на 4 на сдвиг на 2,
замена серии if=else на switch=case
[code h=200]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main ()
{
int d, m, Y, r, c ;
printf ("Programma opredeleniya dnya nedeli");
printf ("Vvedite d(день)");
scanf ("%d", &d);
printf ("Vvedite m(месяц)");
scanf ("%d", &m);
printf ("Vvedite Y(год)");
scanf ("%d", &Y);
printf ("Vvedite c(количество столетий)");
scanf ("%d", &c);
if (d<0 || m<0 || Y<0 || c<0)
printf ("Vvedite polojitel'noe znacheniye");
else if (m>12)
printf ("Kolichestvo mesyacev ot 1-12");
else
{
m = (m<3)?m+10:m-2;
r=(d+((13*m-1)/5)+Y+(Y>>2)+(c>>2)-2*c+777) % 7;
}
switch (r)
{
case 0:
printf("Voskreseniye");
break;
case 1:
printf("Ponedel'nik");
break;
case 2:
printf("Vtornik");
break;
case 3:
printf("Sreda");
break;
case 4:
printf("Chetverg");
break;
case 5:
printf("Pyatnica");
break;
case 6:
printf("Subbota");
}
printf("\n");
system ("PAUSE");
return 0;
}}[/code]
5
Спасибо огромное) Очень сильно помогли.<br>Не подскажете как сделать так, чтобы программа спрашивала выйти или остаться?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
21.12.2015, 23:49
общий
Адресаты:
Ошибка в 77 строке - несоответствие скобок
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
21.12.2015, 23:54
общий
Адресаты:
Кстати, адресата сообщения надо выбирать не "цитатой", а списком "Кому"
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
21.12.2015, 23:58
общий
Адресаты:
В программе есть еще ошибка: Если будет введено некорректное значение, то следует или просто выйти, или запросить заново. Это я оставляю на самостоятельную работу
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
22.12.2015, 00:07
общий
Адресаты:
как сделать так, чтобы программа спрашивала выйти или остаться?
Сделать внешний цикл while с анализом какой-то булевой переменной. В конце спросить о продолжении, и если не продолжать, то поменять значение той буллевой переменной. Из-за чего будет выход из цикла.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
399128
17
25.12.2015, 14:41
общий
Адресаты:
А Вы не могли бы написать как это, чтобы работало? Нужно чтобы программа спрашивала продолжить или закончить, а не просто вопрос На 1 продолжить, На 2 закончить.
давно
Посетитель
7438
7205
25.12.2015, 14:55
общий
Адресаты:
Только вечером. Я сейчас занят...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
26.12.2015, 00:31
общий
26.12.2015, 00:32
Где-то так
[code h=200]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main ()
{
int d, m, Y, r, c ;
int iContinue = 1;
char *pStr;

printf ("Programma opredeleniya dnya nedeli\n");

while(iContinue == 1)
{
printf("\n");
do
{
printf ("Vvedite d(день)");
scanf ("%d", &d);
}while(d<1 || d>31);

do
{
printf ("Vvedite m(мес¤ц)");
scanf ("%d", &m);
}while(m<1 || m>12);

do
{
printf ("Vvedite Y(год)");
scanf ("%d", &Y);
}while(Y<0 || Y>99);

do
{
printf ("Vvedite c(количество столетий)");
scanf ("%d", &c);
}while(Y<0);

m = (m<3)?m+10:m-2;
r=(d+((13*m-1)/5)+Y+(Y>>2)+(c>>2)-2*c+777) % 7;

switch (r)
{
case 0:
pStr = "Voskreseniye";
break;
case 1:
pStr = "Ponedel'nik";
break;
case 2:
pStr = "Vtornik";
break;
case 3:
pStr = "Sreda";
break;
case 4:
pStr = "Chetverg";
break;
case 5:
pStr = "Pyatnica";
break;
case 6:
pStr = "Subbota";
}
printf("%s\n\n",pStr);
printf("Povtorit'? (1 - da) ");
iContinue = 0;
scanf("%d", &iContinue);
}

return 0;
}[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
399128
17
26.12.2015, 01:01
общий
Адресаты:
Спасибо большое)
А я сделал вот так (так можно?):
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>

int main ()
{
setlocale(LC_ALL,"rus");
int d, m, Y, r, c, iCheck;
do{
printf ("Программа определения дня недели\n");
printf ("Введите d(день):");
scanf ("%d", &d);
printf ("Введите m(месяц):");
scanf ("%d", &m);
printf ("Введите Y(год):");
scanf ("%d", &Y);
printf ("Введите c(количество столетий):");
scanf ("%d", &c);
if (d<0 || m<0 || Y<0 || c<0)
printf ("введите положительное значние\n");
else if (m>12)
printf ("количество месяцев от 1-12");
else
{
m = (m<3)?m+10:m-2;
r=(d+(abs(1/5*(13*m-1)))+Y+(abs(Y/4))+(abs(c/4))+2*c+777)%7 ;
}
switch (r)
{
case 0:
printf("Воскресенье\n");
break;
case 1:
printf("Понедельник\n");
break;
case 2:
printf("Вторник\n");
break;
case 3:
printf("Среда\n");
break;
case 4:
printf("Четверг \n");
break;
case 5:
printf("Пятница\n");
break;
case 6:
printf("Суббота\n");
}
printf("\n");
do {
printf("повторить- 1,выход - 2: ");
scanf("%d", &iCheck);
if ((iCheck == 1) || (iCheck == 2)) break;
} while (1);
} while (iCheck != 2);
}
давно
Посетитель
7438
7205
26.12.2015, 02:46
общий
Адресаты:
Да можно по-разному. Главное, чтобы работало, и работало так, как устраивает
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа