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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2015, 13:55   #1
Аля321
Пользователь
 
Регистрация: 12.11.2014
Сообщений: 15
По умолчанию Паскаль ABC.net.

Помогите пожалуйста переделать программу!!!
Задание:
{type число = 1..31;
месяц = (янв,фев,мар,апр,май,июн,июл,авг,се н,окт,ноя,дек);
деньнедели = (вс,пн,вт,ср,чт,пт,сб);
var d: число; m: месяц; wd1, wd: деньнедели; k: 0..12;
Считая, что год невисокосный и его 1 января приходится на день недели wd1,
определить wd - день недели, на который приходится день с датой d, m.}

Сама программа:
Код:
program zadanie2;
type
    day = 1..31; //тип данных 'день'
    days = 1..365;//тип данных -номер дня недели
    month = 1..12;//тип данных- номер месяца
    const all_month : array[1..12] of string =('Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь');//константа - массив названий месяцев
    const	all_daysofweek : array[1..7] of string = ('понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье');//константа - массив названий дней недели
var
  i,j : integer; //счетчики для циклов расчета дня месяца
  kd: days; //счетчик дней от начала года.
  d : day;//дата внутри месяца (день) определяемого дня недели
  m : month;//месяц определяемого дня недели
  wd1s:string; //строка для ввода для недели, на который приходится 1ое января
  days_in_month:array[1..12] of integer := (31,28,31,30,31,30,31,31,30,31,30,31); //массив значений - сколько дней в каждом месяце невисокосного года
begin
  writeln('введите день недели на который пришлось первое января: '); //вывод на экран 'введите...'
  readln(wd1s);//считывание данных из консоли в переменную wd1s 
  wd1s := UpperCase(wd1s);                        //перевод строки в верхний регистр.
  if wd1s in  ['MON', 'ПН', 'ПОНЕДЕЛЬНИК']      then kd := 0 //если значение wds = 'mon', 'пн' или 'понедельник', то kd = 1
  else if wd1s in  ['TUE', 'ВТ', 'ВТОРНИК']      then kd := 1 //ИНАЧЕ если значение wds = ''tue', 'вт' или 'вторник', то kd = 2                                       
  else if wd1s in  ['WED', 'СР', 'СРЕДА']       then kd := 2 //ИНАЧЕ если...
  else if wd1s in  ['THU', 'ЧТ', 'ЧЕТВЕРГ']     then kd := 3 //ИНАЧЕ если..
  else if wd1s in  ['FRI', 'ПТ', 'ПЯТНИЦА']     then kd := 4 //ИНАЧЕ если..
  else if wd1s in  ['SAT', 'СБ', 'СУББОТА']     then kd := 5 //ИНАЧЕ если..
  else if wd1s in  ['SUN', 'ВС', 'ВОСКРЕСЕНЬЕ'] then kd := 6; //ИНАЧЕ если..
  
  writeln('Введите день и месяц для определения дня недели:'); //вывод на экран сообщения 'введите'
  readln(d, m);//считывание из консоли значений d и m - дня и месяца определяемого дня недели
  
  for i:=1 to m do//цикл - переменная i принимает значения от 1 до номера введенного месяца
    begin //так как в цикле больше 1 оператора, то применяется конструкция begin .. end 
      if i<m then //если i не номер введенного месяца, то..
        for j:=1 to days_in_month[i] do //цикл от 1 до номера числа дней в iом месяце (числа дней в месяце содержатся в массиве days_in_month
           kd:=kd+1 // прибавление к счетчику дней от начала года единицы
      else //иначе - т.е. условие выполнения - если i равен номеру введенного месяца
        for j:=1 to d do //тут цикл идет не до конца месяца, а до 
          kd:= kd+1; //прибавление к счетчику дней от начала года единицы
    end;// конец выражения под циклом   for i:=1 to m do (конструкции begin - end)
  
    case (kd mod 7) of //оператор выбора - в зависимости от остатка деления количества прошедших дней от начала года (kd) на 7. пример- 1 mod 7 = 8 mod 7 = 1 = понедельник
      0: writeln(d,' числа месяца ',all_month[m],' - ',all_daysofweek[7]); //если значение 0 выводится надпись из массива all_daysofweek с индексом 7 - 'воскресенье '
      else  writeln(d,' числа месяца ',all_month[m],' - ',all_daysofweek[kd mod 7]); //иначе выводится надпись из массива all_daysofweek с индексом kd mod 7 (индекс от 1 до 6)
    end;
end.
Программа работает, только нужно переделать
Код:
 if wd1s in  ['MON', 'ПН', 'ПОНЕДЕЛЬНИК']      then kd := 0 //если значение wds = 'mon', 'пн' или 'понедельник', то kd = 1
  else if wd1s in  ['TUE', 'ВТ', 'ВТОРНИК']      then kd := 1 //ИНАЧЕ если значение wds = ''tue', 'вт' или 'вторник', то kd = 2                                       
  else if wd1s in  ['WED', 'СР', 'СРЕДА']       then kd := 2 //ИНАЧЕ если...
  else if wd1s in  ['THU', 'ЧТ', 'ЧЕТВЕРГ']     then kd := 3 //ИНАЧЕ если..
  else if wd1s in  ['FRI', 'ПТ', 'ПЯТНИЦА']     then kd := 4 //ИНАЧЕ если..
  else if wd1s in  ['SAT', 'СБ', 'СУББОТА']     then kd := 5 //ИНАЧЕ если..
  else if wd1s in  ['SUN', 'ВС', 'ВОСКРЕСЕНЬЕ'] then kd := 6; //ИНАЧЕ если..
с помощью case, чтобы не писать каждую в отдельности

Последний раз редактировалось Stilet; 13.05.2015 в 14:10.
Аля321 вне форума Ответить с цитированием
Старый 13.05.2015, 16:43   #2
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Насчет:
Код:
Case wd1s of
***
end;
- работать не будет, т.к.:
Код:
wd1s:string; //строка для ввода для недели, на который приходится 1ое января
Надо после слова Case писать переменную типа Char, Integer или другой порядковый тип.
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
паскаль ABC.NET nata1 Фриланс 1 05.12.2013 21:58
паскаль ABC.NET nata1 Помощь студентам 1 04.12.2013 19:45
Pascal ABC.NET BuTaJI Помощь студентам 1 26.04.2011 20:10
Pascal ABC net DiLLe Паскаль, Turbo Pascal, PascalABC.NET 1 08.06.2010 23:20