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

Ответы на вопрос

Ответ:
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 нужна для того, чтобы не попадать на пустые поля массива(не умею в динамическую память в паскале).



Для сколько угодно чисел:
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.



Вот пример решения вашей задачи на языке Pascal:
pascalprogram GCDSequence; function GCD(a, b: Integer): Integer; begin if b = 0 then GCD := a else GCD := GCD(b, a mod b); end; var num, result: Integer; begin result := 0; repeat Write('Введите число: '); Readln(num); if num <> 0 then begin if result = 0 then result := num else result := GCD(result, num); end; until num = 0; Writeln('Результат: ', result); end.
В этом примере мы используем функцию GCD
, чтобы найти наибольший общий делитель двух чисел. Затем мы применяем эту функцию к последовательности чисел, начиная с первых двух чисел и последовательно обновляя результат с каждым новым числом. Когда пользователь вводит 0, программа выводит итоговый результат.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili