Четверг, 19.06.2025, 00:38 Приветствую Вас Гость

Решение задач любой сложности

Главная | Регистрация | Вход | RSS

Все статьи на сайте

Главная » Статьи » Решение заданий Delphi

Задача на високосный год
Теперь давайте рассмотрим решение следующей задачи. Допустим, нам даны два числа D и M, целого типа. Первое число подразумевает день, второе - месяц. Их вводит пользователь, имея в виду какую-либо дату.
Требуется определить и вывести значения D и M для даты, которая бы предшествовала введенной пользователю.

Собственно задача целиком и полностью посвящена, на мой взгляд, корректному использованию условий. И скорее всего основная загвоздка будет заключаться в том, что и с чем сравнивать и как написать оптимальный код.
Но давайте начнем с алгоритма. Мы имеем два числа, предполагаем, что пользователь, вводящий дату, вводит ее правильно, без 32 декабря или 31 апреля, что значительно облегчает задачу. Переменная M может принимать двенадцать значений, соответствующих порядковым номерам месяцев. Переменная D также может принимать двенадцать значений, но соответствовать они будут количеству дней в каждом месяце.
Чтобы решить задачу нам потребуется ориентироваться на значения, которые может принимать D, чтобы верно отобразить дату начала или конца месяца. ПОэтому целесообразно заключить известные нам значения D в массив, не забыв при этом что год у нас високосный.
Иными словами arD:Array(31,29,31,30,31,30,31,31,30,31,30,31). На мой взгляд, удобно и значения месяцев также заключить в массив: arM:Array(1,2,3,4,5,6,7,8,9,10,11,12).
При введении пользователем даты нам потребуется лишь проверить ее, не является ли она датой начала месяца и если является то, свериться с количеством дней в предыдущем месяце из массива. Также немаловажно учесть, что предыдущим числом по отношению к 1 января является 31 декабря.
Таким образом, получим следующие исходники Delphi:

for i := 0 to Length(arM)-1 do
   begin
    if M=arM[i] then
       if (D=arD[i]) or (D>1) then // число из середины месяца
         begin
           newD:=D-1;
           newM:=M
         end
       else begin // первое число какого-либо месяца
               if i>0 then // Если первое с февраля по декабрь
                  begin
                    newD:=arD[i-1];
                    newM:=M-1
                  end
               else begin //Если первое января
                         newD:=arD[length(arD)-1];
                         newM:=arM[length(arD)-1]
                      end;
              end
   end;


В целом, задача несложная, но требует внимательности при расстановке условий, ведь данных, завуалированных в условии предостаточно.
Если у вас вызывает сложность такая же программа, только немного другая, готова предложить свои услуги по средствам решения на заказ. Об условиях программы на заказ можно узнать в контактах.
Категория: Решение заданий Delphi | Добавил: Мятка (18.10.2010) | Автор: Alexandra W
Просмотров: 3608 | Комментарии: 1 | Теги: программы на заказ, примеры Delphi, написать программу, Delphi исходники, алгоритм, решение на заказ, решение заданий, программирование на delphi | Рейтинг: 0.0/0
Всего комментариев: 1
1 Максим  
0
люди подскажите как решеить в турбо делфи задачу такую:

В типизированном файле хранится информация о средней
температуре за неделю.
а) Вывести информацию о средней температуре за неделю.
б) Вывести дни, в которые температура поднималась выше средней.
в) Вывести самые тёплые и самые холодные дни.

Имя *:
Email *:
Код *: