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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2008, 17:41   #1
ViTYAi2007
 
Регистрация: 26.03.2008
Сообщений: 7
Восклицание Как вывести в цикле for ... do строки?

Здравствуйте!
Подскажите, как решить данную задачу:
Есть цикл:
for i:=1 to 48 do
begin
...
end;
Как вывести в этом цикле следующего вида строки:
0000-0030
0030-0100
0100-0130
...
2330-0000
По смыслу это получасовые интервалы (с 0000 часов до 0030 часов итд), которых как раз 48.
Не важно в каком виде их выводить - будут они строками или числами.
Главное, чтобы за каждую итерацию цикла выодилась пара "..."-"..."
ViTYAi2007 вне форума Ответить с цитированием
Старый 26.03.2008, 17:56   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Возмите за исходное 00:00 часов.
На каждом шаге цикла прибавляйте к исходному по 30 минут и выводите в формате hhnn первую величину из пары, затем "-", а затем с исходное+30 минут добавкой еще 30 минут...
Вроде загадки никакой нет...
mihali4 вне форума Ответить с цитированием
Старый 26.03.2008, 18:12   #3
ViTYAi2007
 
Регистрация: 26.03.2008
Сообщений: 7
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
На каждом шаге цикла прибавляйте к исходному по 30 минут и выводите в формате hhnn первую величину из пары, затем "-", а затем с исходное+30 минут добавкой еще 30 минут...
Хм... Насколько я понял с прибавлением на каждом шаге цикла 30 получится следующее:
0000-0030
0100-0130
0200-0230
...
или я ошибаюсь...
А как сделать шаг цикла 30 минут и как работать с временем (формат hhnn)?
ViTYAi2007 вне форума Ответить с цитированием
Старый 26.03.2008, 18:25   #4
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Код:
Var i : Integer;
    D : String;

Begin
For i := 1 To 24 Do
  Begin
    if i = 24 Then Begin Write('00:00'); Break; End;
    if i < 10 Then D := '0' Else D := '';
    Write(D, i, ':00');
    Write(' - ',D, i, ':30');
    Writeln;
  End;
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 26.03.2008, 18:34   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от ViTYAi2007 Посмотреть сообщение
Хм... Насколько я понял с прибавлением на каждом шаге цикла 30 получится следующее:
0000-0030
0100-0130
0200-0230
...
или я ошибаюсь...
А как сделать шаг цикла 30 минут и как работать с временем (формат hhnn)?
Немного не так.
Мы прибавляем 30 к исходной величине START и отображаем ее (START).
Потом - "-", а затем отображаем (START+30), ничего к ней не прибавляя.
И так - 48 раз. Шаг цикла - 1, это просто счетчик наших шагов...
Хотя уважаемый Карась предложил чисто строковый метод решения задачи, безо всяких сложений...
Цитата:
как работать с временем (формат hhnn
Есть мощный оператор FORMAT, посмотрите его в хэлпе, пригодится.

Последний раз редактировалось mihali4; 26.03.2008 в 18:36.
mihali4 вне форума Ответить с цитированием
Старый 26.03.2008, 18:42   #6
ViTYAi2007
 
Регистрация: 26.03.2008
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Карась Посмотреть сообщение
Код:
Var i : Integer;
    D : String;

Begin
For i := 1 To 24 Do
  Begin
    if i = 24 Then Begin Write('00:00'); Break; End;
    if i < 10 Then D := '0' Else D := '';
    Write(D, i, ':00');
    Write(' - ',D, i, ':30');
    Writeln;
  End;
Тут прикол в том, что необходимо использовать именно 48 итераций цикла. В общем случае в одном цикле
Код:
For i := 1 To 48 Do
выводится следующее:
0000-0030
<значение1>
0030-0100
<значение2>
0100-0130
<значение3>
...
2330-0000
<значение48>

Последний раз редактировалось ViTYAi2007; 26.03.2008 в 18:43. Причина: лишняя строка
ViTYAi2007 вне форума Ответить с цитированием
Старый 26.03.2008, 18:49   #7
ViTYAi2007
 
Регистрация: 26.03.2008
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Карась Посмотреть сообщение
Код:
Var i : Integer;
    D : String;

Begin
For i := 1 To 24 Do
  Begin
    if i = 24 Then Begin Write('00:00'); Break; End;
    if i < 10 Then D := '0' Else D := '';
    Write(D, i, ':00');
    Write(' - ',D, i, ':30');
    Writeln;
  End;
А кстати... Тут вроде так получается:
при i=1 : 0100-0130
при i=2: 0200-0230
при i=3: 0300-0330
итд
ViTYAi2007 вне форума Ответить с цитированием
Старый 26.03.2008, 19:57   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Достала эта дурацкая задачка
Вот, наколбасил:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
    tmp1, tmp2, tmp3: string;
begin
ListBox1.Clear;
tmp2:='00';
for i:=1 to 48 do
begin
if tmp2='30' then
tmp1:=IntToStr(Round(Int(i/2))-1) else
tmp1:=IntToStr(Round(Int(i/2)));
while Length(tmp1)<2 do
tmp1:='0'+tmp1;
tmp1:=tmp1+tmp2;
if tmp2='00' then
tmp2:='30' else
tmp2:='00';
if tmp2='30' then
tmp3:=IntToStr(Round(Int((i+1)/2))-1) else
tmp3:=IntToStr(Round(Int((i+1)/2)));
if tmp3='24' then
tmp3:='00';
while Length(tmp3)<2 do
tmp3:='0'+tmp3;
tmp3:=tmp3+tmp2;
ListBox1.Items.Add(tmp1+'-'+tmp3);
end;
end;
Если нужен Паскаль, у меня его нет и я его не помню. Может, Карась переведет...
mihali4 вне форума Ответить с цитированием
Старый 26.03.2008, 20:04   #9
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

mihali4, для Pascal тут только IntToStr переписать
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 26.03.2008, 20:22   #10
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

А вот ещё один способ решения с процедурой....

Код:
Var VR, i : Integer;
    hh, mm : String;

Procedure TimeP;
Begin
if  Length(IntToStr(VR mod 60)) = 1
  Then
    mm := '0' + IntToStr(VR mod 60)
  Else
    mm := IntToStr(VR mod 60);

if  Length(IntToStr(VR div 60)) = 1
  Then
    hh := '0' + IntToStr(VR div 60)
  Else
    hh := IntToStr(VR div 60);
Write(hh,':',mm);
End;

Begin
VR := 0;
For i := 1 To 60 Do
  Begin
    TimeP;
    if (i mod 2) = 1 Then Write(' - ');
    if (i mod 2) = 0 Then Writeln;
    VR := VR + 30;
    if VR > 1380 Then VR := 0;
  End;

Readln;
end.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27
как вывести строку поочередно сначала первая буква первой строки потом первая буква второй строки и т.д. vitalik007 Помощь студентам 1 25.09.2007 20:45
Как из Memo вывести строки в txt файл в конец там существующих Saili Компоненты Delphi 8 16.12.2006 11:23