Помощь - Поиск - Пользователи - Календарь
Полная версия: Процедуры и функции
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Art87
Уважаемые форумчане. Помогите пожалуйста задачку решить.
volvo
Art87, объясни мне, неужели нельзя было присоединить скриншот с экрана, а не сам DOC-файл? Я понимаю, что ТЕБЕ так удобнее, но ты и о других подумай !!!

Нажмите для просмотра прикрепленного файла

(кстати, заметь, мой файл по размеру меньше чем тот, что присоединил ты...)

P.S. На форуме тема про вычисление траекторий снарядов поднималась неоднократно... Вот 2 примера решений:
Задача с циклом
Имитация полета снаряда
Art87
Спасибо за ссылки, почитаю,
если что в следующий раз буду присоеденять :D
Art87
Посмотрите, нормально, нет?
var f,g:real;
x,v,dx:integer;

function y(x:integer;f:real;v:integer):real;
var g:real;
begin
 g:=0.0098/((1/60)*(1/60));
 y:=x*sin(f)/1-(g*x*x)/(2*v*v*cos(f)*cos(f));
end;
begin
 v:= 35;
 f:=2*Pi/6;
 x:=-2;
 dx:=2;
 repeat
  x:=x+dx;
 until y(x,f,v)<0;
 writeln('With V=35km/h and Angle=2P/6 way(path) = ',x);

 v:= 30;
 f:=Pi/4;
 x:=-2;
 dx:=2;
 repeat
  x:=x+dx;
 until y(x,f,v)<0;
 writeln('With V=30km/h and Angle=P/4 way(path) = ',x);
 readln;
end.
Art87
Такая задача,
Заданы массивы X1(7), X2(6), X3(4). Найти среднее арифмитическое сумм отрицательных элементов массивов. Определение суммы отрицательных элементов массива оформить в виде подпрограммы.

type mass=array[1..7] of integer;
Var
X1,X2,X3:mass;
kX1,kX2,kX3:byte;
t:real;
Procedure Col(var A:mass; n:byte; var k:byte);
Var i,j:byte;
begin
writeln('Введите ', n , 'элементов массива');
for i:=1 to n do
read(X1[i]);
k:=0; j:=0;
For i:=1 to n do
begin
if X1[i] < 0 then begin
j:=j+X1[i];
k:=k+1;
end; end;t:=abs(j)/k; end;
begin
Col(X1,7,kx1);
writeln ('Среднее арифметическое', kx1 ,'элементов в массиве X1=',t:5:3);
Col(X2,6,kx2);
writeln ('Среднее арифметическое', kx2 ,'элементов в массиве X2=',t:5:3);
Col(X3,4,kx3);
writeln ('Среднее арифметическое', kx3 ,'элементов в массиве X3=',t:5:3);
end.


Программа запускается, но считает непонятно что sad.gif
volvo
Ты уж если передаешь в процедуру A: mass как параметр, то им же и пользуйся... Кстати, использовать здесь функцию более оправдано, чем возвращать результат через глобальную переменную (глобальные переменные лучше вообще использовать как можно реже :yes: ). И еще: используй открытые массивы (A: array of <type>, без указания длины) как параметр. Работать с ними дальше - как с обычными массивами; единственное отличие - индексы не [1 .. n], а [0 .. n - 1]

type mass=array[1..7] of integer;

function Col(var A: array of integer; n: byte;
         var k:byte): real;
Var i, sum: integer;
begin
  writeln('Введите ', n , 'элементов массива');
  for i:=0 to pred(n) do
    read(A[i]);

  k:=0; sum:=0;
  For i:=0 to pred(n) do begin
    if A[i] < 0 then begin
      inc(sum, A[i]); inc(k);
    end;
  end;

  Col := abs(sum)/k;
end;

var
  t: real;
  kX1,kX2,kX3: byte;
  X1, X2, X3: array[1 .. 7] of integer;

begin
  t := Col(X1,7,kx1);
  writeln ('Среднее арифметическое ', kx1 ,' элементов в массиве X1=',t:5:3);
  t := Col(X2,6,kx2);
  writeln ('Среднее арифметическое ', kx2 ,' элементов в массиве X2=',t:5:3);
  t := Col(X3,4,kx3);
  writeln ('Среднее арифметическое ', kx3 ,' элементов в массиве X3=',t:5:3);
end.
Art87
volvo, спасибо за программу, а почему не предлогается ввести элементы массивов Х2 и Х3?
volvo
Что значит "не предлагается"? Что, моя программа тебе не пишет
Цитата
'Введите 6 элементов массива'
...
'Введите 4 элементов массива' ?

Она вообще-то делает ТО ЖЕ САМОЕ, что и твоя из поста №5, только еще и возвращает правильный результат...
Art87
Нет, в моей, ввожу 7 элементов, Enter,
потом предлогается ввести массив X2 потом X3.
А в вашем варианте, X1 вводится и ничего дальше не происходит sad.gif
volvo
Вот лог выполнения моей программы:
Цитата
Введите 7элементов массива
2 -1 -7 8 -3 5 9
Среднее арифметическое 3 элементов в массиве X1=3.667
Введите 6элементов массива
1 2 -3 -4 5 6
Среднее арифметическое 2 элементов в массиве X2=3.500
Введите 4элементов массива
-1 -2 -3 5
Среднее арифметическое 3 элементов в массиве X1=2.000
Что не устраивает?
Art87
Мои извинения. Все работает, спасибо smile.gif Видимо опять я где-то перемудрил smile.gif
Art87
Да, долго ругался на меня сегодня препод. И это лишнее и это бред angry.gif Чтоб его. Все же работает, а её не нравится angry.gif
Заставила переделать
СКАЗАЛА, много лишнего, ... корова.

с for i:=0 to pred(n) do
на for i:=1 to n do и i:=byte
И еще убрались все kx1


Заданы массивы X1(7), X2(6), X3(4). Найти среднее арифмитическое сумм отрицательных элементов массивов. Определение суммы отрицательных элементов массива оформить в виде подпрограммы.

А как эту же самую задачу с процедурой сделать huh.gif
Я на паре всю голову сломил, задачу урезал, но засейвить на дискету не успел. Был косяк с передачей формальных параметров из процедуры в программу.
klem4
вот так ?

procedure Additional(var A: array of integer; n: byte; var k:byte; 

var Col :real

);
Var i, sum: integer;
begin
  writeln('Введите ', n , 'элементов массива');
  for i:=0 to pred(n) do
    read(A[i]);

  k:=0; sum:=0;
  For i:=0 to pred(n) do begin
    if A[i] < 0 then begin
      inc(sum, A[i]); inc(k);
    end;
  end;

  Col := abs(sum)/k;
end;

объяви глобальную переменную и передавай ее процедуре в параметр Col. После отработки процедуры эта переменная будет хранить значение abs(sum)/k; rolleyes.gif
Art87
Спасибо, попробуем ;)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.