2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5, 6  След.
 
 
Сообщение02.01.2009, 16:34 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов
Видно, моя задача программистам не понравилась. Или просто все ещё Новый год празднуют? :)
Я решила первую часть задачи, а именно: заполнила латинский квадрат, начинающийся с приведённых в предыдущем сообщении 4-х строк. Сделала я это просто подбором, без всякой программы. Однако неясно, правильно ли заполнен квадрат. Можно ли построить латинский квадрат ортогональный этому квадрату? Ау, программисты? Кто может ответить на этот вопрос?
Вот какой латинский квадрат у меня получился:
Код:
13 0 1 3 2 4 5 6 7 8 9 10 11 12
0 13 2 12 10 7 9 5 4 1 11 8 3 6
1 2 13 9 5 3 12 7 11 0 4 6 8 10
3 12 9 13 6 2 7 11 1 5 10 0 4 8
2 10 5 6 13 8 1 3 0 4 7 9 12 11
4 7 3 2 8 13 6 9 12 10 0 11 1 5
5 9 12 7 1 6 13 0 8 11 3 4 10 2
6 5 7 11 3 9 0 13 10 12 8 1 2 4
7 4 11 1 0 12 8 10 13 6 5 2 9 3
8 1 0 5 4 10 11 12 6 13 2 3 7 9
9 11 4 10 7 0 3 8 5 2 13 12 6 1
10 8 6 0 9 11 4 1 2 3 12 13 5 7
11 3 8 4 12 1 10 2 9 7 6 5 13 0
12 6 10 8 11 5 2 4 3 9 1 7 0 13

 Профиль  
                  
 
 Решето Сундарама
Сообщение31.05.2009, 11:36 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов
Есть в Википедии статья “Решето Сундарама”.
http://ru.wikipedia.org/wiki/%D0%A0%D0% ... 0%BC%D0%B0
В статье написано, что алгоритм Сундарама позоляет находить все простые числа “до некоторого целого n”. На самом деле этот алгоритм позволяет находить все простые числа в любом интервале натурального ряда, а не только в начале этого ряда (конечно, если этот интервал находится в тех пределах, с которыми справляется данный алгоритм за реальное время).
Я в обсуждении статьи предложила такой вариант программы. Вот текст программы на языке QBASIC:
Код:
5 PRINT "VVEDITE M"
7 INPUT M
8 IF INT(M / 2) <> M / 2 THEN 5
9 IF M < 4 THEN 5
10 PRINT "VVEDITE L"
11 INPUT L
12 FOR I = M + 1 TO L STEP 2
15 B = I: A = (B - 1) / 2
17 C = A - 1
20 FOR N = 1 TO C
25 K = (A - N) / (1 + 2 * N)
30 IF INT(K) = K THEN 40
35 NEXT N
36 W = W + 1: PRINT "#"; W
37 PRINT B
40 NEXT I
45 PRINT
50 END

К сожалению, я не знаю больших никаких языков.
Просьба переписать эту программу, например, на языке C++ (на этом языке реализован алгоритм Сундарама в самой статье).
Или на каком-нибудь другом современном языке. Вы можете самостоятельно поместить свою программу на другом языке в обсуждение статьи “Решето Сундарама” в Википедии.
Конечно, есть современные средства, позволяющие решать эту задачу гораздо эффективнее и быстрее, чем с помощью решета Сундарама. Но раз уж статья об этом методе есть в Википедии, то надо в ней представить все возможности данного алгоритма.

 Профиль  
                  
 
 Re: программирование
Сообщение31.05.2009, 13:41 
Аватара пользователя


28/02/09
19
Евпатория
В программировании прежде всего должна быть любовь к программированию, любовь к написанию программ, к проектированию, удовлетворение от проделанной работы, остальное приложится.
У нас в университете на 1-м курсе преподавали Pascal, после 1-го C++.
Сам я приобрёл любовь на стареньких компьютерах, Basic.
Но это не помешало потом изучить Pascal, C++. Сейчас я web-мастер(PHP, HTML, Javascript, Flash).
Как заметили выше, лучше самостоятельно сразу начинать писать программы для чего угодно и что угодно.
В университете много студентов, зная теорию не умеют программировать.
Что сейчас популярно для зарабатывания денег?
PHP,.NET, 1C Предприятие, C++. В основном всё сводится к использованию имеющихся библиотек или скриптов. Не учите C++ MFC, так как это уже устарело, как лет 9, для программирования офисных приложений под Windows есть C# (.NET) или Java(2).
Для web-сайтов, это PHP, ASP.NET, Flash, SilverLight.+CMS и т.д.
Для бухгалтерии, у вас всегда будет зарплата, если писать на 1С предприятие.
И еще не нужно уходить в религию о том, что использовать и что считается авторитетным у программистов, а что нет. Например разработчик С++ считается более почетным, чем .NET, PHP и т.д. Однако рынку не важно, что авторитетно у программистов, рынок требует быстро, качественно, недорого.
Поэтому основная цель это прибыльность, а не технология разработки. Самую классную, быструю программу рынок может не принять, если она выйдет с опозданием и устареет.

 Профиль  
                  
 
 Re: программирование
