Member 14818346 Ответов: 2

Помогите с алгоритмом открытия и закрытия шкафчиков


Всем привет!!
Я изучаю программирование и пытаюсь решить следующее упражнение:

В школьном коридоре есть 11 шкафчиков с номерами от 0 до 10, все они закрыты. Следуйте инструкциям в следующем алгоритме псевдокода, а затем ответьте на следующий вопрос.

Алгоритм:

1. Количество шкафчиков для перемещения ("шаг") равна 1.
2. Перейдите к первому шкафчику.
3. Если вы находитесь в конце шкафчиков или позади них, добавьте 1 к размеру шага, а затем перейдите к шагу 2.
Если размер шага больше 10, перейдите к шагу 7.
4. Откройте или закройте шкафчик. Например: если шкафчик, перед которым вы стоите, находится
закрыто, открой его. Если шкафчик уже открыт, закройте его.
5. переместите шкафчики "размер шага" вниз (то есть, если размер шага равен 1, Перейдите к следующему шкафчику. Если это
это 2, переместить 2 шкафчика вниз, пропуская 1 и т. д.).
6. Перейдите к шагу 3.
7. Конец.

Какие номера шкафчиков открыты?

Правильные ответы-1,4,9 ; но мои ответы-1,4,9,10 . Любой может объяснить мне , в чем моя ошибка?
Большое спасибо.

Что я уже пробовал:

subprocess fillinguparray(name,size)
	for i<--0 to size with step 1 do
		Write "CLOSE"
		Read name[i]
	endfor
EndSubProcess

subprocess showscreen(name,size)
	For i<--0 to size with step 1 do
           Print name[i]
	endfor
EndSubProcess


Algorithm no_title
	
	stepsize=1
	
	Dimension lockers[11]
	
	fillinguparray(lockers,10);
	
	While stepsize<10 do
		For i<--0 to 10 with step stepsize do
		        if lockers[i] = "CLOSE" then
				lockers[i] = "OPEN" ;
			if not
				if lockers[i] = "OPEN"  then
					lockers[i] = "CLOSE" ;
				endif
		        Endif	
		EndFor	

		stepsize=stepsize+1; 
	EndWhile
	
	showscreen(lockers,10)

EndAlgorithm

CHill60

Вы опубликовали алгоритм, но не вопрос. Нам также нужна ваша работа на английском языке пожалуйста

Patrice T

Из вопроса: "правильные ответы-1,4,9 ; но мои ответы-1,4,9,10 . Любой может объяснить мне , в чем моя ошибка?"

CHill60

Это вопрос ОП - смысл учения не ясен. Это те шкафчики, которые надо открывать, закрывать, не трогать - что?

2 Ответов

Рейтинг:
2

Richard MacCutchan

Основы алгоритма довольно просты. Вам нужны две петли:

// The outer loop counts from 1 to the highest step value:
for (int stepvalue = 1; stepvalue < maximum; stepvalue++)
{
    // the inner loop counts from zero (the first locker location)
    // to the index value of the last locker.
    // But this loop increments itself by the stepvalue, so on the first outer loop
    // it will examine every locker, on the next outer loop every other, etc.
    for (int offset = 0; offset < maxoffset; offset += stepvalue)
    {
        // here swap the open/closed status of locker[offset]
        locker[offset] = !locker[offset]; // 0 becomes 1, and 1 becomes 0
    }
}


Patrice T

Это в основном то, что сделал ОП.

Richard MacCutchan

Но он говорит, что получил неверный ответ. Когда я попробовал, это сработало.

Рейтинг:
14

Patrice T

Цитата:
Правильные ответы-1,4,9 ; но мои ответы-1,4,9,10 . Любой может объяснить мне , в чем моя ошибка?

While stepsize<10 do

Почему последний размер шага равен 9, попробуйте включить 10!
While stepsize<=10 do

или
While stepsize<11 do


CHill60

ОП пытается связаться с вами через решение

Patrice T

Спасибо за информацию, но решение удалено.

CHill60

:вздох: надеюсь, они увидели мой ответ на свое решение и вернутся с комментариями

Member 14818346

Спасибо вам, ребята. Извините, это был мой первый пост; я сделал много ошибок, и у меня были проблемы с редактированием сообщения, я не знаю, была ли это какая-то проблема на веб-сайте или в моем интернет-соединении.
Но, да, проблема была решена, спасибо Патрис и всем, кто ответил.
Большое спасибо!

Patrice T

если проблема решена, вы можете принять полезные ответы.
вторичный эффект, он закроет вопрос.