Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> дружественные числа, процедура 
:(
    Опции темы
настюша
Дата 30.10.2006, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 30.10.2006

Репутация: нет
Всего: 2



помогите плиз с задачкой на процедуры : почему-то не работает, а очень надо:
решала я ее так:
Код
uses crt;
var mas:array[1..500,1..2] of integer;
n,k,s2,s1,j,i: integer;
procedure sum;
Var i,j,k:integer;
s1:integer;
begin
s1:=0;
inc(k);
for i:=1 to trunc(j/2) do
if (j mod i:=0) then s1:=s1+i;
mas[k][1]:=s1;
mas[k][2]:=j;
end;


Begin
begin
write('введите число');
readln(n);
k:=0;
for i:=2 to n do
sum;
end;
s2:=0;
for i:=1 to k do
for j:=1 to k do
if (i<>j) then
begin
if (mas[i][1]=mas[j][2]) and (mas[j][1]=mas[i][2]) then 
begin
writeln(mas[i][2], ' ', mas[j][2]);
inc(s2);
end;
if (s2=24) then
begin 
readkey;
clrscr;
s2:=0;
end;
end;
readln;
end.

А само задание такое: Два натуральных числа называются «дружественными», если каждое из них равно сумме всех делителей (кроме его самого) другого (например, числа 220 и 284). Найти все пары «дружественных чисел», которые не больше данного числа N.

Это сообщение отредактировал(а) volvo877 - 31.10.2006, 10:45
PM MAIL   Вверх
Guedda
Дата 31.10.2006, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: нет
Всего: 78



Пожалуйста! Пользуйтесь кнопкой "Код"!


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Zero
Дата 31.10.2006, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Задача то простая, но перебор большой получается, если N большое то ОЧЕНЬ долго ждать придётся, но если код ещё нужен то делается так:
Код

var
  N,i,j:integer;

Function Friend(a,b:integer):boolean;
var
  i,sumA,sumB:integer;
begin
  sumA := 0; sumB := 0;

  for i:=1 to a-1 do
    begin
      if (a mod i) = 0 then
        sumA := sumA + i;
    end;

  for i:=1 to b-1 do
    begin
      if (b mod i) = 0 then
        sumB := sumB + i;
    end;

  if (sumA = b) and (sumB = a) and (a <> b) then
    Friend := true
  else Friend := false;
end;

Begin
  write('Введите N=');
  readln(N);
  for i:=1 to N do
    for j:=1 to N do
      if Friend(i,j) then
        writeln('Пара: ',i,' ',j);
End.


PM MAIL ICQ   Вверх
volvo877
Дата 31.10.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Zero, я приводил автору код, работающий быстро (без полного перебора, вычисление по формуле). Однако, ее это не устраивает, нужно же изобрести свой велосипед...
PM MAIL   Вверх
Zero
Дата 31.10.2006, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(volvo877 @  31.10.2006,  11:44 Найти цитируемый пост)
Zero, я приводил автору код, работающий быстро 

Где???

Добавлено @ 12:17 
А что не устраивает???
PM MAIL ICQ   Вверх
volvo877
Дата 31.10.2006, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Zero @  31.10.2006,  11:16 Найти цитируемый пост)
Где???

Ты что же, думаешь, что Vingrad - единственный форум программистов? Отнюдь...

Вот тут: http://forum.pascal.net.ru/index.php?s=&am...ost&p=35675
PM MAIL   Вверх
настюша
Дата 31.10.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 30.10.2006

Репутация: нет
Всего: 2



не устраивает то, что написано с использованием функции, а мене надобно сообразить с процедурой. Я поэтому и прошу посмотреть что у меня не так, а не писать все заново. Надо же мне свой велосипед изобрести, тем более что препод именно с процедурой хочет.
PM MAIL   Вверх
Zero
Дата 31.10.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(volvo877 @  31.10.2006,  14:05 Найти цитируемый пост)
Ты что же, думаешь, что Vingrad - единственный форум программистов?

Нет, но на другие по программированию не захожу мне и тут всего хватает, разве что только 1С.
Цитата(volvo877 @  31.10.2006,  14:05 Найти цитируемый пост)
Вот тут

Только я непонял вот это:
Цитата(volvo877 @  31.10.2006,  11:44 Найти цитируемый пост)
я приводил автору код, работающий быстро 

Автор это пацан??? Но подписался девушкой чтобы ему быстрее помогли??? Так?
PM MAIL ICQ   Вверх
Zero
Дата 31.10.2006, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(настюша @  31.10.2006,  18:06 Найти цитируемый пост)
Я поэтому и прошу посмотреть что у меня не так, а не писать все заново.

Если уж ты хочешь разобраться чё в твоей процедуре не так, то сразу тебе скажу... Для начала синтаксических ошибок ДАХРЕНА. Потом в цыкле процедуры:
Код

for i:=1 to trunc(j/2) do
if (j mod i:=0) then s1:=s1+i;

Кроме того, что внутри оказался оператор присваивания, тут ещё значение окончания trunc(j/2) не задано, т.к. j ни где не определена (только не путай эту локальную переменную j с глобальной, которая с этой не как не связана).
А вообще какой то запутаный у тебя и нечитаемый код... То что я привёл выше, пусть не оптимальный по скорости, но зато очень легко понимается чё и как должно быть.
PM MAIL ICQ   Вверх
настюша
Дата 31.10.2006, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 30.10.2006

Репутация: нет
Всего: 2



спасибо за достаточно подробный анализ. Мне понравилось твое решение, только всетаки придется исправлять ошибки в своем( ведь нужна именно процедура ).

P.S. Если что я не зналА что быстрее помогают девушкам, так что в подписи никакого обмана нет.
PM MAIL   Вверх
Zero
Дата 1.11.2006, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(настюша @  31.10.2006,  20:34 Найти цитируемый пост)
Если что я не зналА что быстрее помогают девушкам

Нет не быстрее, просто ту ссылку которую дал 
volvo877, где он сказал что такое решение уже было, там такой же вопрос был у ника "Ромка"...
Цитата(настюша @  31.10.2006,  20:34 Найти цитируемый пост)
только всетаки придется исправлять ошибки в своем( ведь нужна именно процедура )

Если у тебя условие процедура, неважно какая, то если хочеш, могу в своём способе переделать функцию под процедуру, то как сделано у тебя, там тяжело понять сам алгоритм.
PM MAIL ICQ   Вверх
настюша
Дата 1.11.2006, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 30.10.2006

Репутация: нет
Всего: 2



Цитата

Если у тебя условие процедура, неважно какая, то если хочеш, могу в своём способе переделать функцию под процедуру, то как сделано у тебя, там тяжело понять сам алгоритм.

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

Нет не быстрее, просто ту ссылку которую дал 
volvo877, где он сказал что такое решение уже было, там такой же вопрос был у ника "Ромка"...

Честно, положа руку на сердце могу тебе сказать, я настюша, ну в крайнем случае просто Настя, никак не Ромка.

PM MAIL   Вверх
Zero
Дата 1.11.2006, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Ладно вот держи:
Код

var
  N,i,j:integer;
  bool:boolean;

procedure Friend(a,b:integer);
var
  i,sumA,sumB:integer;
begin
  sumA := 0; sumB := 0;

  for i:=1 to a-1 do
    begin
      if (a mod i) = 0 then
        sumA := sumA + i;
    end;

  for i:=1 to b-1 do
    begin
      if (b mod i) = 0 then
        sumB := sumB + i;
    end;

  if (sumA = b) and (sumB = a) and (a <> b) then
    bool := true
  else bool := false;
end;

Begin
  write('Введите N=');
  readln(N);
  for i:=1 to N do
    for j:=1 to N do
      begin
        Friend(i,j);
        if bool then
          writeln('Пара: ',i,' ',j);
      end;
End.

Правдо не очень красиво, т.к. сюда функция просится, ну если надо так то пусть будет... smile 
Цитата(настюша @  1.11.2006,  14:31 Найти цитируемый пост)
Честно, положа руку на сердце могу тебе сказать, я настюша, ну в крайнем случае просто Настя, никак не Ромка.

Да я же говорю, мне не важно... Просто я подумал, что ты так подумала. smile  smile 
PM MAIL ICQ   Вверх
настюша
Дата 1.11.2006, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 30.10.2006

Репутация: нет
Всего: 2



ты просто себе не представляешь как я тебе благодарна! Не знаю что бы без тебя делала!
ОГРОМНОЕ мерси(бо)!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0538 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.