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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2013, 18:15   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию Календарная задча Си

Подсчитать кол-во дней в k-ом году прошедших от начала года до даты - день месяц(включая этот день)

Вот что написал:
Для высокосного года не дописал код. Посмотрите на реализацию не для высокосного года и подскажите, где напортачил. При вводе 3 месяцев считает верно, при вводе 4 - тоже верно, при вводе 5 - уже не верно. Какой-то бред. Запутался совершенно в цикле. Кто поможет буду безумно благодарен

Код:
#include "stdio.h"
#include <conio.h>
#include <locale.h>
#include <windows.h>

int main()
{
	setlocale(LC_ALL, "Russian");

	int k;
	int i;
	int fl=0;
	int d;
	int m;
	int flag=0;

	printf("Введите год:\n");
	do{
	if(!scanf("%d", &k))
		{
			system("cls");
			printf("Нверно задан год. Повторите ввод\n");
			fflush(stdin);
			fl=1;
		}
	else
		fl=0;
	}while(fl==1);
	
	printf("Введите день:\n");
	do{
	if(!scanf("%d", &d))
	{
		system("cls");
			printf("Нверно задан день. Повторите ввод\n");
			fflush(stdin);
			fl=1;
	}
	else
		fl=0;
	if(d==0 || d>31)
	{
		system("cls");
		printf("Неверный ввод. Повторите!\n");
	}
	}while(fl==1 || d==0 || d>31);
	
	printf("Введите месяц:\n");
	do{
	if(!scanf("%d", &m))
	{
		system("cls");
			printf("Нверно задан месяц. Повторите ввод\n");
			fflush(stdin);
			fl=1;
	}
	else
		fl=0;
	if(m==0 || m>12)
	{
		printf("Неверно задан месяц!Повторите ввод\n");
	}
	}while(fl==1 || m==0 || m>12);

	int t=0;
	int flagg=0;
	int p=0;

	if((k%4 == 0) && ((k%100 != 0) || (k%400 == 0)))
	{
		printf("Год - высокосный!\n");
		if(m==1)
		{
			printf("\n\nПрошло %d дней", d);
			getch();
			return 0;
		}

		for(i=0;i<m;i++)
		{
		
			if(flag==0)
			{
				t=t+31;
				flag=1;
			}
			else
			{
				t=t+30;
				flag=0;
			}
			if(flagg==0 && flag==0 )
			{
				t=t+29;
				flagg=1;
			}
			



		}

		
	}
	else
	{
		if(m==1)
		{
			printf("\n\nПрошло %d дней", d);
			getch();
			return 0;
		}
		else
		{

		printf("Год - невысокосный!\n");
		if(m==12) m=m-1;
		for(i=1;i<m;i++)
	{
			
		if(flag==0)
			{
				t=t+31;
				flag=1;
				p++;
				printf("\n\n%d", t);
				getch();
			}
		if(flagg==0 && p==1)
		{
			t=t+28;
			flagg=1;
			flag=0;
			printf("\n\n%d", t);
				getch();
			
		}

		if(flag==1 && p>=2 && i>p)
			{
				t=t+30;
				flag=0;
				printf("\n\n%d", t);
				getch();
			}	
			
	 } 
	}
	}
	  t=t+d;

	  printf("\n\nКол-во дней - %d", t);

	
	getch();
}
Praud вне форума Ответить с цитированием
Старый 22.10.2013, 23:30   #2
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

ап, вроде задача не тяжелая. 1 курс...
Praud вне форума Ответить с цитированием
Старый 22.10.2013, 23:55   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Ох, реально лень разбираться с этой кучей флагов.
Надеюсь, нигде не накосячил:
Код:
int y, m, d;
int a[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
//ввели год
a[1] += (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
//ввели месяц - проверка на диапазон
//ввели день - проверка, что не превысило количество дней в данном месяце
int i;
for (i = 1; i < m; ++i)
    d += a[i - 1];
printf("%d\n", d);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 23.10.2013, 01:07   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

посмотрите примеры программ в следующих темах на форуме:

http://www.programmersforum.ru/showthread.php?t=160666

http://www.programmersforum.ru/showthread.php?t=192298



UPDATE
p.s. опс! извините, ответ BDA проглядел!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.10.2013, 01:39   #5
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Спасибо!) Я что-то вообще не подумал по поводу массива.
Praud вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задча с ошибкой X-REY Паскаль, Turbo Pascal, PascalABC.NET 2 11.12.2011 13:37
Задча. Delphi. NIKSTER Помощь студентам 7 19.10.2011 23:46
Календарная сетка запросом ... КАК ? silent_lab SQL, базы данных 3 02.08.2011 10:32
календарная неделя PHP bpystep Помощь студентам 2 09.08.2010 16:03
Задча про массивы Divoha Общие вопросы C/C++ 3 27.06.2009 13:35