2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Задача про простые числа
Сообщение06.01.2017, 14:54 


21/05/16
4292
Аделаида
Здравствуйте!
У меня есть задача по вычислению суммы простых чисел в интервале от 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 


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

 Профиль  
                  
 
 Re: Задача про простые числа
Сообщение06.01.2017, 15:48 


21/05/16
4292
Аделаида
Спасибо за быстрый ответ! А как делать эту "точку останова"?
Большое спасибо!

 Профиль  
                  
 
 Re: Задача про простые числа
Сообщение06.01.2017, 16:09 
Аватара пользователя


21/09/13
137
Уфа
kotenok gav
после команды
Код:
write('k=',k);

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

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

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


21/05/16
4292
Аделаида
Спасибо за помощь!

 Профиль  
                  
 
 Re: Задача про простые числа
Сообщение06.01.2017, 17:43 
Заслуженный участник


12/09/10
1547
Вместо readln можно также использовать конструкцию
Код:
repeat
until keypressed;

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

 Профиль  
                  
 
 Posted automatically
Сообщение06.01.2017, 19:19 
Модератор


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

 Профиль  
                  
 
 Re: Задача про простые числа
Сообщение07.01.2017, 04:15 


21/05/16
4292
Аделаида
Спасибо за все советы!
К сожалению, ни первый ни второй вариант у меня почему-то не сработал.
Поэтому - двойное спасибо за посчитанное число! Но я буду пытаться ещё!
С уважением,
Лев

 Профиль  
                  
 
 Re: Задача про простые числа
Сообщение07.01.2017, 05:19 


05/09/12
2587
kotenok gav, не мучайтесь, используйте для таких супер-задач онлайн компиляторы:
http://rextester.com/DWK44515
https://ideone.com/R6Gaqv

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

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

 Профиль  
                  
 
 Re: Задача про простые числа
Сообщение07.01.2017, 10:43 
Заслуженный участник


12/09/10
1547
_Ivana в сообщении #1182395 писал(а):
ЗЗЫ алгоритм в коде неоптимален до неприличия.


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

 Профиль  
                  
 
 Re: Задача про простые числа
Сообщение07.01.2017, 11:23 
Заслуженный участник


20/08/14
11766
Россия, Москва

(Оффтоп)

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

 Профиль  
                  
 
 Re: Задача про простые числа
Сообщение07.01.2017, 16:27 
Заслуженный участник


11/05/08
32166
kotenok gav в сообщении #1182391 писал(а):
К сожалению, ни первый ни второй вариант у меня почему-то не сработал.

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

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


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

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

 Профиль  
                  
 
 Re: Задача про простые числа
Сообщение07.01.2017, 19:16 


01/01/17
6
подписался, тоже интересно.. сталкнулся с такой же проблемой когда вдруг оказалось нужно прочитать ответ в командной строке и ни как...

 Профиль  
                  
 
 Re: Задача про простые числа
Сообщение09.01.2017, 07:00 


21/05/16
4292
Аделаида
Огромное спасибо всем за советы, помощь и науку!
Я только начал использовать программы, и мне надо многому учиться. Отдельное спасибо Ivanne - я попробую разобраться с Вашей задачей.
С уважением,
Лев

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group