2012-04-10 2 views
2

Я новичок в Pascal, и я пытаюсь написать простую программу, но проблема с передачей значений между функциями. Это небольшая часть того, что у меня есть:Поддерживает ли Pascal передачу параметров в функции?

program numberConverter; 

const 
    maxValue = 4999; 
    minValue = 1; 

var num: integer; 

function convertNumeral(number: integer):string; 
var j: integer; 
begin 
if ((number < minValue) OR (number > maxValue)) then 
    begin 
    writeln(number); 
    writeln('The number you enter must be between 1 and 4999. Please try again:'); 
    read(j); 
    convertNumeral := convertNumeral(j); 
    end 
else 
if (number >= 1000) then 
convertNumeral := 'M' + convertNumeral(number -1000) 
{more code here, left it out for space} 
end; 

begin 
    writeln; 
    writeln('Enter an integer between 1 and 4999 to be converted:'); 
    read(num); 
    writeln; 
    writeln(num); 
    writeln(convertNumeral(num)); 
end. 

Моя проблема заключается в том, что значение из WriteLn (converNumeral (Num)), в основном, «Num», не получает передается функции convertNumeral и было интересно, если Паскаль даже это делает. Я считаю, это потому, что я не объявлял число переменной, но когда я это сделаю, я получаю ошибку компиляции, что он не может завершить второй оператор if. Спасибо за ваше время.

+2

не может видеть из этого кода, не связанный с вопросом. PS тест от 1 до 4999 за пределами функции, делая это внутри, а затем просят другого, если это не очень очень плохо. Функции должны делать одно. –

+0

@ Тони Это то, что я закончил делать, создав вспомогательный метод тестирования, решив проблему. – gestalt

+0

Имеет смысл взломать фрагмент кода, который делает слишком много вещей в одноцелевые функции, часто обнаруживает ошибки и недостатки в реализации. Сделайте это привычкой, он будет стоять на хорошем месте. Если есть stuuf, который можно оптимизировать с помощью inlining, компилятор сделает это за вас. Всегда выбирайте для понимания. –

ответ

2

Да, значения определенно передаются функциям. Я обещаю, что num действительно перейдет на convertNumeral. В пределах этой функции number приобретает любое значение в num. Возможно, есть проблема с тем, как вы наблюдаете за поведением вашей программы.

Изменения, внесенные вами в number, если таковые имеются, не отражаются на num. Параметр был принят по значению, поэтому number хранит копию значения, хранящегося в num; это две разные переменные. Вы можете использовать var для передачи параметров по ссылке, если это то, что вы хотите.

Каждый рекурсивный вызов convertNumeral получает экземпляр numberновый, поэтому изменения, внесенные в number, если таковые имеются, не будут появляться после того, как функция возвращает вызывающему абоненту. Каждый звонок получает свои версии number и j.

+0

Я отредактировал свое представление. Я все еще не могу понять, что случилось. Когда я распечатываю значение для числа, я получаю нуль. – gestalt

+2

Ваша дополнительная информация не изменяет ответ на ваш вопрос: Pascal поддерживает передачу параметров в функции. Проблема, с которой вы сталкиваетесь, по-видимому, не связана с вашим вопросом. Я предлагаю вам задать новый вопрос, в котором вы спрашиваете, что на самом деле не так с вашей программой. Пожалуйста, попробуйте сделать это общим интересом, иначе, иначе он может быть закрыт как «слишком локализованный». Никто не будет заботиться о вашей конкретной программе, поэтому попробуйте выяснить, в какой широкой теме вы столкнулись (например, возможно ли вы понимаете, как значения возвращаются * или как работает рекурсия). –

Смежные вопросы