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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2015, 16:31   #1
Den_Dodge
Пользователь
 
Регистрация: 11.09.2015
Сообщений: 21
Восклицание Помогите пожалуйста! написать программу, которая при вводе пользователем даты рождения выдает ближайший "счастливый" год

Необходимо написать программу, которая при вводе пользователем даты рождения выдает ближайший "счастливый" год. "Счастливым" считается тот год, остаток от деления суммы цифр которого на 10 - совпадает с остатком для дня рождения или месяца.

Спасибо!

Последний раз редактировалось Den_Dodge; 11.09.2015 в 16:43.
Den_Dodge вне форума Ответить с цитированием
Старый 11.09.2015, 17:45   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Попытки и наработки имеются?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.09.2015, 17:48   #3
Den_Dodge
Пользователь
 
Регистрация: 11.09.2015
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Попытки и наработки имеются?
Небольшая часть

Код:
var
s_g, sum:integer; data:longint;
begin
write('Vvedite den i mesyac rozhdeniya(naprimer: 0203): ');
readln(data);
while data>0 do 
begin
sum:=sum+(data mod 10);
data:=(data div 10);
end;
Еще конечно хотелось бы так называемую защиту от дураков, чтобы нельзя было ввести более 4 цифр

Последний раз редактировалось Stilet; 11.09.2015 в 18:53.
Den_Dodge вне форума Ответить с цитированием
Старый 11.09.2015, 17:58   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А 3 можно? Если можно, то почему 5 нельзя? Может кому интересно найти счастливый год после 1 марта 11021 года?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.09.2015, 18:13   #5
Den_Dodge
Пользователь
 
Регистрация: 11.09.2015
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А 3 можно? Если можно, то почему 5 нельзя? Может кому интересно найти счастливый год после 1 марта 11021 года?
в программе необходимо ввести свой день и месяц рождения по форме дд.мм
И программа должна найти ближайший счастливый год.

Это лаб.работа, вот я и попросил помочь. сам не могу понять
Den_Dodge вне форума Ответить с цитированием
Старый 11.09.2015, 18:32   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

хотите ввод данных с защитой?!
извольте:
Код:
const
   DaysInMonth: array[1..12] of Byte =
     (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

var s : string;
  dd, mm, err, posdot : integer;
  isGood : boolean;
begin
  WriteLn;
  repeat
    Write('введите свой день и месяц рождения по форме дд.мм: ');
    ReadLn(s);
    isGood := false;
    posdot := pos('.', s);
    if posdot=0 then WriteLn('Ошибка - неверный формат (нет точки)')
    else begin
      val(copy(s,1, posdot-1), dd, err);
      if err<>0 then begin WriteLn('Ошибка при вводе дня (допускаются только цифры)!'); continue end;
      val(copy(s,posdot+1,length(s)), mm, err);
      if err<>0 then begin WriteLn('Ошибка при вводе месяца (допускаются только цифры)!'); continue end;
      if (mm<1) or (mm>12) then begin WriteLn('Ошибка при вводе месяца (должно быть число от 1 до 12)!'); continue end;
      if (dd<1) or (dd>DaysInMonth[mm]) then begin WriteLn('Ошибка при вводе дня - слишком маленькое или слишком большое число!'); continue end;
      {все проверки прошли успешно}
      isGood := true;
    end;

  until isGood;

  WriteLn('Дата рождения: ',dd);
  WriteLn('Месяц рождения: ',mm);
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.09.2015, 19:06   #7
Den_Dodge
Пользователь
 
Регистрация: 11.09.2015
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
хотите ввод данных с защитой?!
извольте:
Код:
const
   DaysInMonth: array[1..12] of Byte =
     (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

var s : string;
  dd, mm, err, posdot : integer;
  isGood : boolean;
begin
  WriteLn;
  repeat
    Write('введите свой день и месяц рождения по форме дд.мм: ');
    ReadLn(s);
    isGood := false;
    posdot := pos('.', s);
    if posdot=0 then WriteLn('Ошибка - неверный формат (нет точки)')
    else begin
      val(copy(s,1, posdot-1), dd, err);
      if err<>0 then begin WriteLn('Ошибка при вводе дня (допускаются только цифры)!'); continue end;
      val(copy(s,posdot+1,length(s)), mm, err);
      if err<>0 then begin WriteLn('Ошибка при вводе месяца (допускаются только цифры)!'); continue end;
      if (mm<1) or (mm>12) then begin WriteLn('Ошибка при вводе месяца (должно быть число от 1 до 12)!'); continue end;
      if (dd<1) or (dd>DaysInMonth[mm]) then begin WriteLn('Ошибка при вводе дня - слишком маленькое или слишком большое число!'); continue end;
      {все проверки прошли успешно}
      isGood := true;
    end;

  until isGood;

  WriteLn('Дата рождения: ',dd);
  WriteLn('Месяц рождения: ',mm);
end.
спасибо. дальше попытаюсь сам дойти, но если что обращусь. можно? =)
Den_Dodge вне форума Ответить с цитированием
Старый 12.09.2015, 07:22   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Den_Dodge Посмотреть сообщение
спасибо. дальше попытаюсь сам дойти, но если что обращусь. можно? =)
Пожалуйста. Конечно, обращайтесь.

ещё подброщу пару строчек кода, которые Вам пригодятся.
Вам придётся найти сумму цифр года.
это можно сделать так:
Код:
    MySum := 0;
    Num := Year;
    while Num>0 do begin
        MySum := MySum + (Num mod 10); {прибавили последную цифру к сумме}
        Num := Num div 10; {число целочисленно разделели на 10 - тем самым отбросив последнюю цифру числа}
    end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.09.2015, 17:36   #9
Den_Dodge
Пользователь
 
Регистрация: 11.09.2015
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Пожалуйста. Конечно, обращайтесь.

ещё подброщу пару строчек кода, которые Вам пригодятся.
Вам придётся найти сумму цифр года.
это можно сделать так:
Код:
    MySum := 0;
    Num := Year;
    while Num>0 do begin
        MySum := MySum + (Num mod 10); {прибавили последную цифру к сумме}
        Num := Num div 10; {число целочисленно разделели на 10 - тем самым отбросив последнюю цифру числа}
    end;
Подскажите пожалуйста еще. Какой код писать, чтобы при вводе даты своего рождения(по коду описанному ранее) выводился счастливый год. Как, так скажем, приравнять сумму цифр даты рождения и сумму цифр счастливого года, но чтобы был >2015.
Den_Dodge вне форума Ответить с цитированием
Старый 12.09.2015, 19:21   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

алгоритм такой:
чтобы упростить код, считаем отстатки от деления на 10 от дня рождения, от месяца рождения:
ostdd := dd mod 10;
ostmm := mm mod 10;
читаете текущий год из системы (или просите ввести текущий год пользователя),
дальше банальный цикл
год = год + 1
находим сумму цифр года
повторяем пока условие не выполнится (sumyear mod 10) = ostdd или (sumyear mod 10) = ostmm

выводим найденный счастливый год.
всё
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу, которая применяет подстановки Маркова, записанные в файле к слову, введённому пользователем. FunnyManny Помощь студентам 1 20.06.2012 18:36
Ошибка при вводе даты tools SQL, базы данных 6 05.11.2009 21:12
разделители при вводе даты:вопрос Evgenii БД в Delphi 3 29.06.2009 05:22
Написать программу, которая бы определяла при вводе данных в список, симметричен ли он WhyBeNormal Паскаль, Turbo Pascal, PascalABC.NET 3 03.12.2008 00:04