Автор | Помощь в Паскале |
Короче, нужна помощь в этом Паскале мать его :) Сидим значит мы с девушкой, она говорит: "помоги, у тебя же в школе была информатика". О___о была, но если бы я знал, что понадобиться...
Что требуется: написать программу, которая вычисляет НОД (наибольший общий делитель), используя цикл "ДО". Вот с НОДом у мну есть кое-какие воспоминания, но что такое цикл "ДО"...ппц
Короче, кто может помочь, мне важно сейчас не протупить :)
ЗЫ дэвушка очень красивый =) |
типа..
While <условие> do begin
.
.
.
end; |
хз, какой там тип, говорю, у меня информатика была один год и то мимолетом, как писать программы хз :)
Надеюсь кто-то сможет полностью написать... |
наибольший общий делитель
Я не помню алгоритм его нахождения, а искать лень. |
ап |
Гугл в помощь. Модешь выложить вычисление НОД, ибо самому считать облом? Тогда будет тебе прога. Или примерный алгоритм |
Ну где-то так
program блаблабла;
uses crt;
var a,b,i,c,a1,b1,d:integer;
begin clrscr;
i:=0;
d:=0;
Writeln('Vvedite a i b');
readln(a,b);
if a>b then c:=a else c:=b;
repeat
i:=i+1;
a1:=a/i;
b1:=b/i;
if ((a1 mod 10)=0) and ((b1 mod 10)=0) then
d:=i;
until d<>0;
Writeln('NOD=',d);
readln;
end.
Надеюсь сработает. Писал без Паскаля |
для Алфран:
немного не правильно потому что надо по нисходящей,Ю зачем ты тогда &куот;с&куот; вычислял)))
к тому же очень сложно и не с тем циклом я бы сделал так
вар а,б,ц:интегер;
бегин
цлрсцр;
Врителн(ьВведите а и бь);
реадлн(а,б);
иф а&гт;б тхен ц:=б елсе ц:=б;
Вхите ((а див ц)&лт;&гт;а/ц)анд((б див ц)&лт;&гт;б/ц) до ц:=ц-1;
Врителн(ьНОД=ь,ц);
реадлн;
енд. |
Кто не понял, еще раз с комментами
program блаблабла; название
uses crt;
var a,b,i,c,a1,b1,d:integer; переменные
begin clrscr;
i:=0; создание нулевых переменных
d:=0;
Writeln('Vvedite a i b');
readln(a,b); Ввод начальных чисел
if a>b then c:=a else c:=b; Определение большего числа
repeat повторять
i:=i+1;
a1:=a/i; делители
b1:=b/i; делители
if ((a1 mod 10)=0) and ((b1 mod 10)=0) then если оба числа делятся нацело
d:=i; мы нашли НОД
until d<>0; пока не найдем нужное число
Writeln('NOD=',d);
readln;
end.
ВНИМАНИЕ! Ошибка в строке if a>b then c:=a else c:=b; должно быть не > а знак <
ВНИМАНИЕ! В программе мои пояснения на русском писать НЕ НУЖНО! |
для AZIZE:
А по нормальному можно? меня твое
[quoteцлрсцр;
Врителн(ьВведите а и бь)] доконало |
Progam NOD;
var a,b,c:integer;
begin
Writeln('Vvedite a i b');
readln(a,b);
if a>b then c:=b else c:=a;
white ((a div c)<>a/c)or((b div c)<>b/c) do c:=c-1;
Writeln('NOD=',d);
readln;
end. |
для Alfran:
Случайно галочку транслитерации поставил))) |
Writeln('NOD=',d);
тут Writeln('NOD=',с); |
для Alfran:
Кстати твоя прога при любых данных будет всегда выдавать ответ "1" |
Progam NOD;
var a,b,c:integer;
begin
Writeln('Vvedite a i b');
readln(a,b);
if a>b then c:=b else c:=a;
white ((a mod c)<>0)or((b mod c)<>0) do c:=c-1;
Writeln('NOD=',c);
readln;
end.
А так еще проще и лучше :-) |
не white a while
ne a>b then a a<b then (иначе с меньшим числом деление нацело даст 0)
Это не С++. Не все версии паскаля "поймут" формулировку (a div c)<>a/c)
И не )or( а and т.к. єто ОБЩИЙ делитель. В общем, моя прога правильнее =) |
для ПриМат:
То же сакмое только другим боком)))
Я просто привык div-ом пользоваться))) |
для AZIZE:
Нет. Для наибольшего значения цикл остановится. Конечно можно подобрать цифры чтоб было 1 но не надо |
не white a while
соглавен
ne a>b then a a<b then
посмотри внимательнее у меня берётся меньшее)))
И не )or( а and
АК вот тут ты не прав. цикл будет выполнятся до тех пор пока выполнено хоть одно условие |
для Alfran:
учил видимо паскаль давно ты. Или вообще не учил. Потому как кроме опечатки в while ошибки у AZIZE'а нет |