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

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

Ответить
Настройки темы
Delphi - Почему моя программа выдает неверный результат?

Аватара для paul_8

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


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


Конфигурация

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


Изменения
Автор: Drongo
Дата: 30-01-2013
Описание: tag code
Почему моя программа ввыдает неверный результат?

Почему? Надо было найти НОД(найбольший общий делитель)
Код: Выделить весь код
var input,output:text; 
 n1,n2,d:real; 
begin 
assign(input,'input.txt'); reset(input); 
assign(output,'output.txt'); rewrite(output); 
readln(input,n1,n2); 
if n1>=n2 then d:=n1; 
if n2>=n1 then d:=n2; 
while ((n1/d)<>trunc(n1/d)) and ((n2/d)<>trunc(n2/d)) do 
d:=d-1; 
writeln(output,trunc(d)); 
close(input); 
close(output) 
end.

Отправлено: 20:05, 29-01-2013

 

Аватара для Pavluha

Старожил


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

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


Код: Выделить весь код
var input,output:text; 
n1,n2,d:real; 
begin 
 assign(input,'input.txt'); reset(input); 
 assign(output,'output.txt'); rewrite(output); 
 readln(input,n1,n2); 
 if n1>=n2 then d:=n1; 
 if n2>=n1 then d:=n2; 
 while ((n1/d)<>trunc(n1/d)) OR ((n2/d)<>trunc(n2/d)) do 
   d:=d-1; 
 writeln(output,trunc(d)); 
 close(input); 
 close(output) 
end.
И ещё: для переменных n1,n2 лучше поставить тип integer, longint или int64, так как НОД только для натуральных чисел.

Для больших чисел он работает очень медленно. счас напишу получше алгоритм.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:13, 29-01-2013 | #2



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

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


Аватара для paul_8

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


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

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


Pavluha, Но при целочисельных типах, кажется, нельзя делить

Отправлено: 20:22, 29-01-2013 | #3


Аватара для Pavluha

Старожил


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

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


Код: Выделить весь код
var n1,n2,r:longint;
function nod(a,b:longint):longint;
begin
 while (a<>0)and(b<>0) do
  if a>b then a:=a mod b else b:=b mod a;
 nod:=a+b;
end;
begin
 readln(n1,n2);
 r:=nod(n1,n2);
 writeln(r);
end.
вот оптимальный более-менее алгоритм. если нужно объяснить как работает -- пиши.

Цитата paul_8:
Pavluha, Но при целочисельных типах, кажется, нельзя делить »
делить нельзя, зато можно получить целую часть от деления (div) или остаток (mod).

если вдруг нужно будет найти НОК (наименьшее общее кратное, воспользуйся формулой n1*n2=НОД(n1,n2)*НОК(n1,n2).)

Последний раз редактировалось Pavluha, 29-01-2013 в 20:27. Причина: исправил ошибку в алгоритме.

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

Отправлено: 20:22, 29-01-2013 | #4


Аватара для paul_8

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


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

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


Отличное решение! Главное рациональное... Завтра олимпиада, мне бы этой рациональности завтра

Отправлено: 20:37, 29-01-2013 | #5



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Офис и Текст - Программа выдает ошибку при печати Капитан Боян Программное обеспечение Windows 2 27-05-2011 21:13
Почему моя тема оказалась в данном разделе? Coutty Металлолом 0 22-02-2010 09:05
[решено] Почему не совпадает результат: WinGetPos и WM_MOVE? proxy AutoIt 2 03-04-2009 01:42
Моя первая программа, поделитесь мнениями! systemcrash Программирование и базы данных 1 17-12-2005 01:03




 
Переход