Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2011, 01:05   #1
Heming
Форумчанин
 
Аватар для Heming
 
Регистрация: 06.07.2010
Сообщений: 105
Вопрос Перевод из Бэйсика в Паскаль

Помогите пожалуйста, я в бэйсике на шарю, а этот кусок кода очень нужен, кто разбирается и не затруднит переконвертите плз
Carpe Diem

Последний раз редактировалось Heming; 01.12.2011 в 01:05. Причина: не та картинка
Heming вне форума Ответить с цитированием
Старый 01.12.2011, 03:51   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

код, имхо, бредовый. Что такое E в 13-й строке, хрен знает.

http://ideone.com/64gNO

(т.к. в оригинале выхода из цикла вобще нет, я добавил ограничение на 100 итераций)
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 01.12.2011, 18:20   #3
Heming
Форумчанин
 
Аватар для Heming
 
Регистрация: 06.07.2010
Сообщений: 105
По умолчанию

Спс,огромное, я только пришел домой, сразу проверить, вечерком буду разбираться
а на счет бредовасти мб это прояснит ситуацию
http://kvant.mccme.ru/1992/06/proble...programmir.htm
Я просто еще не вникал в статью, мне просто друг, который с заядлой регулярностью штудирует квант, сказал мне что мол в этой статье есть код моей задачи на бейсике, он мне кинул картинку и ссылку, я сразу увидев код впал в печаль. Когда сделаю уже прогу, апну тему как "Проблема Гольдбаха" и выложу свое творенье.
Carpe Diem

Последний раз редактировалось Heming; 01.12.2011 в 18:23.
Heming вне форума Ответить с цитированием
Старый 01.12.2011, 21:59   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

дык надо было сразу с этого и начать, а не выкладывать творение неизвестного лаборанта, который упражнялся на бейсике в далёком 1970 году )

вот прога, работающая по описанному в конце статьи алгоритму.

http://ideone.com/e4Rbe
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 01.12.2011, 23:35   #5
Heming
Форумчанин
 
Аватар для Heming
 
Регистрация: 06.07.2010
Сообщений: 105
По умолчанию

Спс, огромное, вы сделали даже больше чем я ожидал.
Carpe Diem
Heming вне форума Ответить с цитированием
Старый 03.12.2011, 01:12   #6
Heming
Форумчанин
 
Аватар для Heming
 
Регистрация: 06.07.2010
Сообщений: 105
По умолчанию

А можете обьяснить функцию проверки на простоту: в условии сказано что нои делят на все нечетные числа покак там не обьявится 0, а вы почему-то вместо деления берете корень квадратный из числа и прибавляете еденицу?!
Carpe Diem
Heming вне форума Ответить с цитированием
Старый 03.12.2011, 01:58   #7
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Речь про эту строчку, как я понимаю:

Код:
m := trunc(sqrt(v)) + 1;
m — это верхний предел для делителей. Дальше делить нет смысла. Почему корень? Потому, что если число делится на нечто большее, чем корень из него, это станет известно гораздо раньше. Например, 125 делится на 25. Но это выяснилось бы при проверке делимости на 5 (5*25=125). Таким образом, нет смысла пробовать делить 125 на делители, которые больше корня из 125, т.е. больше 11.

Ну а +1 это страховка, т.к. округление trunc() работает вниз, просто чтобы случайно не пропустить какой-то последний делитель, рядом с корнем. Возможно, +1 и не нужно, лень думать, проще заставить комп сделать одно лишнее деление.

Кстати, то же самое относится и к основному циклу:

Цитата:
2n-k=61; k=5
2n-k=59; k=7
2n-k=53; k=13
2n-k=47; k=19
2n-k=43; k=23
2n-k=37; k=29
2n-k=29; k=37
2n-k=23; k=43
2n-k=19; k=47
2n-k=13; k=53
2n-k=7; k=59
2n-k=5; k=61
Легко заметить, что тут результаты симметричны относительно точки "2n-k=37; k=29", следовательно, достаточно досчитать до какой-то "средней" точки, после которой оставшиеся точки получаются из уже полученных прострым симметричным отображением левой части на правую и наоборот. Количество расчётов сокращается вдвое.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось veniside; 03.12.2011 в 02:10.
veniside вне форума Ответить с цитированием
Старый 03.12.2011, 02:46   #8
Heming
Форумчанин
 
