Вопрос задан 17.07.2023 в 00:16. Предмет Информатика. Спрашивает Чиркова Элина.

СРОЧНО! Найти НОД для последовательности чисел (пользователь вводит целые числа, пока не введёт

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

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

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Бут Никита.

Ответ:

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

0 0
Отвечает Рулёв Михаил.

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

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.

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Вот пример решения вашей задачи на языке Pascal:

pascal
program 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, программа выводит итоговый результат.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос