Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Закрытая тема
 
Опции темы Опции просмотра
Старый 15.02.2012, 22:57   #1 (permalink)
vitaref
Новичок
 
Регистрация: 15.02.2012
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите решить три задачи в Free Pascal

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

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

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

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

Старый 15.02.2012, 22:57
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Советую вам прочесть аналогичные темы, наверняка вы найдете там что то важное

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

Старый 15.02.2012, 23:19   #2 (permalink)
vitaref
Новичок
 
Регистрация: 15.02.2012
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Первую решил. Надо ещё хотя бы одну задачу сделать

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.
vitaref вне форума  
Старый 16.02.2012, 10:51   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от vitaref Посмотреть сообщение
Первую решил.
В принципе - правильно, но есть несколько замечаний.
Лучше бы убрать переменную 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 скобки можно не ставить. Не ошибка, можно и так, как у Вас, но не нужно.
Vladimir_S вне форума  
Старый 16.02.2012, 11:45   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от vitaref Посмотреть сообщение
Даны действительные числа 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? Вряд ли этот дебил в курсе, но при такой подстановке получается в знаменателе ноль, что недопустимо.
Естественно, в программе счет начинается с единицы.
Vladimir_S вне форума  
Старый 01.05.2012, 21:59   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Alex-jane, Ваш запрос перенесен в отдельную тему Паскаль. Разработка программы для построения графика. Эта ТЕМА ЗАКРЫТА.
Vladimir_S вне форума  
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Закрытая тема


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 23:29.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.