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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2011, 01:19   #1
Elec92
Пользователь
 
Регистрация: 28.11.2010
Сообщений: 18
Восклицание Подпрограммы.Использование процедур

Помогите пожалуйста
сделать по простому(console application) что б решение выводило в командной строке...
ввод с клавиатуры

Задача: Заданы числа "n" и "m" два вектора x={x1,...,xn}, y={y1,...,yn}. Переменной "B" присвоить значение , если длина вектора x больше длины вектора y, и значение в противном случае. Вычисления длины вектора оформить в виде подпрограммы. Длина любого вектора a={a1,...,an} определяется форумлой

вот примерик, примерно как надо)))
Код:
program Procedura;
uses
 SysUtils,
 Math;
Var a1,h1,a2,h2,S1,S2:real;
Procedure area(var a,h,s:real);
begin
Writeln('Enter base and height');
Writeln('Base a=');
Readln(a);
Writeln('Height h=');
Readln(h);
S:=0.5*a*h;
Writeln('S=',S:2:2);
end;
begin
area(a1,h1,s1);
area(a2,h2,s2);
If S1>S2 then
Writeln('Max area=',S1:2:2)
else
Writeln('Max area=',S2:2:2);
readln;
end.
Заранее благодарен!
Elec92 вне форума Ответить с цитированием
Старый 01.03.2011, 08:54   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Код:
program Procedura;
uses
 SysUtils,
 Math;
const n = 99;
 m = 49 ;
Var py, sx, Lx,Ly :real;
 i : integer;
xn : array [1..n] of real; 
ym : array [1..m] of real; 
Function VectlLen(var ar: array of real);
var I : integer;
begin
for i := 1 to length(ar)
  do result := result +ar[i]*ar[i];
result := sqrt(result);
end;

begin
чтение 
lx := vectlen(xn);
ly := vectlen(ym);
If LX>LY then begin
for i := 1 to length(xn)
  do sx := sx+xn[i];
writeln(sx);
end
else begin
for i := 1 to length(ym)
  do py := py+ym[i];
writeln(py);
end;
readln;
end.
без проверки, чтение в массивы сам сделай
phomm вне форума Ответить с цитированием
Старый 01.03.2011, 09:25   #3
Elec92
Пользователь
 
Регистрация: 28.11.2010
Сообщений: 18
По умолчанию

вот такую ошибку выдает


и что такое vectlen
Elec92 вне форума Ответить с цитированием
Старый 01.03.2011, 09:53   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
и что такое vectlen
А чуть-чуть подумать? И предположить, что это функция для вычисления длины вектора?

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

вот подправленный вариант:
Код:
program Project2;
{$APPTYPE CONSOLE}

uses
  SysUtils, Math;
const n = 10;
  m = 20;
var py, sx, Lx, Ly: real;
  B: real;
  i: integer;
  xn: array[1..n] of real;
  ym: array[1..m] of real;

function VectLen(var ar: array of real): real;
var i: integer;
begin
  result := 0;
  for i := Low(ar) to High(ar)
    do result := result +ar[i]*ar[i];
  result := sqrt(result);
end;

begin
  .. ТУТ ввод векторов xn и ym

  Lx := VectLen(xn);
  Ly := VectLen(ym);
  if Lx > Ly then begin
    sx := 0;
    for i := 1 to length(xn)
      do sx := sx + xn[i];
    B := sx;
  end
  else begin
    py := 1;
    for i := 1 to length(ym)
      do py := py * ym[i];
    B := py
  end;
  WriteLn('B = ', B: 15: 7);
  readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.03.2011, 09:56   #5
Elec92
Пользователь
 
Регистрация: 28.11.2010
Сообщений: 18
По умолчанию

спасибо большое)
Elec92 вне форума Ответить с цитированием
Старый 01.03.2011, 10:41   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

ай-ай... побейте за пропущенную инициализацию переменных... совсем забыл всё это, ну писал-то вне среды (подпись " без проверки")...

ну и оптимизация в виде дополнительной переменной и цикл по граничным элементам массива - чуток универсальнее, соглашусь, что надо не только код давать, но и прививать хорший стиль программирования
phomm вне форума Ответить с цитированием
Старый 01.03.2011, 11:49   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы всё таки хотите поговорить о допущенных Вами ошибках?!

Цитата:
цикл по граничным элементам массива - чуток универсальнее
дело не в универсальности, дело в том, что у Вас тут была ОШИБКА! И связана с тем, что Вы массив передаёте как array of real - а значит, не указываете его размерность, тема самым размерность массива идёт от НУЛЯ!!! (для проверки в функцию VectLen
вставьте вывод границ массива:
Код:
function VectLen(var ar: array of real): real;
...
  Writeln('Low = ',Low(ar));
  Writeln('High = ',High(ar));
...
ну и я уже молчу о таких мелочах, как то, что описанная Вами функция не имела возвращаемого типа. И была опечатка в имени функции. И что вместо произведения элементов Y было их суммирование, и что не было присвоение B... это всё автор темы вполне мог и должен был найти и исправить самостоятельно!

Удачи.

p.s. Кстати, рекомендую пытаться отучить себя от вредной Паскалевской привычки каждый раз писать имена переменных и функций в разном регистре! Это и не очень опрятно. И если столкнётесь потом с программированием на С/C# - будете себе локти кусать!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.03.2011, 14:11   #8
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Простите, я действительно поторопился... про В не совсем понял изначально, подумал, что надо просто вывести значение

Ну, а многое - недосмотр и недопечатки - и результат функции, и сложение при копи-пасте не поменял на умножение... вобщем, урок усвоил, стало стыдно, в следующий раз буду по возможности проверять код в среде, хотя это займёт больше времени, и, возможно, на какие-то темы просто в итоге не отвечу ...

Спасибо Вам, Serge_Bliznykov за внимание и работу над ошибками, не только студенты получается учатся здесь )))

ах да, про главную ошибку-то, читал, знаю, но ввиду малой встречаемости в моей практике такой ситуации (использование подобных функций), она у меня не всплыла в голове... опять же, каюсь, впредь буду проверять

Последний раз редактировалось phomm; 01.03.2011 в 14:15.
phomm вне форума Ответить с цитированием
Старый 01.03.2011, 15:00   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Спасибо Вам, Serge_Bliznykov за внимание и работу над ошибками, не только студенты получается учатся здесь )))
не за что!
А по поводу учёбы - мне не стыдно признаться, что я тоже многому здесь учусь. (Ну, чаще в других разделах, например, в C#, но, бывает и здесь нахожу для себя новое и неизведанное).

Так что - все мы чему-то учимся!

Успехов!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование процедур и функций nelly.nelly Помощь студентам 1 23.02.2011 15:54
Использование процедур и функций Сергей Игоревич Помощь студентам 3 16.02.2011 09:29
Использование процедур cyt Паскаль, Turbo Pascal, PascalABC.NET 1 09.10.2010 13:15
использование процедур street-walker Общие вопросы Delphi 4 14.09.2010 21:38
использование процедур и функций! ...Оленька... Паскаль, Turbo Pascal, PascalABC.NET 0 24.12.2008 15:33