Написать программуИспользуя тип запись и массивType data=recordDay:integer;Mounth:

Написать программку
Используя тип запись и массив
Type data=record
Day:integer;
Mounth: integer;
Year: integer;
End;
Var
A: array[1..100] of data;
В семье Ивановых оба ребенка учатся в школе. Мальчишка в 5, а девченка в 1 классе. Родительские собрания 5 класса проводятся по заключительным пятницам, а 1 класса по заключительным средам месяца в 18:00. Отец и мать этого семейства ведут свое дело. Отец работает до 20:00 по нечетным денькам месяца, а мама до 20:00 по четным денькам месяца. В иные дни каждый из родителей заканчивает работу в 17:00. Выведите в файл father.txt даты родительских собраний для отца, а в файл mother.txt для мамы на 2015-2016 учебный год с указанием класс который они обязаны посетить.
Pascal abc

Задать свой вопрос
Элина
Задача, действительно, немного странноватая, но определить то, что нужно сделать, полностью можно. Есть неясности с тем, что считать начальными данными. К примеру, задавать ли все нужные среды и пятницы очевидным образом либо вычислять. Структура дата в паскале есть, но в учебных целях её вполне можно и переопределить в своей программке.
Danka
Дело в том, что тут все надумано. Если писать в файл, то массив не нужен, а нужна запись, у которой структура совпадает с той, которая обязана быть в массиве. Но и это необходимо только если файл не текстовый. Представление даты в виде 3-х полей в традиционном Паскале вообщем ничего не дает, кроме необходимости указывать лишние квалификаторы, потому что Паскаль не умеет работать с целыми записями, как с переменными.
Ирина Трощановская
Да и массив не нужен, если размен с файлом.
Vasilisa Zvirnik
Со всем соглашусь. Но отмечу, что Ваша точка зрения - это точка зрения специалиста. Для учебных задач, в частности для исследования записей и файлов, эта задачка полностью подойдет. Тут, конечно, более занимательна алгоритмическая часть - вычисление заключительных сред и пятниц. Если вспомнить задачку про падающий самолет, то эта мне еще больше нравится. )
Perin Maks
Вот эта алгоритмическая часть:function DOW(Dat:Date):integer; день недели по дате. 0-Вс. 1-Пн, .... 7-Сб var a,y,m:integer;begin With Dat do begin a:=(14 - month) div 12; y:=Year-a; m:=month+12*a-2; DOW:=(7000+(day+y+y div 4-y div 100+y div 400+(31*m) div 12)) mod 7 endend;
Эмилия
А дальше берем массив из 12 элементов, содержащий количество дней в каждом месяце году (с поправкой 28/29) на високосный год) и вычисляем номер заключительного денька в месяце. Далее простой сдвиг по кольцу из чисел 0...6 на 3й либо 5й денек, который даст номер дня в месяце для заключительной среды и пятницы.
Ева Безязыкова
Но нигде здесь практически не необходимы массивы и структуры указанного вида.
Евгений Сохинов
Я не могу придумать, зачем нужен массив А из дат, тем более, из 100 дат. Девять учебных месяцев и даже если там беречь заключительную неделю каждого месяца, это все одинаково 7х9=63. Но и этого безусловно не необходимо. Максимум - хранить дату заключительней среды и последней пятницы - это 18 частей.
Злата
!!! Один только вопрос - почему 7000?
Яна Шибодаева
Как-то даже неудобно после Ваших программ свои тут писать.
2 ответа
В прилагаемом файле приведен пример программки для решения задачи и содержимое приобретенных файлов. В программе дата последней среды и заключительной пятницы сентября 2015 г. задается явно, другие среды и пятницы рассчитываются. При желании можно начать вычисления с 1 января, к примеру, либо с 1 сентября. Получится немножко длиннее.

// PascalABC.NET 3.0, сборка 1088
const
  nDay:array[1..12] of integer=(31,28,31,30,31,30,31,31,30,31,30,31);
type
  Date=record
    Day,Month,Year:integer
  end;
 
function DOW(Dat:Date):integer;
// денек недели по дате. 0-Вс. 1-Пн, .... 7-Сб
var
  a,y,m:integer;
begin
  With Dat do begin
    a:=(14 - month) div 12;
    y:=Year-a;
    m:=month+12*a-2;
    DOW:=(7000+(day+y+y div 4-y div 100+y div 400+(31*m) div 12)) mod 7
    end
