Домашнее задание: помогите перевести псевдокод в код C - PullRequest
0 голосов
/ 28 апреля 2011

Мы просматриваем образец тестовой статьи для курса и хотели бы помочь программисту C, переводящему псевдокод в код C.

У нас возникли разногласия, поскольку два возможных варианта выглядят правильно.(Я НЕ программист и не мои коллеги)

Псевдокод:

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

Возможные ответы:

  1. Если (i> = 200), то выйти
  2. Если (i> 200), то выйти
  3. Если (i <200), тогда выйти </li>
  4. Если (i <= 200), тогда выйти </li>

Мы знаем, что ответ НЕ 3 и 4.

Я полагаю, что ответ «2» (если было написано 200 символов; завершить программу), но мои коллеги считают, что правильный ответ «1» (если было написано 200 или более символов; завершить программу).

Посоветуйте, пожалуйста, правильный ответ.

Ответы [ 8 ]

4 голосов
/ 28 апреля 2011

Я не вижу "200 или больше" или "более 200" в псевдокоде. Может быть, правильный ответ - if (i == 200) then exit.

2 голосов
/ 28 апреля 2011

Притворись, что ты компьютер. Каждый раз, когда вы записываете символ в буфер, вы увеличиваете i.

Предполагая, что вы начинаете с 0, что является нормальным для C, после того, как вы написали один символ, i будет равно 1. После второго символа, i равно 2. Экстраполировать.

1 голос
/ 28 апреля 2011

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

Правильный ответ: 1: Если (i> = 200), выйдите.

Вот почему.

Ваш псевдокод специально говорит, что если написано 200 символов, выйдите.

Если бы ответ был 2: он завершился бы только после того, как было написано 201 символ (с 201> 200).

1 голос
/ 28 апреля 2011

Ну, на самом деле ни один из ответов не является C. Вы переводите утверждение в псевдокод (извините, я знаю его символику, но есть еще различие).В любом случае, поскольку в нем не указано более 200, я бы проголосовал за 1. Если (i> = 200), тогда выйдите из себя, как он сообщает, когда вы нажимаете 200, так что включительно.

1 голос
/ 28 апреля 2011

В С-коде угловая скобка означает то же самое, что и в математике:
< = меньше
> = больше

И если вы добавите знак =, вы получите меньше / больше или равно .

Если i - количество написанных символовв стек, тогда i> = 200 ( i больше или равно 200 ) - ваше решение.

1 голос
/ 28 апреля 2011

Похоже, "Если (я> = 200), то выход" для меня.

0 голосов
/ 28 апреля 2011

я голосую за 1.if (i> = 200), поскольку это то, что говорит ваша спецификация.В C нет ключевого слова then, и это должно было быть 'exit (0);'вместо «выхода».

if(i >= 200){
    exit(0);
}
0 голосов
/ 28 апреля 2011

Это зависит от того, как индексировано i и как настроен ваш цикл.Если он проиндексирован на 0 (вероятно) и у вас есть буфер (buf), вы бы сделали что-то вроде этого.

data_type buf[200];
int i;
for (i = 0; i < 200; i++) {
  // write data to buffer
  buf[i] = data;
}

Поэтому, когда мне становится 200, цикл завершается (и условиеi < 200).data_type - это данные, которые вы используете в буфере.Если i был проиндексирован, начиная с единицы, то ваше условие цикла было бы i <= 200.

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