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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2012, 00:19   #1
zeil94
 
Регистрация: 13.12.2012
Сообщений: 8
Вопрос Работа с данными комбинированного типа

Добрый вечер всем) я уже не первою неделю питаюсь решить это задание и не как не могу.В теме Record я не силен.Ну не могу я никак ее понять,хоть уже много посмотрел примеров и прочитал на эту тему конспектов.До этой темы было все прекрасно а тут...(
Код:
type        time=record
            hour:0..23;
            min:0..59;
            sec:0..59;
                end;[
а) описать логическую функцию pan (T1, T2) для проверки стоящее время Т1 впереди Т2 (в рамках суток). Ввести Т1 и Т2, а также результаты;
б) описать процедуру add_sec (Т, Т1), предоставляя Т1 время на одну секунду больше, чем Т (принять во внимание время суток);
в) ввести ряд времен и напечатать их в порядке убывания.
Сделать при помощи комбинированного типа.

Буду очень благодарен, если кто то поможет решить это задание, так как уже мозг кипит)
zeil94 вне форума Ответить с цитированием
Старый 13.12.2012, 05:49   #2
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Вот тебе пункты а и б. Дальше постарайся сам.
Код:
type
  tTime= record
    hour: 0..23;
    min: 0..59;
    sec: 0..59;
  end;

function Pan(t1,t2: tTime): boolean;
begin
  Pan:=
    (t1.hour<t2.hour) or
    (t1.hour=t2.hour) and (
      (t1.min<t2.min) or (t1.min=t2.min) and (t1.sec<t2.sec)
    )
end;

procedure Add_Sec(t: tTime; var t1: tTime);
var
  s: LongInt;
begin
  s:= t.hour*3600 + t.min*60 + t.sec + 1;
  t1.sec:= s mod 60;
  t1.min:= s div 60 mod 60;
  t1.hour:= s div 60 div 60 mod 24
end;

.....
Предпочитаю на "ты".

Последний раз редактировалось TinMan; 13.12.2012 в 05:57.
TinMan вне форума Ответить с цитированием
Старый 13.12.2012, 19:51   #3
zeil94
 
Регистрация: 13.12.2012
Сообщений: 8
Вопрос