end;

procedure DMY2Date(d,m,y:integer; var data:Date);
// Конвертирует к дате заданные день, месяц и год
begin
  data.Day:=d; data.Month:=m; data.Year:=y
end;

procedure LastDays(month,year:integer; var Wd,Fr:Date);
// даты последней среды (Wd) и пятницы (Fr) для месяца в году
var
  LastDay:Date;
  n:integer;
begin
  n:=nDay[month];
  if (month=2) and (year mod 4 = 0) then Inc(n);
  DMY2Date(n,month,year,LastDay);
  n:=DOW(LastDay); // номер заключительного денька недели
  Wd.Month:=month; Wd.Year:=year;
  if nlt;3 then Wd.Day:=LastDay.Day-(n+4)
  else
    if n=3 then Wd.Day:=LastDay.Day
    else Wd.Day:=LastDay.Day+3-n;
  Fr.Month:=month; Fr.Year:=year;
  if nlt;5 then Fr.Day:=LastDay.Day-(n+2)
  else
    if n=3 then Fr.Day:=LastDay.Day
    else Fr.Day:=LastDay.Day-1
end;

var
  Wd,Fr:Date;
  ff,mf:Text;
  m:integer;
begin
  Assign(ff,'father.txt'); Rewrite(ff);
  Assign(mf,'mother.txt'); Rewrite(mf);
  // Сентябрь-декабрь 2015 года
  for m:=9 to 12 do begin
    LastDays(m,2015,Wd,Fr);
    if Odd(Wd.Day) then Writeln(mf,Wd.Day,'.',m,'.2015 - 1 класс')
    else Writeln(ff,Wd.Day,'.',m,'.2015 - 1 класс');
    if Odd(Fr.Day) then Writeln(mf,Fr.Day,'.',m,'.2015 - 5 класс')
    else Writeln(ff,Fr.Day,'.',m,'.2015 - 5 класс')
  end;
  // Январь - май 2016 года
  for m:=1 to 5 do begin
    LastDays(m,2016,Wd,Fr);
    if Odd(Wd.Day) then Writeln(mf,Wd.Day,'.',m,'.2016 - 1 класс')
    else Writeln(ff,Wd.Day,'.',m,'.2016 - 1 класс');
    if Odd(Fr.Day) then Writeln(mf,Fr.Day,'.',m,'.2016 - 5 класс')
    else Writeln(ff,Fr.Day,'.',m,'.2016 - 5 класс')
  end;
  Close(ff); Close(mf)
end.

Содержимое выходных файлов:
father.txt
30.9.2015 - 1 класс
28.10.2015 - 1 класс
30.10.2015 - 5 класс
30.12.2015 - 1 класс
24.2.2016 - 1 класс
26.2.2016 - 5 класс
30.3.2016 - 1 класс

mother.txt
25.9.2015 - 5 класс
25.11.2015 - 1 класс
27.11.2015 - 5 класс
25.12.2015 - 5 класс
27.1.2016 - 1 класс
29.1.2016 - 5 класс
25.3.2016 - 5 класс
27.4.2016 - 1 класс
29.4.2016 - 5 класс
25.5.2016 - 1 класс
27.5.2016 - 5 класс
, оставишь ответ?
Имя:*
E-Mail:


Последние вопросы
Имеются три конденсатора емкостью С1=1мкФ, С2=2мкФ и С3=3мкФ. Какую наименьшую емкость

Физика.

Из точки м выходят 3 луча MP MN и MK причём

Геометрия.

выпиши в свою тетрадь те правила этикета которые тебе не были

Разные вопросы.

Анна хорошо учится у неё много подруг свободное от учёбы время

Обществознание.

10) Килограмм конфет дороже килограмма печенья на 52 р. За 8

Математика.

Во сколько раз число атомов кислорода в земной коре больше числа

Химия.

Составить монолог от имени дневника двоечника 7-10 предложений

Русский язык.

Рассматривая литературный язык как сложное взаимодействие книжного языка и разговорного,В.И.Чернышёв горячо

Разные вопросы.

Арабы входят в __________________ групп народов. Местом расселения арабов с незапамятных

Разные вопросы.

Грузовой автомобиль марки краз за одну поездку может доставить 7.500 кирпичей

Математика.

Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт