Обращаюсь, с просьбой помочь в решении задачи!

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
Splin74
Сообщения: 2
Зарегистрирован: 22 окт 2004, 13:16
Контактная информация:

22 окт 2004, 13:34

Вот текст задачи:
В некотором университете принято, что старшая цифра номера студенческой группы означает номер факультета, средняя - последнюю цифра года поступления, младшая - порядковый номер группы. Продолжительность обучения не более 6 лет. Дан номер группы студента этого универа. Напечатать, в каком году он поступил и на каком факультете учится. Например, группа 432, факультет математ, году поступления 2003!
Справка:
1 - исторический, 2 - экономический, 3 - юридический, 4 - математический, 5 - физический, 6 - химический, 7 - биологический, 8 - филологический, 9 - географический

Пожалуйста, кто может напишите текст программы в этом топике!
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

22 окт 2004, 16:15

int group;
int year=2000;
int grid=0;
char *faks[]={"istor","ekonom","yurid","matem","fiz","chim","biolog","filolog","geograf"};

scanf("%d",&group);
year+=(group%100)/10;
grid=group/100;
printf("god postuplenija %d fakultet %s",year,faks[grid-1]);

Все .
только "защиты от дурака" нет.
В SAD - все в SAD.
versus
Сообщения: 45
Зарегистрирован: 12 май 2004, 01:37

13 ноя 2004, 20:24

интересно как быть со студентами поступившими до 2000 года?
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

15 ноя 2004, 16:49

Точно также
У нас в универе похожая система и все нормально. Фишка в том что цикл обучения составляет 5-6 лет так что все понятно ;)
Но енто уже флейм :(
В SAD - все в SAD.
versus
Сообщения: 45
Зарегистрирован: 12 май 2004, 01:37

16 ноя 2004, 00:50

Splin74,

group.c

Код: Выделить всё

#include <stdio.h>

const int current_year = 2004;

void print_faculty(int index)
{
    // напечатать название факультет по его индексу
    static const char* faculties[] =
    {
        "",
        "historical",
        "economical",
        "juridical",
        "mathematical",
        "physical",
        "chemical",
        "biological",
        "philological",
        "geographical"
    };

    // убедится в корректности индекса
    if (index > 0 && index < sizeof(faculties)/sizeof(const char*))
        printf("Faculty:\t%s.\n", faculties[index]);
    else
        printf("Failed to determine faculty!\n");
}

void print_entry_year(int last_digit_of_entry_year)
{
    // время обучения
    сonst int duration = 6;

    // decade хранит значение текущего года, с отброшенными единицами
    // так например 2024 превращается в 2020
    const int decade = current_year - current_year % 10 ;

    // определяем к какому десятилетию относится год постулпения студента
    // год поступления в текущем десятилитии? 
    if (decade + last_digit_of_entry_year <= current_year)
    {
        printf("Entry year:\t%d.\n", decade + last_digit_of_entry_year);
    }
    // нет, год поступления больше текущего, значит студент поступил 
    // в предыдущем десятилетии
    else if (decade + last_digit_of_entry_year - 10 + duration >= current_year)
    {
        printf("Entry year:\t%d.\n", decade + last_digit_of_entry_year - 10);
    }
    else
    {
        printf("Failed to determine entry year or incorrect group entered!\n");
    }
}

void print_group_details(const char* group)
{
    print_faculty(group[0] - '0');
    print_entry_year(group[1] - '0');
}

int main()
{
  char group[4]; // 3 символа идентификатора + NULL

  // получаем следующий идентификатор группы
  while(scanf("%s", group) == 1)
  {
      printf("%s group is:\n", group);

      print_group_details(group);
      printf("\n");

      // eat line
      while (getchar() != '\n')
        continue;
  }

  return 0;
}

group.in
-----------------------------------------------------------------------
versus@dot:~/opt>less group.in
001
112
228
334
446
553
660
772
885
993

group.out
-----------------------------------------------------------------------
[email]versus@dot:~/opt>./a.out[/email] < group.in
001 group is:
Failed to determine faculty!
Entry year: 2000.

112 group is:
Faculty: historical.
Entry year: 2001.

228 group is:
Faculty: economical.
Entry year: 2002.

334 group is:
Faculty: juridical.
Entry year: 2003.

446 group is:
Faculty: mathematical.
Entry year: 2004.

553 group is:
Faculty: physical.
Failed to determine entry year or incorrect group entered!

660 group is:
Faculty: chemical.
Failed to determine entry year or incorrect group entered!

772 group is:
Faculty: biological.
Failed to determine entry year or incorrect group entered!

885 group is:
Faculty: philological.
Entry year: 1998.

993 group is:
Faculty: geographical.
Entry year: 1999.
-----------------------------------------------------------------------

ну да, в общем тривиально.
Ответить