2013-12-09 2 views
1

Простите, что мне не хватает опыта, но мне действительно нужно выбрать ваш мозг в правильной формулировке этого кода PHP.Как переписать этот фрагмент программирования BASIC на PHP?

У меня есть эти две строки BASIC:

100 PITCHHOR=(LSLATHOR/(NRSLATVER+1)):LSLATHOR=PITCHHOR*(NRSLATVER+1) 
110 IF PITCHHOR>72 THEN NRSLATVER=NRSLATVER+1:GOTO 100 

Я просто нужно положить его в PHP код, я понимаю, что это из контекста, но я просто нужна логика. То, что происходит, делает настройку на PITCHHOR на линии 100 и регулировку до LSLATHOR. Затем, если PITCHHOR > 72 настраивает NRSLATVER и возвращается к строке 100, и он, кажется, зацикливается до тех пор, пока не будет выполнено условие, когда PITCHHOR меньше значения 72. Я прав в этом?

Что бы выглядел PHP для этих двух строк, я бы использовал цикл while?

Моя попытка (Возможно, что делает ошибки)

<?php 
    $pitchhor = (floatval($lslathor)/(floatval($nrslatver) + 1)); 
    $lslathor = (floatval($pitchhor) * (floatval($nrslatver) + 1)); 
     while ($pitchhor > 72) {      
      $nrslatver += 1; 
      $pitchhor = (floatval($lslathor)/(floatval($nrslatver) + 1)); 
      $lslathor = (floatval($pitchhor) * (floatval($nrslatver) + 1));    
     } 
?> 

Я ценю вашу помощь TY VM.

EDIT 1:

Я сделал небольшое изменение, пытаясь использовать goto поскольку она была введена в PHP 5.3.0.

Эта логика отражает код BASIC?

recalc: 

$pitchhor = (floatval($lslathor)/(floatval($nrslatver) + 1)); 
$lslathor = (floatval($pitchhor) * (floatval($nrslatver) + 1)); 

if ($pitchhor > 72) { 
    $nrslatver += 1; 
    goto recalc; 
} 

EDIT 2:

Я закончил с использованием этого, и она работала благодаря Ричард Chambers (я добавил динамические толерантности вместо фиксированного допуска шага 72, и это относится к спецификациям, изложенных в старой программе BASIC):

do { 
     $pitch = ($length/($slat_qty + 1)); 
     $length = $pitch * ($slat_qty + 1); 
     if($pitch > $tolerance) { 
      ++$slat_qty; 
     } 
} while($pitch > $tolerance); 
+1

Поскольку вы хотите выполнить расчет первой строки хотя бы один раз в любом случае, цикл «do ... while» был бы лучше подходит для этого. – CBroe

+0

Будет ли «работать»? Начиная с PHP 5.3.0. – TheRealWitblitz

+1

Вопрос представляется более подходящим для http://codereview.stackexchange.com. Во всяком случае, это кажется прекрасным. Вы можете использовать 'do while', как предлагает @CBroe. –

ответ

1

Исходный код BASIC можно разбить следующим образом. Это предполагает, что несколько операторов в одной строке предложения THEN являются частью блока, который кажется стандартным для старого стиля BASIC.

100 PITCHHOR=(LSLATHOR/(NRSLATVER+1)) 
102 LSLATHOR=PITCHHOR*(NRSLATVER+1) 
110 IF PITCHHOR>72 THEN 
112 NRSLATVER=NRSLATVER+1 
114 GOTO 100 
116 END 

Я думаю, что следующее близко к источнику BASIC. Имейте это в цикле, который продолжается до тех пор, пока условие выполнения if выполнено. Ничто действительно не так с оператором goto просто может быть источником ошибок. И, откровенно говоря, следующая ошибка может также быть ошибкой, если $pitchhor не сходится к значению меньше 72, поэтому поток заканчивается в бесконечном цикле.

<?php 
    do { 
     $pitchhor = (floatval($lslathor)/(floatval($nrslatver) + 1)); 
     $lslathor = (floatval($pitchhor) * (floatval($nrslatver) + 1)); 
     if($pitchhor > 72) {      
      $nrslatver += 1; 
     } 
    } while ($pitchhor > 72); 
?>