Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2013, 20:16   #1
AndrewAlexandrov
Пользователь
 
Регистрация: 22.09.2013
Сообщений: 15
По умолчанию Подпрограммы(Pascal)

Здравствуйте, помогите пожалуйста с подпрограммами, никак не могу разобраться c procedure и function
пробовал делать, она работает, но результат выдает не правильный.
вот эти три программы
Код:
program PR4_Alexandrov;
 
var
  a, b, c, d, e, r, t, y, u, s, p: real;
  n,k: Integer;
label c1, Kon;
begin
  cls;
  Kon:
  Write('Задание: Треугольник задан координатами своих вершин. Составить программу для вычисления его площади(1-продолжить,0-конец программы)-');
  Read(n);
  case n of
    1: 
      
      begin
        c1:
        writeln('Введите координаты (x;y) точки А');
        readln(a, b);
        writeln('Введите координаты (x;y) точки B');
        readln(c, d);
        writeln('Введите координаты (x;y) точки C');
        readln(e, r);
        begin
        t := sqrt(sqr(a - c) + sqr(b - d));
        y := sqrt(sqr(a - e) + sqr(b - r));
        u := sqrt(sqr(c - e) + sqr(d - r));
        p := (t + y + u) / 2;
        s := sqrt(p * (p - t) * (p - y) * (p - u));
        end;
        writeln('Площадь треугольника = ', s:3:3);
        Write('Повторить? (да-1, нет-0)'); Read(K);
        cls;
        if K = 1 then goto c1 else goto Kon;
      end;
  End;
end.
Код:
program PR4_Alexandrov;

type
  cisla = 0..9;
  var
  n,k,i,x,Nm: Integer;
  n1: word;
  m: array[1..1000] of cisla;
  s2: string;
label c1, Kon;
begin
  cls;
  Kon:
  Write('Задание: Дано натуральное число N. Составить программу для формирования массива, элементами которого являются цифры числа N.(1-продолжить,0-конец программы)-');
  Read(n);
  case n of
    1: 
      begin
        c1:
        write('Введите число:');
        readln(n1);
        str(n1, s2);
        for i := 1 to length(s2) do
        begin
        val(s2[i], x, Nm); m[i] := x;
        Nm := length(s2);
        end;
        for i := 1 to Nm do writeln('M[', i, ']=', m[i]);
        read;
        Write('Повторить? (да-1, нет-0)'); Read(K);
        cls;
        if K = 1 then goto c1 else goto Kon;
      end;
  end;
End.
Код:
program PR4_Alexandrov;
 
var
n,k,x,s1: Integer;
 
label c1, Kon;
begin
  cls;
  Kon:
  Write('Задание: Найти сумму цифр заданного натурального числа.(1-продолжить,0-конец программы)-');
  Read(n);
  case n of
    1: 
      
      begin
        c1:
       begin
          writeln('Введите число:');
          readln(x);
          s1 := 0;
          while (x > 0) do 
          begin
            s1 := s1 + x mod 10;
            x := x div 10;
          end;
          writeln('Сумма чисел равна:', s1);
          Write('Повторить? (да-1, нет-0)'); Read(K);
          cls;
          if K = 1 then goto c1 else goto Kon;
        end;
  end;
end;
End.

Последний раз редактировалось AndrewAlexandrov; 22.12.2013 в 20:51.
AndrewAlexandrov вне форума Ответить с цитированием
Старый 22.12.2013, 20:28   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,504
По умолчанию

А где процедуры или функции? И зачем label и goto, это же mauvais ton
type_Oleg вне форума Ответить с цитированием
Старый 22.12.2013, 20:44   #3
AndrewAlexandrov
Пользователь
 
Регистрация: 22.09.2013
Сообщений: 15
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
А где процедуры или функции? И зачем label и goto, это же mauvais ton
насчет процедуры и функции
у меня ничего там не получилось и я решил вернуть как было
и обратиться сюда.
AndrewAlexandrov вне форума Ответить с цитированием
Старый 22.12.2013, 20:52   #4
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,504
По умолчанию

Вот , первое задание, но однократное вычисление. Добавьте сами цикл с выходом. Но лучше без goto и label, а с while или repeat.
Вот так используют функции
Код:
program Trian;

function dlina(x1,y1,x2,y2:Real):Real;
begin
 dlina:=Sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;
function Geron(a,b,c:Real):Real;
var p:Real;
begin
 p:=(a+b+c)/2;
 Geron:=Sqrt(p*(p-a)*(p-b)*(p-c));
end;

var xa,xb,xc,ya,yb,yc,S:Real;
begin
 writeln('Введите координаты (x;y) точки А');
 readln(xa, ya);
 writeln('Введите координаты (x;y) точки B');
 readln(xb, yb);
 writeln('Введите координаты (x;y) точки C');
 readln(xc, yc); 	
 S:=Geron(dlina(xa,ya,xb,yb),dlina(xa,ya,xc,yc),dlina(xb,yb,xc,yc));	
 writeln('S = ',S); 	
end.
type_Oleg вне форума Ответить с цитированием
Старый 22.12.2013, 21:00   #5
AndrewAlexandrov
Пользователь
 
Регистрация: 22.09.2013
Сообщений: 15
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Вот , первое задание, но однократное вычисление. Добавьте сами цикл с выходом. Но лучше без goto и label, а с while или repeat.
Вот так используют функции
спасибо большое
и с процедурами можете помочь разобраться
AndrewAlexandrov вне форума Ответить с цитированием
Старый 22.12.2013, 21:08   #6
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,504
По умолчанию

Отличие процедуры от функции покажу на этом же примере. Например, площадь вычисляем с помощью процедуры, а не функции.
Тогда вместо этого
Код:
function Geron(a,b,c:Real):Real;
var p:Real;
begin
 p:=(a+b+c)/2;
 Geron:=Sqrt(p*(p-a)*(p-b)*(p-c));
end;
надо вот это
Код:
procedure Geron(a,b,c:Real;var S:Real);
var p:Real;
begin
 p:=(a+b+c)/2;
 S:=Sqrt(p*(p-a)*(p-b)*(p-c));
end;
.. а вместо этого
Код:
S:=Geron(dlina(xa,ya,xb,yb),dlina(xa,ya,xc,yc),dlina(xb,yb,xc,yc));
вот это
Код:
Geron(dlina(xa,ya,xb,yb),dlina(xa,ya,xc,yc),dlina(xb,yb,xc,yc),S);
Как говорится, найдите 10 различий

Кстати, в процедуре не обязательно должно что-то вычисляться. Можно например, типовые методы ввода данных оформить в виде процедуры.

Последний раз редактировалось type_Oleg; 22.12.2013 в 21:10.
type_Oleg вне форума Ответить с цитированием
Старый 22.12.2013, 21:14   #7
AndrewAlexandrov
Пользователь
 
Регистрация: 22.09.2013
Сообщений: 15
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Отличие процедуры от функции покажу на этом же примере.
еще раз большое спасибо
AndrewAlexandrov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PASCAL (подпрограммы) alexeydat Помощь студентам 0 01.12.2012 15:56
Pascal: Массивы, подпрограммы, текст на языке Pascal WarriorCow Помощь студентам 4 22.02.2012 15:28
Подпрограммы в Pascal KoR55 Помощь студентам 0 21.12.2011 21:04
2 подпрограммы в pascal ignat_1991 Паскаль, Turbo Pascal, PascalABC.NET 0 19.05.2011 09:08
Подпрограммы-процедуры, подпрограммы-функции в Pascal rishikesh Помощь студентам 19 18.05.2010 23:05