Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Алгол-60

Сообщения:  [1-10]    [11-20]  [21-22] 

 
 автор: Trianon   (23.05.2007 в 15:45)   письмо автору
 
   для: Unkind   (23.05.2007 в 15:42)
 

в алголе относились к этому проще. Авторы какие хотели знаки такие и вводили .
begin - это тоже один отдельный знак . И if и procedure и прочие. А не как в C

В конце концов, множество знаков как-то отображалось на имеющийся набор символов.

На машине, на которой мне довелось работать, код { k = 1e6; } выглядел примерно так:
'BEGIN' 'REAL' K; K := 1Ю6; 'END'

Сравнения выглядели почти как в фортране 'IF' K 'NE' 1.57Ю3 'THEN' ....

   
 
 автор: Unkind   (23.05.2007 в 15:42)   письмо автору
 
   для: Trianon   (23.05.2007 в 15:13)
 

Логично.

Кстати, а оператор "не равно" в Алголе правда как в математике, то есть зачеркнутый знак "равно"? Вроде он есть только в Unicode.

   
 
 автор: Trianon   (23.05.2007 в 15:13)   письмо автору
 
   для: Unkind   (23.05.2007 в 15:08)
 

а после break - что пиши else - что не пиши - всё едино.
Соответственно, else - становится сорным оператором, никогда не получающим управления. вроде continue, который я случайно забыл в конце тела цикла.

   
 
 автор: Unkind   (23.05.2007 в 15:08)   письмо автору
 
   для: Trianon   (23.05.2007 в 15:01)
 

Если я правильно Вас понял, то тогда надо было писать не

///     if(2 >= $n) 
///     { 
///          $q = 1; 
///          $prim115 = true; 
///          break; 
///     } 
///     --$n;


, а

///     if(2 >= $n) 
///     { 
///          $q = 1; 
///          $prim115 = true; 
///          break; 
///     } else --$n;

   
 
 автор: Trianon   (23.05.2007 в 15:01)   письмо автору
 
   для: Unkind   (23.05.2007 в 14:59)
 

если n <= 2 то оба эти оператора выполняются. Что я и написал в подстрочнике..как раз строками
/// if(2 >= n)
/// {
/// $q = 1;
/// $prim115 = true;
/// break;
/// }


$prim115 = true; - тоже выполняется не всякий раз. Внимательнее читайте код.

   
 
 автор: Unkind   (23.05.2007 в 14:59)   письмо автору
 
   для: Trianon   (23.05.2007 в 14:53)
 

OK, $q = 1; можно вообще удалить, $prim115 = false; вынести из цикла.

   
 
 автор: Trianon   (23.05.2007 в 14:53)   письмо автору
 
   для: Unkind   (23.05.2007 в 13:35)
 

>В общем, у меня получилось с Вашей помощью перевести этот код на PHP. Огромное спасибо.
>выражение 2 >= n эквивалентно not (n>2)
>Конечно, но тут я не увидил ничего, указывающего отрицание: "if n>2 then".
>

плохо перевели.
Код на алголе

if n>2 then 
           begin n:=n-1; go to index end iter;
означает на php

 if($n>2)  { --$n; далее продолжить выполнение кода с точки, помеченной меткой "index:" } //iter

а на С

 if(n>2)  { --n; goto index; } /* iter */

   
 
 автор: Unkind   (23.05.2007 в 13:35)   письмо автору
 
   для: Trianon   (23.05.2007 в 00:42)
 

выражение 2 >= n эквивалентно not (n>2)
Конечно, но тут я не увидил ничего, указывающего отрицание: "if n>2 then".

В общем, у меня получилось с Вашей помощью перевести этот код на PHP. Огромное спасибо.


<?php
set_time_limit
(1);
header("Content-type: text/plain");

function 
factorial($a)
{
if((int) 
$a <> $a || $a <= 0) return false;
$factorial 1;
for(
$i 2$i <= $a$i++) $factorial bcmul($factorial$i);
return 
$factorial;
}

function 
permutation($n)
{
$k $q 0;
static 
$p$d;
global 
$prim115$x;

    if(
$prim115)
    {
    
$prim115 false;
    
        for(
$k 2$k <= $n$k++)
        {
        
$p[$k] = 0;
        
$d[$k] = 1;
        }

    }

$k 0;

while(
true)
{
$p[$n] = $q $p[$n] + $d[$n];

    if(
$q == $n)
    {
    
$d[$n] = -1;
    }
    else
    {
        if(
$q != 0) break;

    
$d[$n] = 1;
    
$k++;
    }

    if(
$n 2)
    {
    
$n--;
    
$q 1;
    
$prim115 false;
    }
}

$q += $k;
list(
$x[$q], $x[$q 1]) = array($x[$q 1], $x[$q]);
return 
$x;
}

$x = array(=> "a""b""c""d");

for(
$i 1$prim115 true$i <= factorial(count($x)); $i++)
{
echo(
$i " " implode(permutation(count($x))) . "\r\n");
}
?>

   
 
 автор: Trianon   (23.05.2007 в 00:42)   письмо автору
 
   для: Unkind   (22.05.2007 в 20:05)
 

begin означает открывающую фигурную скобку - начало составного оператора или блока.
end означает закрывающую фигурную скобку - конец составного оператора или блока.
Поскольку оператора goto в php нет, пришлось развернуть созданный им циклический код, и записать его в виде оператора цикла. Отсюда for, break, continue. Насколько аккуратно у меня это получилось - бог весть...

Еще одно важное замечание . Если я правильно помню, ключевое слово own означает примерно то же самое, что и static в С/PHP . Учтите пожалуйста. Массив там похоже статический. А сама процедура - с побочными эффектами.

выражение 2 >= n эквивалентно not (n>2)
continue - лишний.
А что Вы хотите - я операторы этого цикла раз двадцать тасовал, пока уложил.

   
 
 автор: Unkind   (22.05.2007 в 20:05)   письмо автору
 
   для: Trianon   (22.05.2007 в 19:33)
 

А что значит "end" на конце "go to iter end;"?
Просто цикл теряет смысл...

if(2 >= n)
А почему "2 >= $n"? Вроде в коде "n>2".

continue;
Это еще тут зачем? :))

   

Сообщения:  [1-10]    [11-20]  [21-22] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования