|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.10.2017, 13:22 | #1 |
Новичок
Джуниор
Регистрация: 08.10.2017
Сообщений: 1
|
Помогите исправить задачу на С
У меня почти работает прога, но она выдает неверные даты скорее всего из за ошибки в массиве kdm( не в самом массиве) а в єего определителях [m-1] и т.д Задача состоит в том, чтобы вывести даты всех последних сред начиная с какой_то даты и до конца года. Вот код!
#include "stdafx.h" #include <stdio.h> #include <math.h> #include <locale.h> #include <conio.h> #include <stdlib.h> int main() { setlocale(LC_ALL, "russian"); int d, i, dn, y, m,dp,j,dk; double a, q, k; int kdm[] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; printf("Введлите дату начала отсчета\n"); printf("y="); scanf_s("%d", &y); if (y < 1583) { printf("Повторите заново, и введите дату начало которой после 1583 года\n"); return 1; } else { printf("m="); scanf_s("%d", &m); if (m>12 || m<1) { printf("Повторите заново, и ведите корректный номер месяца\n"); return 1; } } if ((y % 400 == 0) && (y % 100 != 0) && (m == 2) || (y % 4 == 0)) { dk=kdm[m - 1] + 1; } else { dk=kdm[m - 1]; } printf("d="); scanf_s("%d", &d); if (d>kdm[m - 1] || d<1) { printf("Повторите заново,введите корректный день месяця\n"); return 1; } else { a = (14 - m) / 12; k = y - a; q = m + 12 * a - 2; dn = 7000 + dk + k + k / 4 - k / 100 + k / 400 + (31 * q) / 12; dn = dn % 7; } if (dn == 3) { printf("%d.%d.%d\n", dk, m, y); } else if (dn == 4 || d == 5 || d == 6) { dp=kdm[m - 1] + (3- dn); if (dp < d) { return 1; } else { printf("%d.%d.%d\n", dp, m, y); } } else if (dn == 0 || dn == 1 || dn == 2) { dp = kdm[m - 1] - (4 + dn); if (dp < d) { return 1; } else { printf("%d.%d.%d\n", dp, m, y); } } m = m + 1; while (m<=12) { a = (14 - m) / 12; k = y - a; q = m + 12 * a - 2; dn = 7000 + kdm[m-1] + k + k / 4 - k / 100 + k / 400 + (31 * q) / 12; dn = dn % 7; if (dn == 3) { printf("%d.%d.%d\n", kdm[m-1], m, y); } else if (dn == 4 || dn == 5 || dn == 6) { d = kdm[m-1] + (3 - dn); printf("%d.%d.%d\n", d, m, y); } else if (dn == 0 || dn == 1 || dn == 2) { d = kdm[m-1] - (4 + dn); printf("%d.%d.%d\n", d, m, y); } m++; } } Последний раз редактировалось xxxPARABELLUMxxx; 08.10.2017 в 13:43. |
09.10.2017, 20:41 | #3 |
Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
|
xxxPARABELLUMxxx, надо тебе начинать с теории. Расскажи теорию, которую пытался заложил в программу (как ты считал?).
Покажи на самом первом годе (1583г)... Первая среда - это январь 31? А пользователь что вводит? Любую дата? (например 3 февраля) И что дальше? Программа находит ближайшую среду... Покажи ручной счёт (какой-нибудь пример, для начала) 1583 года... |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
помогите исправить задачу | Maserati | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 20.10.2013 13:43 |
Delphi, помогите исправить задачу | cave | Помощь студентам | 3 | 17.06.2009 09:56 |
Помогите исправить задачу. | Liver | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 19.12.2008 09:56 |
Помогите Исправить задачу по C++ | Many man | Помощь студентам | 2 | 14.12.2008 12:20 |