Сообщение31.05.2009, 14:25 
Заслуженный участник


27/04/09
28128
Nataly-Mak, примите перевод на Pascal! (Только алгоритм я не изучал, "перевёл" без оптимизаций.)
Код:
var
  M, L, I, A, B, C, N, W: Integer;
  K: Single;
label
  next_iter;
begin
  repeat
    Write('Введите M [M >= 4, чётное]: ');
    Readln(M);
  until not Odd(M) and (M >= 4);
  Write('Введите L: ');
  Readln(L);
  W := 0;
  I := M + 1;
  while I <= L do begin
    B := I;
    A := (B - 1) div 2;
    C := A - 1;
    for N := 1 to C do begin
      K := (A - N) / (2 * N + 1);
      if K = Int(K) then goto next_iter;
    end;
    Inc(W);
    Writeln('#', W, ' ', B);
next_iter:   
    Inc(I, 2);
  end;
  Readln;
end.

Конечно, могли быть ошибки; надеюсь, тогда меня поправят.

Что по теме: увлёкся программированием странным образом. Давным-давно мне подарили "обучающий компьютер" (клавиатура с гнездом для картриджа, могла также использоваться для видеоигр), который подключался к телевизору. Там было среди прочих вещей программирование на G-Basic (язык для игр). Потом в старинной книге по MS Office 95 вычитал, что макросы можно составлять на языке VBA и решил поискать про него. Доискался до книги по Visual Basic 6. Потом уж и не помню как оценил удобства Паскаля и теперь уже пишу себе модули-программы на Delphi 7. Несколько раз пробовал написать что-н. на C++ (хотя переходить на него решительно не собираюсь. Только иногда лёгкая печаль по операторам ++, +=, ?: и перегрузке), но увы (просто не компилировалось из-за чего-то с библиотеками, а терпение кончилось; хотя даже одна книга есть).
И хочу, хочу дальше программировать; и думаю, что это у меня неплохо выходит... :)

С мыслями об образовании согласен.

С какого языка начинать? Думаю, с какого бы не начали, всё равно, рано ли поздно, отыщется какой-нибудь "любимый" (или два, или десять :wink:); сейчас, когда натыкаюсь на свои "бейсичные творения", за голову держусь...

Прошу извинения за количество флуда :wink:

-- Вс май 31, 2009 17:27:20 --

delphiec в сообщении #218532 писал(а):
В программировании прежде всего должна быть любовь к программированию, любовь к написанию программ, к проектированию, удовлетворение от проделанной работы, остальное приложится.
<...>
Как заметили выше, лучше самостоятельно сразу начинать писать программы для чего угодно и что угодно.
В университете много студентов, зная теорию не умеют программировать.
<...>
И еще не нужно уходить в религию о том, что использовать и что считается авторитетным у программистов, а что нет. Например разработчик С++ считается более почетным, чем .NET, PHP и т.д.

Абсолютно согласен! :!:

 Профиль  
                  
 
 Re: программирование
Сообщение31.05.2009, 15:06 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов
arseniiv
Спасибо за программу! Я ведь очень давно на Паскале программировала, а теперь, конечно, забыла многое.
А вы сами можете проверить работу программы? Введите в программу чётное натуральное число $M>=4$, любое натуральное число $L>M$. Программа должна выдать вам все простые числа в интервале от $M+1$ до $L$. Перед каждым простым числом выводится его порядковый номер ($W$).
Например, при $M = 4$ и $L=20$ программа выдаст следующие простые числа:
5, 7, 11, 13, 17, 19
Недостаток программы: нижняя граница интервала $M+1=5$, поэтому теряются два простых числа в начале натурального ряда - 2 и 3. Впрочем, можно вставить в программу блок, чтобы эти числа не терялись, когда $M=4$.
Если вам нужны хорошие задачи для составления программ, можете посмотреть тему "Магические квадраты": topic12959.html (идите на последние страницы).

 Профиль  
                  
 
 Re: программирование
Сообщение31.05.2009, 16:38 
Аватара пользователя


28/02/09
19
Евпатория
Основная трудность при переводе на C++ из Basic, это ликвидация goto (так как не принято его использовать, потому что запутывает программу), а также обеспечение нормальной работы типов.
Вот алгоритм на C++ (Turbo C++ 3.0), конечно его можно улучшать, однако тест 4, 20, он проходит.
Спасибо за интересные задачи.
Код:
#include <iostream.h>

int main()
{
cout<<"Vvedite m: ";
int m;

cin>>m;
while((int(m/2)==m/2)&&(m>3))
   {
      cout<<"Vvedite L"<<endl;
      int l;
      cin>>l;
      if(l==0)break;//vihod
      double a,k=0.0,c;
      int b=0,w=0,t;
      for(int i=m+1;i<l;i+=2)
      {
         b=i;
         a=(b-1)/2;
         c=a-1;

         t=0;
         for(double n=1;n<c;n++)
         {

            k=(a-n)/(1+2*n);

            if(int(k)-k==0){t=1;break;}

         }

         if(t!=1)
         {
         w++;
         cout<<"#"<<" "<<w<<endl;
         cout<<b;
         }

      }
      cout<<endl;

   }

return 0;
}

 Профиль  
                  
 
 Re: программирование
Сообщение31.05.2009, 17:52 
Заслуженный участник


27/04/09
28128
Nataly_Mak, ну и чудесный же вы нашли алгоритм! Я сначала вывел числа от 4 до 100, те были точно простые (я их не проверял), а до тысячи все простые сгенерировались буквально за секунду!

(То есть всё работает...)

 Профиль  
                  
 
 Re: программирование
Сообщение31.05.2009, 20:22 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов
Очень благодарна за программы.
Скажите, а как велика верхняя граница интервала, для которой программа на представленных языках работает реальное время?
Например, на Бейсике мне удалось довольно быстро (несколько секунд) найти простые числа в интервале от $10^7+1$ до $10^7+100$, правда, числа эти вывелись в нормализованном виде ($1.000002E+07$ и $1.000008E+07$). Какие это на самом деле числа?
Когда я ввела $M=10^8$, $L=10^8+100$, программа "задумалась". Я не стала дожидаться, когда она что-нибудь скажет и прервала её выполнение.
В обсуждении статьи "Решето Сундарама" дам ссылку на эту страницу.
Ещё раз спасибо!

 Профиль  
                  
 
 Re: программирование
Сообщение11.07.2009, 10:35 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов
Здесь простенькая задачка для программистов.
Прошу помочь выполнить программу. Просто из любви к искусству (программированию) :)

 Профиль  
                  
 
 Re: программирование
Сообщение11.08.2009, 12:52 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов
Задачу предыдущего поста уже решили :)
Прошу помочь в решении другой задачи. Задача проста для программирования. Требуется найти шесть последовательностей из различных чисел Смита с одинаковым значением параметра $b$. Вот эти последовательности:

Код:
a1, a1 + 4b, a1 + 14b, a1 + 15b, a1 + 21b, a1 + 30b
a2, a2 + 4b, a2 + 5b, a2 + 17b, a2 + 24b, a2 + 25b
a3, a3 + 10b, a3 + 16b, a3 + 22b, a3 + 24b, a3 + 30b
a4, a4 + b, a4 + 2b, a4 + 12b, a4 + 13b, a4 + 23b
a5, a5 + 8b, a5 + 14b, a5 + 20b, a5 + 21b, a5 + 24b
a6, a6 + 2b, a6 + 9b, a6 + 10b, a6 + 15b, a6 + 21b

По составленной мной программе я нашла всего три нужных последовательности, при $b = 36$. Эти последовательности для $a_1$, $a_2$ и $a_6$.

Код:
1822 1966 2326 2362 2578 2902
20362 20506 20542 20974 21226 21262
22 94 346 382 562 778

Дело в том, что программа на языке QBASIC не осиливает проверку большого массива.
Половина работы сделана. Осталось найти три последовательности, для $a_3$, $a_4$, $a_5$.
Разумеется, можно заново найти все шесть последовательностей с другим значением параметра $b$.

