Автор - Grace1234

СРОЧНО!
Найти НОД для последовательности чисел (пользователь вводит целые числа, пока не введёт 0. Как найти: например НОД(a,b,c) это НОД(НОД(a,b), c) для последовательности из трёх чисел. Как только введён 0, программа должна выдать результат (одно целое число).
Пример входных данных: 124, 256, 768, 2, 0; пример выходных данных: 2.
Язык: Pascal

Ответ

Автор - shpaler2k16

Ответ:

const size = 100;

var MAS:array [1..size] of integer;

   tmp, biggest, realsize : integer;

   res: integer;

begin

 writeln('Ввод данных:');

 tmp:= 1;

 for realsize:= 1 to size do

 begin

   read(tmp);

   if tmp = 0 then break;

   MAS[realsize]:= tmp;

   if MAS[realsize] > biggest then

     biggest:= MAS[realsize];

 end;

 realsize-=1;

 writeln('Mas size: ', realsize);

 for var i:= 1 to biggest do

 begin

 tmp:= 1;

   for var j:= 1 to realsize do

     if MAS[j] mod i <> 0 then

     begin

       tmp:=0;

       break

     end;

   if tmp = 1 then

     res:= i;

 end;

 writeln('RES: ', res);

end.

Объяснение:

Программа работает с натуральными числами.

Ищем наибольший элемент(biggest), объявляем переменную цикла, бегаем от 1 до biggest, вычисляем остаток от деления каждого элемента массива во вложенном цикле. Если остаток не равен нулю, то это значение нам не подходит(tmp = 0), если tmp = 1 , тогда пишем I в res. Конец цикла, НОД в res.

переменная realsize нужна для того, чтобы не попадать на пустые поля массива(не умею в динамическую память в паскале).

Ответ

Автор - Koljisto

Для сколько угодно чисел:

function GCD(u: integer; v: integer):integer;

begin

var r:integer;

  while ( v <> 0) do

    begin

      r := u mod v;

      u := v;

      v := r;

    end;

    Result:=u;

end;

function findGCD(arr:array of integer; n:integer):integer;

begin

 var res:=arr[0];

 for var i:=0 to n do

 begin

   res:=gcd(arr[i],res);

 end;

 Result:=res;

end;

Begin

 var i: integer;

 var arr:array of integer;

 SetLength(arr, 1);

 var num:=ReadInteger('Введите число');

 while (num<>0) do

 begin

   SetLength(arr, i+1);

   arr[i]:=num;

   i+=1;

   num:=ReadInteger('Введите число');

 end;

 SetLength(arr, i);

 var gcd_n:=findGCD(arr,arr.Length-1);

 gcd_n.Println;

end.

Ответы и объяснения

Сервис носит ознакомительный характер, вся информация, а в частности вопросы и ответы, которые задают и отвечают пользователи.
© 2026 Все права защищены Политика конфиденциальности Контакты
search points attachment profile arrow left arrow right star heart verified symbols equation arrow-down question mark check menu accountancyadministrationagriculturalalgebraallarabicartart_musicbelarusbelarus_altbiologybusinesscatalachemistrychineseeconomicsegzamenglishentrepreneurshipenvironmentethicseuskarafirst_aidfrenchgalegogeographygeologygeometrygermangrammarhealthhistoryindia_langindonesian_langinformaticsitalianjapanesekazachkazach_altkoreanlanguagelatinlawlife_scienceliteraturelogicmathematicsmusicnigerian_langother_languagesotherspedagogicsphilosophyphysical_educationphysicspoliticspsychologyreligionrpa_langrussianrussian_altsciencesecurityskillssocial_sciencesociologyspanishstatisticstechnologytourismtrafficukrainianukrainian_altukrainian_literaturewos_civilisation accountancyadministrationagriculturalalgebraall_1arabicartart_music_2belarusbelarus_altbiologybusiness_2catalachemistry_1chineseeconomicsexam_3englishentrepreneurshipenvironment_2ethicseuskarasecurity_1frenchgalegogeography_4geology_4geometrygermangrammarhealthhistoryindia-langindonesian-langinformaticsitalianjapanesekazachAsset 230koreanlanguagelatinlawlife-scienceliteraturelogic_2mathematicsmusicnigerian-langotherlanguagesother_1pedagogicsphilosophyphysical_educationphysicspoliticspsychologyreligion_1rpa-langrussianrussian_altsciencesecurity_3_mskills_1allsocial_science_5_msociologyspanishstatisticstechnologytourismtrafficukrainianukrainian_altukrainian_literaturewos_civilisation