Уроки для начинающих программистов
Выпуск N 15
Понедельник, 8 декабря 2000 г.
Ведущий рассылки Эдуард Дмитриев
Библиотека программиста (http://prog.agava.ru)
Здравствуйте, уважаемые подписчики!
Это письмо желательно читать в броузере или развернуть на весь экран, тогда легче ориентироваться и приятнее читать!

В этом выпуске:
  1. Новым подписчикам.
  2. HTML. Мастерим фреймы.
  3. Паскаль. Двухмерные массивы.
  4. Паскаль. Вопросы продвинутого программирования.
  5. Ваши вопросы.

УВАЖАЕМЫЕ ДРУЗЬЯ!

Большое спасибо всем, кто выразил желание принимать участие в создании КНП и помогать в ведении рассылки. Я рад, что вас заинтересовала это предложение. Благодаря вам, рассылка теперь становиться больше и подробнее, а также появляются новые сервисы, направленные на дополнительную помощь в изучении программирования.

В первую очередь хочу представить вам новую возможность нашего проекта. Вы теперь можете задавать свои вопросы в рассылку и получать на них ответы. На сегодня вопросы принимаются по следующим темам:
  1. HTML - пишите на ed1@mailru.com?subject=help-html
    (в теме письма обязательно указывать help-html)

  2. Паскаль - пишите на ed1@mailru.com?subject=help-pascal
    (в теме письма обязательно указывать help-pascal)

Вопросы могут присылать все желающие, принимаются они в неограниченном количестве. Самые интересные вопросы, которые будут сочтены полезными и другим, будут публиковаться в рассылке.
Пишите!

 

1. Новым подписчикам.

Если Вы недавно подписались и Вам что-то непонятно, пожалуйста, перед тем, как спрашивать у меня, просмотрите предыдущие выпуски рассылки. Возможно, там есть ответы на ваш вопрос.

Сайт рассылки: Библиотека программиста, http://prog.agava.ru.

В разделе сайта, посвященном рассылке вы найдете:

  • Архив рассылки
  • Домашние задания
  • Гостевую книгу
  • Ваши вопросы
  • Форум сайта
  • Систему голосования
  • и другое.
Уважаемые подписчики! Форум, имеющийся на сайте, создан специально для вас. Помните, что вы всегда сможете задавать на нем свои вопросы, обсуждать проблемы, отвечать на вопросы других и т.д. Убедительная просьба воспользоваться этой возможностью, давайте вместе создавать полезный и интересный форум, в котором можно было бы реально найти решение своих проблем.

»  К содержанию

 

2. HTML. Мастерим фреймы.

Очень известной возможностью HTML являются фреймы. Фрейм - это независимая часть HTML документа, иначе говоря подокно. Вы наверняка знаете, что это такое: очень многие сайты используют фреймы. Окно броузера может быть разбито практически на сколько угодно фреймов. Чаще всего используются два: один для меню, другой для содержания. Однако это не является каким-либо стандартом и возможности применения фреймов практически не ограничены. Используя их вы можете значительно увеличить как функциональность, так и информативность своих страниц. Сегодня я научу вас создавать собственные фреймы, сразу скажу - это очень просто.
Создание фреймов требует знания довольно большого количества тэгов, точнее их параметров. Для начала, думаю, будет уместно определиться со свойствами фреймов.
  1. Каждый фрейм может иметь свой собственный URL - адрес в Сети. Это может абсолютный адрес, к примеру http://prog.agava.ru/ - при этом в таком фрейме будет открываться соотсветсвующий сайт или страница; либо относительный - адрес на вашем сайте или винчестере: page.html, ./page.html и т.д.
  2. Размеры фреймов могут изменяться по желанию пользователя. Однако это всегда можно запретить соответсвующим параметром.
  3. Каждый фрейм может иметь свое имя - параметр NAME, уже знакомый нам по гипертекстовым ссылкам. За счет него можно управлять отображением информации в различных фреймах.
Итак, давайте теперь посмотрим, как же можно создать свои фреймы.

  Оформление фреймов

Следует сказать, что формат документа, использующего фреймы несколько отличается от обыкновенного документа. Он не содержит раздела <BODY> - </BODY>, следовательно, не имеет никакого собственного оформления. Вместо <BODY> создается раздел <FRAMESET> - </FRAMESET>, в котором описываются свойства фреймов.
Итак, давайте теперь посмотрим, как же выглядит документ, разбитый на фреймы:



<HTML>

<HEAD>

  ....

  ....

</HEAD>



<FRAMESET cols="значение" | rows="значение">



  <FRAME src="адрес_фрейма" name="frame1">

  <FRAME src="адрес_фрейма" name="frame2">

  ......



</FRAMESET>



</HTML>

Как вы можете видеть, раздел BODY замещен разделом FRAMESET, который, собственно, и описывает сами фреймы. FRAMESET имеет завершающую пару - /FRAMESET. Внутри этой конструкции находятся тэги FRAME, которые и задают конкретные фреймы.
А теперь давайте посмотрим, какие же параметры могут иметь эти тэги и что они выполняют. Начнем с тэга FRAMESET.

  Параметры FRAMESET

Первый, самый важный параметр - это указание размера фреймов. В зависимости от его написания, окно броузера будет разделено верикально, либо горизонтально:
  • ROWS="значение" - горизонтальные фреймы.
  • COLS="значение" - вертикальные фреймы.
Заметьте, эти два параметра взаимоисключающие, то есть может присутсвовать только один из них.
"Значение" - указывает количество фреймов в окне, с определением их размера. Список окон задается указанием их размеров, идущих через запятую. Размеры эти могут задаваться несколькими различными способами, давайте посмотрим, какими конкретно.
  • "600,200" - указанное таким образом значение определяет высоту (ширину) фреймов в пикселах. Это далеко не самый лучший способ определения размера, так как он привязан к раширению экрана и текущему размеру рабочей области броузера, которые не у всех одинаковые. Чтобы лучше понять, как работает этот параметр, попробуйте применить его на практике.

  • "10%, 90%" - указывает ширину подокон в процентах от общего рабочего поля броузера. При этом общая сумма ширины подокон должна быть равной 100%. Если же она больше (или меньше), то все размеры пропорционально увеличиваются либо уменьшаются. На приведенном примере "10%, 90%" задается два фрейма, один размером 10%, другой 90%. Общая сумма, как вы видите, 100.

  • "*,*" - это значение служит для пропорционального разделения подокон. Это значит, что звездочка - "*" - указывает оставшийся размер. В приведенном примере - "*,*" - экран разделиться на два фрейма, каждый займет половину экрана. "*,*,*" - три фрейма, каждый будет иметь треть рабочей области.

  Параметры FRAME

Итак, вы уже знаете, как озаглавливается часть, содержащая фреймы и как задать их количество и размер. Теперь давайте разберемся, как же заполнить информацией созданные подокна, указать страницу, которая будет там отображаться, зависимость и другое.
Все это управляется посредством задания параметров тэга FRAME, который существует отдельно для каждого фрейма и находиться внутри контейнера FRAMESET. Разберем по порядку иеющиеся параметры:
  1. SRC="адрес_фрейма" - этот параметр задает непосредственный URL фрейма. К примеру, мы создали страницу с двуми вертикальными фреймами, один из которых - меню, другой - содержание. В документе HTML пишем следующее:
    
    
    <HTML>
    
       <HEAD>
    
       </HEAD>
    
    
    
    <FRAMESET cols="20%, *">
    
     ........
    
    </FRAMESET>
    
    
    
    </HTML>
    
    
    Как вы видите, будет создано два фрейма: один шириной в 20% экрана, другой - оставшаяся область. Теперь нужно внутри контейнера FRAMESET указать адреса страниц, которые будут помещены в эти фреймы. Допустим, мы заготовили их под именами: menu.html, main.html. Правильное оформление в этом случае будет следующее:
    
    
    <HTML>
    
       <HEAD>
    
       </HEAD>
    
    
    
    <FRAMESET cols="20%, *">
    
     <FRAME src="menu.html">
    
     <FRAME src="main.html">
    
    </FRAMESET>
    
    
    
    </HTML>
    
    
  2. NAME="имя_фрейма" - этот параметр задает желаемое имя фрейма. В дальнейшем при помощи этого имени мы будем обращаться к подокнам - например, открывать страницы можно в любом из фреймов, если в гипертекстовой ссылке указывать имя этого фрейма. Более подробную информацию см. ниже.

  3. MARGINWIDTH="значение" - Этот параметр используется для указания величины разделительных полос между фрэймами сбоку. Его значение указывается в пикселах и не может быть меньше единицы. По умолчанию это значение зависит от конкретного броузера.

  4. MARGINHEIGHT="значение" - Выполняет ту же работу, что и MARGINWIDTH, но для величины верхних и нижних разделительных полос.

  5. SCROLLING="yes | no | auto" - Данный параметр задает наличие полос прокрутки у фрэйма. Как вы видите, он может иметь следующие значения:
    • yes - указывает, что полосы прокрутки будут в любом случае присутствовать у фрэйма,
    • no - указывает, что полос прокрутки не будет, даже если фрейм не помещается в свою ширину.
    • Auto - определяет наличие полос прокрутки только при их необходимости. Данное значение используется по умолчанию.

  6. NORESIZE - этот параметр служит для того, чтобы запретить изменение ширины (или высоты) фреймов пользователем. По умолчанию любой посетитель имеет такую возможность, но, как вы видите, использованием NORESIZE этого можно избежать.

Это все, что нужно знать для создания простых фреймов. Однако существую дополнительные возможности, которые позволяют расширить свойства подокон. Одна из них - это вложенность контейнеров FRAMESET. При этом фреймы будут создаваться не в главном окне, а в других подокнах, по отношению к которым применяется вложенность. Вот пример:


<HTML>

<HEAD>

</HEAD>



<FRAMESET rows="20%, *">



 <FRAMESET COLS="30%,70%">

  <FRAME SRC="f1.html">

  <FRAME SRC="f2.html">

 </FRAMESET>



 <FRAMESET COLS="*,40%,*,20">

  <FRAME SRC="f3.html">

  <FRAME SRC="f4.html">

  <FRAME SRC="f5.html">

  <FRAME SRC="f6.html">

 </FRAMESET>



</FRAMESET>



</HTML>

Здесь сначала создается два фрейма в главном окне: <FRAMESET rows="20%, *">, один шириной 20%, другой - оставшейся частью экрана, после чего в этих фреймах также создаются фреймы. В этом случае для каждого подокна, как вы видите, задается свой раздел FRAMESET.

И еще одна возможность при создании фреймов - это проверка на их поддержку. Бывает, что броузер не поддерживает фреймы, а ваша страница построена именно на них. В этом случае посетитель без поддержки подокон вообще ничего не увидит на вашем сайте. Для этого и существует эта возможность - сообщить о использовании фреймов на сайте и невозможности их отображения.
Реализуется это посредством использования тэга <NOFRAMES> - </NOFRAMES>. Он размещается внутри раздела FRAMESET. Внутрь помещается информация, которая должна восприниматься броузерами, не поддерживающими фреймы. Пример:


<HTML>

<HEAD>

</HEAD>



<FRAMESET rows="50%, *">



<NOFRAMES>

 <H1 align=center>Ваш броузер не поддерживает фрэймы!</H1>

</NOFRAMES>



  <FRAME SRC="f1.html">

  <FRAME SRC="f2.html">



</FRAMESET>



</HTML>

Вот такие вот дополнительные возможности. Тепеть осталось рассмотреть вопрос взаимодействия между фреймами, иначе говоря разобраться, как же можно отображать информацию в том фрейме, в котором нам необходимо.

  Взаимодействие фреймов

При использовании фреймов часто возникает такая ситуация, когда нужно при нажатии на ссылку в одном фрейме, отобразить информацию в другом. Для этого служит параметр NAME тэга FRAME, о котором я уже упоминал выше.
Итак, вы уже знаете, что можно задавать каждому фрейму собственное имя. Для чего же оно служит и где используется? С помощью него вы можете обращаться к различным фреймам. Чтобы это сделать, существует параметр target тэга A (ссылка), в котором это имя указывается. При нажатии на такую ссылку страница, на которую она указывает будет отображена в том подокне, которое носит это имя. Давайте теперь на примере разберемся, как же это происходит.
Для начала создадим два фрейма - один меню, другой содержание:



<HTML>

<HEAD>

</HEAD>



<FRAMESET rows="40%, 60%">



  <FRAME SRC="menu.html" name="menu">

  <FRAME SRC="content.html" name="cont">



</FRAMESET>

</HTML>

Теперь составим меню (файл menu.html):



<HTML>

<HEAD>

</HEAD>



<BODY bgcolor=#EEEEEE LINK=#FAFAFF VLINK=#FAFAFF>

 - <a href="music.html" target="cont"> Музыка </a>

 - <a href="midi.html" target="cont"> MIDI </a>

 - <a href="instr.html" target="cont"> Инструменты </a>

 - <a href="acc.html" target="cont"> Аккорды </a>



</BODY>



</HTML>

Как вы можете видеть, все тэги <a> имеют параметр target. В нем задано имя "cont", которое носит фрейм-содержание. При нажатии на такую ссылку отображение страницы (к примеру, "Музыка" - файл music.html) произойдет именно в фрейме с именем "cont". Таким образом и происходит взаимодействие фреймов. Указыванем имени в гипертекстовой ссылке вы можете управлять отображением информации на странице, использующей фреймы.

При рассказе о target нельзя также не упомянуть о существующих, зарезервированных именах. Это значит, что для target есть специальные имена, использование которых также влияет на отображение информации. Они не требуют особых объяснений, просто перечислю их названия и действия, которые они выполняют.
Итак, target имеет следующие зарезервированные имена:
  1. target="_blank" - Использование этого значения в гипертекстовой ссылке определяет, что документ, полученный по ссылке будет отображаться в новом окне броузера. Обратите внимание на эту возможность, чтобы запомнить ее и потом не задаваться вопросом, как открыть документ в новом окне. (Кстати, на эту тему было много вопросов).

  2. target="_self" - Это значение определяет, что документ, полученный по ссылке будет отображаться в том же фрэйме, в котором находится ссылка.

  3. target="_parent" - Это значение определяет, что содержащийся по ссылке документ отобразиться в родительском окне текузего фрейма, то есть в том окне, которое содержит данный фрейм.

  4. target="_top" - Это значение определяет, что документ содержащийся по ссылке, отобразится на всей поверхности окна, вне зависимости от наличия фрэймов. Этот параметр удобно применять при использовании вложенных фреймов.
Запимните эти значения, алучше выпишите их на бумагу и используйте при необходимости.

Ну вот, теперь мы полностью разобрались с фреймами. Хочу заметить, что работа с ними несколько отличается от обычного HTML документа. В некоторых случаях могут возникать недопонимания и самые необжиданные проблемы. Чтобы этого избежать, советую сразу же разобратсья со всей информацией, необходимой для создания фреймов. Попробуйте выполнить небольшую страничку, разбитую на подокна, наполните ее содержанием, поэкспериментируйте с параметром target. И не забывайте про зарезервированные имена, в некоторых случаях они очень полезны.

Ну и на последок скажу, что мы почти прошли всю теорию гипертекстового языка. Остались только таблицы, а также некоторые незначительные моменты. Скоро начнется JAVA Script, где вы будете учиться расширять возможности своих страничек.

На сегодня про HTML все, до встречи!

»  К содержанию

 

3. Паскаль. Двухмерные массивы.

Сегодня я продолжаю тему массивов. Останавливаться пока, я считаю рано - во-первых, массивы как таковые очень часто используются в программировании, во-вторых, мы еще не прошли все возможности, связанные с массивами.
Одна из такие возможностей - пожалуй, самая главная, это создание многомерных массивов. Многомерность означает, что массив содержит не только элементы, упорядоченные один за другим в строку:

1 2 3 4 5

, но и дополнительные элементы - например, помимо строк массив имеет и столбцы:

1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 18
5 10 15 20 25

Чаще всего среди многомерных массивов используются двухмерные массивы, пример которого вы и можете видеть выше. Двухмерный - значит измеряющийся двумя индексами. Здесь первым индеском служит строка, сторым - столбец.
Как описываются такие массивы и где применяются я покажу немножко ниже, а пока давайте разберем, как поисходит эта самая индексация по номерам строк и символов в них (столбцов).

К примеру, имеем вышеописанный массив - таблица Пифагора то 1го до 5ти. Как мы можем обратиться к элементу, который находится в строке 5, столбце 3 (число 15)? Вот и всплывает упомянутое выше измерение двумя индеками. Мы так и поступим: в качестве первого индекса укажем номер строки, в качестве второго - столбец. Смотрите, что получиться:

Mas[5,3];

Думаю, вы поняли как происходит обращение к элементам такого массива. Более конкретные примеры использования см. ниже. А теперь давайте разберемся, как же такие массивы создаются в программе.

  Создание 2х мерных массивов

Создать такой массив не сложнее, чем одномерный. Вот пример:

var

Mas: Array[1..5, 1..5] of Integer;

Здесь создается двухмерный массив, размером в 5 строк и 5 столбцов. Сначала указывается количество строк, после - через запятую - количество столбцов. Вот еще один пример создания массива:

var

Mas: Array[1..50, 1..25] of Integer;

А теперь давайте посмотрим, как же эти массивы можно использовать. Для начала напишем маленькую программу, которая будет создавать массив и записывать в него таблицу умножения, после чего распечатывать ее на экран. Вот сама программа:



Program N1;

uses Crt;



var

   Mas: Array[1..10, 1..10] of Integer;

   I, J: Byte;



begin

   ClrScr;



   For I := 1 to 10 do

      For J := 1 to 10 do

         Mas[I, J] := I * J;



   For I := 1 to 10 do

   begin

      For J := 1 to 10 do

         If Mas[I, J] < 10 then Write(Mas[I, J], '  ') else Write(Mas[I, J], ' ');

      Writeln;

   end;



   Readln;

end.

Запустите эту программу. Видите, массив распечатыват таблицу умножения, причем наглядно видна сама структура массива. Сразу бросается в глаза, что это 2х мерный массив, не так ли?
При выполнении этой программы я использую очень простой алгоритм для заполнения массива таблицей умножения. Вы должны помнить его по прошлым выпускам, когда мы просто ее печатали.
Также заметьте, я использую изученый модуль CRT - и его процедуру ClrScr. Учитесь использовать модули, это очень важно.

Двигаемся дальше. Я считаю, что это тема не должна вызывать затруднений, так как с массивами вы уже знакомы, а 2х мерные - это всего лишь интерпритация.

Итак, давайте теперь напишем программу, которая будет интенсивно использовать массивы. На этот раз это будет пример реализации "бегущих огней", которая пока использует одномерный массив, но тем не менее показывает новый алгоритм по его обработке. а именно сдвиг элементов по массиву.

Бегущие огни:



uses crt;

    const n=80;



   Var A:array[1..n] of byte;

     i,r:byte;

     c:char;



Begin

   clrscr;

   write('      Esc -> Exit');

   for i:=1 to n do a[i]:=random(2);



   repeat

      for i:=1 to n do

      begin

         gotoxy(i,4);

         if a[i]=0 then write('*')

                   else write('-');

         gotoxy(81-i,8);

         if a[i]=0 then write('*')

                   else write('-');

      end;



      r:=a[1];

      for i:=1 to n-1 do a[i]:=a[i+1];

      a[n]:=r;

      c:=readkey;



   until c=#27;

end.

Запустите эту программу. Теперь нажмите любую клавишу. Видите, происходит сдвиг огней? Разноцветные огни реализованы двумя символами " * " и " - ".
Как же Огонек бежит по кругу? Если цепочку лампочек представить массивом чисел (1010010) то 1 шаг огней, есть сдвиг элементов массива на 1 (0100101) то есть:

a[1]:=a[2];
a[2]:=a[3]; и т.д.
a[n]:= {то что было в a[1], надо запомнить! }

Итак сдвиг всех элементов массива на 1 шаг влево это:

  • R:=a[1];
  • for i:=1 to N -1 do a[i]:=a[i+1];
  • a[n]:=R;
А теперь несколько заданий, связанных с программой, которые вам предстоит выполнить самостоятельно.

Разработать программу программу движения огней:
  1. вертикально,
  2. по прямоугольнику 40 х 10, (N x M) - сегодняшняя тема двухмерных массивов
  3. в обратную сторону,
  4. в одну и в другую сторону в зависимости от нажатой клавиши

Это самостоятельное задание. Постарайтесь сделать его, вам необходимо как можно лучше разобраться в массивах. Ну а на сегодня все. Материала, как вы можете заметить не очень много, это связано с тем, что вам нужно хорошенько попрактиковаться с массивами и пока можно ограничиться новыми заданиями. Кроме того, один из ближайших выпусков будет практическим, где мы будем уже составлять более серьезные программы с применением массивов. Так что помните - чтобы двигаться дальше, необходимо разобраться в текущем материале.

»  К содержанию

 

4. Паскаль. Вопросы продвинутого программирования.

Очень часто ко мне приходят письма с просьбами рассматривать вопросы не только для начинающих, но и для продвинутых программистов. По просьбам подписчиков я даже создал такую рассылку, которая посвящена более сложному программированию (http://subscribe.ru/catalog/inet.review.info). Чтож, сегодня я хочу предолжить вам программу, которая является более сложной, чем обычные задания и требудет определенной подготовки. Сам текст программы Вы найдете на сайте http://prog.agava.ru, в разделе Уроки для начинающих программистов >> Домашние задания. Извиняюсь за публикацию текста в разделе по ДЗ, пока не было времени сформировать отдельный раздел для исходных текстов.

Итак, задача:

Есть пять городов , А , Б , С , Д и Е. Известно что человек всегда выходит из города А , и обязательно должен пройти все оставшиеся города и попасть обратно в А. К примеру , Из А -> Б -> C->Д->E->A. То есть за исключением А , порядок посещения оставшихся четырех городов может меняться. То есть существует (5-1)! комбинаций. Как мне задать чтобы программа сама смогла их посчитать, а потом выдать наикратчайщий путь ??? (таблица расстояний приводится ниже)...

A B C D E
A 0 85 117 163 489
B 85 0 30 50 385
C 117 30 0 27 322
D 163 50 27 0 302
E 489 385 322 302 0

Начинаем решать:


Одна из классических задач на комбинаторику.

Для удобства будем нумеровать города по порядку 1 2 3 4 5. Нам нужно получить все цепочки вида 1 N1 N2 N3 N4 1, для каждой такой цепочки надо сосчитать путь по ф-ле S:=A[1,N1]+A[N1,N2]+A[N2,N3]+A[N3,N4]+A[N4,1]. Среди этих путей надо найти минимальный. Таким образом задача сводится к генерации всех перестановок в общем случае N-элементного множества (всего таких перестановок N!).
Будем генерировать перестановки в алфавитном (лексикографическом порядке) первая перестановка 1 2 3 4, последняя 4 3 2 1.

Порождение всех перестановок будем производить "по индукции". Предположим, что мы умеем порождать все перестановки из N-1 элемента. Тогда сначала сгенерируем все перестановки 2,...,N, приписывая к ним слева единицу. Затем сгенерируем все перестановки чисел 1,3,...,N, приписывая к ним слева двойку и т.д. Последним шагом будет генерация всех перестановок из чисел 1,...,N-1 c приписыванием к ним слева числа N.
Из описанной процедуры вытекает, что каждая следующая перестановка получается из предыдущей таким образом. В "предыдущей" перестановке X[1],...,X[N] справа ищется наибольшая убывающая подпоследовательность X[i]>...>X[N] ( если рассматривать позиции, начиная с i-й, то это последняя перестановка чисел X[i],...,X[N]). Если i=1, то все перестановки были сгенерированы и последовательность сортируется по возрастанию (получаем первую перестановку). Иначе среди чисел X[i],...,X[N] выбирается наименьшее X[j], большее X[i-1], и ставится на позицию i-1, а все оставшиеся числа (и x[i-1] в том числе) сортируются по возрастанию.

Сам исходный текст программы, как я уже сказал, см. на http://prog.agava.ru, в разделе Уроки для начинающих программистов >> Домашние задания. Программа сделана для N<=100. Читает данные из файла road.in, который имеет следующий формат: В первой строчке содержится число пунктов N, далее следует матрица расстояний N строчек по N чисел разделенных пробелами. Вывод производится в файл road.out.

Советую перед тем, как скачать исходник попробовать сделать ее самостоятельно.

»  К содержанию

 

5. Ваши вопросы.

Присылайте Ваши вопросы:
  1. HTML - пишите на ed1@mailru.com?subject=help-html
    (в теме письма обязательно указывать help-html)

  2. Паскаль - пишите на ed1@mailru.com?subject=help-pascal
    (в теме письма обязательно указывать help-pascal)

Вопрос 1. (HTML) Скажите пожалуйста, как можно разделить страницу на две части, чтобы в первой из них было содержание, во второй - информация?

Это можно сделать двумя способами. Первый - с использованием таблиц, которые мы пока не проходили, второй - с использованием фреймов, которые мы как раз прошли в этом выпуске.

Вопрос 2. (HTML)Каким образом можно перегрузить страницу через определенный промежуток времени?

Такое сделать совсем не сложно. Для перезагрузки страницы (или перехода) применяется один из так называемых тэгов META - которые располагаются внутри раздела <HEAD> - </HEAD> и содержат некоторую служебную информацию. Я планирую подробное дальнейшее изучение этих тэгов в следующих выпусках. Ну а пока просто показываю, как перезагрузить страницу:


<html>

<head>

    <title>Перезагрузка страницы</title>

    <META HTTP-EQUIV="Refresh" CONTENT="0; URL=http://prog.agava.ru">

</head>



<body></body>

</html>

При этом обратите внимание на содержание внутри параметра CONTENT. Первая цифра - это количество секунд, через которое произойдет перезагрузка. Далее, URL - это адрес страницы, на которую перенаправиться броузер. Естественно, если вы хотите перегружать одну и ту же страницу, то URL будет указывать на самого себя.

Вопрос 3. Не могу "скачать" Турбо паскаль с Вашего Вэб-сайта - идёт информация, что сервер не работает. Напишите, пожалуйста, где можно достать Паскаль?

Тут может быть только одна причина. Вы ищете Паскаль не по тому адресу. Да, действительно, в начале сайт рассылки был по другому адресу, который теперь не функционирует. Однако упоминание о нем до сих пор остается в архивах выпусков, в частности, на Subscribe.ru. Сегодня же Паскаль находиться на сайте http://prog.agava.ru. Это Библиотека программиста и раздела, посвященного программам там нет. Поэтому я разместил Паскаль в разделе рассылки, где он уже находит применение.

»  К содержанию

На этом прощаюсь, до следующего выпуска!

Назад

Hosted by uCoz