Другие языки программирования и технологии

qbasic простые числа

на любое число прога выдает что оно простое что не правильно? ****** Программа определяющая простое число или нет CLS INPUT n i = 2 DO UNTIL ((n MOD i) = 0) OR (i = n): i = i + 1: LOOP IF i = n THEN k = true else k=false IF k = true THEN PRINT 1 Добавлено 16 часов назад ну у меня цикл и выполняется пока остаток не равен нулю и прекрщается когда остаток стновится равен нулю
Последние две строчки ужасны. Они правильны, но на три четверти бессмысленны.
Например, IF i = n THEN k = true else k=false упрощается до строки k=i=n
Примерно так же выглядит сравнение IF k = true THEN ...оно упрощается до IF k THEN ...
А алгоритм.. . Ну, скажи на милость, зачем тебе понадобилось OR (i = n) ? Убери его и все будет почти работать, за исключением числа 2 и, вероятно, 1. И лишние скобки убери.. .
P.S. "а что значит k=i=n почему так можно заменить" А, ты девушка, тогда простительно :), у девушек интерес к программированию - исключение, хотя оно было фактически создано двумя женщинами - Адой Лавлейс и Грейс Хоппер.. . Это значит, k присвоить значение выражения i=n, то есть сравнения i с n, а результат такого сравнения сам по себе - логического типа, то есть true или false. В Бейсике знак равенства используется в двух значениях, в зависимости от того, где находится - как символ оператора присваивания и как символ операции сравнения. И k=true - это масло масляное - "если это правда, что это правда... " ;)
Аян Байбосынов
Аян Байбосынов
22 474
Лучший ответ
Не тебе ли я вчера отвечал?
((n MOD i) = 0)
Он у тебя на первом же прогоне всвтанет :) НЕ РАВНО.
Серёга Шубин
Серёга Шубин
78 583
P.P.S. Стоп, извини, все намного хуже с последними операторами, я забыл, что в QBASIC - это ведь он? вообще нет логических чисел true и false. Они есть, скажем, в Pascal или C++, а тут они воспринимаются просто как имена новых переменных, изначально равных нулю. То есть в QBASIC последние строчки вообще чепуха. Чувствуется, что ты учила Pascal... Но мои замечания насчет упрощения последних строк верны для Pascal, в нем
IF i = n THEN k = true else k=false
IF k = true THEN PRINT 1
будет в цивилизованном виде выглядеть как
k:=i=n;
if k then writeln(1);
а еще лучше будет объединить эти строчки в
if i=n then writeln(1);
и уж совсем хорошо просто написать
writeln(i=n);
при этом будет печататься true или false.
P.P.S. А у меня на клавишах русские буквы почти стерлись, пишу почти вслепую :(
P.P.P.S. Вообще тяжело переключаться с одного языка на другой, вроде пишешь правильно, потом смотришь - ан нет, это было правильно для другого языка :)) Но ты молодец, быстро перейти на другой язык тяжело, требует переработки стереотипов, особенно от Pascal к Basic, который не обращает внимания на множество ошибок, которые не пропустил бы Pascal... Pascal бы тут же завопил, увидев необъявленные переменные, а Basic проглотил как должное и истолковал по-своему ;)
P^4.S. ;) Тогда у тебя, наверное, самоучитель по Visual Basic? Дело в том, что логические переменные в стиле Pascal были введены в поздних версиях Basic, так что Basic Basic'у рознь.. .
В общем, если ты знаешь Pascal, советую написать сначала на нем, а потом перевести на Basic, так будет легче.
а последние две строчки - не поменял :)