• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Две задачи на Pascal: про массив и про наибольший общий делитель

ДенисКО

Новые
Регистрация
2 Ноя 2009
Сообщения
19
Реакции
0
Баллы
0
Две задачи на Pascal: про массив и про наибольший общий делитель

Задача 1. . Пусть дана вещественная квадратная матрица порядка 10. В строках с отрицательным элементом на главной диагонали найдите сумму элементов. Сумму элементов строки записывать отдельно. Вот программа, но она выводит сумму только одной(первой) строки с отрицательным элементом.
Код:
program Laba4;
const Nmax=3;
type ind=1..Nmax;
mas=array [1..Nmax,1..Nmax] of integer;
var a:mas; i,j:ind; S:integer; N:real;
begin
repeat
write ('vviberite sposob vvoda(1-ruchnoi;2-avtomaticheskii)');
readln (N);
until (N=1) or (N=2);
if N=1 then
  begin
   for i:=1 to Nmax do
   for j:=1 to Nmax do
     begin
      write ('a[',i,j,']=');
      readln (a[i,j]);
     end;
  end;
randomize;
if N=2 then
 begin
  for i:=1 to Nmax do
  for j:=1 to Nmax do
   begin
    a[i,j]:=-random (101)+50;
   end;
 end;
write (a[i,j]:4);
writeln;
for i:=1 to Nmax do
for j:=1 to Nmax do
 begin

  if (a[i,j]<0) and (i=j) then
   begin
    for j:=1 to Nmax do
     begin
       S:=S+a[i,j];
     end;
     writeln ('S=',S);
     readln;
   end;
 end;
end.

Задача 2. Даны три натуральных числа. Определить их наибольший общий делитель.


P.S. Заранее благодарю.
 
Последнее редактирование модератором:
Насчет первой задачи. У Вас неверно построен оконечный цикл. Давайте разберемся. Вот Ваш фрагмент:
Код:
for i:=1 to Nmax do
 for j:=1 to Nmax do
  begin
   if (a[i,j]<0) and (i=j) then
    begin
     for j:=1 to Nmax do
      begin
       S:=S+a[i,j];
      end;
     writeln ('S=',S);
     readln;
    end;
   end;
То есть НЕ ЗАВЕРШИВ внешний цикл по j Вы открываете внутренний цикл... по тому же j !!! Так не годится. Замечу, что этот внешний цикл вовсе не нужен. К тому же, у Вас пропущено обнуление числа S при переходе к следующей строке. Я бы предложил как-нибудь так:
Код:
for i:=1 to Nmax do
 if a[i,i]<0 then
  begin
   S:=0;
   for j:=1 to Nmax do
    S:=S+a[i,j];
   writeln ('S[',i,']= ',S);
  end;
Readln;
 
Задача 2. Даны три натуральных числа. Определить их наибольший общий делитель.
Например, так:
Код:
var
 a1,a2,a3,m:WORD;
 b:BOOLEAN;
Begin
 Write('a1= ');
 ReadLn(a1);
 Write('a2= ');
 ReadLn(a2);
 Write('a3= ');
 ReadLn(a3);
 m:=(a1 div 2);
 b:=FALSE;
 Repeat
  b:=((a1 mod m)=0) and
     ((a2 mod m)=0) and
     ((a3 mod m)=0) and
     (m>1);
  DEC(m);
 Until b OR (m=1);
 If b then
  Writeln('The greatest common divisor is ',m)
  else
  Writeln('These numbers have no common divisors');
 ReadLn;
End.
 
а можете 2ую задачу сделать с процедурами?
 
Назад
Сверху