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

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

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

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

Помогите решить три задачи в Free Pascal

  • Автор темы Автор темы vitaref
  • Дата начала Дата начала
Статус
В этой теме нельзя размещать новые ответы.

vitaref

Ученик
Регистрация
15 Фев 2012
Сообщения
2
Реакции
0
Баллы
0
Помогите решить три задачи в Free Pascal

Помогите пожалуйста решить задачи.

Даны произвольные числа a,b,c. Выяснить существует ли треугольник с такими длинами сторон. Если треугольник существует, то ответить является ли он равносторонним, равнобедренным или каким либо иным.

Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных нечетных элементов. Определить номер строки с наименьшей характеристикой.

Даны действительные числа x, ε (x не равно 0, ε>0). Вычислить с точностью ε (ε=10-3,10-4,10-5,10-6) сумму ряда и указать количество учтенных слагаемых. Результаты оформить в виде таблицы:
(подробнее во вложении)
 

Вложения

  • Безымянный.webp
    Безымянный.webp
    16.6 KB · Просмотры: 318
Первую решил. Надо ещё хотя бы одну задачу сделать

var
a,b,c:real;
t:string;
begin
writeln('vvedite storony treugolnika',a,b,c);
readln (a,b,c);
if (a+b<c) or (b+c<a) or (a+c<b) then t:='treugolnik ne suwestvuet' else t:='treugolnik suwestvuet';
if (a=b) or (b=c) or (a=c) then t:='treugolnik ravnobedrennyy';
if ((a=b) and (b=c)) then t:='treugolnik ravnostoronnyy';
if (a*a=b*b+c*c) or (b*b=a*a+c*c) or (c*c=a*a+b*b) then t:='treugolnik pryamougolnyy';
writeln(t);
readln()
end.
 
В принципе - правильно, но есть несколько замечаний.
Лучше бы убрать переменную t вовсе, а просто в условных операторах выдавать сообщения. То есть так:
Код:
var
 a,b,c:real;
begin
 writeln('vvedite storony treugolnika',a,b,c);
 readln (a,b,c);
 if (a+b<=c) or  (b+c<=a) or (a+c<=b) then 
  writeln('treugolnik ne suwestvuet') else 
  writeln('treugolnik suwestvuet');
 if ((a=b) and (b=c)) then 
  writeln('treugolnik ravnostoronnyy') else
 if (a=b) or (b=c) or (a=c) then 
  writeln('treugolnik ravnobedrennyy');
 if (a*a=b*b+c*c) or (b*b=a*a+c*c)  or (c*c=a*a+b*b) then 
  writeln('treugolnik pryamougolnyy');
 readln
end.
Связано это с тем, что у Вас в программе переменная t может принимать значение только одного из вариантов строки, между тем как треугольник может оказаться одновременно и равнобедренным, и прямоугольным (с углами 45-90-45), и тогда в предложенном мной варианте появятся обе надписи.
Кроме того, в проверке существования корректнее дать нестрогие неравенства. Ну в самом деле, если сумма двух сторон равна третьей, то что это за треугольник?
И последнее. В операторе останова readln перед заключительным end скобки можно не ставить. Не ошибка, можно и так, как у Вас, но не нужно.
 
Даны действительные числа x, ε (x не равно 0, ε>0). Вычислить с точностью ε (ε=10-3,10-4,10-5,10-6) сумму ряда и указать количество учтенных слагаемых. Результаты оформить в виде таблицы: (подробнее во вложении)
Пожалуйста:
Код:
CONST
 Eps:Array[1..4] of Real=(0.001,0.0001,0.00001,0.000001);
VAR
 Sum,x:Real;
 N:Word;
 i:Integer;

PROCEDURE SUMS(Es:Real; Var S:Real; Var Ns:Word);
 VAR
   a:Real;
 Begin
   S:=0;
   Ns:=0;
   Repeat
    Inc(Ns);
    a:=x/Ns/(Sqr(Ns)+Sqrt(Abs(x)+1));
    S:=S+a;
   Until (Abs(a)<Es) or (Ns=10);
 End;

BEGIN
 Write('x= ');
 ReadLn(x);
 WriteLn;
 WriteLn('         Results of calculation:');
 WriteLn('    X           Eps         SUM         N');
 WriteLn;
 For i:=1 to 4 do
  begin
   SUMS(Eps[i],Sum,N);
   WriteLn(x:8:5,'     ',Eps[i]:8:6,'     ',SUM:7:5,'     ',N:3);
  end;
 ReadLn;
END.
А вот интересно - тот идиот, который составлял методичку, не пробовал в изображенную им формулу подставить наименьшее значение индекса суммирования, т.е. 0? Вряд ли этот дебил в курсе, но при такой подстановке получается в знаменателе ноль, что недопустимо.
Естественно, в программе счет начинается с единицы.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху