+ Ответить в теме
Показано с 1 по 4 из 4

Тема: Перевод из TurboPascal

  1. #1
    Умник o1ps кто это? o1ps кто это? Аватар для o1ps
    Регистрация
    27.05.2006
    Сообщений
    546
    Поблагодарил(а)
    85
    Получено благодарностей: 56 (сообщений: 41).

    По умолчанию Перевод из TurboPascal

    Уважаемые программисты, не будете ли вы так любезны описать по-строково алгоритм этой задачи и действия в каждой строке. Проблема в том, что я не знаком с этим языком и мне очень проблематично в нем ориентироваться. Буду очень благодарен вам. Спасибо.


    program z18; {Напечатать все совершенные числа меньше m}
    { Справка: Совершенными называются числа сумма делителей включая 1,
    которых равна самому числу, делители не должны быть
    равны самому числу }
    uses crt;
    var i,j,k,m,sum:longint;
    b:array[1..50]of longint;
    begin
    clrscr;
    write('введите ограничение: ');readln(m);
    i:=1;{write('1');}
    while i<=m do
    begin
    sum:=0;k:=1;
    for j:=1 to i-1 do if i mod j=0 then begin
    b[k]:=j;inc(k);
    end;
    for j:=1 to k-1 do sum:=sum+b[j];
    if i=sum then write(' ',i);inc(i);
    end;
    readln;
    end.


    -------------------------------------------------


    program z45;
    { Найти двоичное представление для чётных совершенных чисел
    вида 2 в степени (p-1) умножить на ((2 в степени p)-1) }
    uses crt;
    var ch,p,s,sum,i,j,f,m,g:longint;
    procedure sistema(n:longint;var g:longint);
    var t:array[1..10]of longint;k:longint;
    begin
    j:=0;k:=0;
    while n>=1 do
    begin
    inc(k);inc(j);t[j]:=n mod 2;n:=n div 2;
    end;
    for j:=1 to k do g:=g*10+t[k+1-j];
    end;
    begin
    clrscr;
    write('ограничение: m=');readln(m);
    p:=1;s:=2;
    while p<=m do
    begin
    ch:s div 2)*(s-1);
    if ch mod 2=0 then
    begin sum:=0;
    for j:=1 to ch-1 do if ch mod j=0 then sum:=sum+j;
    if ch=sum then
    begin sistema(ch,g);writeln(g); end;
    end;
    inc(p);s:=s*2;
    end;
    readln;
    end.
    Графиня изменившимся лицом бежит пруду.

  2. #2
    Юзер Godahh кто это? Аватар для Godahh
    Регистрация
    18.03.2007
    Сообщений
    71
    Поблагодарил(а)
    17
    Получено благодарностей: 5 (сообщений: 3).

    По умолчанию

    По поводу первой задачи :

    Код:
    Uses 
      Crt;
    
    Var 
      I, J, K, M, Sum: LongInt;           //задаём переменные I,J - счётчики
      B: Array[1..50] Of LongInt;         //M - ограничение, K - счётчик делителей, Sum - сумма делителей
                                          //B - Массив делителей - сюда заносятся найденные делители числа 
    Begin
      ClrScr; 
      Write('введите ограничение: ');    
      ReadLn( M );                        //Вводим M с клавиатуры
      I := 1;                             //Задаём начальное значение I = 1
                                          //I - это счётчик чисел, тестирумых на совершенность, 
                                          //ему поочерёдно присваиваются значения, от 1 до M  затем они тестируются 
                                          //на совершенность, и если они совершенные, то выводятся на экран.
                                          
      While I <= M Do                     //пока I не больше M выполнить
      Begin
        Sum := 0;                         
        K := 1;                           //Обнуляем значения суммы делителей и счётчика делителей для каждого нового тестируемого числа
        For J := 1 To I - 1 Do            //Ищем все делители числа I, они могут находиться в диапазоне от 1 до I-1
        If I Mod J = 0 Then               //если J является делителем числа I то
          Begin
            B[K] := J;                    //записываем его в массив делителей
            Inc( K );                     //увеличиваем счётчик делителей
          End;
        For J := 1 To K - 1 Do            //находим сумму всех делителей
          Sum := Sum + B[J];
        If I = Sum Then                   //если она совпадает с исходным числом, то
          Write( ' ' , I );               //выводим его на экран
        Inc(I);                           //тестируем следующее число
      End;
      ReadLn;
    End.
    Добавлено через 1 час 43 минуты
    Теперь со второй.....

    Код:
    Uses Crt;
    
    Var 
      Ch, P, S, Sum, I, J, F, M, G: LongInt;            //Объявление переменных:
                                                        //J - счётчик, P - степень двойки в разложении 2^(p-1)*( 2^p - 1)
                                                        //S - 2^p, Ch - тестируемое число, Sum - сумма делителей
                                                        //M - ограничение P, G - двоичное представление числа
                                                        //I, F - в программе не используютя, то есть лишние в данной секции
                                                        
    Procedure Sistema( N: LongInt; Var G: LongInt );    //Продцедура, которая записывает двоичное представление N в переменную G
    Var 
      T: Array[1..10] Of LongInt;                       //Массив, который хранит значения регистров числа в двоичной записи
      K: LongInt;                                       //Длина двоичной записи числа
    Begin
      J := 0;
      K := 0;                                           //Обнуляем значение счётчика и длины двоичной записи числа
      While N >= 1 Do                                   //Пока N больше или равно 1
      Begin
        Inc( K );
        Inc( J );                                       //Увеличиваем J и K на единицу
        T[J] := N Mod 2;                                //Вычисляем K тый регистр двоичной записи числа
        N := N Div 2;                                   //Уменбшаем N в два раза, чтоб узнать K+1 ый регистр
      End;
      For J := 1 To K Do
        G := G * 10 + T[K + 1 - J];                     //Записываем в G полученное представление
    End;
    
    Begin
      ClrScr;
      Write( 'ограничение: m=' );
      ReadLn( m );                                      //Ввод ограничения M с клавиатуры
      P := 1;
      S := 2;                                           //Задаём начальные значения P и S
      While P <= M Do                                   //Данный алгоритм тестирования совершенности числа идентичен представленному в предыдущей задаче
      Begin                                             //За исключением того, что проверяет не само число счётчик, а число Ch равное 2^(p-1)*(2^p-1)
        Ch := (S Div 2) * (S - 1);                      //Собственно вычисление Ch
        If Ch Mod 2 = 0 Then                            //Проверяем чётно ли Ch
        Begin 
          Sum := 0;                                     //Обнуляем сумму делителей
          For J := 1 To Ch - 1 Do
            If Ch Mod J = 0 Then
            Sum := Sum + J;                             //Ищем делители числа Ch и считаем их сумму
          If Ch = Sum Then                              //Если сумма делителей совпадает с числом то
          Begin 
            Sistema( Ch, G );                           //Получаем двоичное представление числа с помощью вышеописанной процедуры Sistema
            WriteLn( G );                               //Выводим двоичное представление
          End;
        End;
        Inc( P );                                       //Увеличиваем степень P на 1
        S:= S * 2;                                      //Соответсвенно число S равное 2^p увеличивается в 2 раза
      End;
      ReadLn;
    End.
    Последний раз редактировалось Godahh; 19.05.2007 в 19:38. Причина: Добавлено сообщение

  3. #3
    LossOS
    Guest

    По умолчанию


    Оффтопик

  4. #4
    Новичок JONOTON_LAIS кто это? Аватар для JONOTON_LAIS
    Регистрация
    28.10.2007
    Сообщений
    16
    Поблагодарил(а)
    1
    Получено благодарностей: 0 (сообщений: 0).

    По умолчанию




+ Ответить в теме

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

     

Похожие темы

  1. Тексты песен
    от TOTALREN в разделе Non-Music
    Ответов: 765
    Последнее сообщение: 23.04.2008, 04:49
  2. The Sign Quest-прохождение (корявый перевод)
    от pomdem в разделе Ragnarok Online
    Ответов: 13
    Последнее сообщение: 19.03.2007, 00:06
  3. Ответов: 0
    Последнее сообщение: 17.03.2007, 02:10

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
Рейтинг@Mail.ru
Администрация сайта не выражает согласия
с высказыванием участников форума и не несет
ответственности за их содержание.

Копирование любого материала возможно только
при наличии ссылки на сайт.