спасибо большое))+++
только у меня дальше ничего толкового не получается(( а мне надо уже на завтра ее( она последняя, я все предедищие сам делал а тут фигня какаието(
с вводом времени ничего не получается((
к примеку пишу
Код:
for r:=1 to 2 do begin
readln(t.hour);
а паскаль пишет что "ожидается имя класса, пишу имя
Код:
for r:=1 to 2 do begin
readln(t[r].hour);
а оно пишет что не является массивом,хоть я в варе сделал как масив,хелп дальше плиззз))
zeil94 вне форума Ответить с цитированием
Старый 13.12.2012, 20:56   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Приведите полный код. А то откуда мы знаем что у Вас там не работает..
Poma][a вне форума Ответить с цитированием
Старый 13.12.2012, 22:07   #5
zeil94
 
Регистрация: 13.12.2012
Сообщений: 8
Вопрос

вот уже все сделал и все работает но ни как не могу понять в чем заключается пункт В, помогите сделать.И может у меня что то не так,помогите исправить пожалуйста, только на мой взгляд все нормально)
Код:
type
  tTime= record
    hour: 0..23;
    min: 0..59;
    sec: 0..59;

  end;

   var r:byte;   tt:ttime;    t1,t2:tTime;
   t:array[1..2] of tTime;
function Pan(t1,t2: tTime): string;
var e:boolean;
begin
  e:=
    (t1.hour<t2.hour) or
    (t1.hour=t2.hour) and (
      (t1.min<t2.min) or (t1.min=t2.min) and (t1.sec<t2.sec)
    );
  if e=true then Pan:='Нет,Т2 впереди Т1';
  if e=false then Pan:='Да,Т1 впереди Т2';
end;

procedure Add_Sec(t: tTime; var t1: tTime);
var
  s: LongInt;
begin
  s:= t.hour*3600 + t.min*60 + t.sec + 1;
  t1.sec:= s mod 60;
  t1.min:= s div 60 mod 60;
  t1.hour:= s div 60 div 60 mod 24;
  write('Добавим к часу Т1 одну секунду:');
  writeln(t1.hour,' час ',t1.min,' минут ',t1.sec,' секунд');
end;
begin
 writeln('веди Т1 годин');
 readln(t1.hour);
 writeln('веди Т1 минут');
 readln(t1.min);
 writeln('веди Т1 секунд');
 readln(t1.sec);
 writeln('веди Т2 годин');
 readln(t2.hour);
 writeln('веди Т2 минут');
 readln(t2.min);
 writeln('веди Т2 секунд');
 readln(t2.sec);
 writeln('Стоит ли Т1 попереду Т2: ',pan(t1,t2));
 add_sec(t1,t2);
end.
Буду очень благодарны если поможете) не забуду никогда)
zeil94 вне форума Ответить с цитированием
Старый 13.12.2012, 22:42   #6
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Вот 1час 1минута 1 секунда, и 1час 1минута 2 секунды, что из них стоит первее?
Я дак думаю 1 секунда.. Или нет?
Poma][a вне форума Ответить с цитированием
Старый 13.12.2012, 22:46   #7
zeil94
 
Регистрация: 13.12.2012
Сообщений: 8
Вопрос

а ну точно, блин что то я перепутал тогда будет так
Код:
type
  tTime= record
    hour: 0..23;
    min: 0..59;
    sec: 0..59;

  end;

   var r:byte;   tt:ttime;    t1,t2:tTime;
   t:array[1..2] of tTime;
function Pan(t1,t2: tTime): string;
var e:boolean;
begin
  e:=
    (t1.hour<t2.hour) or
    (t1.hour=t2.hour) and (
      (t1.min<t2.min) or (t1.min=t2.min) and (t1.sec<t2.sec)
    );
  if e=true then Pan:='Да,Т1 впереди Т2';
  if e=false then Pan:='Нет,Т2 впереди Т1';
end;

procedure Add_Sec(t: tTime; var t1: tTime);
var
  s: LongInt;
begin
  s:= t.hour*3600 + t.min*60 + t.sec + 1;
  t1.sec:= s mod 60;
  t1.min:= s div 60 mod 60;
  t1.hour:= s div 60 div 60 mod 24;
  write('Добавим к часу Т1 одну секунду:');
  writeln(t1.hour,' час ',t1.min,' минут ',t1.sec,' секунд');
end;
begin
 writeln('веди Т1 годин');
 readln(t1.hour);
 writeln('веди Т1 минут');
 readln(t1.min);
 writeln('веди Т1 секунд');
 readln(t1.sec);
 writeln('веди Т2 годин');
 readln(t2.hour);
 writeln('веди Т2 минут');
 readln(t2.min);
 writeln('веди Т2 секунд');
 readln(t2.sec);
 writeln('Стоит ли Т1 попереду Т2: ',pan(t1,t2));
 add_sec(t1,t2);
end.
Так что делать с пунктом В?? я никак не могу понять...
zeil94 вне форума Ответить с цитированием
Старый 13.12.2012, 22:52   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
if e=true then Pan:='Нет,Т2 впереди Т1';
if e=false then Pan:='Да,Т1 впереди Т2';
Вот приходите Вы домой. А Вам мама\бабушка\жена\девушка говорит : "у нас сегодня будет или борщ или щи. Угадай что!". Вы спрашиваете борщ? - Ответ нет. И Вы снова, зачем-то спрашиваете "У нас щи?" - Вам не кажется что перебор
наверно надо использовать 1 полную развилку, а не 2 усеченных
По-поводу задачи B. Наверно подразумевается что-то вроде такого : тыц
Если я прав, то переделайте под себя :
Код:
type
    TArr = array [1..100] of LongInt;
procedure SortArr (var a : TArr; const n : Integer);

var
    l, i, m, r : LongInt;
    t : LongInt;

begin
    for i := 2 to n do begin
        if a[i] < a[i-1] then begin

            t := a[i];

            l := 1;
            r := i-1;

            while l <> r do begin
                m := l + (r - l) div 2;
                if t > a[m] then
                    l := m + 1
                else
                    r := m;
            end;

            Move (a[r], a[r+1], (i - r) * SizeOf (a[1]));

            a[l] := t;
        end;
    end;
end;

var
    a : TArr;
    n, l, i, h, m, s : LongInt;

begin
    assign(input, 'input.txt'); reset(input);
      assign(output, 'output.txt'); rewrite(output);

    ReadLn(n);

    for i := 1 to n do begin
        Read (h, m, s);
        a[i] := 3600*h + 60*m + s;
    end;

    SortArr(a, n);

    for i := 1 to n do
        WriteLn (a[i] div 3600, ' ', (a[i] div 60) mod 60, ' ', a[i] mod 60);
end.
Poma][a вне форума Ответить с цитированием
Старый 14.12.2012, 01:42   #9
zeil94
 
Регистрация: 13.12.2012
Сообщений: 8
Восклицание

вот я оформил так вот, только теперь одно мне надо сделать что бы оно читало с файла, только когда оно читает, оно читает 0 а не те числа что в файле, что за брад?
Код:
type
  tTime= record
    hour: 0..23;
    min: 0..59;
    sec: 0..59;

  end;

   var r:byte;
       tt:ttime;
       t1,t2:tTime;
       f,f1:text;
       i:integer;
   t:array[1..2] of tTime;
function Pan(t1,t2: tTime): string;
var e:boolean;
begin
  e:=
    (t1.hour<t2.hour) or
    (t1.hour=t2.hour) and (
      (t1.min<t2.min) or (t1.min=t2.min) and (t1.sec<t2.sec)
    );
  if e=true then
         begin
          Pan:='Ні,Т2 попереду Т1';
          writeln(f1,'У порядку убивание 1 будет: ',t2.hour,' годин ',t2.min,' хвилин ',t2.sec,' секунд ',' 2 буде: ',t1.hour,' годин ',t1.min,' минут ',t1.sec,' секунд ');
         end;
  if e=false then
        begin
         Pan:='Так,Т1 попереду Т2';
         writeln(f1,'у порядку убивание 1 будет: ',t1.hour,' годин ',t1.min,' хвилин ',t1.sec,' секунд ',' 2 буде: ',t2.hour,' годин ',t2.min,' минут ',t2.sec,' секунд ');
        end;
end;  

procedure Add_Sec(t: tTime; var t1: tTime);
var
  s: LongInt;
begin
  s:= t.hour*3600 + t.min*60 + t.sec + 1;
  t1.sec:= s mod 60;
  t1.min:= s div 60 mod 60;
  t1.hour:= s div 60 div 60 mod 24;
  write(f1,'Добавимо к часу т1 1 секунду и это будет:');
  writeln(f1,t1.hour,' година ',t1.min,' минут ',t1.sec,' секунд');
end;
 
begin
 assign(f,'c:\1.txt');
  reset(f);
 assign(f1,'c:\rez.txt');
  rewrite(f1);
 for i:=1 to 2 do begin
 read(f,t[i].hour);
 read(f,t[i].min);
 read(f,t[i].sec);
 end;
 writeln(f1,'Стоит ли  Т1 впереди Т2: ',pan(t1,t2));
  add_sec(t1,t2);
  close(f1);
  close(f);
end.
помогите )))
zeil94 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с данными комбинированного типа Аня_Аня Паскаль, Turbo Pascal, PascalABC.NET 2 25.05.2012 03:22
Работа с данными типа AMF. Den7656 Общие вопросы Delphi 0 04.09.2011 17:24
Работа с данными типа AMF. Den7656 Работа с сетью в Delphi 0 08.06.2011 23:46