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

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

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

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

Интересная задача, Паскаль

  • Автор темы Автор темы Madara
  • Дата начала Дата начала

Madara

Новые
Регистрация
29 Ноя 2013
Сообщения
50
Реакции
0
Баллы
0
Интересная задача, Паскаль

Помогите написать программу, совсем не получается(

Разработать алгоритм и внешнюю функцию обработки одномерных массивов, используя единственный цикл.
Разработать головной модуль для отладки составленной внешней функции.
Все параметры индивидуальных задач передавать в функцию через список ее формальных параметров из головного модуля.
При заданных A1,A2,...,An; B1,B2,...,Bn и C1,C2,...,Cn для каждой из n троек вида (Ai,Bi,Ci) проверить, может ли быть построен треугольник со сторонами Ai,Bi,Ci, при этом подсчитать число треугольников и сумму их периметров.

Заранее спасибо)
 
Интересная задача, Паскаль
А, ничего интересного - так, глупая учебная задачка.
Код:
Const
 n=16;

Var
 A,B,C:Array[1..n] of Real;
 P,Sum_P:Real;
 i,Nt:byte;

Function Per(Q1,Q2,Q3:Real):Real;
var
 b:Boolean;
begin
 b:=(Q1>=0) and (Q2>=0) and (Q3>=0) and
    (Q1<=Q2+Q3) and (Q2<=Q1+Q3) and (Q3<=Q1+Q2);
 if b then Per:=Q1+Q2+Q3 else Per:=-1;
end;

Begin
 Nt:=0;
 Sum_P:=0;
 Randomize;
 For i:=1 to n do
  begin
   A[i]:=Random*10-1.0;
   write(A[i]:8:2);
   B[i]:=Random*10-1.0;
   write(B[i]:8:2);
   C[i]:=Random*10-1.0;
   write(C[i]:8:2);
   P:=Per(A[i],B[i],C[i]);
   if P<0 then
    writeln('    No...')
   else
    begin
     Inc(Nt);
     Sum_P:=Sum_P+P;
     writeln('    Yes!   P= ',P:5:2);
    end;
  end;
 writeln;
 writeln(Nt,' triangulars');
 writeln('Sum of their perimeters is ',Sum_P:0:2);
 Readln
End.
 
Большое спасибо)

Понял как делать)

Переделал без Rindomize и с некоторыми добавлениями.
Может кому пригодится...

PHP:
Program Perimetr; 
 Uses   System;
  Const
          n=3;

Var
 A,B,C:Array[1..n] of Real;
 P,Sum_P:Real;
 i,Nt:byte;
                  //Функция
Function Per(Q1,Q2,Q3:Real):Real;
  var
    b:Boolean;
  begin
    b:=(Q1>0) and (Q2>0) and (Q3>0) and
    (Q1<Q2+Q3) and (Q2<Q1+Q3) and (Q3<Q1+Q2);
   if b then Per:=Q1+Q2+Q3 else Per:=-1;
end;
           //Программа
Begin
 Nt:=0;
 Sum_P:=0;
 For i:=1 to n do
  begin
   Writeln('Введите A[i]:');
   Readln(A[i]);
   Writeln('Введите B[i]:');
   Readln(B[i]);
   Writeln('Введите C[i]:');
   Readln(C[i]);
   P:=Per(A[i],B[i],C[i]);
   if P<0 then
    writeln('    Treugolnik postroit nevozmozhno!')
   else
    begin
     Inc(Nt);
     Sum_P:=Sum_P+P;
     writeln('    Treugolnik postroen. Ego perimetr raven: ',P:5:2);
    end;
  end;
 writeln;
 writeln('Kolichestvo treugolnikov: ', Nt);
 writeln('Summa perimetrov: ',Sum_P:0:2);
End.

Исправил ошибку
PHP:
b:=(Q1>0) and (Q2>0) and (Q3>0) and //Сторона треугольника не может быть равна нулю или быть отрицательной
    (Q1<Q2+Q3) and (Q2<Q1+Q3) and (Q3<Q1+Q2); //Сумма двух сторон должна быть строго больше одной другой стороны

Ещё раз огромное спасибо)
 
Исправил ошибку
Ну, насчет "ошибки" - я попросил бы... Да, включены также вырожденные треугольники с одной нулевой стороной и двумя другими равными между собой, а также с суммой двух сторон, равной третьей. Площадь таких треугольников нулевая, а вот периметр вполне определенный. Включать или не включать такие треугольники в рассмотрение - дело Ваше, но, повторяю, никакой "ошибки" здесь нет.

Кроме того, ввод данных в Вашей программе не совсем соответствует условию. Ваша программа решает задачу типа "ввести тройку чисел и проверить, могут ли они быть сторонами треугольника, и если да, то...". В задаче же даны массивы, т.е. следовало бы вначале ввести их (все три), а уж потом делать из них выборки по тройкам.
 
Назад
Сверху