Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Помогите решить задачу на фортране

Ответить
Настройки темы
Разное - [решено] Помогите решить задачу на фортране

Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


вот условие : Два натуральных числа называются "дружественными", если каждое из них равно сумме всех делителей другого, за исключением его самого (таковы, например, числа 220 и 284). Напечатать все пары "дружественных" чисел, не превосходящих заданного натурального числа.
(Определить функцию, вычисляющую сумму делителей числа.)

и вот еще мои наброски ...до конца завершить не получилос ...видимо не знаю каких то тонкостей (


program pr4
integer s1
real k,g,s
write(*,*) "vvdedite chislo k"
read(*,*) k
do g=2,k
s=del(g)
s1=del(s-1)
if((s1==g).and.(s/=g).and.(s/=x)) then
write(*,*) "Chisla",a," i",s,"-drugestvenie"
x=s1
endif
end do
contains
integer function del(a)
integer s
integer h,i
h=a
s=0
do i=1,a-1
if(mod(h,i)==0) then
s=s+i
end if
end do
del=s
end function del

end

Отправлено: 01:59, 27-08-2011

 

Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 177

Профиль | Отправить PM | Цитировать


3ddeni, извини, компилятора фортрана под рукой не оказалось. Написал на c#. Работает. Код с комментариями и достаточно прозрачен. В диапазоне до 300 выводит такие пары:
6 6
28 28
220 284
284 220


Код: Выделить весь код
        static void Main(string[] args)
        {
            //верхний предел
            int max_value = 500;

            //суммы делителей 
            int sum_1;
            int sum_2;

            //перебираем в цикле все возможные натуральные числа
            //не превосходящие максимального значения
            for (int i=1; i <= max_value; i++)
            {
                //обнуляем суммы
                sum_1 = 0;
                sum_2 = 0;

                //находим все делители числа i
                for (int j = 1; j < i; j++)
                {
                    //если числа делятся без остатка
                    if (Math.IEEERemainder(i,j) == 0)
                    { 
                    //суммируем делители числа i
                        sum_1 = sum_1 + j;  
                    }
                }

                //находим все делители sum - 
                //суммы числа делителей i
                for (int j = 1; j < sum_1; j++)
                {
                    //если числа делятся без остатка
                    if (Math.IEEERemainder(sum_1, j) == 0)
                    {
                        //суммируем делители числа sum_1
                        sum_2 = sum_2 + j;
                    }
                }

                //Если сумма делителей второго числа равна первому
                //найдена пара "дружественных чисел"
               if (i == sum_2)
               {
                    Console.WriteLine("Pair: " + i.ToString() + " " + sum_1.ToString());
               }
            
            }

            Console.WriteLine("Press any key for exit...");
            Console.ReadKey();
        }

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:52, 27-08-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Tonny_Bennet, число жестко заданно, лучше что-то вроде

Код: Выделить весь код
int max_value = Convert.ToInt32(Console.ReadLine());

Отправлено: 11:07, 27-08-2011 | #3


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


ооо большое спасибо ) думаю теперь разберусь

Отправлено: 11:10, 27-08-2011 | #4


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


логика решения задачи мне понятна ...реализовал ее с использованием вложенных циклов.

возникают проблемы при использовании функций в фортране

тут немного переделал код

program pr4
integer s1,k,g,s
write(*,*) "vvdedite chislo k"
read(*,*) k

do g=2,k
s=del(g)
s1=del(j)
if((s1==g).and.(s/=g).and.(s/=x)) then
write(*,*) "Chisla",g," i",s,"-drugestvenie"
x=s1
endif

end do
contains
integer function del(a)
integer s,i,a
s=0
do i=1,a-1
if(mod(a,i)==0) then
s=s+i
end if
end do
del=s
end function del

end

Отправлено: 12:07, 27-08-2011 | #5


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


задачу решил

Отправлено: 13:41, 27-08-2011 | #6


Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 177

Профиль | Отправить PM | Цитировать


Цитата ferget:
Tonny_Bennet, число жестко заданно, лучше что-то вроде
Код:
int max_value = Convert.ToInt32(Console.ReadLine()); »
Абсолютно согласен, но когда лень и быстро пишешь - по мне уж лучше использовать меньше плавающих параметров

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Отправлено: 22:05, 27-08-2011 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Помогите решить задачу на фортране

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - Помогите решить задачу NightmaR Программирование и базы данных 1 25-05-2011 21:10
C/C++ - ПОМОГИТЕ РЕШИТЬ ЗАДАЧУ НА С++ delfi Программирование и базы данных 1 12-05-2011 20:19
C/C++ - Помогите решить задачу zdughi Программирование и базы данных 1 01-05-2009 06:03
помогите решить задачу snikers Программирование и базы данных 2 27-08-2004 01:57
помогите решить задачу Guest Программирование и базы данных 2 21-05-2004 11:23




 
Переход