Аватар для Heming
 
Регистрация: 06.07.2010
Сообщений: 105
По умолчанию

Я понял впринципе, я когда не разобрался с этим методом пытался воспользоваться Теоремой Вильсона, но потом понял что для больших числе будет беда, я в процедурах-фунцкиях новичок, но вот эту задачу мне нужно сделать процедурой(точнее нужна процедура нахождения простых чисел)
я понимаю что функцией делать логичней, как сделать это процедурой...?!
вот что я пытался сделать
вышел откровенный бред с кучей ошибок:

Код:
Program lab6;
var n,x,y:integer;first,second:Boolean;
function Factorial(m: integer): LongInt;
var
  fact: longint;
begin
  fact := 1;
  for m := 1 to m do
  fact := fact*m;
  Factorial := fact;
end;

Procedure prostota(var z,b:integer);
begin
if ((factorial(z-1)+1) mod z)=0 then
first:=True else first:=False;
if ((factorial(b-1)+1) mod b)=0 then
second:=True else second:=False;
end;

begin
write('Vvedite vashe parnoe chislo(>4) ');
readln(n);
x:=3;
y:=n-x;
while (x<=y) do begin
prostota(x,y);
if (first=True) and (second=True) then
   writeln('n-x=', n-x, ';  x=', x);
   x:=x+2;
end;
 readln;
    end.
Можете обьяснить как переделать вашу функцию в процедуру для моей задачи(also решение в кванте и то что вы мне дали , это решение в общем случае, т.е. нижняя граница n и верхняя и куча вариантов, а у меня для фиксированного n, ну т.е. задает пользователь, хотя это и не так важно)


Цитата:
Кстати, то же самое относится и к основному циклу:

Цитата:
2n-k=61; k=5
2n-k=59; k=7
2n-k=53; k=13
2n-k=47; k=19
2n-k=43; k=23
2n-k=37; k=29
2n-k=29; k=37
2n-k=23; k=43
2n-k=19; k=47
2n-k=13; k=53
2n-k=7; k=59
2n-k=5; k=61
Легко заметить, что тут результаты симметричны относительно точки "2n-k=37; k=29", следовательно, достаточно досчитать до какой-то "средней" точки, после которой оставшиеся точки получаются из уже полученных прострым симметричным отображением левой части на правую и наоборот. Количество расчётов сокращается вдвое.
Я обязательно этим займусь когда в общем работаспособность выйдет
Carpe Diem

Последний раз редактировалось Heming; 03.12.2011 в 02:54.
Heming вне форума Ответить с цитированием
Старый 03.12.2011, 03:06   #9
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

большого (да и маленького тоже) смысла в этом я не вижу, но вот как может выглядеть ваша процедура, если отбросить Вильсона с факториалами, и взять функцию prime() из моего кода без изменений:

Код:
procedure prostota(var z, b: integer);
begin
  first := prime(z): 
  second := prime(b);
end;
Гораздо логичнее, имхо, было бы вобще забыть про эту процедуру и вместо этих строчек:

Код:
prostota(x,y);
if (first=True) and (second=True) then
сделать такую проверку:

Код:
if ( prime(x) and prime(y) ) then ...
заодно выкинув переменные first и second.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 03.12.2011, 03:12   #10
Heming
Форумчанин
 
Аватар для Heming
 
Регистрация: 06.07.2010
Сообщений: 105
По умолчанию

Была б моя воля, я б ваще в данной задаче к процедурам бы не прикосался, а сделал бы как вы посоветовали, но в условии сказано, помимо прочего:
сделать распознование простых чисел именно процедурой(следущая лабораторная будет под функции, а это типа под процедуры), я наверное плюну и сделаю эту фиктивную процедуру, используя вашу функцию.
Carpe Diem

Последний раз редактировалось Heming; 03.12.2011 в 03:16.
Heming вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно к сессии перевести код из бэйсика в phyton keit Помощь студентам 0 29.05.2011 00:50
Перевод программы с Паскаль на С++ Sentteriys Общие вопросы C/C++ 1 16.05.2011 22:40
нужна перевести циклическую сумму с бэйсика на с++ TiNTi Помощь студентам 2 01.05.2011 23:04
Паскаль перевод чисел Darf Помощь студентам 9 27.05.2009 17:46