Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2017, 13:22   #1
xxxPARABELLUMxxx
Новичок
Джуниор
 
Регистрация: 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++;
}

}
Вложения
Тип файла: rar ЛАбораторная работа 1,2.rar (2.14 Мб, 8 просмотров)

Последний раз редактировалось xxxPARABELLUMxxx; 08.10.2017 в 13:43.
xxxPARABELLUMxxx вне форума Ответить с цитированием
Старый 09.10.2017, 13:24   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

100 строк кода.

GIF.gif
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 09.10.2017, 20:41   #3
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

xxxPARABELLUMxxx, надо тебе начинать с теории. Расскажи теорию, которую пытался заложил в программу (как ты считал?).

Покажи на самом первом годе (1583г)... Первая среда - это январь 31?
А пользователь что вводит? Любую дата? (например 3 февраля)
И что дальше? Программа находит ближайшую среду...

Покажи ручной счёт (какой-нибудь пример, для начала) 1583 года...
ura_111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите исправить задачу 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