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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2016, 12:33   #1
dimitruf
 
Регистрация: 14.02.2016
Сообщений: 9
По умолчанию Подпрограммы с параметрами процедурного типа. Получение из двух векторов третьего

С помощью подпрограммы с параметром процедурного типа получить из двух векторов третий, каждый элемент которого равен меньшему элементу исходных векторов, и вектор, состоящий из сумм соответствующих компонентов исходных векторов
dimitruf вне форума Ответить с цитированием
Старый 14.02.2016, 13:04   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

автор, ты задание понимаешь? я - нет.
постановщик задачи - любитель специальных грибов.
расшифруй, пжлст.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 14.02.2016, 13:04   #3
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Код:
type
  tVector=array[1..10] of integer;

procedure pr1(a,b:tVector; var c:tVector);
var i:integer;
begin
   For i:=1 to 10 do
      If a[i]<b[i] then
         c[i]:=a[i] else
         c[i]:=b[i];
end;

procedure pr2(a,b:tVector; var c:tVector);
var i:integer;
begin
   For i:=1 to 10 do
      c[i]:=a[i]+b[i];
end;

var a,b,c:tVector;
    i:integer;
begin
   Randomize;
   For i:=1 to 10 do
   begin
      a[i]:=Random(21);
      b[i]:=Random(21);
   end;
   Write('a = ');
   For i:=1 to 10 do
      Write(a[i],'  ');
   Writeln;
   Write('b = ');
   For i:=1 to 10 do
      Write(b[i],'  ');
   Writeln;
   Writeln;
   pr1(a,b,c);
   Write('c = ');
   For i:=1 to 10 do
      Write(c[i],'  ');
   Writeln;
   pr2(a,b,c);
   Write('c = ');
   For i:=1 to 10 do
      Write(c[i],'  ');
   Writeln;
   Readln;
end.
Сойдет?
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 14.02.2016, 13:10   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сойдет?
не сойдёт!
Цитата:
С помощью подпрограммы с параметром процедурного типа получить
З.Ы. Тебе 26 лет, ёмоё. Может быть пора уже начать нумеровать массивы с нуля, а? Да, да, даже статические!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 14.02.2016 в 13:13.
min@y™ вне форума Ответить с цитированием
Старый 14.02.2016, 13:13   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Раньше думал, что параметры процедурного типа это что-то вроде такого. Теперь засомневался
Код:
type TMyProcedure = procedure(param: Integer);

procedure HowDisgustingThisFishInAspic1(param: Integer);
begin
...
end;

procedure HowDisgustingThisFishInAspic2(MyProcedure: TMyProcedure);
begin
...
end;
...
  HowDisgustingThisFishInAspic2(HowDisgustingThisFishInAspic1);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.02.2016, 13:14   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Теперь засомневался
зря!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 14.02.2016, 19:57   #7
Heirat
 
Регистрация: 13.02.2016
Сообщений: 4
По умолчанию

Цитата:
Может быть пора уже начать нумеровать массивы с нуля, а? Да, да, даже статические!
Не могу спорить с вашим опытом в программировании, лишь хочу прояснить ситуацию. Почему именно с нуля, если для индексации элементов массивов используют любой порядковый тип?
Heirat вне форума Ответить с цитированием
Старый 14.02.2016, 20:46   #8
Вадим Мошев

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

Цитата:
Сообщение от Heirat Посмотреть сообщение
Не могу спорить с вашим опытом в программировании, лишь хочу прояснить ситуацию. Почему именно с нуля, если для индексации элементов массивов используют любой порядковый тип?
Если не углубляться, то эта фраза "для индексации элементов массивов используют любой порядковый тип" неверна. Для индексации элементов массива, насколько я знаю, используются только целые числа (быть может, даже натуральные, включая 0, хотя не уверен, не проверял).

Почему надо нумеровать от нуля? Честно скажу не знаю, но я читал доводы на эту тему. Среди доводов мне запомнился такой. Когда мы нумеруем массивы от 1, ты мы попросту не экономно расходуем память, так как не используем допустимый для нумерации нуль.

