Задали решить задачу. Я, вроде, понял, но оформить не могу. Прошу помощи. Вот задание :
Даны массивы :
Т1...Т10 - телефоны задолжников
F1...F10 - фамилии задолжников
D1..D10 - даты разговоров задолжников
DT - текущая дата
Напечатать список должников, у которых истек срок платежа ( срок платежа - 15 дней ).
По идеи, просто ввести 3 массива, в конце использовать формулу D-DT>15, наверное, я не уверен. И еще, пожалуйста, как сделать ввод данных в массивы табоицей? Спасибо заранее
Другие языки программирования и технологии
Не могу разобраться с Паскалем) Помогите
Тут основная заковырка: какой Паскаль используется?
Т. к. в ТурбоПаскале нет работы с датой.
Её нужно настроить:
{ функция преобразует дату в число дней от 1.01.2000 }
function DatToLong(D, M : Byte; Y : Word):Longint;
var L : Longint;
begin
L := D;
while (M > 0) and (Y > 2000) do
begin
Dec(M); if M = 0 then begin Dec(Y); M := 12; end;
case M of
1, 3, 5, 7, 8, 10, 12 : D := 31;
4, 6, 9, 11 : D := 30;
else { февраль }
if Y mod 4 = 0 then D := 29 else D := 28;
end;
L := L + D;
end;
DatToLong := L;
end;
Теперь в программе можно вычислять разность между двумя датами:
const Size = 10;
Srok = 15;
type DType = record D, M : Byte; Y : Word; end;
var T : array [1..Size] of String[13]; F : array [1..Size] of String; D : array [1..Size] of DType;
N : Byte; Now : DType;
begin
for N := 1 to Size do
begin
Write('Введите N телефона ', N, ' абонента: '); ReadLn(T[N]);
Write('Введите фамилию ', N, ' абонента: '); ReadLn(F[N]);
Write('Введите дату разговоров ', N, ' абонента через пробел День (от 1 до 31), Месяц (от 1 до 12), Год (от 2000): '); ReadLn(D[N].D, D[N].M, D[N].Y);
end;
Write('Введите текущую дату через пробел День (от 1 до 31), Месяц (от 1 до 12), Год (от 2000): '); ReadLn(Now.D, Now.M, Now.Y);
WriteLn;
WriteLn('Срок платежа истёк: ');
for N := 1 to Size do
if DatToLong(Now.D, Now.M, Now.Y) - Srok > DataToLong(D[N].D, D[N].M, D[N].Y) then
WriteLn(T[N]:15, F[N]);
end.
В программе не реализована проверка правильности вводимой даты - это на самостоятельную работу.. . если преподу не понравится ;-)
Т. к. в ТурбоПаскале нет работы с датой.
Её нужно настроить:
{ функция преобразует дату в число дней от 1.01.2000 }
function DatToLong(D, M : Byte; Y : Word):Longint;
var L : Longint;
begin
L := D;
while (M > 0) and (Y > 2000) do
begin
Dec(M); if M = 0 then begin Dec(Y); M := 12; end;
case M of
1, 3, 5, 7, 8, 10, 12 : D := 31;
4, 6, 9, 11 : D := 30;
else { февраль }
if Y mod 4 = 0 then D := 29 else D := 28;
end;
L := L + D;
end;
DatToLong := L;
end;
Теперь в программе можно вычислять разность между двумя датами:
const Size = 10;
Srok = 15;
type DType = record D, M : Byte; Y : Word; end;
var T : array [1..Size] of String[13]; F : array [1..Size] of String; D : array [1..Size] of DType;
N : Byte; Now : DType;
begin
for N := 1 to Size do
begin
Write('Введите N телефона ', N, ' абонента: '); ReadLn(T[N]);
Write('Введите фамилию ', N, ' абонента: '); ReadLn(F[N]);
Write('Введите дату разговоров ', N, ' абонента через пробел День (от 1 до 31), Месяц (от 1 до 12), Год (от 2000): '); ReadLn(D[N].D, D[N].M, D[N].Y);
end;
Write('Введите текущую дату через пробел День (от 1 до 31), Месяц (от 1 до 12), Год (от 2000): '); ReadLn(Now.D, Now.M, Now.Y);
WriteLn;
WriteLn('Срок платежа истёк: ');
for N := 1 to Size do
if DatToLong(Now.D, Now.M, Now.Y) - Srok > DataToLong(D[N].D, D[N].M, D[N].Y) then
WriteLn(T[N]:15, F[N]);
end.
В программе не реализована проверка правильности вводимой даты - это на самостоятельную работу.. . если преподу не понравится ;-)
чтобы заполнить массивы нужно циклом пройтись по всем задолжникам
write("введите телефон ", i, " задолжника"); T[ i ] := readln();
write("как его фамилия? "); F[ i ] := readln();
write("дата разговора"); D[ i ] := readln();
в другом цикле сравниваются даты и выводится на экран задолжник если условие выполняется DT-D[ i ]>15
| 2 Jurii чтобы не мучиться с классами можно попросить записывать дату в формате ГГГГММДД и будет все прекрасно вычитаться
например 3 февраля 2011 - 1 января 2011 = 20110203 - 20110101 = 102 тоесть прошло 1 месяц и 2 дня
write("введите телефон ", i, " задолжника"); T[ i ] := readln();
write("как его фамилия? "); F[ i ] := readln();
write("дата разговора"); D[ i ] := readln();
в другом цикле сравниваются даты и выводится на экран задолжник если условие выполняется DT-D[ i ]>15
| 2 Jurii чтобы не мучиться с классами можно попросить записывать дату в формате ГГГГММДД и будет все прекрасно вычитаться
например 3 февраля 2011 - 1 января 2011 = 20110203 - 20110101 = 102 тоесть прошло 1 месяц и 2 дня
Похожие вопросы
- Паскаль! Помогите пожалуйста разобраться в задачке.
- Программа на паскале! Помогите(бесплатно)
- Вопрос по паскалю.. не могу разобраться в выражении? условие внутри
- Помогите с паскалем. Помогите написать программу переводящую из 10-ой в 16-ую систему счисления на паскале
- Паскаль помогите: С
- Программирование на Паскале Помогите, пожалуйста , написать программу на паскале
- Информатика.Практическая работа по паскалю.ПОМОГИТЕ.Все нужно ввиде паскаля.мучаюсь целый день.постоянно какие-то ошибки
- Помогите!Что то я в своём компе сделала и теперь не могу разобраться(((
- Сортировка массива (Паскаль) помогите пожалуйста
- кто нибудь знает турбо паскаль?помогите решить!выручайте,срочно надо!