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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2013, 09:29   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Poma][a, в процедуре Ones не будут (по крайней мере, НЕ ДОЛЖНЫ) использоваться глобальные c, t1 и m, там будут использоваться только a, n, t

to BDA
я новичкам (да и не только) всегда рекомендую описывать переменные ПОСЛЕ блока функций и процедур:
Код:
type
  mas = array [1..50] of real;

procedure Ones(const a: mas; const n: integer; var t: Byte);
begin
  ...
end;

var
  c: mas;
  t1: byte;
  m: integer;
begin
  ...
  Ones(c, m, t1);
  writeln(t1);
end.
это позволит избежать ошибок использовать глобальных переменных в процедурах/функциях! (компилятор их "не увидит" в процедурах/функциях, т.к. они описаны ниже).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.06.2013, 11:36   #12
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
это позволит избежать ошибок использовать глобальных переменных в процедурах/функциях! (компилятор их "не увидит" в процедурах/функциях, т.к. они описаны ниже).
А так разве увидит? О_о
т.е. я прально понял, что если объявить так (JS, пардон)

Код:
var a=1,b=2,c=3;
function m(a,t,q) {
};
то в функцию m передастся автоматом значение a?
// давно не общался с паскалем, видимо)
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 22.06.2013, 11:41   #13
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
то в функцию m передастся автоматом значение a?
Нет.
Но если Вы сначала объявите глобальные переменные
Код:
var
     a : Integer;
То из любой проц\функ. Вы сможете обращаться и изменять значение этой переменной.
Poma][a вне форума Ответить с цитированием
Старый 22.06.2013, 12:03   #14
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Если я не ошибаюсь, в JS, внутри функции, переменная не будет видна вообще, если она там не объявлена. То есть,
Код:
var T = 9;
function inc () {
T++;
return T;
};
inc();
При выполнении такого кода, T не будет равно 10 (могу ошибаться, конечно). На Паскале же всё будет иначе:
Код:
var T: integer; {а где-то в программе мы присваиваем этой переменной 9}

function increment: integer;
begin
inc(T);
increment:=T;
end;

begin
T:=9;
T:=increment;
{теперь T равно 10}
end
Однако, в JS можно добиться того, чтобы объявленные в функциях переменные воспринимались как глобальные. Я читал об этом, но уже забыл...

Последний раз редактировалось Вадим Мошев; 22.06.2013 в 12:07.
Вадим Мошев вне форума Ответить с цитированием
Старый 22.06.2013, 12:29   #15
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
При выполнении такого кода, T не будет равно 10 (могу ошибаться, конечно).
В JS -- будет...
Код:
>>> var T = 9; function inc () { T++; return T; }; inc();
10
>>> T
10
Цитата:
Однако, в JS можно добиться того, чтобы объявленные в функциях переменные воспринимались как глобальные. Я читал об этом, но уже забыл...
Да запросто...
Код:
(function(){
var a = 1,
    b=2;
this.b = b; // b стала глобальной в обычном режиме (не strict mode, в нем будет ошибка, если не задан контекст).
window.b = b; // b стала глобальной
})();
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 23.06.2013, 20:56   #16
Прокурор
Пользователь
 
Регистрация: 09.12.2012
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Poma][a, в процедуре Ones не будут (по крайней мере, НЕ ДОЛЖНЫ) использоваться глобальные c, t1 и m, там будут использоваться только a, n, t

to BDA
я новичкам (да и не только) всегда рекомендую описывать переменные ПОСЛЕ блока функций и процедур:
Код:
type
  mas = array [1..50] of real;

procedure Ones(const a: mas; const n: integer; var t: Byte);
begin
  ...
end;

var
  c: mas;
  t1: byte;
  m: integer;
begin
  ...
  Ones(c, m, t1);
  writeln(t1);
end.
это позволит избежать ошибок использовать глобальных переменных в процедурах/функциях! (компилятор их "не увидит" в процедурах/функциях, т.к. они описаны ниже).
а вот в самой процедуре, что мне нужно описать?
Прокурор вне форума Ответить с цитированием
Старый 23.06.2013, 21:00   #17
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Нужен цикл от 2 до n, проверяющий элементы на убывание (a[i - 1] > a[i]).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 23.06.2013, 22:59   #18
Прокурор
Пользователь
 
Регистрация: 09.12.2012
Сообщений: 16
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Нужен цикл от 2 до n, проверяющий элементы на убывание (a[i - 1] > a[i]).
procedure proc(a:mas;n:byte;var t:byte);
var i:byte;
begin
t:=1;
i:=1;
while(i<n)and(t=1)do
if a[i+1]>=a[i] then t:=0
else i:=i+1;
end;

вот такой?
Прокурор вне форума Ответить с цитированием
Старый 23.06.2013, 23:04   #19
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
procedure Ones(const a: mas; const n: integer; var t: Byte);
var
  i: byte;
begin
  t := 1;
  i := 1;
  while (i < n) and (t = 1) do
    if a[i] <= a[i + 1] then
      t := 0
    else
      inc(i);
end;
Да, вроде, все правильно.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 23.06.2013, 23:06   #20
Прокурор
Пользователь
 
Регистрация: 09.12.2012
Сообщений: 16
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
procedure Ones(const a: mas; const n: integer; var t: Byte);
var
  i: byte;
begin
  t := 1;
  i := 1;
  while (i < n) and (t = 1) do
    if a[i] <= a[i + 1] then
      t := 0
    else
      inc(i);
end;
Да, вроде, все правильно.
спасибо))буду думать дальше)
Прокурор вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
написать с процедурами Liubov Паскаль, Turbo Pascal, PascalABC.NET 0 17.05.2013 14:34
Программа на TurboPascal с меню и процедурами (Ребята, исправьте ошибку) Camelot_2012 Паскаль, Turbo Pascal, PascalABC.NET 3 13.06.2012 12:09
ребята...программа с модулем, процедурами, функциями и графикой. не могу найти максимальное и минимальное значение в массиве... Smirnov Паскаль, Turbo Pascal, PascalABC.NET 0 22.05.2012 13:09
сделать с процедурами Richik123 Паскаль, Turbo Pascal, PascalABC.NET 3 12.04.2012 22:25
программа с процедурами операций над матрицами Лилея Помощь студентам 1 21.01.2011 20:15