Подсчитанные циклы в языке Тьюринга - PullRequest
2 голосов
/ 07 января 2010
% calculates the population of a city from year 2000 to 2020

var popstart : int := 80000
var popgrowth : real
var popend : real
var growthrate : real := 0.03

% popgrowth := popstart * growthrate
    for i : 2000..2020 by 1
popgrowth := popstart * growthrate
end for

put "year  population"
put "====  =========="
put  i, "  ", popgrowth

когда я запускаю программу, я получаю переменную ошибки "я не был объявлен" когда я объявляю i как переменную, я получаю ошибку «я уже объявлен»

вывод должен выглядеть примерно так:

год населения
==== ==========
2000 ххххххххх ~ 2020 XXXXXXXXXX

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

for i : 4 .. 19 by 3
    put i
end for

ПОМОГИТЕ ПОЖАЛУЙСТА! и заранее спасибо!

Ответы [ 6 ]

1 голос
/ 10 августа 2017

Ваша главная проблема в том, что i выходит за рамки. i может использоваться только внутри цикла for. Поместите операторы put в цикл for. Как это:

% calculates the population of a city from year 2000 to 2020

var popstart : real := 80000
var popgrowth : real
var popend : real
var growthrate : real := 0.03

% popgrowth := popstart * growthrate
for i : 2000..2020
    popgrowth := popstart * growthrate
    popstart += popgrowth
    put "year  population"
    put "====  =========="
    put  i, "  ", popstart
end for

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

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

Ресурсы для помощи: http://touque.ca/EC/programming/Turing/

Немного более придирчивых деталей, которые не связаны: оператор for не имеет правильного отступа, а by 1 не нужен.

1 голос
/ 07 января 2010

Еще один ответ, еще меньше зная о Тьюринге .... Я предполагаю, что i находится только в области видимости во время цикла, поскольку именно там он объявлен, поэтому он выдает ошибку, когда вы пытаетесь использовать i вне цикла в конце. Это объясняет, почему меньшая программа, которую вы опубликовали, работает, а большая - нет. А также почему возникает ошибка при попытке объявить i сначала вне цикла, а затем снова объявить его в операторе цикла.

Я верю, что это то же самое, что и Уолвер, но на самом деле не объяснил почему. (Его ответ должен исправить это, если мы правы о том, что i действителен только в цикле)

1 голос
/ 07 января 2010

Вы должны объявить меня. я - переменная, которая начинается с 2000 года и продолжается до 2020 года.

var i: int должен помочь.

0 голосов
/ 26 октября 2014

Я не знаю, как объяснить, но вы можете понять, правильно ли это или нет. (Я делаю некоторые изменения в вашем контенте.)

var popstart : int := 80000
var popgrowth : real
var popend : real
var growthrate : real := 0.03
var number:real
% popgrowth := popstart * growthrate
    for i : 2000..2020 by 1
    number:=i
popgrowth := popstart * growthrate
end for

put "year  population"
put "====  =========="
put  number, "  ", popgrowth
0 голосов
/ 08 января 2010
% calculates population growth for city of Whitby between 2000 and 2020.

var popstart : int := 80000
var popgrowth : real
var growthrate : real := 0.03

put "year  population"
put "====  =========="
put "2000  80000"

popgrowth := popstart
for i : 2001 .. 2020 by 1
    popgrowth := popgrowth + (popgrowth * growthrate)
    put i, "  ", popgrowth:0:2
end for
0 голосов
/ 07 января 2010

Я мало что знаю о Тьюринге, но подозреваю, что for i ... является неявным объявлением i.

Итак, я не знаю, как вы могли бы это исправить, но вы могли бы обойти это, сделав это:

var last_year: int
for i : 2000..2020 by 1
    popgrowth := popstart * growthrate
    last_year = i
end for

put "year  population"
put "====  =========="
put  last_year, "  ", popgrowth
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...