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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2010, 04:21   #1
eva.t
 
Регистрация: 11.02.2010
Сообщений: 9
По умолчанию

Приветики !
Срочно нужно закрыть сессию,но никак не могу сделать несколько прог...
помогите плиз, если не трудно =(

вот одна из них

Написать программу, которая вчитывает дату (день, месяц, год) и подсчитывает, сколько дней есть к сегоднешнему дню от этой даты. Дата может быть в одинаковой степени в будущем, как и в прошлом. Помнить о високосных годах.

я вот что-то начала,но никак не могу продолжить .....=(


Код:
  
#include <stdio.h>
#include <stdlib.h>
 
 
static char daytab [2][13] = {
    { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
    { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
};
 
{
      int i, leap;
 
    leap = year%4 == 0 && year%100 != 0 || year%400 == 0;
    for (i = 1; i < month; i ++ )
        day += daytab[leap][i];
    return day ;
}
 
{ int main ();
  int year, month , day;
 
 printf ( "poday rok, miesiac, dzien " );
 scanf  ( "%d", &year, &month, &day );
 printf (" poday dziesiejszy data ");
 scanf  ( "%d", &y , &m, &d );
 
 if ( year > y )
 { int temp;
   temp = year;
   year = y;
   y = temp;
 
   temp = month;
   month = m;
   m = temp;
 
   temp = day;
   day = d;
   d = day;
 }

Последний раз редактировалось Stilet; 11.02.2010 в 08:07.
eva.t вне форума Ответить с цитированием
Старый 11.02.2010, 08:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Предлагаю свой алгоритм.
Особо его не проверял, но думаю не залажает:
Код:
//---------------------------------------------------------------------------

#pragma hdrstop

#include <tchar.h>
#include <math.h>
#include <iostream.h>
//---------------------------------------------------------------------------

#pragma argsused
struct Tdat{int Day,Mon,Year;} dat1,dat2;
static int daytab [2][13] = {
	{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
	{ 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
};

int _tmain(int argc, _TCHAR* argv[])
{
  dat1.Day=4;dat1.Mon=5;dat1.Year=2011;
  dat2.Day=15;dat2.Mon=8;dat2.Year=2015;

  int dd=abs(dat1.Year-dat2.Year);
  int mg=(max(dat1.Year,dat2.Year)-2008)/4;
  dd=dd*365+mg;
   for(int i=0;i<dat2.Mon;i++,dd+=daytab[(dat2.Mon%2008!=0)?0:1][i]);
   for(int i=0;i<dat1.Mon;i++,dd-=daytab[(dat1.Mon%2008!=0)?0:1][i]);
  dd=dd+dat2.Day-dat1.Day;
  cout<<dd;

  cin.get();

	return 0;
}
//---------------------------------------------------------------------------
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.02.2010, 14:13   #3
eva.t
 
Регистрация: 11.02.2010
Сообщений: 9
По умолчанию

Спасибо тебе большое =)

но я пока действительно новичок в программировании, так как учусь в чужой стране на чужом языке и многое просто учила сама, так как по идеи они типа за семестр должны били С виучить, а я с ним до этого никогда не сталкивалась, поэтому пока еще многово не понимаю ..

но мне кажется что этот алгоритм не в С, а в С++,или я ошиблась ? =(

но в целом алогритм понятный,еще раз большое тебе спасибо =)
мне кажеться #pragma тоже в СИ есть..
.
только я не могу понять почему здесь 2008 ?? подскажи пожалуйста
Код:
  int mg=(max(dat1.Year,dat2.Year)-2008)/4;
dd+=daytab[(dat2.Mon%2008!=0)?0:1][i]
eva.t вне форума Ответить с цитированием
Старый 11.02.2010, 14:36   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но мне кажется что этот алгоритм не в С, а в С++
Да, мне просто удобнее выводить на экран через cout.
Цитата:
мне кажеться #pragma тоже в СИ есть..
Не обращай на это внимание, это мне Борланд С++ выкинул
Цитата:
почему здесь 2008
Это начальный високосный год. от которого я решил отталкиваться. С таким же успехом можешь поставить стандартный 1900 год
Просто я решил взять високосный год поближе к реальности
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.02.2010, 14:51   #5
eva.t
 
Регистрация: 11.02.2010
Сообщений: 9
По умолчанию

То получаеться мне нужно исользовать только две стандартные функции в С ?
#include <stdio.h>
#include <stdlib.h>

или еще какую-то дополнительно?
eva.t вне форума Ответить с цитированием
Старый 11.02.2010, 15:08   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
eva.t
В моем примере для
Код:
  cout<<dd;
  cin.get();
Подключается модуль #include <iostream.h>

Если переписывать под тебя то получится:
Код:
// 1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

struct Tdat{int Day,Mon,Year;} dat1,dat2;
static int daytab [2][13] = {
	{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
	{ 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
};

int _tmain(int argc, _TCHAR* argv[])
{
  dat1.Day=4;dat1.Mon=5;dat1.Year=2011;
  dat2.Day=15;dat2.Mon=8;dat2.Year=2015;

  int dd=abs(dat1.Year-dat2.Year);
  int mg=(Max(dat1.Year,dat2.Year)-2008)/4;
  dd=dd*365+mg;
   for(int i=0;i<dat2.Mon;i++,dd+=daytab[(dat2.Mon%2008!=0)?0:1][i]);
   for(int i=0;i<dat1.Mon;i++,dd-=daytab[(dat1.Mon%2008!=0)?0:1][i]);
  dd=dd+dat2.Day-dat1.Day;
  
  printf("Кол-во дней = %d",dd);
  getchar();
	return 0;
}
Вот это я на Visual Studio 2010 (Классический Си) запустил.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.02.2010, 15:59   #7
eva.t
 
Регистрация: 11.02.2010
Сообщений: 9
По умолчанию

Спасибо =))

Счас попробую в Code::Blocks запустить =))
eva.t вне форума Ответить с цитированием
Старый 11.02.2010, 16:27   #8
eva.t
 
Регистрация: 11.02.2010
Сообщений: 9
По умолчанию

хм... я попробовала, но у меня выдало ошибки..некоторые я исправила, а еще сделал так, чтобы дыту можна было вводить с клавиатуры..

а вот в 5 ошибках как-то не могу понять что от меня хотят....
Код:
#include "stdafx.h"
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

struct Tdat{int Day,Mon,Year;} dat1,dat2;
static int daytab [2][13] = {
	{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
	{ 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
};

int max(int q,int w){return (q>w)?q:w;}

int _tmain(int argc,_TCHAR* argv[])
int i,
 {
  //dat1.Day=4;dat1.Mon=5;dat1.Year=2011;
  //dat2.Day=15;dat2.Mon=8;dat2.Year=2015;
  printf ( "podaj day1");
  scanf ("%d", dat1.Day);
  printf (" podaj mon1");
  scanf ("%d", dat1.Mon);
  printf ("podaj year1");
  scanf ("%d", dat1.Year);

  printf ( "podaj day2");
  scanf ("%d", dat2.Day);
  printf (" podaj mon2");
  scanf ("%d", dat2.Mon);
  printf ("podaj year2");
  scanf ("%d", dat2.Year);

int dd, mg ;
  dd=abs(dat1.Year-dat2.Year);
  mg=(max(dat1.Year,dat2.Year)-1900)/4;
  dd=dd*365+mg;
   for( i=0;i<dat2.Mon;i++,dd+=daytab[(dat2.Mon%1900!=0)?0:1][i]);
   for( i=0;i<dat1.Mon;i++,dd-=daytab[(dat1.Mon%1900!=0)?0:1][i]);
  dd=dd+dat2.Day-dat1.Day;

  printf("Кол-во дней = %d",dd);
  getchar();
	return 0;
}
а вот такие ошибки
Код:
|1|stdafx.h: No such file or directory|
|14|error: syntax error before "_TCHAR"|
||In function `_tmain':|
|16|error: syntax error before '{' token|
|34|error: syntax error before "dd"|
|7|warning: 'daytab' defined but not used|
||=== Build finished: 4 errors, 1 warnings ===|
что мне делать? =[
eva.t вне форума Ответить с цитированием
Старый 11.02.2010, 16:42   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
чтобы дыту можна было вводить с клавиатуры..
Дык тыж это сделала:
Цитата:
printf ( "podaj day1");
scanf ("%d", dat1.Day);
....
Цитата:
|1|stdafx.h: No such file or directory|
А скажи ка мне какой у тебя компилятор Си? Я то на 2010-ом работаю.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.02.2010, 17:14   #10
eva.t
 
Регистрация: 11.02.2010
Сообщений: 9
По умолчанию

Ой, извини, это уже ошибки в русском - это я хотела сказать что это
сделала

У меня Code::Blocks ...
я пока только начинаю учить, еще много не понимаю =(
eva.t вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ansi в UTF-8 и наоборот UTF-8 в Ansi Alar Работа с сетью в Delphi 3 09.12.2010 17:02
Юникод и ANSI Ivin Общие вопросы Delphi 1 17.02.2009 15:45
ASCII в ANSI JRcoker Общие вопросы Delphi 5 03.08.2008 15:49
ANSI HunterMan Win Api 2 18.04.2008 23:17
юникод в ANSI techner Общие вопросы Delphi 6 12.12.2007 20:40