Member 13983896 Ответов: 3

Как сделать цикл dowhile в псевдокоде?


Программа получит простые числа из входных данных, а затем суммирует все проверенные простые числа.

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

Prompt for input
X = 0
prime_amount = 0
prime_sum = 0
DOWHILE X < input
Prompt for prime_number
Y = 2 
Prime = TRUE
IF prime_number = 1 THEN 
                                 Prima = FALSE
           		ENDIF
DOWHILE Y <= prime_number AND Prime = TRUE
IF prime_number Mod Y = 0 THEN
Prime = FALSE
                        ENDIF
Y = Y + 1
ENDDO
IF Prime = TRUE THEN 
prime_amount = prime_amount + 1
prime_sum = prime_sum + prime_number
ENDIF
ENDDO
Output “Amount of prime numbers” + prime_amount
Output “Total sum of prime numbers” + prime_sum
END

3 Ответов

Рейтинг:
2

OriginalGriff

Не совсем ясно, что вам нужно, но есть один способ. DOWHILE...ENDDO в вашем псевдокоде, и это переводится на C как:

while(Y <= prime_number && Prime)
   {
   ... body of the loop
   }
Но это же тривиально!

Если это не то, что вы ищете, тогда вам нужно объяснить гораздо, гораздо более подробно, что вы пытаетесь достичь.


Рейтинг:
2

Patrice T

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

Prompt for input
X = 0
prime_amount = 0
prime_sum = 0
DOWHILE X < input
	Prompt for prime_number
	Y = 2
	Prime = TRUE
	IF prime_number = 1 THEN
		Prima = FALSE
	ENDIF
	DOWHILE Y <= prime_number AND Prime = TRUE
		IF prime_number Mod Y = 0 THEN
			Prime = FALSE
		ENDIF
		Y = Y + 1
	ENDDO
	IF Prime = TRUE THEN
		prime_amount = prime_amount + 1
		prime_sum = prime_sum + prime_number
	ENDIF
ENDDO
Output "Amount of prime numbers" + prime_amount
Output "Total sum of prime numbers" + prime_sum
END

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]
-----
Советы:
- инициализируйте счетчик циклов как можно ближе к циклу, это поможет считыванию
Prompt for input
X = 0
prime_amount = 0
prime_sum = 0
DOWHILE X < input
	Prompt for prime_number
	Y = 2
	Prime = TRUE
	IF prime_number = 1 THEN
		Prima = FALSE
	ENDIF
	Y = 2
	DOWHILE Y <= prime_number AND Prime = TRUE
		IF prime_number Mod Y = 0 THEN
			Prime = FALSE
		ENDIF
		Y = Y + 1
	ENDDO
	IF Prime = TRUE THEN
		prime_amount = prime_amount + 1
		prime_sum = prime_sum + prime_number
	ENDIF
ENDDO
Output "Amount of prime numbers" + prime_amount
Output "Total sum of prime numbers" + prime_sum
END

- Ваш алгоритм не будет работать из-за '=' Здесь
DOWHILE Y <= prime_number AND Prime = TRUE

Это '=' здесь сделает y=prime_number на последнем цикле, и таким образом y будет делителем числа prime_number.
- Ваш алгоритм-это очень грубая сила, перебор. Подумайте об этом, какие делители вам нужно проверить, чтобы узнать, является ли 97 простым числом или нет?


Рейтинг:
1

KarstenK

Я бы написал это с головой, телом и ногой таким образом:

DO
  ///instructions
WHILE condition = TRUE
Но вам лучше ознакомиться с документацией нужного стиля псевдокода или спросить своего учителя.