О числах Смита можно прочитать, например, здесь. В этой теме есть превосходный генератор чисел Смита.

P. S. Эти последовательности нужны мне для построения нетрадиционного магического квадрата 6-го порядка из смитов.

 Профиль  
                  
 
 Re: программирование
Сообщение20.08.2009, 16:11 


27/07/09
21
> Если хотите сразу больше изучить как работает машина на как можно более низком уровне,
> то изучайте Си.
Нет, для этого лучше подойдет FORTH. Броуди "НАЧАЛЬНЫЙ КУРС ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ
ФОРТ" - замечательная книга. А с Си начинать это глупость.

> Если же не чувствуете достаточно сил, чтобы разбираться на низком уровне, начните с
> языка Python. Это поможет вам разобраться с базовыми понятиями, не заботясь о низкоуровневых
> вещах.
Нет уж. Для этого лучше подойдет Scheme. SICP - одна из лучших книг по программированию вообще.
С нее нужно начинать, по любому.

> Для профессии программиста в первую очередь важно владение технологиями и концепциями,
> а математика - это вторично.
Ну хотя бы дискретная математика. Ее в первую очередь необходимо знать.

> Мой обычный совет в таких случаях - это посидеть на сайтах с вакансиями, почитать и
> примерно понять, какие есть направления и какие к ним предъявляются требования со стороны
> работодателей.
А я вот считаю, что лучше книжки умные читать.

> Имхо, лучше всего начинать с Java.
Ни в коем случае, я в свое время начал с Java и испортил себе мозги, потом долго чинил.

> объектный подход к проектированию.
Забудьте ООП как страшный сон. Вот ФП - это другое дело. Про ФП читайте у
Харрисона "Функциональное программирование".

> Например разработчик С++ считается более почетным, чем .NET, PHP и т.д.
Ничего подобного. Если сравнивать зарплаты, то они одинаково маленькие. А если сами языки,
то они одинаково ужасны.

 Профиль  
                  
 
 Re: программирование
Сообщение21.08.2009, 10:46 


21/03/06
1545
Москва
Призываю начинающих осваивать профессию программиста не относится к словам AVM всерьез, ибо его заявления более чем спорны.

 Профиль  
                  
 
 Re: программирование
Сообщение21.08.2009, 11:08 


27/07/09
21
e2e4 в сообщении #236680 писал(а):
Призываю начинающих осваивать профессию программиста не относится к словам AVM всерьез, ибо его заявления более чем спорны.

Да? Вы ещё скажите, что в MIT неправильно преподают, в Кембридже. Что, то чему они учат - это всё спорно и т.д.

 Профиль  
                  
 
 Re: программирование
Сообщение21.08.2009, 13:37 
Заслуженный участник


15/05/09
1563
AVM в сообщении #236688 писал(а):
Вы ещё скажите, что в MIT неправильно преподают, в Кембридже.
Во-первых, было сказано о спорности Ваших утверждений, а не о неправильности преподавания в Кембридже или где-либо еще. Во-вторых, откуда следует, что MIT обладает абсолютной истиной? В третьих, откуда следует, что Ваши высказывания отражают то, что преподают в MIT? И что, там так буквально и преподают: ООП - это страшный сон? Вы преподаете в MIT?

Но Ваши высказывания по отдельным языкам программирования и парадигмам программирования в целом действительно спорны. Абсолютные утверждения о том, что тот или иной язык программирования (парадигма программирования) лучше или хуже, просто неверны. Судя по Вашему сообщению, Вы преподносите Ваш личный опыт (удачный или неудачный) как оценку языков и парадигм. Такого рода советы более чем спорны - по своей природе.

 Профиль  
                  
 
 Re: программирование
Сообщение21.08.2009, 14:05 
Заслуженный участник
Аватара пользователя


06/10/08
6422
PapaKarlo в сообщении #236729 писал(а):
И что, там так буквально и преподают: ООП - это страшный сон?

Википедия утверждает, что "In the academic realm of MIT there is a long tradition of criticizing object-oriented programming as a false annunciation." Понимаю, что это не авторитетный источник, но там еще ссылка на статью о том, что "no significant difference in productivity between OOP and procedural approaches"
http://en.wikipedia.org/wiki/Object-ori ... #Criticism

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 81 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.

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



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

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


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

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