От себя могу добавить, что 0 - это тоже допустимое состояние какого-нибудь регистра. Например, у нас есть 8 битный регистр. Он может иметь состояния от 00000000 до 11111111. Так вот, начальное состояние - нуль - самое обычное и вполне допустимое. И ну потом, про неэкономное использование памяти я уже сказал. Мы можем использовать массив, состоящий из N элементов, а мы используем лишь N-1.

Даже в самой(м) Делфи есть структуры хранения данных, где нумерация идёт также от 0 до N-1, если элементов N. Пример: TStringList. Вообще, нумерация я бы сказал, везде идёт от нуля - просто человек привык нумеровать всё от единицы.

Последний раз редактировалось Вадим Мошев; 14.02.2016 в 20:49.
Вадим Мошев вне форума Ответить с цитированием
Старый 14.02.2016, 20:51   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Почему именно с нуля, если для индексации элементов массивов используют любой порядковый тип?
потому что это только в паскалях и только статические массивы.
потому что твой исходник будут другие люди читать.
потому что эти люди пишут программы не только на паскале.
потому что в цифровой электронике с нуля нумеруется ВСЁ.

компилятору-то пофигу. Это просто рекомендация воизбежание путаницы.

Цитата:
Когда мы нумеруем массивы от 1, ты мы попросту не экономно расходуем память, так как не используем допустимый для нумерации нуль.
Загляни в дизассемблер - поймёшь, что тебя нае... это не так.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось Вадим Мошев; 14.02.2016 в 20:59.
min@y™ вне форума Ответить с цитированием
Старый 14.02.2016, 20:58   #10
Вадим Мошев

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

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
Если не углубляться, то эта фраза "для индексации элементов массивов используют любой порядковый тип" неверна. Для индексации элементов массива, насколько я знаю, используются только целые числа (быть может, даже натуральные, включая 0, хотя не уверен, не проверял).

Почему надо нумеровать от нуля? Честно скажу не знаю, но я читал доводы на эту тему. Среди доводов мне запомнился такой. Когда мы нумеруем массивы от 1, ты мы попросту не экономно расходуем память, так как не используем допустимый для нумерации нуль.

От себя могу добавить, что 0 - это тоже допустимое состояние какого-нибудь регистра. Например, у нас есть 8 битный регистр. Он может иметь состояния от 00000000 до 11111111. Так вот, начальное состояние - нуль - самое обычное и вполне допустимое. И ну потом, про неэкономное использование памяти я уже сказал. Мы можем использовать массив, состоящий из N элементов, а мы используем лишь N-1.

Даже в самой(м) Делфи есть структуры хранения данных, где нумерация идёт также от 0 до N-1, если элементов N. Пример: TStringList. Вообще, нумерация я бы сказал, везде идёт от нуля - просто человек привык нумеровать всё от единицы.
Теперь, что касается углубления. Есть такое понятие, как ассоциативный массив (хеш). От обычного он отличается тем, что для индексирования элементов там используются строки (здесь индексы называются ключами). Где-то в инете я видел информацию о том, как такого можно добиться в Делфи, и, да, я видел рабочий код, где такое применялось.

В некоторых других ЯП ассоциативные массивы поддерживаются штатно. Например, PHP.
Просто, чтобы повеселить публику скажу, что:
1. Массивы там могут быть смешанными (как обычными, так ассоциативными);
2. Могут быть "дырявыми" - то есть, содержать неопределённые элементы (хотя в Паскале так же можно)
3. Элементы массивы не обязаны быть одного и того же типа.

то есть, в коде всё это может выглядеть так:

PHP код:
a[0] = 1;
a[2] = 'my string';
a['key'] = new myClass(); // объект 

Последний раз редактировалось Вадим Мошев; 14.02.2016 в 21:00.
Вадим Мошев вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить значение выражения с заданной точностью. Подпрограммы с параметрами процедурного типа Petrichor Помощь студентам 1 24.12.2013 10:00
ПОДПРОГРАММЫ С ПАРАМЕТРАМИ ПРОЦЕДУРНОГО ТИПА Kira09 Паскаль, Turbo Pascal, PascalABC.NET 1 19.12.2010 17:55
подпрограммы с параметрами процедурного типа stargirl Помощь студентам 2 14.03.2009 14:52
Ввод векторов и матриц, умножение матрицы на вектор и вычисление скалярного призведения двух векторов zverushka Помощь студентам 18 20.02.2009 15:25