2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Задача про простые числа
Сообщение06.01.2017, 14:54 
Здравствуйте!
У меня есть задача по вычислению суммы простых чисел в интервале от 1024 до 16384.
Я использовал вот такую программу на языке Pascal:
код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
program prost_01;
uses crt;
var ch, del, kd, k: integer;

begin clrscr;
k:=0;
for ch:=1024 to 16384 do
              begin
              kd:=0;

              for del:=1 to ch do
                              if ch mod del=0 then inc(kd);
             
              If kd=2 then k:=k+ch;
              end;

write('k=',k);
end.

Но при её выполнении компилятор открывает командную строку, очень быстро выдаёт ответ, и закрывает её. Проблема в том что компьютер выдаёт ответ так быстро, что я не успеваю прочесть ответ.
Спасибо,
С уважением,
Лев

 
 
 
 Re: Задача про простые числа
Сообщение06.01.2017, 15:15 
Если вы работаете со средой Borland Pascal, что, вообще говоря, неочевидно, то есть волшебная комбинация клавиш Alt+F5 вроде, показать экран выполнения программы, а то и просто открыть соответствующее окно в среде Можно запускать программу из какой-то другой программы, которая может прочитать ответ. Например, cmd.exe или far.exe. Можно перенаправлять вывод программы в некоторый файл, а потом читать его. Можно поставить точку останова после вывода. Можно дописать код ожидания нажатия клавиши и/или задержки.

 
 
 
 Re: Задача про простые числа
Сообщение06.01.2017, 15:48 
Спасибо за быстрый ответ! А как делать эту "точку останова"?
Большое спасибо!

 
 
 
 Re: Задача про простые числа
Сообщение06.01.2017, 16:09 
Аватара пользователя
kotenok gav
после команды
Код:
write('k=',k);

добавьте строку
Код:
readln;

Ваша программа выдает $k=14504452$

 
 
 
 Re: Задача про простые числа
Сообщение06.01.2017, 16:52 
Спасибо за помощь!

 
 
 
 Re: Задача про простые числа
Сообщение06.01.2017, 17:43 
Вместо readln можно также использовать конструкцию
Код:
repeat
until keypressed;

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

 
 
 
 Posted automatically
Сообщение06.01.2017, 19:19 
 i  Тема перемещена из форума «Помогите решить / разобраться (М)» в форум «Программирование»
Причина переноса: тематика.

 
 
 
 Re: Задача про простые числа
Сообщение07.01.2017, 04:15 
Спасибо за все советы!
К сожалению, ни первый ни второй вариант у меня почему-то не сработал.
Поэтому - двойное спасибо за посчитанное число! Но я буду пытаться ещё!
С уважением,
Лев

 
 
 
 Re: Задача про простые числа
Сообщение07.01.2017, 05:19 
kotenok gav, не мучайтесь, используйте для таких супер-задач онлайн компиляторы:
http://rextester.com/DWK44515
https://ideone.com/R6Gaqv

ЗЫ только не спрашивайте зачем я убрал uses crt и в одном коде заменил integer на longint, попробуйте догадаться самостоятельно.

ЗЗЫ алгоритм в коде неоптимален до неприличия.

 
 
 
 Re: Задача про простые числа
Сообщение07.01.2017, 10:43 
_Ivana в сообщении #1182395 писал(а):
ЗЗЫ алгоритм в коде неоптимален до неприличия.


Этот алгоритм неоптимален до совершенства. В том смысле, что трудно придумать еще более неоптимальный.
Но может в этом и суть.
Мне, например, нравится написать код в лоб, а потом смотреть как путем последовательных улучшений время расчета уменьшается с десятка минут/часов до пары/доли секунд. Здесь, правда, неоптимальность незаметна для глаза. Но вот если вместо $2^{14}$ взять $2^{32}$ - отличное поле для работы получается.

 
 
 
 Re: Задача про простые числа
Сообщение07.01.2017, 11:23 

(Оффтоп)

Меня же особо "радует" проверка ch mod 1 = 0. :facepalm:

 
 
 
 Re: Задача про простые числа
Сообщение07.01.2017, 16:27 
kotenok gav в сообщении #1182391 писал(а):
К сожалению, ни первый ни второй вариант у меня почему-то не сработал.

Ну раз уж Вы Crt всё равно Uses, то попробуйте такой код:

Код:
if ReadKey=#0 then
    if ReadKey=#0 then;


RikkiTan1 в сообщении #1182255 писал(а):
Ваша программа выдает $k=14504452$

Ну поскольку это явно обычный Паскаль -- конкретно эта программа ничего внятного не выдаст. Зато может выдать что-нибудь отрицательное.

 
 
 
 Re: Задача про простые числа
Сообщение07.01.2017, 19:16 
подписался, тоже интересно.. сталкнулся с такой же проблемой когда вдруг оказалось нужно прочитать ответ в командной строке и ни как...

 
 
 
 Re: Задача про простые числа
Сообщение09.01.2017, 07:00 
Огромное спасибо всем за советы, помощь и науку!
Я только начал использовать программы, и мне надо многому учиться. Отдельное спасибо Ivanne - я попробую разобраться с Вашей задачей.
С уважением,
Лев

 
 
 [ Сообщений: 14 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group